mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-19 06:10:31 +00:00
52 lines
1.5 KiB
TypeScript
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;
|
|
}
|
|
}
|