From 7d9f61985877903c11ec485fa926c7d24b307356 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Thu, 19 Sep 2024 17:49:35 +0700 Subject: [PATCH] feat(SPG-966): fix report income --- .../configs/income-per-item-master.ts | 13 --- .../configs/income-per-item-master.ts | 86 +++++++++++-------- .../configs/income-per-item.ts | 56 +++++++----- .../transaction-report/configs/income.ts | 78 +++++++++++------ .../shared/entities/report-config.entity.ts | 2 +- .../reports/shared/helpers/query-builder.ts | 8 +- 6 files changed, 141 insertions(+), 102 deletions(-) diff --git a/src/modules/reports/shared/configs/tenant-report/configs/income-per-item-master.ts b/src/modules/reports/shared/configs/tenant-report/configs/income-per-item-master.ts index c37b543..7612dc1 100644 --- a/src/modules/reports/shared/configs/tenant-report/configs/income-per-item-master.ts +++ b/src/modules/reports/shared/configs/tenant-report/configs/income-per-item-master.ts @@ -7,17 +7,4 @@ export default { group_name: REPORT_GROUP.tenant_report, unique_name: `${REPORT_GROUP.tenant_report}__income_per_item_master`, label: 'Pendapatan', - whereCondition(filterModel) { - const queryFilter = []; - const breakdown = filterModel.tr_item__breakdown_bundling; - if (breakdown) { - console.log({ breakdown }); - const value = breakdown.filter.map((item) => { - return item === 'Yes' ? true : false; - }); - - queryFilter.push(`tr_item.breakdown_bundling in (${value.join()})`); - } - return queryFilter; - }, }; diff --git a/src/modules/reports/shared/configs/transaction-report/configs/income-per-item-master.ts b/src/modules/reports/shared/configs/transaction-report/configs/income-per-item-master.ts index 0de61c5..64861c8 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/income-per-item-master.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/income-per-item-master.ts @@ -27,6 +27,11 @@ export default { filter_type: FILTER_TYPE.TEXT_IN_MEMBER, values: [STATUS.SETTLED, STATUS.REFUNDED, STATUS.PROCESS_REFUND], }, + { + column: 'main.is_recap_transaction', + filter_type: FILTER_TYPE.TEXT_EQUAL, + values: [false], + }, ], defaultOrderBy: [], lowLevelOrderBy: [], @@ -36,12 +41,18 @@ export default { column_configs: [ { - column: 'main__settlement_date', - query: 'main.settlement_date', + column: 'main__payment_date', + query: `to_char(main.payment_date, 'DD-MM-YYYY')`, label: 'Tgl. Pendapatan', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_TIMESTAMP, - date_format: 'DD/MM/YYYY', + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__status', + query: 'main.status', + label: 'Status', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.STATUS, }, { column: 'item_owner', @@ -79,26 +90,27 @@ export default { format: DATA_FORMAT.TEXT, }, { - column: 'tr_item__item_name', - query: 'tr_item.item_name', - label: 'Nama Item', + column: 'tr_item__item_type', + query: 'tr_item.item_type', + label: 'Tipe Item', type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, - { - column: 'tr_item__breakdown_bundling', - query: 'tr_item.breakdown_bundling', - label: 'Breakdown Bundling', - type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.BOOLEAN, - }, { column: 'tr_item_bundling__item_name', - query: 'tr_item_bundling.item_name', + query: `CASE WHEN tr_item.item_type = 'bundling' THEN tr_item.item_name ELSE tr_item_bundling.item_name END`, label: 'Nama Item Bundling', type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, + + { + column: 'tr_item__item_name', + query: `CASE WHEN tr_item.item_type = 'bundling' THEN tr_item_bundling.item_name ELSE tr_item.item_name END`, + label: 'Nama Item ', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, { column: 'main__customer_type', query: 'main.customer_type', @@ -113,6 +125,13 @@ export default { type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, + { + column: 'main__creator_counter_name', + query: 'main.creator_counter_name', + label: 'Nama PoS', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, { column: 'tr_item__qty', query: 'tr_item.qty', @@ -164,11 +183,10 @@ export default { }, { column: 'refund__refund_date', - query: 'refund.refund_date', + query: `to_char(refund.refund_date, 'DD-MM-YYYY')`, label: 'Tgl. Pengembalian', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_TIMESTAMP, - date_format: 'DD/MM/YYYY', + format: DATA_FORMAT.TEXT, }, { column: 'refund__status', @@ -191,21 +209,6 @@ export default { type: DATA_TYPE.MEASURE, format: DATA_FORMAT.NUMBER, }, - { - column: 'refund_item__refund_total', - query: '(refund_item.refund_total * -1)', - label: 'Total Pengembalian', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.CURRENCY, - }, - - { - column: 'transaction_balance', - query: `CASE WHEN refund.id is null THEN tr_item.total_price ELSE tr_item.total_price - refund_item.refund_total END`, - label: 'Balance', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.CURRENCY, - }, { column: 'tr_item__item_tenant_share_margin', query: 'tr_item.item_tenant_share_margin', @@ -266,9 +269,10 @@ export default { filter_configs: [ { filed_label: 'Tgl. Pendapatan', - filter_column: 'main__settlement_date', + filter_column: 'main__payment_date', field_type: FILTER_FIELD_TYPE.date_range_picker, filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + date_format: 'DD-MM-YYYY', }, { filed_label: 'Kepemilikan', @@ -308,11 +312,10 @@ export default { filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, }, { - filed_label: 'Breakdown Item', - filter_column: 'tr_item__breakdown_bundling', - field_type: FILTER_FIELD_TYPE.select, + filed_label: 'Tipe Item', + filter_column: 'tr_item__item_type', + field_type: FILTER_FIELD_TYPE.input_tag, filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, - select_custom_options: ['Yes', 'No'], }, { filed_label: 'Nama Item Bundling', @@ -332,11 +335,18 @@ export default { field_type: FILTER_FIELD_TYPE.input_number, filter_type: FILTER_TYPE.NUMBER_EQUAL, }, + { + filed_label: 'Nama PoS', + filter_column: 'main__creator_counter_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, { filed_label: 'Tgl. Pengembalian', filter_column: 'refund__refund_date', field_type: FILTER_FIELD_TYPE.date_range_picker, filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + date_format: 'DD-MM-YYYY', }, { filed_label: 'Kode Pengembalian', diff --git a/src/modules/reports/shared/configs/transaction-report/configs/income-per-item.ts b/src/modules/reports/shared/configs/transaction-report/configs/income-per-item.ts index 9cb1684..be6d767 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/income-per-item.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/income-per-item.ts @@ -26,6 +26,11 @@ export default { filter_type: FILTER_TYPE.TEXT_IN_MEMBER, values: [STATUS.SETTLED, STATUS.REFUNDED, STATUS.PROCESS_REFUND], }, + { + column: 'main.is_recap_transaction', + filter_type: FILTER_TYPE.TEXT_EQUAL, + values: [false], + }, ], defaultOrderBy: [], lowLevelOrderBy: [], @@ -35,12 +40,18 @@ export default { column_configs: [ { - column: 'main__settlement_date', - query: 'main.settlement_date', + column: 'main__payment_date', + query: `to_char(main.payment_date, 'DD-MM-YYYY')`, label: 'Tgl. Pendapatan', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_TIMESTAMP, - date_format: 'DD/MM/YYYY', + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__status', + query: 'main.status', + label: 'Status', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.STATUS, }, { column: 'item_owner', @@ -98,6 +109,13 @@ export default { type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, + { + column: 'main__creator_counter_name', + query: 'main.creator_counter_name', + label: 'Nama PoS', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, { column: 'tr_item__qty', query: 'tr_item.qty', @@ -149,11 +167,10 @@ export default { }, { column: 'refund__refund_date', - query: 'refund.refund_date', + query: `to_char(refund.refund_date, 'DD-MM-YYYY')`, label: 'Tgl. Pengembalian', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_TIMESTAMP, - date_format: 'DD/MM/YYYY', + format: DATA_FORMAT.TEXT, }, { column: 'refund__status', @@ -176,21 +193,6 @@ export default { type: DATA_TYPE.MEASURE, format: DATA_FORMAT.NUMBER, }, - { - column: 'refund_item__refund_total', - query: '(refund_item.refund_total * -1)', - label: 'Total Pengembalian', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.CURRENCY, - }, - - { - column: 'transaction_balance', - query: `CASE WHEN refund.id is null THEN tr_item.total_price ELSE tr_item.total_price - refund_item.refund_total END`, - label: 'Balance', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.CURRENCY, - }, { column: 'tr_item__item_tenant_share_margin', query: 'tr_item.item_tenant_share_margin', @@ -238,9 +240,10 @@ export default { filter_configs: [ { filed_label: 'Tgl. Pendapatan', - filter_column: 'main__settlement_date', + filter_column: 'main__payment_date', field_type: FILTER_FIELD_TYPE.date_range_picker, filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + date_format: 'DD-MM-YYYY', }, { filed_label: 'Kepemilikan', @@ -291,11 +294,18 @@ export default { field_type: FILTER_FIELD_TYPE.input_number, filter_type: FILTER_TYPE.NUMBER_EQUAL, }, + { + filed_label: 'Nama PoS', + filter_column: 'main__creator_counter_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, { filed_label: 'Tgl. Pengembalian', filter_column: 'refund__refund_date', field_type: FILTER_FIELD_TYPE.date_range_picker, filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + date_format: 'DD-MM-YYYY', }, { filed_label: 'Kode Pengembalian', diff --git a/src/modules/reports/shared/configs/transaction-report/configs/income.ts b/src/modules/reports/shared/configs/transaction-report/configs/income.ts index 0e5e5d5..85419cd 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/income.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/income.ts @@ -29,6 +29,11 @@ export default { filter_type: FILTER_TYPE.TEXT_IN_MEMBER, values: [STATUS.SETTLED, STATUS.REFUNDED, STATUS.PROCESS_REFUND], }, + { + column: 'main.is_recap_transaction', + filter_type: FILTER_TYPE.TEXT_EQUAL, + values: [false], + }, ], defaultOrderBy: [], lowLevelOrderBy: [], @@ -38,12 +43,18 @@ export default { column_configs: [ { - column: 'main__settlement_date', - query: 'main.settlement_date', + column: 'main__payment_date', + query: `to_char(main.payment_date, 'DD-MM-YYYY')`, label: 'Tgl. Pendapatan', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_TIMESTAMP, - date_format: 'DD/MM/YYYY', + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__status', + query: 'main.status', + label: 'Status', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.STATUS, }, { column: 'main__type', @@ -88,12 +99,19 @@ export default { format: DATA_FORMAT.TEXT, }, { - column: 'main__no_of_group', - query: 'main.no_of_group', - label: '#Visitor', + column: 'main__creator_counter_name', + query: 'main.creator_counter_name', + label: 'Nama PoS', type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, + { + column: 'main__no_of_group', + query: 'main.no_of_group::NUMERIC', + label: '#Visitor', + type: DATA_TYPE.MEASURE, + format: DATA_FORMAT.NUMBER, + }, { column: 'item__total_hpp_item', query: 'item.total_hpp_item', @@ -152,11 +170,10 @@ export default { }, { column: 'refund__refund_date', - query: 'refund.refund_date', + query: `to_char(refund.refund_date, 'DD-MM-YYYY')`, label: 'Tgl. Pengembalian', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.DATE_TIMESTAMP, - date_format: 'DD/MM/YYYY', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, }, { column: 'refund__status', @@ -172,20 +189,20 @@ export default { type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, - { - column: 'refund__refund_total', - query: '(refund.refund_total * -1)', - label: 'Total Pengembalian', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.CURRENCY, - }, - { - column: 'transaction_balance', - query: `CASE WHEN refund.id is null THEN main.payment_total ELSE main.payment_total - refund.refund_total END`, - label: 'Balance', - type: DATA_TYPE.MEASURE, - format: DATA_FORMAT.CURRENCY, - }, + // { + // column: 'refund__refund_total', + // query: '(refund.refund_total * -1)', + // label: 'Total Pengembalian', + // type: DATA_TYPE.MEASURE, + // format: DATA_FORMAT.CURRENCY, + // }, + // { + // column: 'transaction_balance', + // query: `CASE WHEN refund.id is null THEN main.payment_total ELSE main.payment_total - refund.refund_total END`, + // label: 'Balance', + // type: DATA_TYPE.MEASURE, + // format: DATA_FORMAT.CURRENCY, + // }, { column: 'main__discount_code', query: 'main.discount_code', @@ -260,10 +277,12 @@ export default { filter_configs: [ { filed_label: 'Tgl. Pendapatan', - filter_column: 'main__settlement_date', + filter_column: 'main__payment_date', field_type: FILTER_FIELD_TYPE.date_range_picker, filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + date_format: 'DD-MM-YYYY', }, + { filed_label: 'Sumber', filter_column: 'main__type', @@ -301,11 +320,18 @@ export default { field_type: FILTER_FIELD_TYPE.input_number, filter_type: FILTER_TYPE.NUMBER_EQUAL, }, + { + filed_label: 'Nama PoS', + filter_column: 'main__creator_counter_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, { filed_label: 'Tgl. Pengembalian', filter_column: 'refund__refund_date', field_type: FILTER_FIELD_TYPE.date_range_picker, filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + date_format: 'DD-MM-YYYY', }, { filed_label: 'Kode Pengembalian', diff --git a/src/modules/reports/shared/entities/report-config.entity.ts b/src/modules/reports/shared/entities/report-config.entity.ts index 71598b8..a21abca 100644 --- a/src/modules/reports/shared/entities/report-config.entity.ts +++ b/src/modules/reports/shared/entities/report-config.entity.ts @@ -12,7 +12,7 @@ export interface ReportColumnConfigEntity { export interface FilterConfigEntity { filter_column: string; filter_type: FILTER_TYPE; - + date_format?: string; filed_label: string; field_type: string; hide_field?: boolean; diff --git a/src/modules/reports/shared/helpers/query-builder.ts b/src/modules/reports/shared/helpers/query-builder.ts index 6c58e96..9f8d51d 100644 --- a/src/modules/reports/shared/helpers/query-builder.ts +++ b/src/modules/reports/shared/helpers/query-builder.ts @@ -331,7 +331,11 @@ export class ReportQueryBuilder { groupKeys.forEach(function (key, index) { const colName = rowGroupCols[index].field; // whereParts.push(colName + ' = "' + key + '"'); - whereParts.push(`${thisSelf.findQueryConfig(colName)} = '${key}'`); + if (!key) { + whereParts.push(`${thisSelf.findQueryConfig(colName)} is null`); + } else { + whereParts.push(`${thisSelf.findQueryConfig(colName)} = '${key}'`); + } }); } @@ -360,9 +364,11 @@ export class ReportQueryBuilder { }); } + console.log({ whereCondition, whereParts }); const tableWhereConditions = [...whereCondition, ...whereParts].filter( Boolean, ); + const defaultWhereConditions = defaultWhereOptions.filter(Boolean); if (tableWhereConditions.length > 0) {