From cafbb82af69a6d4c40a6bbee9eb165f1b1bb329c Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Fri, 5 Jul 2024 06:50:33 +0700 Subject: [PATCH] fix(SPG-590) Pemesanan - Konfirmasi dari status draft muncul error --- .../infrastructure/constant.controller.ts | 27 +++++++++++++++ .../managers/index-item-rates.manager.ts | 14 ++++++++ .../data/models/transaction.model.ts | 2 +- .../batch-confirm-data-transaction.manager.ts | 33 +++++++++++++++++-- .../batch-confirm-transaction.manager.ts | 14 +++++++- .../confirm-data-transaction.manager.ts | 16 ++++++++- .../managers/confirm-transaction.manager.ts | 2 +- .../managers/detail-transaction.manager.ts | 7 ++-- .../managers/index-transaction.manager.ts | 7 ++++ 9 files changed, 114 insertions(+), 8 deletions(-) diff --git a/src/modules/configuration/constant/infrastructure/constant.controller.ts b/src/modules/configuration/constant/infrastructure/constant.controller.ts index 32ad74c..527eee7 100644 --- a/src/modules/configuration/constant/infrastructure/constant.controller.ts +++ b/src/modules/configuration/constant/infrastructure/constant.controller.ts @@ -31,4 +31,31 @@ export class ConstantController { async paymentMethodType(): Promise { return Object.values(PaymentMethodType); } + + @Get('transaction-user-type') + async userType(): Promise { + return [ + 'group', + 'vip' + ]; + } + + @Get('transaction-payment-type') + async transactionPaymentType(): Promise { + return [ + 'midtrans', + 'bank transfer', + 'qris', + 'counter', + ]; + } + + @Get('transaction-type') + async transactionType(): Promise { + return [ + 'counter', + 'admin', + 'online' + ] + } } diff --git a/src/modules/item-related/item/domain/usecases/managers/index-item-rates.manager.ts b/src/modules/item-related/item/domain/usecases/managers/index-item-rates.manager.ts index 8a453db..3017db9 100644 --- a/src/modules/item-related/item/domain/usecases/managers/index-item-rates.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/index-item-rates.manager.ts @@ -68,6 +68,20 @@ export class IndexItemRatesManager extends BaseIndexManager { itemIds: this.filterParam.item_ids, }); } + if (this.filterParam.start_date) { + queryBuilder.andWhere(`season_period.start_date BETWEEN :from AND :to`, { + from: this.filterParam.start_date, + to: this.filterParam.end_date, + }); + } + + if (this.filterParam.end_date) { + queryBuilder.andWhere(`season_period.end_date BETWEEN :from AND :to`, { + from: this.filterParam.start_date, + to: this.filterParam.end_date, + }); + } + return queryBuilder; } } diff --git a/src/modules/transaction/transaction/data/models/transaction.model.ts b/src/modules/transaction/transaction/data/models/transaction.model.ts index 126731a..8398663 100644 --- a/src/modules/transaction/transaction/data/models/transaction.model.ts +++ b/src/modules/transaction/transaction/data/models/transaction.model.ts @@ -18,7 +18,7 @@ export class TransactionModel implements TransactionEntity { // general info - @Column('bool', { name: 'is_recap_transaction', default: true }) + @Column('bool', { name: 'is_recap_transaction', default: false }) is_recap_transaction: boolean; @Column('enum', { diff --git a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts index eb34365..777ee2b 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-data-transaction.manager.ts @@ -17,14 +17,43 @@ import { STATUS } from 'src/core/strings/constants/base.constants'; @Injectable() export class BatchConfirmDataTransactionManager extends BaseBatchUpdateStatusManager { validateData(data: TransactionEntity): Promise { - if (data.status != STATUS.DRAFT) { + if ( + [STATUS.PENDING, STATUS.REJECTED, STATUS.EXPIRED].includes(data.status) + ) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, - message: `Failed! only data booking with status ${STATUS.ACTIVE} can be confirm`, + message: `Failed! only data booking with status ${STATUS.PENDING}, ${STATUS.REJECTED}, ${STATUS.EXPIRED} can be confirm`, error: 'Unprocessable Entity', }); } + switch (data.status) { + // jika confirm status pending + // maka akan kebuat reconsiliasi + case STATUS.PENDING: + data.reconciliation_status = STATUS.PENDING; + break; + + // jika confirm status rejected + case STATUS.REJECTED: + data.reconciliation_status = STATUS.PENDING; + break; + + // jika confirm status expired + case STATUS.EXPIRED: + break; + + default: + data.reconciliation_status = STATUS.PENDING; + break; + } + + const freeTransaction = data.payment_total < 1; + + Object.assign(data, { + status: freeTransaction ? STATUS.ACTIVE : STATUS.PENDING, + }); + return; } diff --git a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts index 542348d..4c0a11d 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/batch-confirm-transaction.manager.ts @@ -7,11 +7,23 @@ import { import { TransactionModel } from '../../../data/models/transaction.model'; import { TransactionChangeStatusEvent } from '../../entities/event/transaction-change-status.event'; import { BatchResult } from 'src/core/response/domain/ok-response.interface'; -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; +import { STATUS } from 'src/core/strings/constants/base.constants'; @Injectable() export class BatchConfirmTransactionManager extends BaseBatchUpdateStatusManager { validateData(data: TransactionEntity): Promise { + if (data.status != STATUS.DRAFT) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Failed! only data booking with status ${STATUS.ACTIVE} can be confirm`, + error: 'Unprocessable Entity', + }); + } return; } diff --git a/src/modules/transaction/transaction/domain/usecases/managers/confirm-data-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/confirm-data-transaction.manager.ts index 1c54e85..20d07da 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/confirm-data-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/confirm-data-transaction.manager.ts @@ -1,4 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; import { BaseUpdateStatusManager } from 'src/core/modules/domain/usecase/managers/base-update-status.manager'; import { TransactionEntity } from '../../entities/transaction.entity'; import { @@ -22,6 +26,16 @@ export class ConfirmDataTransactionManager extends BaseUpdateStatusManager { const old_status = this.oldData.status; + if ( + [STATUS.PENDING, STATUS.REJECTED, STATUS.EXPIRED].includes(old_status) + ) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Failed! only data booking with status ${STATUS.PENDING}, ${STATUS.REJECTED}, ${STATUS.EXPIRED} can be confirm`, + error: 'Unprocessable Entity', + }); + } + switch (old_status) { // jika confirm status pending // maka akan kebuat reconsiliasi diff --git a/src/modules/transaction/transaction/domain/usecases/managers/confirm-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/confirm-transaction.manager.ts index bd8e88c..6114ae5 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/confirm-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/confirm-transaction.manager.ts @@ -20,7 +20,7 @@ export class ConfirmTransactionManager extends BaseUpdateStatusManager { - if (this.data.status != STATUS.DRAFT) { + if (this.oldData.status != STATUS.DRAFT) { throw new UnprocessableEntityException({ statusCode: HttpStatus.UNPROCESSABLE_ENTITY, message: `Failed! only data booking with status ${STATUS.ACTIVE} can be confirm`, diff --git a/src/modules/transaction/transaction/domain/usecases/managers/detail-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/detail-transaction.manager.ts index 593fdb7..63cfe47 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/detail-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/detail-transaction.manager.ts @@ -57,8 +57,8 @@ export class DetailTransactionManager extends BaseDetailManager `${this.tableName}.creator_name`, `${this.tableName}.editor_id`, `${this.tableName}.editor_name`, + + `${this.tableName}.payment_type`, + `${this.tableName}.payment_date`, + `${this.tableName}.payment_total_pay`, + `${this.tableName}.payment_type_method_id`, + `${this.tableName}.payment_type_method_name`, + `${this.tableName}.payment_type_method_number`, ]; }