2021-02-27 10:26:37 +01:00
|
|
|
var express = require('express');
|
2021-03-01 18:02:04 +01:00
|
|
|
var fs = require('fs');
|
|
|
|
|
|
|
|
var parseString = require("xml2js").parseString;
|
2021-02-27 10:26:37 +01:00
|
|
|
var router = express.Router();
|
2021-03-01 18:02:04 +01:00
|
|
|
var fileToOpen = 'gtg_tasks'
|
2021-02-27 10:26:37 +01:00
|
|
|
|
2021-03-01 18:14:47 +01:00
|
|
|
// const convertFiles = true;
|
2021-03-02 10:12:15 +01:00
|
|
|
let convertFiles = false;
|
|
|
|
let computeDataOnExtract = true;
|
2021-03-01 18:14:47 +01:00
|
|
|
|
2021-03-02 09:23:33 +01:00
|
|
|
let jsonAllData = {
|
2021-03-02 10:57:26 +01:00
|
|
|
tasks : {},
|
|
|
|
stats : {},
|
|
|
|
projects: {},
|
|
|
|
tags : {},
|
2021-03-01 18:02:04 +01:00
|
|
|
}
|
2021-02-27 10:26:37 +01:00
|
|
|
/* GET home page. */
|
2021-03-01 18:02:04 +01:00
|
|
|
/**
|
|
|
|
* obtenir la liste de tags que l'on a entré
|
|
|
|
*/
|
|
|
|
router.get('/', async function (req, res, next) {
|
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
if (convertFiles) {
|
2021-03-01 18:14:47 +01:00
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
convertOneXmlToJson('gtg_tasks', res)
|
|
|
|
convertOneXmlToJson('tags', res)
|
|
|
|
convertOneXmlToJson('projects', res)
|
|
|
|
} else {
|
2021-03-01 18:14:47 +01:00
|
|
|
console.log('================== conversion de fichiers désactivée dans index.js ================== ')
|
|
|
|
}
|
2021-03-01 18:02:04 +01:00
|
|
|
|
|
|
|
// récupérer le contenu des json
|
2021-03-02 09:23:33 +01:00
|
|
|
jsonAllData.tags = require('../sources/tags_gtg.json')
|
|
|
|
jsonAllData.tasks = require('../sources/gtg_tasks_gtg.json')
|
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
if (computeDataOnExtract) {
|
2021-03-02 09:23:33 +01:00
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
jsonAllData = computeData(jsonAllData)
|
|
|
|
computeDataOnExtract = false;
|
|
|
|
} else {
|
2021-03-02 09:23:33 +01:00
|
|
|
console.log('================== calcul de stats désactivé dans index.js ================== ')
|
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
console.log('json files read')
|
|
|
|
res.render('index', {
|
|
|
|
title: "Conversion de GTG tâches",
|
|
|
|
json : jsonAllData,
|
|
|
|
getPercent,
|
|
|
|
computeBgColorOnProportionOfOpenTasks,
|
|
|
|
getPercentOfOpenTasks
|
|
|
|
})
|
2021-03-02 09:23:33 +01:00
|
|
|
});
|
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
async function readfileJson(fileToOpen) {
|
2021-03-02 09:23:33 +01:00
|
|
|
fs.readFile(`sources/${fileToOpen}`, "utf-8", function (err, data) {
|
2021-03-01 18:02:04 +01:00
|
|
|
if (err) console.log(err);
|
2021-03-02 10:57:26 +01:00
|
|
|
console.log('ok ', fileToOpen)
|
2021-03-02 09:23:33 +01:00
|
|
|
return JSON.parse(data)
|
2021-03-01 18:02:04 +01:00
|
|
|
});
|
2021-03-02 09:23:33 +01:00
|
|
|
}
|
2021-03-01 18:02:04 +01:00
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
function computeData(jsonAllData) {
|
2021-03-01 18:14:47 +01:00
|
|
|
|
2021-03-02 09:23:33 +01:00
|
|
|
// 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);
|
2021-03-01 18:02:04 +01:00
|
|
|
|
2021-03-02 09:53:16 +01:00
|
|
|
jsonAllData.stats = {
|
|
|
|
tasksCount : jsonAllData.tasks.project.task.length,
|
2021-03-02 10:57:26 +01:00
|
|
|
tasksClosed: 0,
|
|
|
|
tasksOpen : 0,
|
|
|
|
listOpen : [],
|
|
|
|
listClosed : [],
|
2021-03-02 09:53:16 +01:00
|
|
|
}
|
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
for (let t of jsonAllData.tasks.project.task) {
|
2021-03-02 09:53:16 +01:00
|
|
|
// console.log('t', t)
|
|
|
|
let tags = t["$"].tags.split(',')
|
2021-03-02 10:57:26 +01:00
|
|
|
for (let tag of tags) {
|
2021-03-02 09:53:16 +01:00
|
|
|
// console.log('tag', tag)
|
2021-03-02 10:57:26 +01:00
|
|
|
jsonAllData.tags.tagstore.tag.map(elem => {
|
2021-03-02 09:53:16 +01:00
|
|
|
// console.log('elem', elem)
|
2021-03-02 10:57:26 +01:00
|
|
|
if (elem['$'].name == tag) {
|
|
|
|
if (!elem.tasks) {
|
2021-03-02 09:53:16 +01:00
|
|
|
elem.tasks = 0
|
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
if (!elem.tasksListById) {
|
2021-03-02 09:53:16 +01:00
|
|
|
elem.tasksListById = []
|
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
if (!elem.tasksListByTitle) {
|
2021-03-02 09:53:16 +01:00
|
|
|
elem.tasksListByTitle = []
|
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
if (!elem.tasksListIsActiveByTitle) {
|
2021-03-02 09:53:16 +01:00
|
|
|
elem.tasksListIsActiveByTitle = []
|
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
if (!elem.tasksListIsDoneByTitle) {
|
2021-03-02 09:53:16 +01:00
|
|
|
elem.tasksListIsDoneByTitle = []
|
|
|
|
}
|
|
|
|
elem.tasks++
|
|
|
|
elem.tasksListById.push(t['$'].id)
|
|
|
|
elem.tasksListByTitle.push(t.title)
|
2021-03-02 10:57:26 +01:00
|
|
|
if (t['$'].status == "Active") {
|
|
|
|
elem.tasksListIsActiveByTitle.push(t.title)
|
2021-03-02 09:53:16 +01:00
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
if (t['$'].status == "Done") {
|
|
|
|
elem.tasksListIsDoneByTitle.push(t.title)
|
2021-03-02 09:53:16 +01:00
|
|
|
}
|
|
|
|
}
|
|
|
|
})
|
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
if (t.donedate) {
|
2021-03-02 09:53:16 +01:00
|
|
|
jsonAllData.stats.tasksClosed++;
|
|
|
|
jsonAllData.stats.listOpen.push(t);
|
2021-03-02 10:57:26 +01:00
|
|
|
} else {
|
2021-03-02 09:53:16 +01:00
|
|
|
jsonAllData.stats.tasksOpen++;
|
|
|
|
}
|
2021-03-02 09:23:33 +01:00
|
|
|
// console.log('tags', tags)
|
|
|
|
}
|
|
|
|
return jsonAllData
|
2021-03-01 18:02:04 +01:00
|
|
|
|
2021-03-02 09:23:33 +01:00
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
|
|
|
|
function convertOneXmlToJson(fileToOpen, res) {
|
2021-03-01 18:02:04 +01:00
|
|
|
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)
|
|
|
|
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-03-02 10:57:26 +01:00
|
|
|
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() {
|
|
|
|
|
2021-03-02 10:12:15 +01:00
|
|
|
}
|
2021-03-02 10:57:26 +01:00
|
|
|
|
|
|
|
function transformToJson(xml, fileToOpen, res) {
|
2021-03-01 18:02:04 +01:00
|
|
|
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!`);
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
});
|
|
|
|
});
|
|
|
|
}
|
|
|
|
|
2021-02-27 10:26:37 +01:00
|
|
|
module.exports = router;
|