diff --git a/README.md b/README.md index 364d089..8845536 100644 --- a/README.md +++ b/README.md @@ -27,7 +27,7 @@ puis naviguer sur https://localhost:3300 Mettre les gtg_tasks.xml -Ce serveur va lire un fichier dans le dossier source, celui des tâches de GTG, puis en faire un json, et en sortir des statistiques dans une page web. +Ce serveur va lire un fichier dans le dossier **source**, celui des tâches de GTG, puis en faire un json, et en sortir des statistiques dans une page web. ## sources diff --git a/output/export_tags.md b/output/export_tags.md index 9c03e1c..1e0a180 100644 --- a/output/export_tags.md +++ b/output/export_tags.md @@ -1 +1,140 @@ -# Export de Tags GTG du 02/03/2021 à 11:09:59 \ No newline at end of file +# Export de Tâches GTG + date: 02/03/2021 à 11:56:59 +# Rapport des tâches durant les 7 derniers jours + +## ont été fermées + +## ont été ouvertes + +--- +# Stats de fermeture des tâches + +--- + +# Export de toutes les 264 tâches ouvertes GTG + + +--- + +# Export de toutes les 183 tâches fermées GTG + + + +# Export de Tags GTG + + + + * @osm , 39 + * @graph , 10 + * @forum , 2 + * @dev , 115 + * @vélo , 6 + * @écriture , 8 + * @rémunéré , 16 + * @edu , 28 + * @mail , 23 + * @vacances , 12 + * @tel , 17 + * @mobilizon , 26 + * @elec , 4 + * @pognon , 9 + * @travaux , 29 + * @administratif , 9 + * @associatif , 34 + * @serveur , 3 + * @work , 30 + * @nextcloud , 16 + * @encryption , 2 + * @untouched , 82 + * @adminsys , 16 + * @recherche , 19 + * @tasks , 5 + * @social , 14 + * @GTG , 5 + * @sys , 30 + * @vps , 5 + * @qzine , 3 + * @blog , 11 + * @solabaie , 2 + * @createrra , 1 + * @contacts , 3 + * @carnet , 1 + * @opendata , 2 + * @achat , 15 + * @cuisine , 1 + * @livre , 12 + * @achats , 0 + * @nas , 7 + * @musique , 1 + * @DL , 1 + * @nginx , 2 + * @sysadmin , 1 + * @impots , 1 + * @degfam , 1 + * @tesla , 1 + * @lecture , 13 + * @boulot , 22 + * @mastodon , 4 + * @backup , 33 + * @claire , 12 + * @famille , 11 + * @video , 3 + * @waiting_for, , 0 + * @déconfinage , 11 + * @waiting_for , 11 + * @josm , 14 + * @bot , 2 + * @scraping , 13 + * @chapril , 1 + * @jardin , 15 + * @cil-gometz , 9 + * @photo , 2 + * @fanzine , 3 + * @interview , 4 + * @audio , 2 + * @dadou , 2 + * @gtg , 2 + * @resolv , 1 + * @fibre , 1 + * @peertube , 3 + * @cloud , 2 + * @media , 2 + * @extérieur , 14 + * @voixdunuc , 5 + * @fediverse , 42 + * @admins , 0 + * @april , 3 + * @spaceship , 12 + * @ordi , 1 + * @plume , 3 + * @oauth , 9 + * @monitoring , 3 + * @bitwarden , 1 + * @archives , 2 + * @chiffrement , 14 + * @graphql , 5 + * @livestream , 3 + * @install , 1 + * @rails , 3 + * @fatland , 2 + * @courrier , 1 + * @klassroom , 2 + * @caisse , 3 + * @symfnoy , 0 + * @domoticz , 2 + * @autohébergement , 3 + * @grivery , 3 + * @framadate , 12 + * @badoune , 2 + * @grosse_pierre , 6 + * @symfony , 13 + * @inbox , 2 + * @frontend , 11 + * @spare , 1 + * framadate , 0 + * @vosk , 1 + * @rangement , 3 + * @mission , 8 + * @assurance , 3 + + rapport généré avec gtg2nodejs par tykayn - contact@cipherbliss.com \ No newline at end of file diff --git a/package.json b/package.json index 9478df3..903ee45 100644 --- a/package.json +++ b/package.json @@ -12,6 +12,7 @@ "fs": "0.0.1-security", "http-errors": "^1.6.3", "jade": "^1.11.0", + "lodash": "^4.17.21", "morgan": "^1.9.1", "pug": "^3.0.0" }, diff --git a/routes/index.js b/routes/index.js index 15a3d15..4fdb928 100644 --- a/routes/index.js +++ b/routes/index.js @@ -1,5 +1,6 @@ var express = require('express'); var fs = require('fs'); +var _ = require('lodash'); var parseString = require("xml2js").parseString; var router = express.Router(); @@ -67,17 +68,29 @@ function computeData(jsonAllData) { // let tagCountTasks = Object.create(jsonAllData.tags); jsonAllData.stats = { - tasksCount : jsonAllData.tasks.project.task.length, - tasksClosed: 0, - tasksOpen : 0, - maxTasksCountPerTag : 0, - listOpen : [], - listClosed : [], + tasksCount : jsonAllData.tasks.project.task.length, + tasksClosed : 0, + tasksOpen : 0, + maxTasksCountPerTag: 0, + listOpen : [], + listOpenWeekly : [], + listClosed : [], + listClosedWeekly : [], } for (let t of jsonAllData.tasks.project.task) { // console.log('t', t) let tags = t["$"].tags.split(',') + // count open and closed tasks + + if(t['$'].status == 'Active'){ + jsonAllData.stats.listOpen.push(t) + + }else if(t['$'].status == 'Done'){ + jsonAllData.stats.listClosed.push(t) + + } + for (let tag of tags) { // console.log('tag', tag) jsonAllData.tags.tagstore.tag.map(elem => { @@ -103,25 +116,21 @@ function computeData(jsonAllData) { elem.tasksListByTitle.push(t.title) if (t['$'].status == "Active") { elem.tasksListIsActiveByTitle.push(t.title) + } if (t['$'].status == "Done") { elem.tasksListIsDoneByTitle.push(t.title) } } - if(elem.tasks > jsonAllData.stats.maxTasksCountPerTag){ + if (elem.tasks > jsonAllData.stats.maxTasksCountPerTag) { jsonAllData.stats.maxTasksCountPerTag = elem.tasks } }) } - if (t.donedate) { - jsonAllData.stats.tasksClosed++; - jsonAllData.stats.listOpen.push(t); - } else { - jsonAllData.stats.tasksOpen++; - } - // console.log('tags', tags) } + // sort tags by name + return jsonAllData } @@ -146,28 +155,21 @@ function getPercent(someCount, total) { function computeBgColorOnProportionOfOpenTasks(someProportionNumber) { let result = ''; - if(someProportionNumber >= 95){ + if (someProportionNumber >= 95) { result = 'proportion-over-95' - } - else if(someProportionNumber >= 90){ + } else if (someProportionNumber >= 90) { result = 'proportion-over-90' - } - else if(someProportionNumber >= 80){ + } else if (someProportionNumber >= 80) { result = 'proportion-over-80' - } - else if(someProportionNumber >= 65){ + } else if (someProportionNumber >= 65) { result = 'proportion-over-65' - } - else if(someProportionNumber >= 50){ + } else if (someProportionNumber >= 50) { result = 'proportion-over-50' - } - else if(someProportionNumber >= 40){ + } else if (someProportionNumber >= 40) { result = 'proportion-over-40' - } - else if(someProportionNumber >= 25){ + } else if (someProportionNumber >= 25) { result = 'proportion-over-25' - } - else if(someProportionNumber >= 15){ + } else if (someProportionNumber >= 15) { result = 'proportion-over-15' } @@ -177,9 +179,59 @@ function computeBgColorOnProportionOfOpenTasks(someProportionNumber) { function exportToMarkdown(res) { let datenow = new Date(); - let dataTagsMd = '# Export de Tags GTG du '+ datenow.toLocaleString(); + let dataTagsMd = `# Export de Tâches GTG \n date: ` + datenow.toLocaleString(); + // fichier de rapport des tâches fermées durant les 7 derniers jours + dataTagsMd += `\n# Rapport des tâches durant les 7 derniers jours `; + dataTagsMd += `\n `; + dataTagsMd += `\n## ${jsonAllData.stats.listClosedWeekly} ont été fermées `; + dataTagsMd += `\n `; + dataTagsMd += `\n## ${jsonAllData.stats.listOpenWeekly} ont été ouvertes `; + dataTagsMd += `\n `; + dataTagsMd += `\n--- `; + // fichier de rapport des tâches fermées durant les 31 derniers jours + // stats de fermeture des tâches + dataTagsMd += `\n# Stats de fermeture des tâches `; + dataTagsMd += `\n `; + dataTagsMd += `\n--- `; + dataTagsMd += `\n `; + dataTagsMd += `\n# Export de toutes les ${jsonAllData.stats.listOpen.length} tâches ouvertes GTG \n `; + dataTagsMd += `\n `; + + // jsonAllData.stats.listOpen.map(elem => { + // dataTagsMd += `\n## ${elem.title} `; + // dataTagsMd += `\n statut : ${elem['$'].status} `; + // dataTagsMd += `\n créé le : ${elem.addeddate} `; + // dataTagsMd += `\n modifié le : ${elem.modified} `; + // dataTagsMd += `\n prévu pour : ${elem.duedate | ''} `; + // dataTagsMd += `\n ${elem.content} `; + // }) + dataTagsMd += `\n--- `; + dataTagsMd += `\n `; + dataTagsMd += `\n# Export de toutes les ${jsonAllData.stats.listClosed.length} tâches fermées GTG \n `; + dataTagsMd += `\n `; + // + // jsonAllData.stats.listClosed.map(elem=>{ + // dataTagsMd += `\n * ${elem.title} `; + // }) + + dataTagsMd += `\n `; + dataTagsMd += `\n# Export de Tags GTG \n `; + dataTagsMd += `\n `; + dataTagsMd += `\n `; + + let sortedTagsByTitle = _.sortBy(jsonAllData.tags.tagstore.tag, [(o) => { + o["$"].name + }]) + + sortedTagsByTitle.map(elem => { + console.log(`elem `, elem['$'].name, elem.tasks) + dataTagsMd += `\n * ${elem['$'].name} , ${elem.tasks | 0}`; + }) + + dataTagsMd += `\n `; + dataTagsMd += `\n rapport généré avec gtg2nodejs par tykayn - contact@cipherbliss.com `; // write file to disk - fs.writeFile('output/export_tags.md', dataTagsMd, 'utf8', (err) => { + fs.writeFile(`output/export_tags.md`, dataTagsMd, `utf8`, (err) => { if (err) { console.log(`Error writing file: ${err}`); diff --git a/views/index.jade b/views/index.jade index aa721f3..dcb9cae 100644 --- a/views/index.jade +++ b/views/index.jade @@ -6,8 +6,10 @@ block content section.tasks h2 #{json.tasks.project.task.length} Tâches ul.stats - li #{json.stats.tasksOpen} ouvertes - li #{json.stats.tasksClosed} fermées + li #{json.stats.listOpen.length} ouvertes + li #{json.stats.listOpenWeekly.length} ouvertes cette semaine + li #{json.stats.listClosed.length} fermées + li #{json.stats.listClosedWeekly.length} fermées cette semaine section.tags h2 #{json.tags.tagstore.tag.length} Tags p maximum de #{json.stats.maxTasksCountPerTag} tâches pour un tag.