Use FLEX hours, even not full day

This commit is contained in:
marijo 2026-06-09 18:08:28 +00:00
parent 16eace739a
commit 2a12aa0bf7

47
app.js
View file

@ -792,7 +792,8 @@ function feriefridageRemainingAfterApprovedPlans(settings, entries, today, balan
function allocateDay(entry, date, balances, settings, fraction = 1) {
const source = entry.source;
const allowUnpaid = Boolean(Number(entry.allow_unpaid));
const dayHours = hoursForDate(date, settings) * fraction;
const baseDayHours = hoursForDate(date, settings);
const dayHours = baseDayHours * fraction;
let { vacationBalance, feriefridageBalance, flexBalance } = balances;
const result = { usedVacation: 0, usedFeriefridage: 0, usedFlex: 0, usedFlexDays: 0, usedUnpaid: 0 };
@ -824,8 +825,8 @@ function allocateDay(entry, date, balances, settings, fraction = 1) {
if (allowUnpaid && flexBalance < dayHours) {
const useHours = Math.max(0, flexBalance);
result.usedFlex += useHours;
result.usedFlexDays += useHours / hoursForDate(date, settings);
result.usedUnpaid += fraction - (useHours / hoursForDate(date, settings));
result.usedFlexDays += useHours / baseDayHours;
result.usedUnpaid += fraction - (useHours / baseDayHours);
flexBalance = 0;
} else {
result.usedFlex += dayHours;
@ -843,19 +844,37 @@ function allocateDay(entry, date, balances, settings, fraction = 1) {
} else if (source === 'flex') {
useFlex();
} else {
if (feriefridageBalance >= fraction && isBeforeFeriefridageExpiry(date, settings)) {
useFeriefridag();
} else if (vacationBalance >= fraction) {
useVacation();
} else if (flexBalance >= dayHours) {
useFlex();
} else if (allowUnpaid) {
const use = Math.max(0, vacationBalance);
let remaining = fraction;
if (remaining > 0 && feriefridageBalance > 0 && isBeforeFeriefridageExpiry(date, settings)) {
const use = Math.min(feriefridageBalance, remaining);
result.usedFeriefridage += use;
feriefridageBalance -= use;
remaining -= use;
}
if (remaining > 0 && vacationBalance > 0) {
const use = Math.min(vacationBalance, remaining);
result.usedVacation += use;
result.usedUnpaid += fraction - use;
vacationBalance = 0;
vacationBalance -= use;
remaining -= use;
}
if (remaining > 0 && flexBalance > 0) {
const use = Math.min(flexBalance / baseDayHours, remaining);
result.usedFlex += use * baseDayHours;
result.usedFlexDays += use;
flexBalance -= use * baseDayHours;
remaining -= use;
}
if (remaining > 0) {
if (allowUnpaid) {
result.usedUnpaid += remaining;
} else {
useVacation();
result.usedVacation += remaining;
vacationBalance -= remaining;
}
}
}