Files
bodyshop/server/utils/calculateStatusDuration.js
Dave Richer 5ea64ed805 - Progress
Signed-off-by: Dave Richer <dave@imexsystems.ca>
2024-01-24 17:18:43 -05:00

59 lines
2.0 KiB
JavaScript

const moment = require('moment');
const durationToHumanReadable = require("./durationToHumanReadable");
/**
* Calculate the duration of each status of a job
* @param transitions
* @returns {{}}
*/
const calculateStatusDuration = (transitions) => {
let statusDuration = {};
let totalDuration = 0;
let summations = [];
transitions.forEach((transition, index) => {
let duration = transition.duration;
totalDuration += duration;
if (!transition.prev_value) {
statusDuration[transition.value] = {
value: duration,
humanReadable: transition.duration_readable
};
} else if (!transition.next_value) {
if (statusDuration[transition.value]) {
statusDuration[transition.value].value += duration;
statusDuration[transition.value].humanReadable = transition.duration_readable;
} else {
statusDuration[transition.value] = {
value: duration,
humanReadable: transition.duration_readable
};
}
} else {
if (statusDuration[transition.value]) {
statusDuration[transition.value].value += duration;
statusDuration[transition.value].humanReadable = transition.duration_readable;
} else {
statusDuration[transition.value] = {
value: duration,
humanReadable: transition.duration_readable
};
}
}
});
for (let [status, {value, humanReadable}] of Object.entries(statusDuration)) {
if (status !== 'total') {
summations.push({status, value, humanReadable});
}
}
const humanReadableTotal = durationToHumanReadable(moment.duration(totalDuration));
return {
summations,
total: totalDuration,
humanReadableTotal
};
}
module.exports = calculateStatusDuration;