mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-15 12:20:31 +00:00
186 lines
4.7 KiB
TypeScript
186 lines
4.7 KiB
TypeScript
import { merge } from 'lodash';
|
|
import * as R from 'ramda';
|
|
import {
|
|
IBalanceSheetQuery,
|
|
IFinancialDatePeriodsUnit,
|
|
} from './BalanceSheet.types';
|
|
import { FinancialDateRanges } from '../../common/FinancialDateRanges';
|
|
import { DISPLAY_COLUMNS_BY } from './constants';
|
|
|
|
export class BalanceSheetQuery extends R.compose(FinancialDateRanges)(
|
|
class {},
|
|
) {
|
|
/**
|
|
* Balance sheet query.
|
|
* @param {IBalanceSheetQuery}
|
|
*/
|
|
public readonly query: IBalanceSheetQuery;
|
|
|
|
/**
|
|
* Previous year to date.
|
|
* @param {Date}
|
|
*/
|
|
public readonly PYToDate: Date;
|
|
|
|
/**
|
|
* Previous year from date.
|
|
* @param {Date}
|
|
*/
|
|
public readonly PYFromDate: Date;
|
|
|
|
/**
|
|
* Previous period to date.
|
|
* @param {Date}
|
|
*/
|
|
public readonly PPToDate: Date;
|
|
|
|
/**
|
|
* Previous period from date.
|
|
* @param {Date}
|
|
*/
|
|
public readonly PPFromDate: Date;
|
|
|
|
/**
|
|
* Constructor method
|
|
* @param {IBalanceSheetQuery} query
|
|
*/
|
|
constructor(query: IBalanceSheetQuery) {
|
|
super();
|
|
this.query = query;
|
|
|
|
// Pervious Year (PY) Dates.
|
|
this.PYToDate = this.getPreviousYearDate(this.query.toDate);
|
|
this.PYFromDate = this.getPreviousYearDate(this.query.fromDate);
|
|
|
|
// Previous Period (PP) Dates for Total column.
|
|
if (this.isTotalColumnType()) {
|
|
const { fromDate, toDate } = this.getPPTotalDateRange(
|
|
this.query.fromDate,
|
|
this.query.toDate,
|
|
);
|
|
this.PPToDate = toDate;
|
|
this.PPFromDate = fromDate;
|
|
// Previous Period (PP) Dates for Date period columns type.
|
|
} else if (this.isDatePeriodsColumnsType()) {
|
|
const { fromDate, toDate } = this.getPPDatePeriodDateRange(
|
|
this.query.fromDate,
|
|
this.query.toDate,
|
|
this.query.displayColumnsBy as IFinancialDatePeriodsUnit,
|
|
);
|
|
this.PPToDate = toDate;
|
|
this.PPFromDate = fromDate;
|
|
}
|
|
return merge(this, query);
|
|
}
|
|
|
|
// ---------------------------
|
|
// # Columns Type/By.
|
|
// ---------------------------
|
|
/**
|
|
* Detarmines the given display columns type.
|
|
* @param {string} displayColumnsBy
|
|
* @returns {boolean}
|
|
*/
|
|
public isDisplayColumnsBy = (displayColumnsBy: string): boolean => {
|
|
return this.query.displayColumnsBy === displayColumnsBy;
|
|
};
|
|
|
|
/**
|
|
* Detarmines the given display columns by type.
|
|
* @param {string} displayColumnsBy
|
|
* @returns {boolean}
|
|
*/
|
|
public isDisplayColumnsType = (displayColumnsType: string): boolean => {
|
|
return this.query.displayColumnsType === displayColumnsType;
|
|
};
|
|
|
|
/**
|
|
* Detarmines whether the columns type is date periods.
|
|
* @returns {boolean}
|
|
*/
|
|
public isDatePeriodsColumnsType = (): boolean => {
|
|
return this.isDisplayColumnsType(DISPLAY_COLUMNS_BY.DATE_PERIODS);
|
|
};
|
|
|
|
/**
|
|
* Detarmines whether the columns type is total.
|
|
* @returns {boolean}
|
|
*/
|
|
public isTotalColumnType = (): boolean => {
|
|
return this.isDisplayColumnsType(DISPLAY_COLUMNS_BY.TOTAL);
|
|
};
|
|
|
|
// ---------------------------
|
|
// # Percentage column/row.
|
|
// ---------------------------
|
|
/**
|
|
* Detarmines whether the percentage of column active.
|
|
* @returns {boolean}
|
|
*/
|
|
public isColumnsPercentageActive = (): boolean => {
|
|
return this.query.percentageOfColumn;
|
|
};
|
|
|
|
/**
|
|
* Detarmines whether the percentage of row active.
|
|
* @returns {boolean}
|
|
*/
|
|
public isRowsPercentageActive = (): boolean => {
|
|
return this.query.percentageOfRow;
|
|
};
|
|
|
|
// ---------------------------
|
|
// # Previous Year (PY)
|
|
// ---------------------------
|
|
/**
|
|
* Detarmines the report query has previous year enabled.
|
|
* @returns {boolean}
|
|
*/
|
|
public isPreviousYearActive = (): boolean => {
|
|
return this.query.previousYear;
|
|
};
|
|
|
|
/**
|
|
* Detarmines the report query has previous year percentage change active.
|
|
* @returns {boolean}
|
|
*/
|
|
public isPreviousYearPercentageActive = (): boolean => {
|
|
return this.query.previousYearPercentageChange;
|
|
};
|
|
|
|
/**
|
|
* Detarmines the report query has previous year change active.
|
|
* @returns {boolean}
|
|
*/
|
|
public isPreviousYearChangeActive = (): boolean => {
|
|
return this.query.previousYearAmountChange;
|
|
};
|
|
|
|
// ---------------------------
|
|
// # Previous Period (PP).
|
|
// ---------------------------
|
|
/**
|
|
* Detarmines the report query has previous period enabled.
|
|
* @returns {boolean}
|
|
*/
|
|
public isPreviousPeriodActive = (): boolean => {
|
|
return this.query.previousPeriod;
|
|
};
|
|
|
|
/**
|
|
* Detarmines wether the preivous period percentage is active.
|
|
* @returns {boolean}
|
|
*/
|
|
public isPreviousPeriodPercentageActive = (): boolean => {
|
|
return this.query.previousPeriodPercentageChange;
|
|
};
|
|
|
|
/**
|
|
* Detarmines wether the previous period change is active.
|
|
* @returns {boolean}
|
|
*/
|
|
public isPreviousPeriodChangeActive = (): boolean => {
|
|
return this.query.previousPeriodAmountChange;
|
|
};
|
|
}
|