mirror of
https://github.com/ae-utbm/sith.git
synced 2024-11-29 04:24:25 +00:00
Round all perms to the quarter
This commit is contained in:
parent
ee19dc01f6
commit
1bce7e055f
@ -25,7 +25,8 @@ interface EventInput {
|
|||||||
backgroundColor: string;
|
backgroundColor: string;
|
||||||
}
|
}
|
||||||
|
|
||||||
const _15minutes = 15 * 60 * 1000;
|
// TODO: Fix du look (bandes blanches dans la table, ...)
|
||||||
|
// TODO: Semaines passées
|
||||||
|
|
||||||
exportToHtml("loadChart", loadChart);
|
exportToHtml("loadChart", loadChart);
|
||||||
|
|
||||||
@ -57,6 +58,21 @@ async function loadChart(options: ActivityChartConfig) {
|
|||||||
calendar.render();
|
calendar.render();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function roundToQuarter(date: Date, ceil: boolean) {
|
||||||
|
const result = date;
|
||||||
|
const minutes = date.getMinutes();
|
||||||
|
// removes minutes exceeding the lower quarter and adds 15 minutes if rounded to ceiling
|
||||||
|
result.setMinutes(minutes + +ceil * 15 - (minutes % 15), 0, 0);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
|
function convertPermanancyToOpeningTime(permanancy: PermanencySchema): OpeningTime {
|
||||||
|
return {
|
||||||
|
start: roundToQuarter(new Date(permanancy.start), false),
|
||||||
|
end: roundToQuarter(new Date(permanancy.end ?? Date.now()), true),
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
function getOpeningTimes(rawPermanancies: PermanencySchema[]) {
|
function getOpeningTimes(rawPermanancies: PermanencySchema[]) {
|
||||||
const permanancies = rawPermanancies
|
const permanancies = rawPermanancies
|
||||||
.map(convertPermanancyToOpeningTime)
|
.map(convertPermanancyToOpeningTime)
|
||||||
@ -71,10 +87,7 @@ function getOpeningTimes(rawPermanancies: PermanencySchema[]) {
|
|||||||
} else {
|
} else {
|
||||||
const lastPermanancy = openingTimes[openingTimes.length - 1];
|
const lastPermanancy = openingTimes[openingTimes.length - 1];
|
||||||
// if the new permanancy starts before the 15 minutes following the end of the last one, merge them
|
// if the new permanancy starts before the 15 minutes following the end of the last one, merge them
|
||||||
if (
|
if (permanancy.start <= lastPermanancy.end) {
|
||||||
new Date(permanancy.start).getTime() <
|
|
||||||
lastPermanancy.end.getTime() + _15minutes
|
|
||||||
) {
|
|
||||||
lastPermanancy.end = new Date(
|
lastPermanancy.end = new Date(
|
||||||
Math.max(lastPermanancy.end.getTime(), permanancy.end.getTime()),
|
Math.max(lastPermanancy.end.getTime(), permanancy.end.getTime()),
|
||||||
);
|
);
|
||||||
@ -86,17 +99,6 @@ function getOpeningTimes(rawPermanancies: PermanencySchema[]) {
|
|||||||
return openingTimes;
|
return openingTimes;
|
||||||
}
|
}
|
||||||
|
|
||||||
function convertPermanancyToOpeningTime(permanancy: PermanencySchema): OpeningTime {
|
|
||||||
const start = new Date(permanancy.start);
|
|
||||||
let end = new Date(permanancy.end);
|
|
||||||
if (end.getTime() - start.getTime() < _15minutes) {
|
|
||||||
end = new Date(start.getTime() + _15minutes);
|
|
||||||
} else {
|
|
||||||
end = new Date(permanancy.end);
|
|
||||||
}
|
|
||||||
return { start: start, end: end };
|
|
||||||
}
|
|
||||||
|
|
||||||
function getEvents(permanancies: PermanencySchema[]) {
|
function getEvents(permanancies: PermanencySchema[]) {
|
||||||
const openingTimes = getOpeningTimes(permanancies);
|
const openingTimes = getOpeningTimes(permanancies);
|
||||||
const events: EventInput[] = [];
|
const events: EventInput[] = [];
|
||||||
|
Loading…
Reference in New Issue
Block a user