From 9802d983bb241bf376428dd56d323cc59058dff2 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 7 Aug 2024 10:31:19 +0700 Subject: [PATCH 1/2] feat(SPG-800): add validation delete on data booking transaction --- .../batch-delete-transaction.manager.ts | 22 ++++++++++++++++++- .../managers/delete-transaction.manager.ts | 22 ++++++++++++++++++- 2 files changed, 42 insertions(+), 2 deletions(-) diff --git a/src/modules/transaction/transaction/domain/usecases/managers/batch-delete-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/batch-delete-transaction.manager.ts index 9e7510e..46b088f 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/batch-delete-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/batch-delete-transaction.manager.ts @@ -7,7 +7,12 @@ import { import { TransactionModel } from '../../../data/models/transaction.model'; import { TransactionDeletedEvent } from '../../entities/event/transaction-deleted.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 BatchDeleteTransactionManager extends BaseBatchDeleteManager { @@ -16,6 +21,21 @@ export class BatchDeleteTransactionManager extends BaseBatchDeleteManager { + const allowDelete = [ + STATUS.DRAFT, + STATUS.ACTIVE, + STATUS.CANCEL, + STATUS.PENDING, + STATUS.EXPIRED, + ].includes(data.status); + + if (!allowDelete) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Gagal! data dengan status ${data.status} tidak bisa di hapus!`, + error: 'Unprocessable Entity', + }); + } return; } diff --git a/src/modules/transaction/transaction/domain/usecases/managers/delete-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/delete-transaction.manager.ts index de6e3e6..e3e4a13 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/delete-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/delete-transaction.manager.ts @@ -1,4 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; import { BaseDeleteManager } from 'src/core/modules/domain/usecase/managers/base-delete.manager'; import { TransactionEntity } from '../../entities/transaction.entity'; import { @@ -7,6 +11,7 @@ import { } from 'src/core/strings/constants/interface.constants'; import { TransactionModel } from '../../../data/models/transaction.model'; import { TransactionDeletedEvent } from '../../entities/event/transaction-deleted.event'; +import { STATUS } from 'src/core/strings/constants/base.constants'; @Injectable() export class DeleteTransactionManager extends BaseDeleteManager { @@ -15,6 +20,21 @@ export class DeleteTransactionManager extends BaseDeleteManager { + const allowDelete = [ + STATUS.DRAFT, + STATUS.ACTIVE, + STATUS.CANCEL, + STATUS.PENDING, + STATUS.EXPIRED, + ].includes(this.data.status); + + if (!allowDelete) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Gagal! data dengan status ${this.data.status} tidak bisa di hapus!`, + error: 'Unprocessable Entity', + }); + } return; } -- 2.40.1 From 0658b503bde80f8e843bd479e15a0d15aec5229d Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Wed, 7 Aug 2024 11:05:37 +0700 Subject: [PATCH 2/2] feat(SPG-656): allow input number on formula --- .../helpers/calculation-formula.helper.ts | 38 ++++++++++--------- 1 file changed, 20 insertions(+), 18 deletions(-) diff --git a/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts b/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts index e27a9b7..f83e7b0 100644 --- a/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts +++ b/src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper.ts @@ -9,7 +9,9 @@ export function calculateSalesFormula( throwError = false, ) { try { - let { value, variable, tax_datas } = mappingTaxes(taxes, formula, total); + const mapTaxes = mappingTaxes(taxes, formula, total); + let { value } = mapTaxes; + const { variable, tax_datas } = mapTaxes; const x1 = math.simplify(formula, variable).toString(); console.log('Formula ', x1); @@ -41,13 +43,10 @@ export function calculateProfitFormula( throwError = false, ) { try { - let { value, variable, tax_datas } = mappingTaxes( - taxes, - formula, - total, - profit_share, - ); - + const mapTaxes = mappingTaxes(taxes, formula, total, profit_share); + let { value } = mapTaxes; + const { variable, tax_datas } = mapTaxes; + console.log(formula, variable); const result = math.simplify(formula, variable).toString(); console.log(result, 'formula'); @@ -64,9 +63,9 @@ export function calculateProfitFormula( } function mappingTaxes(taxes, formula, total, profit_share = 0) { - let value = 0; + const value = 0; const variable = {}; - let tax_datas = []; + const tax_datas = []; const const_variable = ['profit_share', 'item_share', 'dpp']; const regex = /([a-zA-Z0-9_]+)/g; @@ -78,14 +77,17 @@ function mappingTaxes(taxes, formula, total, profit_share = 0) { for (const key of keys) { if (!const_variable.includes(key)) { const keyData = taxes.find((tax) => tax.name == key); - variable[key] = keyData.value / 100; - - tax_datas.push({ - tax_id: keyData.id, - tax_name: keyData.name, - tax_value: keyData.value, - tax_total_value: (keyData.value / 100) * Number(total), - }); + if (!keyData) { + variable[key] = key; + } else { + variable[key] = keyData.value / 100; + tax_datas.push({ + tax_id: keyData.id, + tax_name: keyData.name, + tax_value: keyData.value, + tax_total_value: (keyData.value / 100) * Number(total), + }); + } } else { switch (key) { case 'profit_share': -- 2.40.1