From 11171b2859221faccf40e9df50a13ca5749320af Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Thu, 1 Aug 2024 17:01:39 +0700 Subject: [PATCH] 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, + }, + ); } }