From 62eccf29a5ec22fded33738db39f59f1b1029a6b Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Thu, 1 Aug 2024 14:43:37 +0700 Subject: [PATCH 1/8] feat: rename header title report --- .../shared/configs/transaction-report/configs/booking.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/modules/reports/shared/configs/transaction-report/configs/booking.ts b/src/modules/reports/shared/configs/transaction-report/configs/booking.ts index cbc8a36..eda58e3 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/booking.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/booking.ts @@ -41,7 +41,7 @@ export default { { column: 'main__no_of_group', query: 'main.no_of_group', - label: 'Total Group', + label: '#Visitor', type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.NUMBER, }, From 1e9cc9da4ff8d907abab0eee5b507d009735a536 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Thu, 1 Aug 2024 15:13:00 +0700 Subject: [PATCH 2/8] feat: add default condition for type on booking report --- .../configs/transaction-report/configs/booking.ts | 7 +++++++ .../reports/shared/entities/report-config.entity.ts | 10 +++++----- 2 files changed, 12 insertions(+), 5 deletions(-) diff --git a/src/modules/reports/shared/configs/transaction-report/configs/booking.ts b/src/modules/reports/shared/configs/transaction-report/configs/booking.ts index eda58e3..2c31c22 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/booking.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/booking.ts @@ -16,6 +16,13 @@ export default { table_schema: `transactions AS main LEFT JOIN refunds refund ON refund.transaction_id = main.id`, main_table_alias: 'main', + whereDefaultConditions: [ + { + column: 'main.type', + filter_type: FILTER_TYPE.TEXT_IN_MEMBER, + values: [TransactionType.ADMIN, TransactionType.ONLINE], + }, + ], defaultOrderBy: [], lowLevelOrderBy: [], filter_period_config: { diff --git a/src/modules/reports/shared/entities/report-config.entity.ts b/src/modules/reports/shared/entities/report-config.entity.ts index bca0f5c..71598b8 100644 --- a/src/modules/reports/shared/entities/report-config.entity.ts +++ b/src/modules/reports/shared/entities/report-config.entity.ts @@ -37,11 +37,11 @@ export interface ReportConfigEntity { table_schema: string; main_table_alias?: string; - customVirtualTableSchema?( - filterModel: any, - findQueryConfig: (column: string) => string, - createFilterSql: (key: string, item: any) => string, - ): string; + // customVirtualTableSchema?( + // filterModel: any, + // findQueryConfig: (column: string) => string, + // createFilterSql: (key: string, item: any) => string, + // ): string; whereCondition?(filterModel: any): string[]; whereDefaultConditions?: { column: string; From 11171b2859221faccf40e9df50a13ca5749320af Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Thu, 1 Aug 2024 17:01:39 +0700 Subject: [PATCH 3/8] fix(SPG-729) pemesanan data seharusnya berstatus proses refund ketika data refund berstatus draft --- .../handlers/refund-update.handler.ts | 57 +++++++++---------- 1 file changed, 28 insertions(+), 29 deletions(-) diff --git a/src/modules/transaction/transaction/domain/usecases/handlers/refund-update.handler.ts b/src/modules/transaction/transaction/domain/usecases/handlers/refund-update.handler.ts index 7d15c32..2ecd35d 100644 --- a/src/modules/transaction/transaction/domain/usecases/handlers/refund-update.handler.ts +++ b/src/modules/transaction/transaction/domain/usecases/handlers/refund-update.handler.ts @@ -4,49 +4,48 @@ import { TransactionDataService } from '../../../data/services/transaction-data. import { OPERATION, STATUS } from 'src/core/strings/constants/base.constants'; import { TransactionModel } from '../../../data/models/transaction.model'; import { RefundDeletedEvent } from 'src/modules/transaction/refund/domain/entities/event/refund-deleted.event'; +import { RefundCreatedEvent } from 'src/modules/transaction/refund/domain/entities/event/refund-created.event'; -@EventsHandler(RefundChangeStatusEvent, RefundDeletedEvent) +@EventsHandler(RefundChangeStatusEvent, RefundDeletedEvent, RefundCreatedEvent) export class RefundUpdatedHandler implements IEventHandler { constructor(private dataService: TransactionDataService) {} async handle(event: RefundChangeStatusEvent) { - const old_data = event.data.old; const current_data = event.data.data; let status: STATUS; + const queryRunner = this.dataService + .getRepository() + .manager.connection.createQueryRunner(); + + const data = new TransactionModel(); + const if_full_refund = + Number(current_data.refund_total ?? 0) == + Number(current_data.transaction?.payment_total); + if ( - old_data.status != current_data.data || - (event.data.op == OPERATION.DELETE && current_data.status != STATUS.DRAFT) - ) { - const queryRunner = this.dataService - .getRepository() - .manager.connection.createQueryRunner(); - - const data = new TransactionModel(); - const if_full_refund = - Number(current_data.refund_total ?? 0) == - Number(current_data.transaction?.payment_total); - - if (event.data.op == OPERATION.DELETE) status = STATUS.SETTLED; - else if (current_data.status == STATUS.PENDING) - status = STATUS.PROCESS_REFUND; - else if (current_data.status == STATUS.REFUNDED && if_full_refund) + event.data.op == OPERATION.DELETE || + current_data.status == STATUS.CANCEL + ) + status = STATUS.SETTLED; + else { + if (current_data.status == STATUS.REFUNDED && if_full_refund) status = STATUS.REFUNDED; else if (current_data.status == STATUS.REFUNDED && !if_full_refund) status = STATUS.PARTIAL_REFUND; - else if (current_data.status == STATUS.CANCEL) status = STATUS.SETTLED; - - await this.dataService.update( - queryRunner, - TransactionModel, - { id: current_data.transaction_id }, - { - ...data, - status: status, - }, - ); + else status = STATUS.PROCESS_REFUND; } + + await this.dataService.update( + queryRunner, + TransactionModel, + { id: current_data.transaction_id }, + { + ...data, + status: status, + }, + ); } } From d413bd771b8079f0d788e5c2c8a7d31932cc601c Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Thu, 1 Aug 2024 17:25:12 +0700 Subject: [PATCH 4/8] fix(SPG-735) Ketika recap di click berkali kali, transaksi menggunakan tipe cash jadi duplicate --- .../managers/index-reconciliation.manager.ts | 1 + .../managers/recap-reconciliation.manager.ts | 25 +++++++++++-------- 2 files changed, 16 insertions(+), 10 deletions(-) diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts index 72a21e8..ebb2c92 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/index-reconciliation.manager.ts @@ -48,6 +48,7 @@ export class IndexReconciliationManager extends BaseIndexManager parseFloat(recap.payment_total), @@ -89,9 +95,8 @@ export class RecapReconciliationManager extends BaseCustomManager Date: Thu, 1 Aug 2024 17:33:36 +0700 Subject: [PATCH 5/8] fix(SPG-736) Cancel rekon statu Pending terkena validasi data pemesanan harus settled --- .../managers/batch-cancel-reconciliation.manager.ts | 7 +++++-- .../usecases/managers/cancel-reconciliation.manager.ts | 7 +++++-- 2 files changed, 10 insertions(+), 4 deletions(-) diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts index d96942e..6133511 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/batch-cancel-reconciliation.manager.ts @@ -23,10 +23,13 @@ export class BatchCancelReconciliationManager extends BaseBatchUpdateStatusManag }, }); - if ([STATUS.SETTLED, STATUS.WAITING].includes(transaction.status)) { + if ( + ![STATUS.SETTLED, STATUS.WAITING].includes(transaction.status) && + !data.is_recap_transaction + ) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Gagal! tidak bisa batalkan, karena status transaksi tidak settled`, + message: `Gagal! tidak bisa batalkan, karena status transaksi tidak settled atau waiting`, error: 'Unprocessable Entity', }); } diff --git a/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts b/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts index e187161..898f2b1 100644 --- a/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts +++ b/src/modules/transaction/reconciliation/domain/usecases/managers/cancel-reconciliation.manager.ts @@ -27,10 +27,13 @@ export class CancelReconciliationManager extends BaseUpdateStatusManager Date: Thu, 1 Aug 2024 17:45:33 +0700 Subject: [PATCH 6/8] feat: update model pos log --- src/modules/configuration/log/data/models/pos-log.model.ts | 6 ++++++ .../configuration/log/domain/handlers/pos-log.handler.ts | 4 +++- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/modules/configuration/log/data/models/pos-log.model.ts b/src/modules/configuration/log/data/models/pos-log.model.ts index b161889..fd8631f 100644 --- a/src/modules/configuration/log/data/models/pos-log.model.ts +++ b/src/modules/configuration/log/data/models/pos-log.model.ts @@ -25,4 +25,10 @@ export class PosLogModel @Column('varchar', { name: 'creator_id', nullable: true }) creator_id: string; + + @Column('varchar', { name: 'drawn_by_name', nullable: true }) + drawn_by_name: string; + + @Column('varchar', { name: 'drawn_by_id', nullable: true }) + drawn_by_id: string; } diff --git a/src/modules/configuration/log/domain/handlers/pos-log.handler.ts b/src/modules/configuration/log/domain/handlers/pos-log.handler.ts index 57f7e07..192247f 100644 --- a/src/modules/configuration/log/domain/handlers/pos-log.handler.ts +++ b/src/modules/configuration/log/domain/handlers/pos-log.handler.ts @@ -27,7 +27,9 @@ export class RecordPosLogHandler implements IEventHandler { total_balance: data.withdrawal_cash ?? data.opening_cash_balance, pos_number: data.pos_number, creator_id: data.pos_admin?.id, - creator_name: data.pos_admin?.name, + creator_name: data.pos_admin?.name ?? data.pos_admin?.username, + drawn_by_id: data.withdraw_user?.id, + drawn_by_name: data.withdraw_user?.name ?? data.withdraw_user?.username, created_at: data.created_at, }); From 746e24feb6b314e5a50c178e696a3d6144f39daf Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Thu, 1 Aug 2024 17:48:21 +0700 Subject: [PATCH 7/8] feat: add migration for table pos log --- ...722509262047-pos_log_add_column_down_by.ts | 21 +++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 src/database/migrations/1722509262047-pos_log_add_column_down_by.ts diff --git a/src/database/migrations/1722509262047-pos_log_add_column_down_by.ts b/src/database/migrations/1722509262047-pos_log_add_column_down_by.ts new file mode 100644 index 0000000..e1e35fc --- /dev/null +++ b/src/database/migrations/1722509262047-pos_log_add_column_down_by.ts @@ -0,0 +1,21 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class PosLogAddColumnDownBy1722509262047 implements MigrationInterface { + name = 'PosLogAddColumnDownBy1722509262047'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "logs_pos" ADD "drawn_by_name" character varying`, + ); + await queryRunner.query( + `ALTER TABLE "logs_pos" ADD "drawn_by_id" character varying`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "logs_pos" DROP COLUMN "drawn_by_id"`); + await queryRunner.query( + `ALTER TABLE "logs_pos" DROP COLUMN "drawn_by_name"`, + ); + } +} From d14d9101ae940cd2ecb8dd2ecb4ecddd9b261cf4 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Thu, 1 Aug 2024 18:09:40 +0700 Subject: [PATCH 8/8] feat: add report CashierLogReport and CashWithdrawalsReport --- .../configs/cash-withdrawals.ts | 89 ++++++++++++++----- .../transaction-report/configs/cashier-log.ts | 71 +++++++++++---- .../configs/transaction-report/index.ts | 4 +- 3 files changed, 126 insertions(+), 38 deletions(-) diff --git a/src/modules/reports/shared/configs/transaction-report/configs/cash-withdrawals.ts b/src/modules/reports/shared/configs/transaction-report/configs/cash-withdrawals.ts index 48616b1..d42ecb5 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/cash-withdrawals.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/cash-withdrawals.ts @@ -1,40 +1,87 @@ -import { DATA_FORMAT, DATA_TYPE, REPORT_GROUP } from '../../../constant'; +import { PosLogType } from 'src/modules/configuration/log/domain/entities/pos-log.entity'; +import { + DATA_FORMAT, + DATA_TYPE, + FILTER_FIELD_TYPE, + FILTER_TYPE, + REPORT_GROUP, +} from '../../../constant'; import { ReportConfigEntity } from '../../../entities/report-config.entity'; export default { group_name: REPORT_GROUP.transaction_report, unique_name: `${REPORT_GROUP.transaction_report}__cash_withdrawals`, label: 'Penarikan Kas', - table_schema: 'season_types main', + table_schema: 'logs_pos main', main_table_alias: 'main', defaultOrderBy: [], lowLevelOrderBy: [], filter_period_config: { hidden: true, }, - + whereDefaultConditions: [ + { + column: 'main.type', + filter_type: FILTER_TYPE.TEXT_IN_MEMBER, + values: [PosLogType.cash_witdrawal], + }, + ], column_configs: [ { - column: 'main__created_at', - query: 'main.created_at', - label: 'Created Date', - type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_EPOCH, - }, - { - column: 'main__updated_at', - query: 'main.updated_at', - label: 'Updated Date', - type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_EPOCH, - }, - { - column: 'main__name', - query: 'main.name', - label: 'Name', + column: 'main__date', + query: `TO_CHAR(to_timestamp(main.created_at::double precision / 1000), 'DD-MM-YYYY')`, + label: 'Tanggal', type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, + { + column: 'main__time', + query: `TO_CHAR(to_timestamp(main.created_at::double precision / 1000), 'HH24:MI')`, + label: 'Jam', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__drawn_by_name', + query: 'main.drawn_by_name', + label: 'Nama Penarik', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__creator_name', + query: 'main.creator_name', + label: 'Nama Kasir', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__pos_number', + query: 'main.pos_number', + label: 'No. PoS', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__total_balance', + query: 'main.total_balance', + label: 'Total Penarikan', + type: DATA_TYPE.MEASURE, + format: DATA_FORMAT.CURRENCY, + }, + ], + filter_configs: [ + { + filed_label: 'Nama Penarik', + filter_column: 'main__drawn_by_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + { + filed_label: 'Nama Kasir', + filter_column: 'main__creator_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, ], - filter_configs: [], }; diff --git a/src/modules/reports/shared/configs/transaction-report/configs/cashier-log.ts b/src/modules/reports/shared/configs/transaction-report/configs/cashier-log.ts index 5ad5d52..9672770 100644 --- a/src/modules/reports/shared/configs/transaction-report/configs/cashier-log.ts +++ b/src/modules/reports/shared/configs/transaction-report/configs/cashier-log.ts @@ -1,40 +1,81 @@ -import { DATA_FORMAT, DATA_TYPE, REPORT_GROUP } from '../../../constant'; +import { PosLogType } from 'src/modules/configuration/log/domain/entities/pos-log.entity'; +import { + DATA_FORMAT, + DATA_TYPE, + FILTER_FIELD_TYPE, + FILTER_TYPE, + REPORT_GROUP, +} from '../../../constant'; import { ReportConfigEntity } from '../../../entities/report-config.entity'; export default { group_name: REPORT_GROUP.transaction_report, unique_name: `${REPORT_GROUP.transaction_report}__cashier_log`, label: 'Kasir Log', - table_schema: 'season_types main', + table_schema: 'logs_pos main', main_table_alias: 'main', defaultOrderBy: [], lowLevelOrderBy: [], filter_period_config: { hidden: true, }, - + whereDefaultConditions: [ + { + column: 'main.type', + filter_type: FILTER_TYPE.TEXT_IN_MEMBER, + values: [PosLogType.login, PosLogType.logout], + }, + ], column_configs: [ { - column: 'main__created_at', - query: 'main.created_at', - label: 'Created Date', + column: 'main__date', + query: `TO_CHAR(to_timestamp(main.created_at::double precision / 1000), 'DD-MM-YYYY')`, + label: 'Tanggal', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_EPOCH, + format: DATA_FORMAT.TEXT, }, { - column: 'main__updated_at', - query: 'main.updated_at', - label: 'Updated Date', + column: 'main__time', + query: `TO_CHAR(to_timestamp(main.created_at::double precision / 1000), 'HH24:MI')`, + label: 'Jam', type: DATA_TYPE.DIMENSION, - format: DATA_FORMAT.DATE_EPOCH, + format: DATA_FORMAT.TEXT, }, { - column: 'main__name', - query: 'main.name', - label: 'Name', + column: 'main__type', + query: 'main.type', + label: 'Tipe', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__creator_name', + query: 'main.creator_name', + label: 'Nama Staff', + type: DATA_TYPE.DIMENSION, + format: DATA_FORMAT.TEXT, + }, + { + column: 'main__pos_number', + query: 'main.pos_number', + label: 'No. PoS', type: DATA_TYPE.DIMENSION, format: DATA_FORMAT.TEXT, }, ], - filter_configs: [], + filter_configs: [ + { + filed_label: 'Tipe', + filter_column: 'main__type', + field_type: FILTER_FIELD_TYPE.select, + filter_type: FILTER_TYPE.TEXT_IN_MEMBER, + select_custom_options: [PosLogType.login, PosLogType.logout], + }, + { + filed_label: 'Nama Staff', + filter_column: 'main__creator_name', + field_type: FILTER_FIELD_TYPE.input_tag, + filter_type: FILTER_TYPE.TEXT_MULTIPLE_CONTAINS, + }, + ], }; diff --git a/src/modules/reports/shared/configs/transaction-report/index.ts b/src/modules/reports/shared/configs/transaction-report/index.ts index d711420..8acd1d7 100644 --- a/src/modules/reports/shared/configs/transaction-report/index.ts +++ b/src/modules/reports/shared/configs/transaction-report/index.ts @@ -18,6 +18,6 @@ export const TransactionReportConfig: ReportConfigEntity[] = [ // TimePerRideReport, BookingReport, RefundsReport, - // CashierLogReport, - // CashWithdrawalsReport, + CashierLogReport, + CashWithdrawalsReport, ];