fix(SPG-543) BE-Validasi Data Tax - data tidak bisa di delete dan di inactivekan jika dipakai di formula
parent
507bc99510
commit
23f5ed0946
|
@ -22,6 +22,12 @@ export abstract class BaseManager {
|
|||
protected eventBus: EventBus;
|
||||
abstract get validateRelations(): validateRelations[];
|
||||
|
||||
// sebagai optional yang dapat digunakan
|
||||
public dataServiceFirstOpt: any;
|
||||
|
||||
// sebagai optional yang dapat digunakan
|
||||
public dataServiceSecondOpt: any;
|
||||
|
||||
private readonly baseLog = new Logger(BaseManager.name);
|
||||
|
||||
setUser() {
|
||||
|
@ -32,12 +38,15 @@ export abstract class BaseManager {
|
|||
}
|
||||
}
|
||||
|
||||
setService(dataService, tableName) {
|
||||
setService(dataService, tableName, dataServiceOpt = null, dataServiceSecondOpt = null) {
|
||||
this.dataService = dataService;
|
||||
this.tableName = tableName;
|
||||
this.queryRunner = this.dataService
|
||||
.getRepository()
|
||||
.manager.connection.createQueryRunner(tableName);
|
||||
|
||||
if (dataServiceOpt) this.dataServiceFirstOpt = dataServiceOpt;
|
||||
if (dataServiceSecondOpt) this.dataServiceSecondOpt = dataServiceSecondOpt;
|
||||
}
|
||||
|
||||
abstract get eventTopics(): EventTopics[];
|
||||
|
|
|
@ -8,6 +8,7 @@ import { TaxModel } from '../../../data/models/tax.model';
|
|||
import { TaxDeletedEvent } from '../../entities/event/tax-deleted.event';
|
||||
import { BatchResult } from 'src/core/response/domain/ok-response.interface';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { validateUsedInFormula } from './helpers/validation.helper';
|
||||
|
||||
@Injectable()
|
||||
export class BatchDeleteTaxManager extends BaseBatchDeleteManager<TaxEntity> {
|
||||
|
@ -16,6 +17,7 @@ export class BatchDeleteTaxManager extends BaseBatchDeleteManager<TaxEntity> {
|
|||
}
|
||||
|
||||
async validateData(data: TaxEntity): Promise<void> {
|
||||
await validateUsedInFormula(this.dataServiceFirstOpt, data.name.toLowerCase());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -8,10 +8,15 @@ import { TaxModel } from '../../../data/models/tax.model';
|
|||
import { TaxChangeStatusEvent } from '../../entities/event/tax-change-status.event';
|
||||
import { BatchResult } from 'src/core/response/domain/ok-response.interface';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { validateUsedInFormula } from './helpers/validation.helper';
|
||||
|
||||
@Injectable()
|
||||
export class BatchInactiveTaxManager extends BaseBatchUpdateStatusManager<TaxEntity> {
|
||||
validateData(data: TaxEntity): Promise<void> {
|
||||
|
||||
// dataServiceFirstOpt adalah formula service
|
||||
|
||||
async validateData(data: TaxEntity): Promise<void> {
|
||||
await validateUsedInFormula(this.dataServiceFirstOpt, data.name.toLowerCase());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -7,6 +7,7 @@ import {
|
|||
} from 'src/core/strings/constants/interface.constants';
|
||||
import { TaxModel } from '../../../data/models/tax.model';
|
||||
import { TaxDeletedEvent } from '../../entities/event/tax-deleted.event';
|
||||
import { validateUsedInFormula } from './helpers/validation.helper';
|
||||
|
||||
@Injectable()
|
||||
export class DeleteTaxManager extends BaseDeleteManager<TaxEntity> {
|
||||
|
@ -15,6 +16,7 @@ export class DeleteTaxManager extends BaseDeleteManager<TaxEntity> {
|
|||
}
|
||||
|
||||
async validateProcess(): Promise<void> {
|
||||
await validateUsedInFormula(this.dataServiceFirstOpt, this.data.name.toLowerCase());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,14 @@
|
|||
import { HttpStatus, UnprocessableEntityException } from "@nestjs/common";
|
||||
|
||||
export async function validateUsedInFormula(formulaDataService, name) {
|
||||
const formulas = await formulaDataService.getManyByOptions();
|
||||
formulas?.forEach(formula => {
|
||||
const allWords = formula?.formula_string?.replace(/[^a-zA-Z0-9]/g, ' ').split(' ');
|
||||
if (allWords.find(item => item.toLowerCase() == name))
|
||||
throw new UnprocessableEntityException({
|
||||
statusCode: HttpStatus.UNPROCESSABLE_ENTITY,
|
||||
message: `Failed! tax ${ name } already used in ${ formula.type } formula`,
|
||||
error: 'Unprocessable Entity',
|
||||
})
|
||||
});
|
||||
}
|
|
@ -7,6 +7,7 @@ import {
|
|||
} from 'src/core/strings/constants/interface.constants';
|
||||
import { TaxModel } from '../../../data/models/tax.model';
|
||||
import { TaxChangeStatusEvent } from '../../entities/event/tax-change-status.event';
|
||||
import { validateUsedInFormula } from './helpers/validation.helper';
|
||||
|
||||
@Injectable()
|
||||
export class InactiveTaxManager extends BaseUpdateStatusManager<TaxEntity> {
|
||||
|
@ -15,6 +16,7 @@ export class InactiveTaxManager extends BaseUpdateStatusManager<TaxEntity> {
|
|||
}
|
||||
|
||||
async validateProcess(): Promise<void> {
|
||||
await validateUsedInFormula(this.dataServiceFirstOpt, this.data.name.toLowerCase());
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -15,6 +15,7 @@ import { BatchInactiveTaxManager } from './managers/batch-inactive-tax.manager';
|
|||
import { BatchActiveTaxManager } from './managers/batch-active-tax.manager';
|
||||
import { BatchDeleteTaxManager } from './managers/batch-delete-tax.manager';
|
||||
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
|
||||
import { SalesPriceFormulaReadService } from 'src/modules/transaction/sales-price-formula/data/services/sales-price-formula-read.service';
|
||||
|
||||
@Injectable()
|
||||
export class TaxDataOrchestrator extends BaseDataTransactionOrchestrator<TaxEntity> {
|
||||
|
@ -30,6 +31,7 @@ export class TaxDataOrchestrator extends BaseDataTransactionOrchestrator<TaxEnti
|
|||
private batchConfirmManager: BatchConfirmTaxManager,
|
||||
private batchInactiveManager: BatchInactiveTaxManager,
|
||||
private serviceData: TaxDataService,
|
||||
private formulaServiceData: SalesPriceFormulaReadService,
|
||||
) {
|
||||
super();
|
||||
}
|
||||
|
@ -50,14 +52,14 @@ export class TaxDataOrchestrator extends BaseDataTransactionOrchestrator<TaxEnti
|
|||
|
||||
async delete(dataId): Promise<String> {
|
||||
this.deleteManager.setData(dataId);
|
||||
this.deleteManager.setService(this.serviceData, TABLE_NAME.TAX);
|
||||
this.deleteManager.setService(this.serviceData, TABLE_NAME.TAX, this.formulaServiceData);
|
||||
await this.deleteManager.execute();
|
||||
return this.deleteManager.getResult();
|
||||
}
|
||||
|
||||
async batchDelete(dataIds: string[]): Promise<BatchResult> {
|
||||
this.batchDeleteManager.setData(dataIds);
|
||||
this.batchDeleteManager.setService(this.serviceData, TABLE_NAME.TAX);
|
||||
this.batchDeleteManager.setService(this.serviceData, TABLE_NAME.TAX, this.formulaServiceData);
|
||||
await this.batchDeleteManager.execute();
|
||||
return this.batchDeleteManager.getResult();
|
||||
}
|
||||
|
@ -92,14 +94,14 @@ export class TaxDataOrchestrator extends BaseDataTransactionOrchestrator<TaxEnti
|
|||
|
||||
async inactive(dataId): Promise<String> {
|
||||
this.inactiveManager.setData(dataId, STATUS.INACTIVE);
|
||||
this.inactiveManager.setService(this.serviceData, TABLE_NAME.TAX);
|
||||
this.inactiveManager.setService(this.serviceData, TABLE_NAME.TAX, this.formulaServiceData);
|
||||
await this.inactiveManager.execute();
|
||||
return this.inactiveManager.getResult();
|
||||
}
|
||||
|
||||
async batchInactive(dataIds: string[]): Promise<BatchResult> {
|
||||
this.batchInactiveManager.setData(dataIds, STATUS.INACTIVE);
|
||||
this.batchInactiveManager.setService(this.serviceData, TABLE_NAME.TAX);
|
||||
this.batchInactiveManager.setService(this.serviceData, TABLE_NAME.TAX, this.formulaServiceData);
|
||||
await this.batchInactiveManager.execute();
|
||||
return this.batchInactiveManager.getResult();
|
||||
}
|
||||
|
|
|
@ -22,11 +22,13 @@ import { BatchActiveTaxManager } from './domain/usecases/managers/batch-active-t
|
|||
import { BatchConfirmTaxManager } from './domain/usecases/managers/batch-confirm-tax.manager';
|
||||
import { BatchInactiveTaxManager } from './domain/usecases/managers/batch-inactive-tax.manager';
|
||||
import { TaxModel } from './data/models/tax.model';
|
||||
import { SalesPriceFormulaReadService } from '../sales-price-formula/data/services/sales-price-formula-read.service';
|
||||
import { SalesPriceFormulaModel } from '../sales-price-formula/data/models/sales-price-formula.model';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
ConfigModule.forRoot(),
|
||||
TypeOrmModule.forFeature([TaxModel], CONNECTION_NAME.DEFAULT),
|
||||
TypeOrmModule.forFeature([TaxModel, SalesPriceFormulaModel], CONNECTION_NAME.DEFAULT),
|
||||
CqrsModule,
|
||||
],
|
||||
controllers: [TaxDataController, TaxReadController],
|
||||
|
@ -44,6 +46,7 @@ import { TaxModel } from './data/models/tax.model';
|
|||
BatchConfirmTaxManager,
|
||||
BatchInactiveTaxManager,
|
||||
|
||||
SalesPriceFormulaReadService,
|
||||
TaxDataService,
|
||||
TaxReadService,
|
||||
|
||||
|
|
Loading…
Reference in New Issue