diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsTable.ts b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsTable.ts index 33c39ccd6..f876e9a02 100644 --- a/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsTable.ts +++ b/packages/server/src/services/FinancialStatements/SalesByItems/SalesByItemsTable.ts @@ -7,8 +7,15 @@ import { 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 SalesByItemsTable { +export class SalesByItemsTable extends R.compose( + FinancialTable, + FinancialSheetStructure +)(FinancialSheet) { private readonly data: ISalesByItemsSheetStatement; /** @@ -16,6 +23,7 @@ export class SalesByItemsTable { * @param {ISalesByItemsSheetStatement} data */ constructor(data: ISalesByItemsSheetStatement) { + super(); this.data = data; } @@ -39,8 +47,9 @@ export class SalesByItemsTable { */ private itemMap = (item: ISalesByItemsItem): ITableRow => { const columns = this.commonTableAccessors(); - const meta = {}; - + const meta = { + rowTypes: [ROW_TYPE.ITEM], + }; return tableRowMapper(item, columns, meta); }; @@ -60,8 +69,9 @@ export class SalesByItemsTable { */ private totalMap = (total: ISalesByItemsTotal) => { const columns = this.commonTableAccessors(); - const meta = {}; - + const meta = { + rowTypes: [ROW_TYPE.TOTAL], + }; return tableRowMapper(total, columns, meta); }; @@ -81,11 +91,12 @@ export class SalesByItemsTable { * @returns {ITableColumn[]} */ public tableColumns(): ITableColumn[] { - return [ + const columns = [ { key: 'item_name', label: 'Item name' }, { key: 'sold_quantity', label: 'Sold quantity' }, { key: 'sold_amount', label: 'Sold amount' }, { key: 'average_price', label: 'Average price' }, ]; + return R.compose(this.tableColumnsCellIndexing)(columns); } } diff --git a/packages/server/src/services/FinancialStatements/SalesByItems/constants.ts b/packages/server/src/services/FinancialStatements/SalesByItems/constants.ts new file mode 100644 index 000000000..0eb1e2311 --- /dev/null +++ b/packages/server/src/services/FinancialStatements/SalesByItems/constants.ts @@ -0,0 +1,6 @@ + + +export enum ROW_TYPE { + ITEM = 'ITEM', + TOTAL = 'TOTAL', +} \ No newline at end of file diff --git a/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemProvider.tsx b/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemProvider.tsx index 8b06996dc..16c2ad44f 100644 --- a/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemProvider.tsx +++ b/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemProvider.tsx @@ -1,7 +1,7 @@ // @ts-nocheck -import React, { createContext, useContext } from 'react'; +import { createContext, useContext } from 'react'; import FinancialReportPage from '../FinancialReportPage'; -import { useSalesByItems } from '@/hooks/query'; +import { useSalesByItemsTable } from '@/hooks/query'; import { transformFilterFormToQuery } from '../common'; const SalesByItemsContext = createContext(); @@ -12,7 +12,7 @@ function SalesByItemProvider({ query, ...props }) { isFetching, isLoading, refetch, - } = useSalesByItems( + } = useSalesByItemsTable( { ...transformFilterFormToQuery(query), }, diff --git a/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemsActionsBar.tsx b/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemsActionsBar.tsx index 56b025f35..9ac5a46a0 100644 --- a/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemsActionsBar.tsx +++ b/packages/webapp/src/containers/FinancialStatements/SalesByItems/SalesByItemsActionsBar.tsx @@ -19,6 +19,7 @@ import withSalesByItemsActions from './withSalesByItemsActions'; import { compose, saveInvoke } from '@/utils'; import { useSalesByItemsContext } from './SalesByItemProvider'; +import { SalesByItemsSheetExportMenu } from './components'; function SalesByItemsActionsBar({ // #withSalesByItems @@ -108,11 +109,18 @@ function SalesByItemsActionsBar({ icon={} text={} /> -