start export markdown
This commit is contained in:
parent
a2d9cc175c
commit
b131a2400b
@ -27,7 +27,7 @@ puis naviguer sur https://localhost:3300
|
|||||||
Mettre les gtg_tasks.xml
|
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
|
## sources
|
||||||
|
@ -1 +1,140 @@
|
|||||||
# Export de Tags GTG du 02/03/2021 à 11:09:59
|
# 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
|
@ -12,6 +12,7 @@
|
|||||||
"fs": "0.0.1-security",
|
"fs": "0.0.1-security",
|
||||||
"http-errors": "^1.6.3",
|
"http-errors": "^1.6.3",
|
||||||
"jade": "^1.11.0",
|
"jade": "^1.11.0",
|
||||||
|
"lodash": "^4.17.21",
|
||||||
"morgan": "^1.9.1",
|
"morgan": "^1.9.1",
|
||||||
"pug": "^3.0.0"
|
"pug": "^3.0.0"
|
||||||
},
|
},
|
||||||
|
114
routes/index.js
114
routes/index.js
@ -1,5 +1,6 @@
|
|||||||
var express = require('express');
|
var express = require('express');
|
||||||
var fs = require('fs');
|
var fs = require('fs');
|
||||||
|
var _ = require('lodash');
|
||||||
|
|
||||||
var parseString = require("xml2js").parseString;
|
var parseString = require("xml2js").parseString;
|
||||||
var router = express.Router();
|
var router = express.Router();
|
||||||
@ -67,17 +68,29 @@ function computeData(jsonAllData) {
|
|||||||
// let tagCountTasks = Object.create(jsonAllData.tags);
|
// let tagCountTasks = Object.create(jsonAllData.tags);
|
||||||
|
|
||||||
jsonAllData.stats = {
|
jsonAllData.stats = {
|
||||||
tasksCount : jsonAllData.tasks.project.task.length,
|
tasksCount : jsonAllData.tasks.project.task.length,
|
||||||
tasksClosed: 0,
|
tasksClosed : 0,
|
||||||
tasksOpen : 0,
|
tasksOpen : 0,
|
||||||
maxTasksCountPerTag : 0,
|
maxTasksCountPerTag: 0,
|
||||||
listOpen : [],
|
listOpen : [],
|
||||||
listClosed : [],
|
listOpenWeekly : [],
|
||||||
|
listClosed : [],
|
||||||
|
listClosedWeekly : [],
|
||||||
}
|
}
|
||||||
|
|
||||||
for (let t of jsonAllData.tasks.project.task) {
|
for (let t of jsonAllData.tasks.project.task) {
|
||||||
// console.log('t', t)
|
// console.log('t', t)
|
||||||
let tags = t["$"].tags.split(',')
|
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) {
|
for (let tag of tags) {
|
||||||
// console.log('tag', tag)
|
// console.log('tag', tag)
|
||||||
jsonAllData.tags.tagstore.tag.map(elem => {
|
jsonAllData.tags.tagstore.tag.map(elem => {
|
||||||
@ -103,25 +116,21 @@ function computeData(jsonAllData) {
|
|||||||
elem.tasksListByTitle.push(t.title)
|
elem.tasksListByTitle.push(t.title)
|
||||||
if (t['$'].status == "Active") {
|
if (t['$'].status == "Active") {
|
||||||
elem.tasksListIsActiveByTitle.push(t.title)
|
elem.tasksListIsActiveByTitle.push(t.title)
|
||||||
|
|
||||||
}
|
}
|
||||||
if (t['$'].status == "Done") {
|
if (t['$'].status == "Done") {
|
||||||
elem.tasksListIsDoneByTitle.push(t.title)
|
elem.tasksListIsDoneByTitle.push(t.title)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
if(elem.tasks > jsonAllData.stats.maxTasksCountPerTag){
|
if (elem.tasks > jsonAllData.stats.maxTasksCountPerTag) {
|
||||||
jsonAllData.stats.maxTasksCountPerTag = elem.tasks
|
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
|
return jsonAllData
|
||||||
|
|
||||||
}
|
}
|
||||||
@ -146,28 +155,21 @@ function getPercent(someCount, total) {
|
|||||||
function computeBgColorOnProportionOfOpenTasks(someProportionNumber) {
|
function computeBgColorOnProportionOfOpenTasks(someProportionNumber) {
|
||||||
let result = '';
|
let result = '';
|
||||||
|
|
||||||
if(someProportionNumber >= 95){
|
if (someProportionNumber >= 95) {
|
||||||
result = 'proportion-over-95'
|
result = 'proportion-over-95'
|
||||||
}
|
} else if (someProportionNumber >= 90) {
|
||||||
else if(someProportionNumber >= 90){
|
|
||||||
result = 'proportion-over-90'
|
result = 'proportion-over-90'
|
||||||
}
|
} else if (someProportionNumber >= 80) {
|
||||||
else if(someProportionNumber >= 80){
|
|
||||||
result = 'proportion-over-80'
|
result = 'proportion-over-80'
|
||||||
}
|
} else if (someProportionNumber >= 65) {
|
||||||
else if(someProportionNumber >= 65){
|
|
||||||
result = 'proportion-over-65'
|
result = 'proportion-over-65'
|
||||||
}
|
} else if (someProportionNumber >= 50) {
|
||||||
else if(someProportionNumber >= 50){
|
|
||||||
result = 'proportion-over-50'
|
result = 'proportion-over-50'
|
||||||
}
|
} else if (someProportionNumber >= 40) {
|
||||||
else if(someProportionNumber >= 40){
|
|
||||||
result = 'proportion-over-40'
|
result = 'proportion-over-40'
|
||||||
}
|
} else if (someProportionNumber >= 25) {
|
||||||
else if(someProportionNumber >= 25){
|
|
||||||
result = 'proportion-over-25'
|
result = 'proportion-over-25'
|
||||||
}
|
} else if (someProportionNumber >= 15) {
|
||||||
else if(someProportionNumber >= 15){
|
|
||||||
result = 'proportion-over-15'
|
result = 'proportion-over-15'
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,9 +179,59 @@ function computeBgColorOnProportionOfOpenTasks(someProportionNumber) {
|
|||||||
function exportToMarkdown(res) {
|
function exportToMarkdown(res) {
|
||||||
|
|
||||||
let datenow = new Date();
|
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
|
// write file to disk
|
||||||
fs.writeFile('output/export_tags.md', dataTagsMd, 'utf8', (err) => {
|
fs.writeFile(`output/export_tags.md`, dataTagsMd, `utf8`, (err) => {
|
||||||
|
|
||||||
if (err) {
|
if (err) {
|
||||||
console.log(`Error writing file: ${err}`);
|
console.log(`Error writing file: ${err}`);
|
||||||
|
@ -6,8 +6,10 @@ block content
|
|||||||
section.tasks
|
section.tasks
|
||||||
h2 #{json.tasks.project.task.length} Tâches
|
h2 #{json.tasks.project.task.length} Tâches
|
||||||
ul.stats
|
ul.stats
|
||||||
li #{json.stats.tasksOpen} ouvertes
|
li #{json.stats.listOpen.length} ouvertes
|
||||||
li #{json.stats.tasksClosed} fermées
|
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
|
section.tags
|
||||||
h2 #{json.tags.tagstore.tag.length} Tags
|
h2 #{json.tags.tagstore.tag.length} Tags
|
||||||
p maximum de #{json.stats.maxTasksCountPerTag} tâches pour un tag.
|
p maximum de #{json.stats.maxTasksCountPerTag} tâches pour un tag.
|
||||||
|
Loading…
Reference in New Issue
Block a user