feat: add variable config to formula
parent
ce372de1fd
commit
e7a7ffb2bc
|
@ -0,0 +1,19 @@
|
|||
import { MigrationInterface, QueryRunner } from 'typeorm';
|
||||
|
||||
export class AddValueVariableFormula1724926316235
|
||||
implements MigrationInterface
|
||||
{
|
||||
name = 'AddValueVariableFormula1724926316235';
|
||||
|
||||
public async up(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "price_formulas" ADD "value_for" character varying NOT NULL DEFAULT 'dpp'`,
|
||||
);
|
||||
}
|
||||
|
||||
public async down(queryRunner: QueryRunner): Promise<void> {
|
||||
await queryRunner.query(
|
||||
`ALTER TABLE "price_formulas" DROP COLUMN "value_for"`,
|
||||
);
|
||||
}
|
||||
}
|
|
@ -11,6 +11,7 @@ import { SalesPriceFormulaEntity } from 'src/modules/transaction/sales-price-for
|
|||
import { In } from 'typeorm';
|
||||
import { STATUS } from 'src/core/strings/constants/base.constants';
|
||||
import { calculateProfitFormula } from 'src/modules/transaction/sales-price-formula/domain/usecases/managers/helpers/calculation-formula.helper';
|
||||
import { FormulaType } from 'src/modules/transaction/sales-price-formula/constants';
|
||||
|
||||
@Injectable()
|
||||
export class UpdateProfitShareFormulaManager extends BaseUpdateManager<SalesPriceFormulaEntity> {
|
||||
|
@ -30,6 +31,35 @@ export class UpdateProfitShareFormulaManager extends BaseUpdateManager<SalesPric
|
|||
}
|
||||
|
||||
async afterProcess(): Promise<void> {
|
||||
const additionalFormula = this.data.additional;
|
||||
for (const additional of additionalFormula) {
|
||||
/**
|
||||
* Find formula for variable
|
||||
* If the formula doesn't exist, then create data for save
|
||||
*/
|
||||
const formula = (await this.dataService.getOneByOptions({
|
||||
where: {
|
||||
value_for: additional.value_for,
|
||||
},
|
||||
})) ?? {
|
||||
editor_id: this.user.id,
|
||||
editor_name: this.user.name,
|
||||
updated_at: new Date().getTime(),
|
||||
created_at: new Date().getTime(),
|
||||
type: FormulaType.PROFIT_SHARE,
|
||||
};
|
||||
|
||||
// Update formula value to exist formula or new formula
|
||||
formula.formula_render = additional.formula_render;
|
||||
formula.formula_string = additional.formula_string;
|
||||
formula.value_for = additional.value_for;
|
||||
|
||||
/**
|
||||
* This function is create, but inside function is save
|
||||
* So, if the id is provide, the data will be update instead create new data
|
||||
*/
|
||||
this.dataService.create(null, null, formula);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
@ -22,6 +22,9 @@ export class SalesPriceFormulaModel
|
|||
@Column('varchar', { name: 'formula_string', nullable: true })
|
||||
formula_string: string;
|
||||
|
||||
@Column('varchar', { default: 'dpp' })
|
||||
value_for: string;
|
||||
|
||||
@Column('varchar', { name: 'example_formula', nullable: true })
|
||||
example_formula: string;
|
||||
|
||||
|
|
|
@ -6,5 +6,13 @@ export interface SalesPriceFormulaEntity extends BaseEntity {
|
|||
formula_string: string; // digunakan untuk menyimpan string dari formula
|
||||
example_formula: string;
|
||||
example_result: number;
|
||||
value_for: string;
|
||||
type: FormulaType;
|
||||
additional?: AdditionalFormula[];
|
||||
}
|
||||
|
||||
export interface AdditionalFormula {
|
||||
formula_render: any;
|
||||
formula_string: string;
|
||||
value_for: string;
|
||||
}
|
||||
|
|
|
@ -1,11 +1,37 @@
|
|||
import { BaseDto } from 'src/core/modules/infrastructure/dto/base.dto';
|
||||
import { SalesPriceFormulaEntity } from '../../domain/entities/sales-price-formula.entity';
|
||||
import {
|
||||
AdditionalFormula,
|
||||
SalesPriceFormulaEntity,
|
||||
} from '../../domain/entities/sales-price-formula.entity';
|
||||
import { ApiProperty } from '@nestjs/swagger';
|
||||
import { ValidateIf } from 'class-validator';
|
||||
import { ValidateIf, ValidateNested } from 'class-validator';
|
||||
import { Exclude } from 'class-transformer';
|
||||
import { Any } from 'typeorm';
|
||||
import { FormulaType } from '../../constants';
|
||||
|
||||
export class AdditionalFormulaDto implements AdditionalFormula {
|
||||
@ApiProperty({
|
||||
type: Any,
|
||||
required: false,
|
||||
})
|
||||
@ValidateIf((body) => body.formula_render)
|
||||
formula_render: any;
|
||||
|
||||
@ApiProperty({
|
||||
type: String,
|
||||
required: false,
|
||||
})
|
||||
@ValidateIf((body) => body.formula_string)
|
||||
formula_string: string;
|
||||
|
||||
@ApiProperty({
|
||||
type: String,
|
||||
required: false,
|
||||
})
|
||||
@ValidateIf((body) => body.value_for)
|
||||
value_for: string;
|
||||
}
|
||||
|
||||
export class SalesPriceFormulaDto
|
||||
extends BaseDto
|
||||
implements SalesPriceFormulaEntity
|
||||
|
@ -30,6 +56,19 @@ export class SalesPriceFormulaDto
|
|||
@Exclude()
|
||||
example_result: number;
|
||||
|
||||
@Exclude()
|
||||
value_for: string;
|
||||
|
||||
@Exclude()
|
||||
type: FormulaType;
|
||||
|
||||
@ApiProperty({
|
||||
type: [AdditionalFormulaDto],
|
||||
default: AdditionalFormulaDto,
|
||||
})
|
||||
@ValidateIf(({ additional }) => {
|
||||
return additional != null;
|
||||
})
|
||||
@ValidateNested({ each: true })
|
||||
additional: AdditionalFormulaDto[];
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue