Files
bigcapital/packages/server-nest/src/modules/FinancialStatements/modules/AgingSummary/AgingReport.ts
2025-01-20 15:44:06 +02:00

52 lines
1.5 KiB
TypeScript

import * as moment from 'moment';
import { IAgingPeriod } from './AgingSummary.types';
import { FinancialSheet } from '../../common/FinancialSheet';
export abstract class AgingReport extends FinancialSheet {
/**
* Retrieve the aging periods range.
* @param {string} asDay
* @param {number} agingDaysBefore
* @param {number} agingPeriodsFreq
*/
public agingRangePeriods(
asDay: Date | string,
agingDaysBefore: number,
agingPeriodsFreq: number,
): IAgingPeriod[] {
const totalAgingDays = agingDaysBefore * agingPeriodsFreq;
const startAging = moment(asDay).startOf('day');
const endAging = startAging
.clone()
.subtract(totalAgingDays, 'days')
.endOf('day');
const agingPeriods: IAgingPeriod[] = [];
const startingAging = startAging.clone();
let beforeDays = 1;
let toDays = 0;
while (startingAging > endAging) {
const currentAging = startingAging.clone();
startingAging.subtract(agingDaysBefore, 'days').endOf('day');
toDays += agingDaysBefore;
agingPeriods.push({
fromPeriod: moment(currentAging).format('YYYY-MM-DD'),
toPeriod: moment(startingAging).format('YYYY-MM-DD'),
beforeDays: beforeDays === 1 ? 0 : beforeDays,
toDays: toDays,
...(startingAging.valueOf() === endAging.valueOf()
? {
toPeriod: null,
toDays: null,
}
: {}),
});
beforeDays += agingDaysBefore;
}
return agingPeriods;
}
}