diff --git a/src/modules/configuration/couch/domain/managers/booking.handler.ts b/src/modules/configuration/couch/domain/managers/booking.handler.ts index 67639bb..3743679 100644 --- a/src/modules/configuration/couch/domain/managers/booking.handler.ts +++ b/src/modules/configuration/couch/domain/managers/booking.handler.ts @@ -132,7 +132,7 @@ export class BookingUpdateHandler private couchService: CouchService, ) {} - async handle(event: TransactionChangeStatusEvent) { + async handle(event: TransactionUpdatedEvent) { const data = event.data.data; const dataID = data?.id; diff --git a/src/modules/transaction/transaction/domain/usecases/handlers/pos-transaction.handler.ts b/src/modules/transaction/transaction/domain/usecases/handlers/pos-transaction.handler.ts index 5b17cc2..0865a93 100644 --- a/src/modules/transaction/transaction/domain/usecases/handlers/pos-transaction.handler.ts +++ b/src/modules/transaction/transaction/domain/usecases/handlers/pos-transaction.handler.ts @@ -1,14 +1,20 @@ -import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { EventBus, EventsHandler, IEventHandler } from '@nestjs/cqrs'; import { ChangeDocEvent } from 'src/modules/configuration/couch/domain/events/change-doc.event'; import { TransactionType } from '../../../constants'; import { TransactionDataService } from '../../../data/services/transaction-data.service'; import { TaxDataService } from 'src/modules/transaction/tax/data/services/tax-data.service'; import { SalesPriceFormulaDataService } from 'src/modules/transaction/sales-price-formula/data/services/sales-price-formula-data.service'; import { FormulaType } from 'src/modules/transaction/sales-price-formula/constants'; -import { STATUS } from 'src/core/strings/constants/base.constants'; +import { + BLANK_USER, + OPERATION, + STATUS, +} from 'src/core/strings/constants/base.constants'; import { TransactionModel } from '../../../data/models/transaction.model'; import { mappingRevertTransaction } from '../managers/helpers/mapping-transaction.helper'; import { apm } from '../../../../../../core/apm'; +import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; +import { TransactionUpdatedEvent } from '../../entities/event/transaction-updated.event'; @EventsHandler(ChangeDocEvent) export class PosTransactionHandler implements IEventHandler { @@ -16,6 +22,7 @@ export class PosTransactionHandler implements IEventHandler { private dataService: TransactionDataService, private taxService: TaxDataService, private formulaService: SalesPriceFormulaDataService, + private eventBus: EventBus, ) {} async handle(event: ChangeDocEvent) { @@ -25,7 +32,7 @@ export class PosTransactionHandler implements IEventHandler { ); try { const database = event.data.database; - const data = event.data.data; + const data = { ...event.data.data }; // jika bukan database transaksi, return langsung if (database != 'transaction') return; @@ -82,6 +89,24 @@ export class PosTransactionHandler implements IEventHandler { apmTransactions.setLabel('Code', data?.code); await this.dataService.create(queryRunner, TransactionModel, data); + + /** + * When transaction is cancel, set booking to Pending + * And tell the POS to update the "Penjualan" status to Pending + */ + if (data.status == STATUS.PENDING) { + this.eventBus.publish( + new TransactionUpdatedEvent({ + id: data.id, + old: event.data.data, + data: data, + user: BLANK_USER, + description: 'Cancel Booking', + module: TABLE_NAME.TRANSACTION, + op: OPERATION.UPDATE, + }), + ); + } apmTransactions.result = 'Success'; } } catch (error) { diff --git a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts index 7ed504d..1cc9f7a 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts @@ -95,6 +95,7 @@ export function mappingRevertTransaction(data, type) { editor_name: data.pos_admin?.name, edited_at: new Date(data.created_at), payment_code: data.code, + status: data.status == STATUS.CANCEL ? STATUS.PENDING : data.status, }); } else { Object.assign(data, {