var express = require('express'); var fs = require('fs'); var parseString = require("xml2js").parseString; var router = express.Router(); var fileToOpen = 'gtg_tasks' // const convertFiles = true; let convertFiles = false; let computeDataOnExtract = true; let jsonAllData = { tasks : {}, stats : {}, projects: {}, tags : {}, } /* GET home page. */ /** * obtenir la liste de tags que l'on a entré */ router.get('/', async function (req, res, next) { if (convertFiles) { convertOneXmlToJson('gtg_tasks', res) convertOneXmlToJson('tags', res) convertOneXmlToJson('projects', res) } else { console.log('================== conversion de fichiers désactivée dans index.js ================== ') } // récupérer le contenu des json jsonAllData.tags = require('../sources/tags_gtg.json') jsonAllData.tasks = require('../sources/gtg_tasks_gtg.json') if (computeDataOnExtract) { jsonAllData = computeData(jsonAllData) computeDataOnExtract = false; } else { console.log('================== calcul de stats désactivé dans index.js ================== ') } console.log('json files read') res.render('index', { title: "Conversion de GTG tâches", json : jsonAllData, getPercent, computeBgColorOnProportionOfOpenTasks, getPercentOfOpenTasks }) }); async function readfileJson(fileToOpen) { fs.readFile(`sources/${fileToOpen}`, "utf-8", function (err, data) { if (err) console.log(err); console.log('ok ', fileToOpen) return JSON.parse(data) }); } function computeData(jsonAllData) { // trouver le nombre de tâches ayant un tag en particulier // et rajouter ce nombre à chaque tag, dans countTasks : N // let tagCountTasks = Object.create(jsonAllData.tags); jsonAllData.stats = { tasksCount : jsonAllData.tasks.project.task.length, tasksClosed: 0, tasksOpen : 0, listOpen : [], listClosed : [], } for (let t of jsonAllData.tasks.project.task) { // console.log('t', t) let tags = t["$"].tags.split(',') for (let tag of tags) { // console.log('tag', tag) jsonAllData.tags.tagstore.tag.map(elem => { // console.log('elem', elem) if (elem['$'].name == tag) { if (!elem.tasks) { elem.tasks = 0 } if (!elem.tasksListById) { elem.tasksListById = [] } if (!elem.tasksListByTitle) { elem.tasksListByTitle = [] } if (!elem.tasksListIsActiveByTitle) { elem.tasksListIsActiveByTitle = [] } if (!elem.tasksListIsDoneByTitle) { elem.tasksListIsDoneByTitle = [] } elem.tasks++ elem.tasksListById.push(t['$'].id) elem.tasksListByTitle.push(t.title) if (t['$'].status == "Active") { elem.tasksListIsActiveByTitle.push(t.title) } if (t['$'].status == "Done") { elem.tasksListIsDoneByTitle.push(t.title) } } }) } if (t.donedate) { jsonAllData.stats.tasksClosed++; jsonAllData.stats.listOpen.push(t); } else { jsonAllData.stats.tasksOpen++; } // console.log('tags', tags) } return jsonAllData } function convertOneXmlToJson(fileToOpen, res) { fs.readFile(`sources/${fileToOpen}.xml`, "utf-8", function (err, data) { if (err) console.log(err); const results = transformToJson(data, fileToOpen, res) console.log('fichier converti en json', fileToOpen) }); } function getPercentOfOpenTasks(someCount) { return Math.round(100 * someCount / jsonAllData.stats.tasksOpen) } function getPercent(someCount, total) { return Math.round(100 * someCount / total) } function computeBgColorOnProportionOfOpenTasks(someProportionNumber) { let result = ''; if(someProportionNumber >= 95){ result = 'proportion-over-95' } else if(someProportionNumber >= 90){ result = 'proportion-over-90' } else if(someProportionNumber >= 80){ result = 'proportion-over-80' } else if(someProportionNumber >= 65){ result = 'proportion-over-65' } else if(someProportionNumber >= 50){ result = 'proportion-over-50' } else if(someProportionNumber >= 40){ result = 'proportion-over-40' } else if(someProportionNumber >= 25){ result = 'proportion-over-25' } else if(someProportionNumber >= 15){ result = 'proportion-over-15' } console.log('result', someProportionNumber, result) return result; } function exportToMarkdown() { } function transformToJson(xml, fileToOpen, res) { return parseString(xml, function (err, result) { if (err) console.log(err); // console.dir(JSON.stringify(result)); console.log('Done'); // write file to disk fs.writeFile(`sources/${fileToOpen}_gtg.json`, JSON.stringify(result, null, 4), 'utf8', (err) => { if (err) { console.log(`Error writing file: ${err}`); // return JSON.stringify(result) res.send(err) } else { console.log(`File \`sources/${fileToOpen}_gtg.json\` is written successfully!`); } }); }); } module.exports = router;