Use FLEX hours, even not full day
This commit is contained in:
parent
16eace739a
commit
2a12aa0bf7
1 changed files with 34 additions and 15 deletions
49
app.js
49
app.js
|
|
@ -792,7 +792,8 @@ function feriefridageRemainingAfterApprovedPlans(settings, entries, today, balan
|
||||||
function allocateDay(entry, date, balances, settings, fraction = 1) {
|
function allocateDay(entry, date, balances, settings, fraction = 1) {
|
||||||
const source = entry.source;
|
const source = entry.source;
|
||||||
const allowUnpaid = Boolean(Number(entry.allow_unpaid));
|
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;
|
let { vacationBalance, feriefridageBalance, flexBalance } = balances;
|
||||||
const result = { usedVacation: 0, usedFeriefridage: 0, usedFlex: 0, usedFlexDays: 0, usedUnpaid: 0 };
|
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) {
|
if (allowUnpaid && flexBalance < dayHours) {
|
||||||
const useHours = Math.max(0, flexBalance);
|
const useHours = Math.max(0, flexBalance);
|
||||||
result.usedFlex += useHours;
|
result.usedFlex += useHours;
|
||||||
result.usedFlexDays += useHours / hoursForDate(date, settings);
|
result.usedFlexDays += useHours / baseDayHours;
|
||||||
result.usedUnpaid += fraction - (useHours / hoursForDate(date, settings));
|
result.usedUnpaid += fraction - (useHours / baseDayHours);
|
||||||
flexBalance = 0;
|
flexBalance = 0;
|
||||||
} else {
|
} else {
|
||||||
result.usedFlex += dayHours;
|
result.usedFlex += dayHours;
|
||||||
|
|
@ -843,19 +844,37 @@ function allocateDay(entry, date, balances, settings, fraction = 1) {
|
||||||
} else if (source === 'flex') {
|
} else if (source === 'flex') {
|
||||||
useFlex();
|
useFlex();
|
||||||
} else {
|
} else {
|
||||||
if (feriefridageBalance >= fraction && isBeforeFeriefridageExpiry(date, settings)) {
|
let remaining = fraction;
|
||||||
useFeriefridag();
|
|
||||||
} else if (vacationBalance >= fraction) {
|
if (remaining > 0 && feriefridageBalance > 0 && isBeforeFeriefridageExpiry(date, settings)) {
|
||||||
useVacation();
|
const use = Math.min(feriefridageBalance, remaining);
|
||||||
} else if (flexBalance >= dayHours) {
|
result.usedFeriefridage += use;
|
||||||
useFlex();
|
feriefridageBalance -= use;
|
||||||
} else if (allowUnpaid) {
|
remaining -= use;
|
||||||
const use = Math.max(0, vacationBalance);
|
}
|
||||||
|
|
||||||
|
if (remaining > 0 && vacationBalance > 0) {
|
||||||
|
const use = Math.min(vacationBalance, remaining);
|
||||||
result.usedVacation += use;
|
result.usedVacation += use;
|
||||||
result.usedUnpaid += fraction - use;
|
vacationBalance -= use;
|
||||||
vacationBalance = 0;
|
remaining -= use;
|
||||||
} else {
|
}
|
||||||
useVacation();
|
|
||||||
|
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 {
|
||||||
|
result.usedVacation += remaining;
|
||||||
|
vacationBalance -= remaining;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue