org-report-stats/emploi-du-temps/generateur.mjs

250 lines
5.6 KiB
JavaScript

/**
* création d'emploi du temps avec des zones découpées en catégorie
* cela permet de parcourir tous les aspects de la méthodologie PARA sur différents créneaux
* @type {{duration: string, start: string, content: null}}
*/
// import tasksList from '/home/tykayn/Nextcloud/ressources/social sorting/output/emacs_export_tasks.json' assert { type: "json" };
import { get_sections_from_tasks_orgfile } from './folder_from_tasks.mjs'
const timespan_base = {
start: '8',
duration: '60', // minutes
content: null
}
const day_start_hour = 9
const day_activities_hours = 10
const activity_duration_default = 60
const ressources_nope = [
{
label: 'social sorting'
},
{
label: 'gestion de l\'information'
},
{
label: 'lecture'
}, {
label: 'architecture'
}, {
label: 'climat'
}, {
label: 'nucléaire'
}, {
label: 'dessins'
}, {
label: 'partage de documents'
}, {
label: 'recherche et éducation'
},
{
label: 'emploi du temps'
},
]
const categories = [
'aires de responsabilité',
'archives',
'ressources',
'projets',
]
let projects = ['emploi du temps', 'rangement', 'migration Rise', 'dev', 'calendar maker', 'noeud garage', 'report orgmode', 'partage ftp']
let areas = [
'achats',
'administratif',
'apprendre emacs',
'associations',
'boulot',
'communication et écriture',
'corvées',
'habitudes',
'santé',
'social',
'travaux bricolage',
'vacances'
]
let ressources = [
'social sorting',
'PIM',
'lecture',
'architecture',
'climat',
'nucléaire',
'dessins',
'partage de documents',
'recherche et éducation'
]
// préremplir avec des créneaux réservés
const hours_spans = [
{
start: '8',
duration: '60', // minutes
label: 'matin',
color: 'white'
},
{
start: '12',
duration: '60', // minutes
label: 'midi bouffe',
color: 'white'
},
{
start: '16',
duration: '30', // minutes
label: 'goûter',
color: 'white'
},
{
start: '19',
duration: '30', // minutes
label: 'bouffe soir',
color: 'white'
},
{
start: '21',
duration: '30', // minutes
label: 'préparation dodo',
color: 'white'
},
]
const days = [{
label: 'lundi'
}, {
label: 'mardi'
}, {
label: 'mercredi'
}, {
label: 'jeudi'
}, {
label: 'vendredi'
},
/**
{
label: "samedi"
},
{
label: "dimanche"
},
**/
]
function displayDays () {
console.log('projets', projects.length)
console.log('aires de responsabilité', areas.length)
console.log('ressources actuelles', ressources.length)
days.forEach((elem, index) => {
// ajouter les créneaux à chaque journée
console.log('')
console.log('*', elem.label)
loopOneDay()
})
}
// configs qui bouclent pour chaque catégorie
let category_index = 0
let projects_index = 0
let area_index = 0
let ressources_index = 0
let day_hour = day_start_hour
let day_minutes_counter = 0
let max_min_a_day = day_minutes_counter * day_activities_hours
let daily_duration = 15 // minutes
let day_categories_map = []
const sections = get_sections_from_tasks_orgfile()
console.log('sections', sections)
if (sections.projects) {
projects = Object.keys(sections.projects)
console.log(projects)
}
function loopOneDay () {
// passer sur les catégories et faire progresser l'index des éléments des catégories
console.log('** ', day_hour, 'h revue journalière')
day_minutes_counter += daily_duration
console.log('** ', convertMinutesOfDayToHourDisplay(day_minutes_counter), 'h appels tel')
day_minutes_counter += 20
resetIndexesIfNeeded()
console.log('** areas : ', area_index, ' : ', convertMinutesOfDayToHourDisplay(day_minutes_counter), areas[area_index])
day_minutes_counter += activity_duration_default
area_index++
resetIndexesIfNeeded()
console.log('** areas : ', area_index, ' : ', convertMinutesOfDayToHourDisplay(day_minutes_counter), areas[area_index])
day_minutes_counter += activity_duration_default
area_index++
resetIndexesIfNeeded()
console.log('** projects : ', convertMinutesOfDayToHourDisplay(day_minutes_counter), projects[projects_index])
day_minutes_counter += activity_duration_default
projects_index++
resetIndexesIfNeeded()
console.log('** projects : ', convertMinutesOfDayToHourDisplay(day_minutes_counter), projects[projects_index])
day_minutes_counter += activity_duration_default
projects_index++
resetIndexesIfNeeded()
console.log('** projects : ', convertMinutesOfDayToHourDisplay(day_minutes_counter), projects[projects_index])
day_minutes_counter += activity_duration_default
projects_index++
resetIndexesIfNeeded()
console.log('** ressources : ', convertMinutesOfDayToHourDisplay(day_minutes_counter), ressources[ressources_index])
day_minutes_counter += activity_duration_default
ressources_index++
resetIndexesIfNeeded()
console.log('** ', convertMinutesOfDayToHourDisplay(day_minutes_counter), 'h temps libre')
day_minutes_counter += 120
day_minutes_counter = 0
// for(let ii =day_minutes_counter; ii < max_min_a_day; ii+=activity_duration_default ){
// day_minutes_counter += activity_duration_default
// }
}
function resetIndexesIfNeeded () {
if (area_index >= areas.length) {
area_index = 0
console.log('# --- retour de areas --- ')
}
if (ressources_index >= ressources.length) {
ressources_index = 0
console.log('# --- retour de ressources --- ')
}
if (projects_index >= projects.length) {
projects_index = 0
console.log('# --- retour de projets --- ')
}
}
// TODO améliorer le rendu pour avoir les minutes arrondies dans l'heure
function convertMinutesOfDayToHourDisplay (max_min_a_day) {
// return day_start_hour + (max_min_a_day/60) + ' h'
return day_start_hour + Math.round(max_min_a_day / 60) + 'h'
}
console.log('* Emploi du temps pour deux semaines sans inclure les weekend \n')
displayDays()