diff --git a/src/app.module.ts b/src/app.module.ts index 0a6811f..c21e956 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -44,7 +44,10 @@ import { ItemRateModel } from './modules/item-related/item-rate/data/models/item import { GoogleCalendarModule } from './modules/configuration/google-calendar/google-calendar.module'; import { TransactionModule } from './modules/transaction/transaction/transaction.module'; import { TransactionModel } from './modules/transaction/transaction/data/models/transaction.model'; -import { TransactionItemModel } from './modules/transaction/transaction/data/models/transaction-item.model'; +import { + TransactionItemBreakdownModel, + TransactionItemModel, +} from './modules/transaction/transaction/data/models/transaction-item.model'; import { TransactionTaxModel } from './modules/transaction/transaction/data/models/transaction-tax.model'; import { ReconciliationModule } from './modules/transaction/reconciliation/reconciliation.module'; import { ReportModule } from './modules/reports/report/report.module'; @@ -111,6 +114,7 @@ import { TransactionDemographyModel } from './modules/transaction/transaction/da TransactionItemModel, TransactionTaxModel, TransactionDemographyModel, + TransactionItemBreakdownModel, UserModel, VipCategoryModel, VipCodeModel, diff --git a/src/core/strings/constants/table.constants.ts b/src/core/strings/constants/table.constants.ts index 2417a09..9fa6af6 100644 --- a/src/core/strings/constants/table.constants.ts +++ b/src/core/strings/constants/table.constants.ts @@ -20,6 +20,7 @@ export enum TABLE_NAME { TENANT = 'tenants', TRANSACTION = 'transactions', TRANSACTION_ITEM = 'transaction_items', + TRANSACTION_ITEM_BREAKDOWN = 'transaction_item_breakdowns', TRANSACTION_TAX = 'transaction_taxes', TRANSACTION_DEMOGRAPHY = 'transaction_demographies', USER = 'users', diff --git a/src/database/migrations/1724127202672-add-breakdown-item-transaction.ts b/src/database/migrations/1724127202672-add-breakdown-item-transaction.ts new file mode 100644 index 0000000..1e8fb6b --- /dev/null +++ b/src/database/migrations/1724127202672-add-breakdown-item-transaction.ts @@ -0,0 +1,23 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddBreakdownItemTransaction1724127202672 + implements MigrationInterface +{ + name = 'AddBreakdownItemTransaction1724127202672'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "transaction_item_breakdowns" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "item_id" character varying NOT NULL, "item_name" character varying NOT NULL, "hpp" bigint, "base_price" bigint, "item_rates" bigint, "transaction_item_id" uuid, CONSTRAINT "PK_e04a30c648d3ba8778e9fb67fdd" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_item_breakdowns" ADD CONSTRAINT "FK_b8c63b1f3ecace500587da713ae" FOREIGN KEY ("transaction_item_id") REFERENCES "transaction_items"("id") ON DELETE CASCADE ON UPDATE CASCADE`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transaction_item_breakdowns" DROP CONSTRAINT "FK_b8c63b1f3ecace500587da713ae"`, + ); + await queryRunner.query(`DROP TABLE "transaction_item_breakdowns"`); + } +} diff --git a/src/modules/transaction/transaction/data/models/transaction-item.model.ts b/src/modules/transaction/transaction/data/models/transaction-item.model.ts index 78807dd..9a0560c 100644 --- a/src/modules/transaction/transaction/data/models/transaction-item.model.ts +++ b/src/modules/transaction/transaction/data/models/transaction-item.model.ts @@ -1,7 +1,10 @@ import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; import { Column, Entity, JoinColumn, ManyToOne, OneToMany } from 'typeorm'; import { BaseCoreModel } from 'src/core/modules/data/model/base-core.model'; -import { TransactionItemEntity } from '../../domain/entities/transaction-item.entity'; +import { + TransactionBundlingItemEntity, + TransactionItemEntity, +} from '../../domain/entities/transaction-item.entity'; import { TransactionModel } from './transaction.model'; import { RefundItemModel } from 'src/modules/transaction/refund/data/models/refund-item.model'; @@ -86,4 +89,40 @@ export class TransactionItemModel onUpdate: 'CASCADE', }) refunds: RefundItemModel[]; + + @OneToMany( + () => TransactionItemBreakdownModel, + (model) => model.transaction_item, + { + cascade: true, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }, + ) + bundling_items: TransactionItemBreakdownModel[]; +} + +@Entity(TABLE_NAME.TRANSACTION_ITEM_BREAKDOWN) +export class TransactionItemBreakdownModel extends BaseCoreModel { + @Column('varchar') + item_id: string; + + @Column('varchar') + item_name: string; + + @Column('bigint', { nullable: true }) + hpp: number; + + @Column('bigint', { nullable: true }) + base_price: number; + + @Column('bigint', { nullable: true }) + item_rates: number; + + @ManyToOne(() => TransactionItemModel, (model) => model.bundling_items, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + @JoinColumn({ name: 'transaction_item_id' }) + transaction_item: TransactionItemModel; } diff --git a/src/modules/transaction/transaction/domain/entities/transaction-item.entity.ts b/src/modules/transaction/transaction/domain/entities/transaction-item.entity.ts index 68d63cb..9d3a575 100644 --- a/src/modules/transaction/transaction/domain/entities/transaction-item.entity.ts +++ b/src/modules/transaction/transaction/domain/entities/transaction-item.entity.ts @@ -25,4 +25,13 @@ export interface TransactionItemEntity extends BaseCoreEntity { qty: number; qty_remaining: number; taxes: string; + bundling_items?: TransactionBundlingItemEntity[]; +} + +export interface TransactionBundlingItemEntity extends BaseCoreEntity { + item_id: string; + item_name: string; + hpp: number; + base_price: number; + item_rates: number; } diff --git a/src/modules/transaction/transaction/domain/entities/transaction.entity.ts b/src/modules/transaction/transaction/domain/entities/transaction.entity.ts index aa1814b..d9d507b 100644 --- a/src/modules/transaction/transaction/domain/entities/transaction.entity.ts +++ b/src/modules/transaction/transaction/domain/entities/transaction.entity.ts @@ -5,6 +5,7 @@ import { TransactionUserType, } from '../../constants'; import { STATUS } from 'src/core/strings/constants/base.constants'; +import { TransactionItemEntity } from './transaction-item.entity'; export interface TransactionEntity extends BaseStatusEntity { // general info @@ -84,4 +85,6 @@ export interface TransactionEntity extends BaseStatusEntity { calendar_id?: string; calendar_link?: string; + + items: TransactionItemEntity[]; } 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 806b602..d577c4d 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 @@ -27,6 +27,7 @@ export class DetailTransactionManager extends BaseDetailManager bundling.name, ), + bundling_items: item.item.bundling_items?.map((bundling) => { + return { + ...bundling, + item_id: bundling.id, + item_name: bundling.name, + id: uuidv4(), + }; + }), item_tenant_id: item.item.tenant?.id ?? null, item_tenant_name: item.item.tenant?.id ?? null, diff --git a/src/modules/transaction/transaction/transaction.module.ts b/src/modules/transaction/transaction/transaction.module.ts index 2071ea0..f4a2e61 100644 --- a/src/modules/transaction/transaction/transaction.module.ts +++ b/src/modules/transaction/transaction/transaction.module.ts @@ -18,7 +18,10 @@ import { DetailTransactionManager } from './domain/usecases/managers/detail-tran import { BatchDeleteTransactionManager } from './domain/usecases/managers/batch-delete-transaction.manager'; import { BatchConfirmTransactionManager } from './domain/usecases/managers/batch-confirm-transaction.manager'; import { TransactionModel } from './data/models/transaction.model'; -import { TransactionItemModel } from './data/models/transaction-item.model'; +import { + TransactionItemBreakdownModel, + TransactionItemModel, +} from './data/models/transaction-item.model'; import { TransactionTaxModel } from './data/models/transaction-tax.model'; import { CancelTransactionManager } from './domain/usecases/managers/cancel-transaction.manager'; import { BatchCancelTransactionManager } from './domain/usecases/managers/batch-cancel-transaction.manager'; @@ -46,6 +49,7 @@ import { TransactionDemographyModel } from './data/models/transaction-demography TransactionModel, TransactionItemModel, TransactionDemographyModel, + TransactionItemBreakdownModel, TransactionTaxModel, TaxModel, SalesPriceFormulaModel,