in src/gantt.ts [1155:1196]
private static addNextDaysOff(
daysOffDataForAddition: DaysOffDataForAddition,
firstDayOfWeek: number,
date: Date,
extraCondition: boolean = false): DaysOffDataForAddition {
daysOffDataForAddition.amountOfLastDaysOff = 1;
for (let i = DaysInAWeekend; i > 0; i--) {
let dateForCheck: Date = new Date(date.getTime() + (i * MillisecondsInADay));
let alreadyInDaysOffList = false;
daysOffDataForAddition.list.forEach((item) => {
const itemDate = item[0];
if (itemDate.getFullYear() === date.getFullYear() && itemDate.getMonth() === date.getMonth() && itemDate.getDate() === date.getDate()) {
alreadyInDaysOffList = true;
}
});
const isFirstDaysOfWeek = dateForCheck.getDay() === +firstDayOfWeek;
const isFirstDayOff = dateForCheck.getDay() === (+firstDayOfWeek + 5) % 7;
const isSecondDayOff = dateForCheck.getDay() === (+firstDayOfWeek + 6) % 7;
const isPartlyUsed = !/00\:00\:00/g.test(dateForCheck.toTimeString());
if (!alreadyInDaysOffList && isFirstDaysOfWeek && (!extraCondition || (extraCondition && isPartlyUsed))) {
daysOffDataForAddition.amountOfLastDaysOff = i;
daysOffDataForAddition.list.push([
new Date(date.getFullYear(), date.getMonth(), date.getDate(), 0, 0, 0), i
]);
}
// Example: some task starts on Saturday 8:30 and ends on Thursday 8:30,
// so it has extra duration and now will end on next Saturday 8:30
// --- we need to add days off -- it ends on Monday 8.30
if (!alreadyInDaysOffList && (isFirstDayOff || isSecondDayOff) && isPartlyUsed) {
const amount = isFirstDayOff ? 2 : 1;
daysOffDataForAddition.amountOfLastDaysOff = amount;
daysOffDataForAddition.list.push([
new Date(dateForCheck.getFullYear(), dateForCheck.getMonth(), dateForCheck.getDate(), 0, 0, 0), amount
]);
}
}
return daysOffDataForAddition;
}