mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-20 14:50:32 +00:00
106 lines
2.9 KiB
TypeScript
106 lines
2.9 KiB
TypeScript
import * as R from 'ramda';
|
|
import {
|
|
IInventoryValuationItem,
|
|
IInventoryValuationSheetData,
|
|
IInventoryValuationTotal,
|
|
ITableColumn,
|
|
ITableColumnAccessor,
|
|
ITableRow,
|
|
} from '@/interfaces';
|
|
import { tableRowMapper } from '@/utils';
|
|
import FinancialSheet from '../FinancialSheet';
|
|
import { FinancialSheetStructure } from '../FinancialSheetStructure';
|
|
import { FinancialTable } from '../FinancialTable';
|
|
import { ROW_TYPE } from './_constants';
|
|
|
|
export class InventoryValuationSheetTable extends R.compose(
|
|
FinancialTable,
|
|
FinancialSheetStructure
|
|
)(FinancialSheet) {
|
|
private readonly data: IInventoryValuationSheetData;
|
|
|
|
/**
|
|
* Constructor method.
|
|
* @param {IInventoryValuationSheetData} data
|
|
*/
|
|
constructor(data: IInventoryValuationSheetData) {
|
|
super();
|
|
this.data = data;
|
|
}
|
|
|
|
/**
|
|
* Retrieves the common columns accessors.
|
|
* @returns {ITableColumnAccessor}
|
|
*/
|
|
private commonColumnsAccessors(): ITableColumnAccessor[] {
|
|
return [
|
|
{ key: 'item_name', accessor: 'name' },
|
|
{ key: 'quantity', accessor: 'quantityFormatted' },
|
|
{ key: 'valuation', accessor: 'valuationFormatted' },
|
|
{ key: 'average', accessor: 'averageFormatted' },
|
|
];
|
|
}
|
|
|
|
/**
|
|
* Maps the given total node to table row.
|
|
* @param {IInventoryValuationTotal} total
|
|
* @returns {ITableRow}
|
|
*/
|
|
private totalRowMapper = (total: IInventoryValuationTotal): ITableRow => {
|
|
const accessors = this.commonColumnsAccessors();
|
|
const meta = {
|
|
rowTypes: [ROW_TYPE.TOTAL],
|
|
};
|
|
return tableRowMapper(total, accessors, meta);
|
|
};
|
|
|
|
/**
|
|
* Maps the given item node to table row.
|
|
* @param {IInventoryValuationItem} item
|
|
* @returns {ITableRow}
|
|
*/
|
|
private itemRowMapper = (item: IInventoryValuationItem): ITableRow => {
|
|
const accessors = this.commonColumnsAccessors();
|
|
const meta = {
|
|
rowTypes: [ROW_TYPE.ITEM],
|
|
};
|
|
return tableRowMapper(item, accessors, meta);
|
|
};
|
|
|
|
/**
|
|
* Maps the given items nodes to table rowes.
|
|
* @param {IInventoryValuationItem[]} items
|
|
* @returns {ITableRow[]}
|
|
*/
|
|
private itemsRowsMapper = (items: IInventoryValuationItem[]): ITableRow[] => {
|
|
return R.map(this.itemRowMapper)(items);
|
|
};
|
|
|
|
/**
|
|
* Retrieves the table rows.
|
|
* @returns {ITableRow[]}
|
|
*/
|
|
public tableRows(): ITableRow[] {
|
|
const itemsRows = this.itemsRowsMapper(this.data.items);
|
|
const totalRow = this.totalRowMapper(this.data.total);
|
|
|
|
return R.compose(
|
|
R.when(R.always(R.not(R.isEmpty(itemsRows))), R.append(totalRow))
|
|
)([...itemsRows]) as ITableRow[];
|
|
}
|
|
|
|
/**
|
|
* Retrieves the table columns.
|
|
* @returns {ITableColumn[]}
|
|
*/
|
|
public tableColumns(): ITableColumn[] {
|
|
const columns = [
|
|
{ key: 'item_name', label: 'Item Name' },
|
|
{ key: 'quantity', label: 'Quantity' },
|
|
{ key: 'valuation', label: 'Valuation' },
|
|
{ key: 'average', label: 'Average' },
|
|
];
|
|
return R.compose(this.tableColumnsCellIndexing)(columns);
|
|
}
|
|
}
|