Files
bigcapital/packages/server/src/services/FinancialStatements/FinancialDateRanges.ts
2023-02-03 11:57:50 +02:00

111 lines
3.0 KiB
TypeScript

import { IDateRange, IFinancialDatePeriodsUnit } from '@/interfaces';
import moment from 'moment';
export const FinancialDateRanges = (Base) =>
class extends Base {
/**
* Retrieve previous period (PP) date of the given date.
* @param {Date} fromDate -
* @param {Date} toDate -
* @param {IFinancialDatePeriodsUnit} unit -
* @returns {Date}
*/
protected getPreviousPeriodDate = (
date: Date,
value: number = 1,
unit: IFinancialDatePeriodsUnit = IFinancialDatePeriodsUnit.Day
): Date => {
return moment(date).subtract(value, unit).toDate();
};
/**
* Retrieves the different
* @param {Date} fromDate
* @param {Date} toDate
* @returns
*/
protected getPreviousPeriodDiff = (fromDate: Date, toDate: Date) => {
return moment(toDate).diff(fromDate, 'days') + 1;
};
/**
* Retrieves the periods period dates.
* @param {Date} fromDate -
* @param {Date} toDate -
*/
protected getPreviousPeriodDateRange = (
fromDate: Date,
toDate: Date,
unit: IFinancialDatePeriodsUnit,
amount: number = 1
): IDateRange => {
const PPToDate = this.getPreviousPeriodDate(toDate, amount, unit);
const PPFromDate = this.getPreviousPeriodDate(fromDate, amount, unit);
return { toDate: PPToDate, fromDate: PPFromDate };
};
/**
* Retrieves the previous period (PP) date range of total column.
* @param {Date} fromDate
* @param {Date} toDate
* @returns {IDateRange}
*/
protected getPPTotalDateRange = (
fromDate: Date,
toDate: Date
): IDateRange => {
const unit = this.getPreviousPeriodDiff(fromDate, toDate);
return this.getPreviousPeriodDateRange(
fromDate,
toDate,
IFinancialDatePeriodsUnit.Day,
unit
);
};
/**
* Retrieves the previous period (PP) date range of date periods columns.
* @param {Date} fromDate -
* @param {Date} toDate -
* @param {IFinancialDatePeriodsUnit}
* @returns {IDateRange}
*/
protected getPPDatePeriodDateRange = (
fromDate: Date,
toDate: Date,
unit: IFinancialDatePeriodsUnit
): IDateRange => {
return this.getPreviousPeriodDateRange(fromDate, toDate, unit, 1);
};
// ------------------------
// Previous Year (PY).
// ------------------------
/**
* Retrieve the previous year of the given date.
* @params {Date} date
* @returns {Date}
*/
getPreviousYearDate = (date: Date) => {
return moment(date).subtract(1, 'years').toDate();
};
/**
* Retrieves previous year date range.
* @param {Date} fromDate
* @param {Date} toDate
* @returns {IDateRange}
*/
protected getPreviousYearDateRange = (
fromDate: Date,
toDate: Date
): IDateRange => {
const PYFromDate = this.getPreviousYearDate(fromDate);
const PYToDate = this.getPreviousYearDate(toDate);
return { fromDate: PYFromDate, toDate: PYToDate };
};
};