hop
This commit is contained in:
parent
3bdbd54c10
commit
a6d82ba652
124
app.js
124
app.js
|
@ -4,6 +4,15 @@ const stats = {
|
|||
countAllTasks: 0,
|
||||
tasksByDay: {}
|
||||
}
|
||||
|
||||
// const enableFilterByTag = true;
|
||||
const enableFilterByTag = false;
|
||||
const filterByTag = "work";
|
||||
// const outputFileName = "work_report";
|
||||
const outputFileName = "all_tasks_report";
|
||||
let countExcluded = 0;
|
||||
let countIncluded = 0;
|
||||
|
||||
// prendre le json source représentant les tâches DONE
|
||||
console.log(' ### lecture de source/emacs_json.json');
|
||||
|
||||
|
@ -27,26 +36,63 @@ function sortTasksFromJson(statObject) {
|
|||
return console.log(err);
|
||||
}
|
||||
let dataTransformed = JSON.parse(data);
|
||||
console.log('data keys ', Object.keys(dataTransformed))
|
||||
// console.log('data keys ', Object.keys(dataTransformed))
|
||||
if (dataTransformed["contents"]) {
|
||||
|
||||
|
||||
countTasks = dataTransformed["contents"].length
|
||||
stats.countAllTasks = countTasks;
|
||||
|
||||
console.log('yes data !', countTasks)
|
||||
console.log('first', dataTransformed["contents"][0])
|
||||
console.log('yes data ! tasks:', countTasks)
|
||||
|
||||
dataTransformed["contents"].forEach((elem) => {
|
||||
if (elem['title'] && elem['title'][0]) {
|
||||
console.log(' - ', elem['title'][0])
|
||||
dataTransformed["contents"].forEach((elem, index) => {
|
||||
|
||||
// console.log('tâche ', index)
|
||||
// évacuer les sous tâches
|
||||
// if (elem['contents']) {
|
||||
// console.log('content ception, on évacue')
|
||||
// countExcluded++;
|
||||
// return;
|
||||
// }
|
||||
// filtrer par tag les tâches
|
||||
if (enableFilterByTag) {
|
||||
console.log('filtre activé', filterByTag)
|
||||
if (!elem['drawer'] || !elem['properties']['tags']) {
|
||||
|
||||
|
||||
console.log('on vire cette tâche n\'ayant pas de drawer :', elem)
|
||||
countExcluded++;
|
||||
return;
|
||||
} else if (
|
||||
elem['properties'] &&
|
||||
typeof elem['properties']['tags'] !== "undefined" &&
|
||||
elem['properties']['tags'].indexOf(filterByTag) === -1
|
||||
) {
|
||||
console.log('on vire cette tâche ayant les itags :', elem['drawer']['ARCHIVE_ITAGS'])
|
||||
countExcluded++;
|
||||
return;
|
||||
}
|
||||
if (elem['properties'] && elem['properties']['closed']) {
|
||||
} else {
|
||||
console.log(' - filtre désactivé')
|
||||
}
|
||||
// après le filtre, on range les tâches
|
||||
|
||||
if (elem['properties']) {
|
||||
console.log(' - ref ', elem['ref'])
|
||||
let title = elem['properties']['raw-value'];
|
||||
let tags = elem['tags'] ? elem['tags'] : [];
|
||||
let closeDate = elem['properties']['closed']['end'];
|
||||
let todoKeyword = elem['drawer']['ARCHIVE_TODO'];
|
||||
let itags = elem['drawer']['ARCHIVE_ITAGS'];
|
||||
let closeDate = 'Indéfini';
|
||||
let todoKeyword = 'DONE';
|
||||
if (elem['properties']['closed']) {
|
||||
closeDate = elem['properties']['closed']['end'];
|
||||
|
||||
} else if (elem['drawer'] && elem['drawer']['ARCHIVE_TIME']) {
|
||||
closeDate = elem['drawer']['ARCHIVE_TIME'];
|
||||
}
|
||||
if (elem['drawer'] && elem['drawer']['ARCHIVE_TODO']) {
|
||||
|
||||
todoKeyword = elem['drawer']['ARCHIVE_TODO'];
|
||||
}
|
||||
|
||||
// jour, 11 premiers caractères
|
||||
|
||||
|
@ -55,25 +101,24 @@ function sortTasksFromJson(statObject) {
|
|||
stats.tasksByDay[day] = []
|
||||
}
|
||||
stats.tasksByDay[day].push({
|
||||
todoKeyword,
|
||||
title,
|
||||
day,
|
||||
closeDate,
|
||||
tags,
|
||||
todoKeyword,
|
||||
day,
|
||||
itags
|
||||
})
|
||||
// console.log(' ' + title)
|
||||
countIncluded++;
|
||||
} else {
|
||||
console.log('no', elem['properties']['raw-value'])
|
||||
}
|
||||
})
|
||||
|
||||
// console.log('element', dataTransformed["contents"]["0"])
|
||||
|
||||
} else {
|
||||
console.log('no content')
|
||||
}
|
||||
// console.log(data);
|
||||
console.log('tâches inclues:', countIncluded)
|
||||
writeHtmlOutput()
|
||||
});
|
||||
|
||||
|
@ -87,6 +132,11 @@ function writeHtmlOutput() {
|
|||
console.log('writeHtmlOutput', stats.countAllTasks)
|
||||
|
||||
let daysListRef = Object.keys(stats.tasksByDay).sort()
|
||||
let filterInfo = ``
|
||||
if (enableFilterByTag) {
|
||||
filterInfo = `<p class="is-info">Contenu filtré sur le tag: ${filterByTag}. ${countExcluded} tâches exclues, ${countIncluded} tâches inclues sur le total de ${countExcluded + countIncluded}</p>`
|
||||
}
|
||||
|
||||
let htmlOut = `
|
||||
<html>
|
||||
<head>
|
||||
|
@ -99,9 +149,14 @@ function writeHtmlOutput() {
|
|||
</style>
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<div id="report_days" class="container content">
|
||||
<h1 class="title is-1">Feuille de rapport d'activité</h1>
|
||||
<p class="subtitle is-1">par <a href="https://www.cipherbliss.com">Tykayn</a> </p>
|
||||
${filterInfo}
|
||||
|
||||
`
|
||||
daysListRef.forEach((dayRefString) => {
|
||||
daysListRef.reverse().forEach((dayRefString) => {
|
||||
|
||||
let tasksOfTheDay = '';
|
||||
|
||||
|
@ -110,14 +165,21 @@ function writeHtmlOutput() {
|
|||
if ('DONE' !== dayObj.todoKeyword) {
|
||||
graphicKeyword = dayObj.todoKeyword;
|
||||
}
|
||||
|
||||
let tagDisplay = '';
|
||||
if (dayObj.tags.length) {
|
||||
tagDisplay = ` <p class="archived-tags tag is-light is-primary">
|
||||
${dayObj.tags.join(' ')}
|
||||
</p>
|
||||
`
|
||||
}
|
||||
|
||||
tasksOfTheDay += ` <li>
|
||||
<h2 class="subtitle is-1">
|
||||
<h2>
|
||||
<span class="keyword"> ${graphicKeyword}</span>
|
||||
<span class="title"> ${dayObj.title} </span>
|
||||
</h2>
|
||||
<p class="tag is-light is-primary">
|
||||
${dayObj.itags}
|
||||
</p>
|
||||
${tagDisplay}
|
||||
</li>`
|
||||
})
|
||||
htmlOut += `
|
||||
|
@ -127,7 +189,7 @@ function writeHtmlOutput() {
|
|||
<span class="day-ref">
|
||||
${dayRefString}
|
||||
</span>
|
||||
<span class="counter pull-right badge">
|
||||
<span class="counter pull-right tag is-success is-light">
|
||||
${stats.tasksByDay[dayRefString].length}
|
||||
</span>
|
||||
</h1>
|
||||
|
@ -141,8 +203,20 @@ function writeHtmlOutput() {
|
|||
</div> `
|
||||
})
|
||||
htmlOut += `
|
||||
<div class="box">
|
||||
<h1 class="title is-1">
|
||||
|
||||
Tadam, c'est tout!
|
||||
</h1>
|
||||
<p>
|
||||
|
||||
Source: <a href="https://forge.chapril.org/tykayn/org-report-stats">org-report-stats</a>
|
||||
<br>
|
||||
Contactez-moi: <a href="https://www.cipherbliss.com/contact">par un de ces moyens</a>
|
||||
</p>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</body>
|
||||
</html>
|
||||
`
|
||||
|
@ -153,12 +227,16 @@ function writeHtmlOutput() {
|
|||
}
|
||||
console.log('wrote output json', data)
|
||||
})
|
||||
fs.writeFile('output/output.html', htmlOut, function (err, data) {
|
||||
fs.writeFile('output/output_' + outputFileName + '.html', htmlOut, function (err, data) {
|
||||
if (err) {
|
||||
return console.log(err);
|
||||
}
|
||||
console.log('wrote output html', data)
|
||||
console.log('wrote output html ' + outputFileName, data)
|
||||
|
||||
})
|
||||
if (enableFilterByTag) {
|
||||
console.log('excluded tasks by tag filter ', countExcluded)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
|
Loading…
Reference in New Issue