76 lines
1.6 KiB
TypeScript
76 lines
1.6 KiB
TypeScript
import type { CalculationValues } from '@/stores/calculation/values/types';
|
|
import type { Row } from '@/stores/tables/payments/types';
|
|
|
|
const degressionSteps: { [key: number]: number[] } = {
|
|
100_000_003: [100, 50, 25],
|
|
100_000_004: [100, 30, 10],
|
|
100_000_005: [100, 70, 40],
|
|
100_000_006: [100, 7, 3],
|
|
};
|
|
|
|
export function generateDegressionRows({
|
|
seasonType: degressionType,
|
|
leasingPeriod,
|
|
}: Pick<CalculationValues, 'leasingPeriod' | 'seasonType'>) {
|
|
let middlePayments: Row[] = [];
|
|
|
|
switch (degressionType) {
|
|
case 100_000_007: {
|
|
const editablePayments: Row[] = Array.from(
|
|
{
|
|
length: leasingPeriod - 3,
|
|
},
|
|
() => ({
|
|
status: 'Default',
|
|
value: 100,
|
|
})
|
|
);
|
|
|
|
middlePayments = [
|
|
{
|
|
status: 'Disabled',
|
|
value: 100,
|
|
},
|
|
...editablePayments,
|
|
];
|
|
|
|
break;
|
|
}
|
|
case 100_000_003:
|
|
case 100_000_004:
|
|
case 100_000_005:
|
|
case 100_000_006: {
|
|
const [step1, step2, step3] = degressionSteps[degressionType];
|
|
const paymentsInStep = Math.ceil((leasingPeriod - 2) / 3);
|
|
|
|
middlePayments = Array.from(
|
|
{
|
|
length: leasingPeriod - 2,
|
|
},
|
|
(_v, i) => {
|
|
let value = step3;
|
|
|
|
if (i <= paymentsInStep * 2 - 1) {
|
|
value = step2;
|
|
}
|
|
|
|
if (i <= paymentsInStep - 1) {
|
|
value = step1;
|
|
}
|
|
|
|
return {
|
|
status: 'Disabled',
|
|
value,
|
|
};
|
|
}
|
|
);
|
|
break;
|
|
}
|
|
default: {
|
|
break;
|
|
}
|
|
}
|
|
|
|
return middlePayments;
|
|
}
|