mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 20:30:33 +00:00
111 lines
3.0 KiB
TypeScript
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 };
|
|
};
|
|
};
|