From b597a2f1848a1fef3190a285ebcdf38957b4803a Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Mon, 12 Aug 2024 10:50:02 +0700 Subject: [PATCH] feat(SPG-265): report reconciliation --- .../configs/reconciliation.ts | 188 ++++++++++++++++++ .../configs/transaction-report/index.ts | 2 + 2 files changed, 190 insertions(+) create mode 100644 src/modules/reports/shared/configs/transaction-report/configs/reconciliation.ts diff --git a/src/modules/reports/shared/configs/transaction-report/configs/reconciliation.ts b/src/modules/reports/shared/configs/transaction-report/configs/reconciliation.ts new file mode 100644 index 0000000..ed553c0 --- /dev/null +++ b/src/modules/reports/shared/configs/transaction-report/configs/reconciliation.ts @@ -0,0 +1,188 @@ +import { + DATA_FORMAT, + DATA_TYPE, + FILTER_FIELD_TYPE, + FILTER_TYPE, + REPORT_GROUP, +} from '../../../constant'; +import { ReportConfigEntity } from '../../../entities/report-config.entity'; +import { TransactionType } from 'src/modules/transaction/transaction/constants'; +import { STATUS } from 'src/core/strings/constants/base.constants'; + +export default { + group_name: REPORT_GROUP.transaction_report, + unique_name: `${REPORT_GROUP.transaction_report}__reconciliation`, + label: 'Rekonsiliasi', + table_schema: `transactions main + LEFT JOIN payment_methods payment ON payment.id::text = main.payment_type_method_id::text`, + main_table_alias: 'main', + defaultOrderBy: [], + lowLevelOrderBy: [], + filter_period_config: { + hidden: true, + }, + column_configs: [ + { + column: 'main__reconciliation_status', + query: 'main.reconciliation_status', + label: 'Status', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.STATUS, + }, + { + column: 'main__type', + query: 'main.type', + label: 'Sumber', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__settlement_date', + query: 'main.settlement_date', + label: 'Tgl. Pendapatan', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.DATE_TIMESTAMP, + date_format: 'DD/MM/YYYY', + }, + { + column: 'main__reconciliation_confirm_date', + query: 'main.reconciliation_confirm_date', + label: 'Tgl. Konfirmasi', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.DATE_TIMESTAMP, + date_format: 'DD/MM/YYYY', + }, + { + column: 'main__payment_code_reference', + query: 'main.payment_code_reference', + label: 'Referensi', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__payment_type', + query: 'main.payment_type', + label: 'Metode Pembayaran', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__payment_type_method_name', + query: 'main.payment_type_method_name', + label: 'Bank/Issuer', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'payment__account_number', + query: 'payment.account_number', + label: 'Account No.', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__payment_total', + query: 'main.payment_total', + label: 'Total', + type: DATA_TYPE.MEASURE, + format: DATA_FORMAT.CURRENCY, + }, + { + column: 'main__reconciliation_mdr', + query: 'main.reconciliation_mdr', + label: 'MDR', + type: DATA_TYPE.MEASURE, + format: DATA_FORMAT.CURRENCY, + }, + { + column: 'cashier', + query: `CASE WHEN main.type = 'counter' THEN main.creator_name END`, + label: 'Kasir', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__reconciliation_confirm_by', + query: 'main.reconciliation_confirm_by', + label: 'Dikonfirmasi Oleh', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + ], + filter_configs: [ + { + filed_label: 'Status', + filter_column: 'main__reconciliation_status', + field_type: FILTER_FIELD_TYPE.select, + filter_type: FILTER_TYPE.TEXT_IN_MEMBER, + select_custom_options: [ + STATUS.PENDING, + STATUS.CONFIRMED, + STATUS.REJECTED, + ], + }, + { + filed_label: 'Sumber', + filter_column: 'main__type', + field_type: FILTER_FIELD_TYPE.select, + filter_type: FILTER_TYPE.TEXT_IN_MEMBER, + select_custom_options: [...Object.values(TransactionType)], + }, + { + filed_label: 'Tgl. Pendapatan', + filter_column: 'main__settlement_date', + field_type: FILTER_FIELD_TYPE.date_range_picker, + filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + }, + { + filed_label: 'Tgl. Konfirmasi', + filter_column: 'main__reconciliation_confirm_date', + field_type: FILTER_FIELD_TYPE.date_range_picker, + filter_type: FILTER_TYPE.DATE_IN_RANGE_TIMESTAMP, + }, + { + filed_label: 'Referensi', + filter_column: 'main__payment_code_reference', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + { + filed_label: 'Metode Pembayaran', + filter_column: 'main__payment_type', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + { + filed_label: 'Issuer', + filter_column: 'main__payment_type_method_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + { + filed_label: 'Account No.', + filter_column: 'payment__account_number', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + { + filed_label: 'Kasir', + filter_column: 'cashier', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + { + filed_label: 'Dikonfirmasi Oleh', + filter_column: 'main__reconciliation_confirm_by', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + ], + + whereCondition(filterModel) { + const statusFilter = filterModel?.main__reconciliation_status?.filter ?? []; + if (statusFilter.length === 0) { + return [`main.reconciliation_status NOT IN ('${STATUS.DRAFT}')`]; + } + return []; + }, +}; diff --git a/src/modules/reports/shared/configs/transaction-report/index.ts b/src/modules/reports/shared/configs/transaction-report/index.ts index 5637d9d..1f3b73a 100644 --- a/src/modules/reports/shared/configs/transaction-report/index.ts +++ b/src/modules/reports/shared/configs/transaction-report/index.ts @@ -9,6 +9,7 @@ import BookingReport from './configs/booking'; import RefundsReport from './configs/refunds'; import CashierLogReport from './configs/cashier-log'; import CashWithdrawalsReport from './configs/cash-withdrawals'; +import ReconciliationReport from './configs/reconciliation'; export const TransactionReportConfig: ReportConfigEntity[] = [ IncomeReport, @@ -20,4 +21,5 @@ export const TransactionReportConfig: ReportConfigEntity[] = [ RefundsReport, CashierLogReport, CashWithdrawalsReport, + ReconciliationReport, ];