From 50e8951b717f1341debd4ac649ff5ef95d07975a Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 15 Aug 2024 14:27:54 +0700 Subject: [PATCH 01/21] feat: add share profit to item --- .../migrations/1723706764654-add-item-profit.ts | 13 +++++++++++++ .../item-related/item/data/models/item.model.ts | 3 +++ .../domain/usecases/managers/detail-item.manager.ts | 2 ++ 3 files changed, 18 insertions(+) create mode 100644 src/database/migrations/1723706764654-add-item-profit.ts diff --git a/src/database/migrations/1723706764654-add-item-profit.ts b/src/database/migrations/1723706764654-add-item-profit.ts new file mode 100644 index 0000000..7b7f0e6 --- /dev/null +++ b/src/database/migrations/1723706764654-add-item-profit.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddItemProfit1723706764654 implements MigrationInterface { + name = 'AddItemProfit1723706764654'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "items" ADD "share_profit" numeric`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "items" DROP COLUMN "share_profit"`); + } +} diff --git a/src/modules/item-related/item/data/models/item.model.ts b/src/modules/item-related/item/data/models/item.model.ts index a25633e..8018bd0 100644 --- a/src/modules/item-related/item/data/models/item.model.ts +++ b/src/modules/item-related/item/data/models/item.model.ts @@ -41,6 +41,9 @@ export class ItemModel @Column('decimal', { name: 'sales_margin', nullable: true }) sales_margin: number; + @Column('decimal', { name: 'share_profit', nullable: true }) + share_profit: number; + @Column('bigint', { name: 'total_price', nullable: true }) total_price: number; diff --git a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts index 591ff7a..1f2caed 100644 --- a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts @@ -42,10 +42,12 @@ export class DetailItemManager extends BaseDetailManager { `${this.tableName}.limit_value`, `${this.tableName}.hpp`, `${this.tableName}.sales_margin`, + `${this.tableName}.share_profit`, `${this.tableName}.total_price`, `${this.tableName}.base_price`, `${this.tableName}.use_queue`, `${this.tableName}.show_to_booking`, + `${this.tableName}.show_to_booking`, `item_category.id`, `item_category.name`, From e966de615831eaf26d0220f483facd48534a9fa2 Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 15 Aug 2024 16:04:15 +0700 Subject: [PATCH 02/21] feat: add bundling breakdown type --- src/modules/item-related/item-category/constants.ts | 1 + src/modules/item-related/item/data/models/item.model.ts | 3 +++ 2 files changed, 4 insertions(+) diff --git a/src/modules/item-related/item-category/constants.ts b/src/modules/item-related/item-category/constants.ts index 11e272d..9b62bb1 100644 --- a/src/modules/item-related/item-category/constants.ts +++ b/src/modules/item-related/item-category/constants.ts @@ -3,4 +3,5 @@ export enum ItemType { WAHANA = 'wahana', BUNDLING = 'bundling', FREE_GIFT = 'free gift', + OTHER = 'other', } diff --git a/src/modules/item-related/item/data/models/item.model.ts b/src/modules/item-related/item/data/models/item.model.ts index 8018bd0..1b8c583 100644 --- a/src/modules/item-related/item/data/models/item.model.ts +++ b/src/modules/item-related/item/data/models/item.model.ts @@ -56,6 +56,9 @@ export class ItemModel @Column('boolean', { name: 'show_to_booking', default: false }) show_to_booking: boolean; + @Column('boolean', { name: 'breakdown_bundling', default: false }) + breakdown_bundling: boolean; + @Column('enum', { name: 'limit_type', enum: LimitType, From fa286820fcfb04908c24ded485825af897411d8b Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 15 Aug 2024 17:12:12 +0700 Subject: [PATCH 03/21] fix: add breakdown bundling and profit to response --- .../item/domain/usecases/managers/detail-item.manager.ts | 2 +- .../item/domain/usecases/managers/index-item.manager.ts | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts index 1f2caed..e80016c 100644 --- a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts @@ -47,7 +47,7 @@ export class DetailItemManager extends BaseDetailManager { `${this.tableName}.base_price`, `${this.tableName}.use_queue`, `${this.tableName}.show_to_booking`, - `${this.tableName}.show_to_booking`, + `${this.tableName}.breakdown_bundling`, `item_category.id`, `item_category.name`, diff --git a/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts index c15a1d0..0499830 100644 --- a/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts @@ -45,6 +45,8 @@ export class IndexItemManager extends BaseIndexManager { `${this.tableName}.limit_type`, `${this.tableName}.limit_value`, `${this.tableName}.base_price`, + `${this.tableName}.share_profit`, + `${this.tableName}.breakdown_bundling`, `item_category.id`, `item_category.name`, From 6227555671c8a330072994ba83b6dc826a1e8bca Mon Sep 17 00:00:00 2001 From: shancheas Date: Thu, 15 Aug 2024 17:12:35 +0700 Subject: [PATCH 04/21] wip: demography data --- src/core/strings/constants/table.constants.ts | 1 + .../1723706764655-add-other-type-item.ts | 85 +++++++++++++++++++ ...723713873756-add-demography-transaction.ts | 23 +++++ ...723716561482-fix-demography-nationality.ts | 55 ++++++++++++ .../transaction/transaction/constants.ts | 5 ++ .../models/transaction-demography.model.ts | 41 +++++++++ .../data/models/transaction.model.ts | 10 ++- .../entities/transaction-graphy.entity.ts | 10 +++ 8 files changed, 229 insertions(+), 1 deletion(-) create mode 100644 src/database/migrations/1723706764655-add-other-type-item.ts create mode 100644 src/database/migrations/1723713873756-add-demography-transaction.ts create mode 100644 src/database/migrations/1723716561482-fix-demography-nationality.ts create mode 100644 src/modules/transaction/transaction/data/models/transaction-demography.model.ts create mode 100644 src/modules/transaction/transaction/domain/entities/transaction-graphy.entity.ts diff --git a/src/core/strings/constants/table.constants.ts b/src/core/strings/constants/table.constants.ts index 7950937..2417a09 100644 --- a/src/core/strings/constants/table.constants.ts +++ b/src/core/strings/constants/table.constants.ts @@ -21,6 +21,7 @@ export enum TABLE_NAME { TRANSACTION = 'transactions', TRANSACTION_ITEM = 'transaction_items', TRANSACTION_TAX = 'transaction_taxes', + TRANSACTION_DEMOGRAPHY = 'transaction_demographies', USER = 'users', USER_PRIVILEGE = 'user_privileges', USER_PRIVILEGE_CONFIGURATION = 'user_privilege_configurations', diff --git a/src/database/migrations/1723706764655-add-other-type-item.ts b/src/database/migrations/1723706764655-add-other-type-item.ts new file mode 100644 index 0000000..b735f75 --- /dev/null +++ b/src/database/migrations/1723706764655-add-other-type-item.ts @@ -0,0 +1,85 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddItemProfit1723706764654 implements MigrationInterface { + name = 'AddOtherType1723706764655'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "items" ADD "breakdown_bundling" boolean NOT NULL DEFAULT false`, + ); + await queryRunner.query( + `ALTER TYPE "public"."item_categories_item_type_enum" RENAME TO "item_categories_item_type_enum_old"`, + ); + await queryRunner.query( + `CREATE TYPE "public"."item_categories_item_type_enum" AS ENUM('tiket masuk', 'wahana', 'bundling', 'free gift', 'other')`, + ); + await queryRunner.query( + `ALTER TABLE "item_categories" ALTER COLUMN "item_type" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "item_categories" ALTER COLUMN "item_type" TYPE "public"."item_categories_item_type_enum" USING "item_type"::"text"::"public"."item_categories_item_type_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "item_categories" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`, + ); + await queryRunner.query( + `DROP TYPE "public"."item_categories_item_type_enum_old"`, + ); + await queryRunner.query( + `ALTER TYPE "public"."items_item_type_enum" RENAME TO "items_item_type_enum_old"`, + ); + await queryRunner.query( + `CREATE TYPE "public"."items_item_type_enum" AS ENUM('tiket masuk', 'wahana', 'bundling', 'free gift', 'other')`, + ); + await queryRunner.query( + `ALTER TABLE "items" ALTER COLUMN "item_type" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "items" ALTER COLUMN "item_type" TYPE "public"."items_item_type_enum" USING "item_type"::"text"::"public"."items_item_type_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "items" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`, + ); + await queryRunner.query(`DROP TYPE "public"."items_item_type_enum_old"`); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TYPE "public"."items_item_type_enum_old" AS ENUM('bundling', 'free gift', 'tiket masuk', 'wahana')`, + ); + await queryRunner.query( + `ALTER TABLE "items" ALTER COLUMN "item_type" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "items" ALTER COLUMN "item_type" TYPE "public"."items_item_type_enum_old" USING "item_type"::"text"::"public"."items_item_type_enum_old"`, + ); + await queryRunner.query( + `ALTER TABLE "items" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`, + ); + await queryRunner.query(`DROP TYPE "public"."items_item_type_enum"`); + await queryRunner.query( + `ALTER TYPE "public"."items_item_type_enum_old" RENAME TO "items_item_type_enum"`, + ); + await queryRunner.query( + `CREATE TYPE "public"."item_categories_item_type_enum_old" AS ENUM('bundling', 'free gift', 'tiket masuk', 'wahana')`, + ); + await queryRunner.query( + `ALTER TABLE "item_categories" ALTER COLUMN "item_type" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "item_categories" ALTER COLUMN "item_type" TYPE "public"."item_categories_item_type_enum_old" USING "item_type"::"text"::"public"."item_categories_item_type_enum_old"`, + ); + await queryRunner.query( + `ALTER TABLE "item_categories" ALTER COLUMN "item_type" SET DEFAULT 'tiket masuk'`, + ); + await queryRunner.query( + `DROP TYPE "public"."item_categories_item_type_enum"`, + ); + await queryRunner.query( + `ALTER TYPE "public"."item_categories_item_type_enum_old" RENAME TO "item_categories_item_type_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "items" DROP COLUMN "breakdown_bundling"`, + ); + } +} diff --git a/src/database/migrations/1723713873756-add-demography-transaction.ts b/src/database/migrations/1723713873756-add-demography-transaction.ts new file mode 100644 index 0000000..92c0a88 --- /dev/null +++ b/src/database/migrations/1723713873756-add-demography-transaction.ts @@ -0,0 +1,23 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddDemographyTransaction1723713873756 + implements MigrationInterface +{ + name = 'AddDemographyTransaction1723713873756'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TABLE "transaction_demographies" ("id" uuid NOT NULL DEFAULT uuid_generate_v4(), "man" integer NOT NULL DEFAULT '0', "woman" integer NOT NULL DEFAULT '0', "teen" integer NOT NULL DEFAULT '0', "child" integer NOT NULL DEFAULT '0', "local" integer NOT NULL DEFAULT '0', "foreign" integer NOT NULL DEFAULT '0', "transaction_id" uuid, CONSTRAINT "PK_84083b782ebc2c6cb2a2dab8e2d" PRIMARY KEY ("id"))`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`, + ); + await queryRunner.query(`DROP TABLE "transaction_demographies"`); + } +} diff --git a/src/database/migrations/1723716561482-fix-demography-nationality.ts b/src/database/migrations/1723716561482-fix-demography-nationality.ts new file mode 100644 index 0000000..d893bad --- /dev/null +++ b/src/database/migrations/1723716561482-fix-demography-nationality.ts @@ -0,0 +1,55 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class FixDemographyNationality1723716561482 + implements MigrationInterface +{ + name = 'FixDemographyNationality1723716561482'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP COLUMN "local"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP COLUMN "foreign"`, + ); + await queryRunner.query( + `CREATE TYPE "public"."transaction_demographies_nationality_enum" AS ENUM('local', 'foreign')`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD "nationality" "public"."transaction_demographies_nationality_enum" NOT NULL DEFAULT 'local'`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "UQ_a2b705884bca06c148e3b35ab04" UNIQUE ("transaction_id")`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "UQ_a2b705884bca06c148e3b35ab04"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" DROP COLUMN "nationality"`, + ); + await queryRunner.query( + `DROP TYPE "public"."transaction_demographies_nationality_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD "foreign" integer NOT NULL DEFAULT '0'`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ADD "local" integer NOT NULL DEFAULT '0'`, + ); + } +} diff --git a/src/modules/transaction/transaction/constants.ts b/src/modules/transaction/transaction/constants.ts index c03e7de..41052f7 100644 --- a/src/modules/transaction/transaction/constants.ts +++ b/src/modules/transaction/transaction/constants.ts @@ -29,3 +29,8 @@ export const TransactionModels = [ TransactionItemModel, TransactionTaxModel, ]; + +export enum DemographyNationality { + LOCAL = 'local', + FOREIGN = 'foreign', +} diff --git a/src/modules/transaction/transaction/data/models/transaction-demography.model.ts b/src/modules/transaction/transaction/data/models/transaction-demography.model.ts new file mode 100644 index 0000000..3e0b00d --- /dev/null +++ b/src/modules/transaction/transaction/data/models/transaction-demography.model.ts @@ -0,0 +1,41 @@ +import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; +import { Column, Entity, JoinColumn, OneToOne } from 'typeorm'; +import { BaseCoreModel } from 'src/core/modules/data/model/base-core.model'; +import { TransactionModel } from './transaction.model'; +import { TransactionDemographyEntity } from '../../domain/entities/transaction-graphy.entity'; +import { DemographyNationality } from '../../constants'; + +@Entity(TABLE_NAME.TRANSACTION_DEMOGRAPHY) +export class TransactionDemographyModel + extends BaseCoreModel + implements TransactionDemographyEntity +{ + @Column('int', { default: 0 }) + man: number; + + @Column('int', { default: 0 }) + woman: number; + + @Column('int', { default: 0 }) + teen: number; + + @Column('int', { default: 0 }) + child: number; + + @Column('enum', { + name: 'nationality', + enum: DemographyNationality, + default: DemographyNationality.LOCAL, + }) + nationality: DemographyNationality; + + @Column('varchar', { name: 'transaction_id', nullable: true }) + transaction_id: string; + + @OneToOne(() => TransactionModel, (model) => model.demographies, { + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + @JoinColumn({ name: 'transaction_id' }) + transaction: TransactionModel; +} diff --git a/src/modules/transaction/transaction/data/models/transaction.model.ts b/src/modules/transaction/transaction/data/models/transaction.model.ts index 58bdba7..44d994e 100644 --- a/src/modules/transaction/transaction/data/models/transaction.model.ts +++ b/src/modules/transaction/transaction/data/models/transaction.model.ts @@ -1,6 +1,6 @@ import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; import { TransactionEntity } from '../../domain/entities/transaction.entity'; -import { Column, Entity, OneToMany } from 'typeorm'; +import { Column, Entity, OneToMany, OneToOne } from 'typeorm'; import { BaseStatusModel } from 'src/core/modules/data/model/base-status.model'; import { TransactionType, @@ -12,6 +12,7 @@ import { TransactionItemModel } from './transaction-item.model'; import { TransactionTaxModel } from './transaction-tax.model'; import { STATUS } from 'src/core/strings/constants/base.constants'; import { RefundModel } from 'src/modules/transaction/refund/data/models/refund.model'; +import { TransactionDemographyModel } from './transaction-demography.model'; @Entity(TABLE_NAME.TRANSACTION) export class TransactionModel @@ -242,6 +243,13 @@ export class TransactionModel }) taxes: TransactionTaxModel[]; + @OneToOne(() => TransactionDemographyModel, (model) => model.transaction, { + cascade: true, + onDelete: 'CASCADE', + onUpdate: 'CASCADE', + }) + demographies: TransactionDemographyModel; + // relations to refund @OneToMany(() => RefundModel, (model) => model.transaction, { cascade: true, diff --git a/src/modules/transaction/transaction/domain/entities/transaction-graphy.entity.ts b/src/modules/transaction/transaction/domain/entities/transaction-graphy.entity.ts new file mode 100644 index 0000000..f006311 --- /dev/null +++ b/src/modules/transaction/transaction/domain/entities/transaction-graphy.entity.ts @@ -0,0 +1,10 @@ +import { BaseCoreEntity } from 'src/core/modules/domain/entities/base-core.entity'; +import { DemographyNationality } from '../../constants'; + +export interface TransactionDemographyEntity extends BaseCoreEntity { + man: number; + woman: number; + teen: number; + child: number; + nationality: DemographyNationality; +} From a2a9c16619d78ba58deed72ba86ea1f8f5d6a95f Mon Sep 17 00:00:00 2001 From: shancheas Date: Fri, 16 Aug 2024 14:21:36 +0700 Subject: [PATCH 05/21] wip: add transaction demography model --- src/app.module.ts | 2 ++ src/modules/configuration/couch/couch.module.ts | 2 ++ src/modules/transaction/transaction/transaction.module.ts | 2 ++ 3 files changed, 6 insertions(+) diff --git a/src/app.module.ts b/src/app.module.ts index 920256f..0a6811f 100644 --- a/src/app.module.ts +++ b/src/app.module.ts @@ -71,6 +71,7 @@ import { BannerModel } from './modules/web-information/banner/data/models/banner import { MailModule } from './modules/configuration/mail/mail.module'; import { PosLogModel } from './modules/configuration/log/data/models/pos-log.model'; import { ExportModule } from './modules/configuration/export/export.module'; +import { TransactionDemographyModel } from './modules/transaction/transaction/data/models/transaction-demography.model'; @Module({ imports: [ @@ -109,6 +110,7 @@ import { ExportModule } from './modules/configuration/export/export.module'; TransactionModel, TransactionItemModel, TransactionTaxModel, + TransactionDemographyModel, UserModel, VipCategoryModel, VipCodeModel, diff --git a/src/modules/configuration/couch/couch.module.ts b/src/modules/configuration/couch/couch.module.ts index 8de39ac..a258817 100644 --- a/src/modules/configuration/couch/couch.module.ts +++ b/src/modules/configuration/couch/couch.module.ts @@ -50,6 +50,7 @@ import { } from './domain/managers/season-type.handler'; import { SeasonPeriodDataService } from 'src/modules/season-related/season-period/data/services/season-period-data.service'; import { SeasonPeriodModel } from 'src/modules/season-related/season-period/data/models/season-period.model'; +import { TransactionDemographyModel } from 'src/modules/transaction/transaction/data/models/transaction-demography.model'; @Module({ imports: [ @@ -63,6 +64,7 @@ import { SeasonPeriodModel } from 'src/modules/season-related/season-period/data TransactionModel, TransactionTaxModel, TransactionItemModel, + TransactionDemographyModel, ], CONNECTION_NAME.DEFAULT, ), diff --git a/src/modules/transaction/transaction/transaction.module.ts b/src/modules/transaction/transaction/transaction.module.ts index 2153707..2071ea0 100644 --- a/src/modules/transaction/transaction/transaction.module.ts +++ b/src/modules/transaction/transaction/transaction.module.ts @@ -35,6 +35,7 @@ import { MidtransCallbackHandler } from './domain/usecases/handlers/midtrans-tra import { PdfMakeManager } from 'src/modules/configuration/export/domain/managers/pdf-make.manager'; import { PaymentMethodDataService } from '../payment-method/data/services/payment-method-data.service'; import { PaymentMethodModel } from '../payment-method/data/models/payment-method.model'; +import { TransactionDemographyModel } from './data/models/transaction-demography.model'; @Module({ exports: [TransactionReadService], @@ -44,6 +45,7 @@ import { PaymentMethodModel } from '../payment-method/data/models/payment-method [ TransactionModel, TransactionItemModel, + TransactionDemographyModel, TransactionTaxModel, TaxModel, SalesPriceFormulaModel, From ee232447b695a3bbe965f3480efb5f2935383204 Mon Sep 17 00:00:00 2001 From: shancheas Date: Fri, 16 Aug 2024 15:11:15 +0700 Subject: [PATCH 06/21] fix: add breakdown bundling response to item and item rate --- .../usecases/managers/index-item-rate.manager.ts | 2 ++ .../usecases/managers/index-item-rates.manager.ts | 13 +++++++++++-- .../managers/index-season-period-item.manager.ts | 2 ++ 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/src/modules/item-related/item-rate/domain/usecases/managers/index-item-rate.manager.ts b/src/modules/item-related/item-rate/domain/usecases/managers/index-item-rate.manager.ts index 359acdb..bb403c1 100644 --- a/src/modules/item-related/item-rate/domain/usecases/managers/index-item-rate.manager.ts +++ b/src/modules/item-related/item-rate/domain/usecases/managers/index-item-rate.manager.ts @@ -91,6 +91,8 @@ export class IndexItemRateManager extends BaseIndexManager { `${this.tableName}.created_at`, `${this.tableName}.name`, `${this.tableName}.base_price`, + `${this.tableName}.breakdown_bundling`, + `${this.tableName}.share_profit`, 'tenant.id', 'tenant.name', 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 9306d0f..41c3e00 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 @@ -38,7 +38,12 @@ export class IndexItemRatesManager extends BaseIndexManager { joinRelations: [], // relation join and select (relasi yang ingin ditampilkan), - selectRelations: ['season_period', 'season_period.season_type', 'item'], + selectRelations: [ + 'season_period', + 'season_period.season_type', + 'item', + 'item.bundling_items', + ], // relation yang hanya ingin dihitung (akan return number) countRelations: [], @@ -54,7 +59,11 @@ export class IndexItemRatesManager extends BaseIndexManager { 'item.id', 'item.total_price', 'item.base_price', - + 'item.breakdown_bundling', + 'bundling_items.base_price', + 'bundling_items.hpp', + 'bundling_items.id', + 'bundling_items.name', `season_period.id`, `season_period.priority`, `season_period.created_at`, diff --git a/src/modules/season-related/season-period/domain/usecases/managers/index-season-period-item.manager.ts b/src/modules/season-related/season-period/domain/usecases/managers/index-season-period-item.manager.ts index 5b8e76e..e082a3f 100644 --- a/src/modules/season-related/season-period/domain/usecases/managers/index-season-period-item.manager.ts +++ b/src/modules/season-related/season-period/domain/usecases/managers/index-season-period-item.manager.ts @@ -49,6 +49,8 @@ export class IndexSeasonPeriodeItemManager extends BaseIndexManager Date: Fri, 16 Aug 2024 16:44:04 +0700 Subject: [PATCH 07/21] feat: estimation play to item --- .../1723801180604-add-estimation-to-item.ts | 17 +++++++++++++++++ .../item-related/item/data/models/item.model.ts | 3 +++ .../usecases/managers/detail-item.manager.ts | 1 + .../usecases/managers/index-item.manager.ts | 1 + 4 files changed, 22 insertions(+) create mode 100644 src/database/migrations/1723801180604-add-estimation-to-item.ts diff --git a/src/database/migrations/1723801180604-add-estimation-to-item.ts b/src/database/migrations/1723801180604-add-estimation-to-item.ts new file mode 100644 index 0000000..b38809e --- /dev/null +++ b/src/database/migrations/1723801180604-add-estimation-to-item.ts @@ -0,0 +1,17 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddEstimationToItem1723801180604 implements MigrationInterface { + name = 'AddEstimationToItem1723801180604'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "items" ADD "play_estimation" integer`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "items" DROP COLUMN "play_estimation"`, + ); + } +} diff --git a/src/modules/item-related/item/data/models/item.model.ts b/src/modules/item-related/item/data/models/item.model.ts index 1b8c583..90f8ecf 100644 --- a/src/modules/item-related/item/data/models/item.model.ts +++ b/src/modules/item-related/item/data/models/item.model.ts @@ -50,6 +50,9 @@ export class ItemModel @Column('bigint', { name: 'base_price', nullable: true }) base_price: number; + @Column('int', { name: 'play_estimation', nullable: true }) + play_estimation: number; + @Column('boolean', { name: 'use_queue', default: false }) use_queue: boolean; diff --git a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts index e80016c..f322278 100644 --- a/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/detail-item.manager.ts @@ -48,6 +48,7 @@ export class DetailItemManager extends BaseDetailManager { `${this.tableName}.use_queue`, `${this.tableName}.show_to_booking`, `${this.tableName}.breakdown_bundling`, + `${this.tableName}.play_estimation`, `item_category.id`, `item_category.name`, diff --git a/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts index 0499830..4da5d1a 100644 --- a/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/index-item.manager.ts @@ -47,6 +47,7 @@ export class IndexItemManager extends BaseIndexManager { `${this.tableName}.base_price`, `${this.tableName}.share_profit`, `${this.tableName}.breakdown_bundling`, + `${this.tableName}.play_estimation`, `item_category.id`, `item_category.name`, From f4387767a879821db5517c0c4e58dd5ff7267469 Mon Sep 17 00:00:00 2001 From: shancheas Date: Fri, 16 Aug 2024 18:46:10 +0700 Subject: [PATCH 08/21] fix: add item rate to bundling breakdown --- .../managers/index-item-rates.manager.ts | 23 +++++++++++++++---- 1 file changed, 19 insertions(+), 4 deletions(-) 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 41c3e00..109393d 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 @@ -19,14 +19,25 @@ export class IndexItemRatesManager extends BaseIndexManager { } async afterProcess(): Promise { - this.result.data?.map((item) => { + this.result.data?.map((rates) => { + const item = rates['item']; const item_price = - Number(item['item']?.total_price ?? 0) == 0 - ? item['item']?.total_price - : item['item']?.base_price; + Number(item?.total_price ?? 0) == 0 + ? item?.total_price + : item?.base_price; + + const bundlings = item?.bundling_items ?? []; + const bundling_items = bundlings.map((bundling) => { + const rate = bundling.item_rates?.[0]?.price ?? 0; + return { + ...bundling, + item_rates: rate, + }; + }); Object.assign(item, { price: item.price ?? item_price, + bundling_items, }); }); return; @@ -43,6 +54,7 @@ export class IndexItemRatesManager extends BaseIndexManager { 'season_period.season_type', 'item', 'item.bundling_items', + 'bundling_items.item_rates', ], // relation yang hanya ingin dihitung (akan return number) @@ -64,6 +76,9 @@ export class IndexItemRatesManager extends BaseIndexManager { 'bundling_items.hpp', 'bundling_items.id', 'bundling_items.name', + + 'item_rates.price', + `season_period.id`, `season_period.priority`, `season_period.created_at`, From f2bc4dd46d3766ce56a05d7ab7d20d51e752108c Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 20 Aug 2024 11:52:20 +0700 Subject: [PATCH 09/21] feat: add breakdown item to transaction --- src/app.module.ts | 6 ++- src/core/strings/constants/table.constants.ts | 1 + ...27202672-add-breakdown-item-transaction.ts | 23 +++++++++++ .../data/models/transaction-item.model.ts | 41 ++++++++++++++++++- .../entities/transaction-item.entity.ts | 9 ++++ .../domain/entities/transaction.entity.ts | 3 ++ .../managers/detail-transaction.manager.ts | 2 + .../helpers/mapping-transaction.helper.ts | 10 +++++ .../transaction/transaction.module.ts | 6 ++- 9 files changed, 98 insertions(+), 3 deletions(-) create mode 100644 src/database/migrations/1724127202672-add-breakdown-item-transaction.ts 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, From 9a72c40984db79f643134463ae8c56a2b6263635 Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 20 Aug 2024 12:05:36 +0700 Subject: [PATCH 10/21] feat: add bundling item to refund --- .../refund/domain/usecases/managers/detail-refund.manager.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/modules/transaction/refund/domain/usecases/managers/detail-refund.manager.ts b/src/modules/transaction/refund/domain/usecases/managers/detail-refund.manager.ts index b5f332e..722f94b 100644 --- a/src/modules/transaction/refund/domain/usecases/managers/detail-refund.manager.ts +++ b/src/modules/transaction/refund/domain/usecases/managers/detail-refund.manager.ts @@ -28,6 +28,7 @@ export class DetailRefundManager extends BaseDetailManager { selectRelations: [ 'transaction', 'transaction.items', + 'items.bundling_items', 'items.refunds item_refunds', 'item_refunds.refund item_refunds_refund', ], @@ -60,6 +61,7 @@ export class DetailRefundManager extends BaseDetailManager { 'transaction', 'items', + 'bundling_items', 'item_refunds', 'item_refunds_refund.id', 'item_refunds_refund.status', From fc15cb9db6588d74925bcf261794b9135a479af2 Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 20 Aug 2024 13:22:04 +0700 Subject: [PATCH 11/21] fix: update transaction --- .../usecases/managers/helpers/mapping-transaction.helper.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts index 855e9b4..bedc6ec 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts @@ -190,6 +190,7 @@ export function mappingRevertTransaction(data, type) { (bundling) => bundling.name, ), bundling_items: item.item.bundling_items?.map((bundling) => { + if (bundling.item_id) return bundling; return { ...bundling, item_id: bundling.id, From 8abdbb7b55e2e0a27a5dafeb503413929d7a7df9 Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 20 Aug 2024 15:44:32 +0700 Subject: [PATCH 12/21] fix: add mix nationality to demography --- .../migrations/1723716561482-fix-demography-nationality.ts | 2 +- src/modules/transaction/transaction/constants.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/database/migrations/1723716561482-fix-demography-nationality.ts b/src/database/migrations/1723716561482-fix-demography-nationality.ts index d893bad..8e23f74 100644 --- a/src/database/migrations/1723716561482-fix-demography-nationality.ts +++ b/src/database/migrations/1723716561482-fix-demography-nationality.ts @@ -13,7 +13,7 @@ export class FixDemographyNationality1723716561482 `ALTER TABLE "transaction_demographies" DROP COLUMN "foreign"`, ); await queryRunner.query( - `CREATE TYPE "public"."transaction_demographies_nationality_enum" AS ENUM('local', 'foreign')`, + `CREATE TYPE "public"."transaction_demographies_nationality_enum" AS ENUM('local', 'foreign', 'mix')`, ); await queryRunner.query( `ALTER TABLE "transaction_demographies" ADD "nationality" "public"."transaction_demographies_nationality_enum" NOT NULL DEFAULT 'local'`, diff --git a/src/modules/transaction/transaction/constants.ts b/src/modules/transaction/transaction/constants.ts index 41052f7..d289f01 100644 --- a/src/modules/transaction/transaction/constants.ts +++ b/src/modules/transaction/transaction/constants.ts @@ -33,4 +33,5 @@ export const TransactionModels = [ export enum DemographyNationality { LOCAL = 'local', FOREIGN = 'foreign', + MIX = 'mix', } From 7c7b121b493822febae105376156e594f9eef546 Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 20 Aug 2024 17:16:14 +0700 Subject: [PATCH 13/21] fix: fix break down bundling item rates --- .../data/services/item-rate-data.service.ts | 52 ++++++++++++++++++- .../usecases/item-rate-data.orchestrator.ts | 1 - .../managers/update-item-rate.manager.ts | 22 ++++++++ .../item-rate-data.controller.ts | 4 +- .../item-rate/item-rate.module.ts | 3 +- 5 files changed, 76 insertions(+), 6 deletions(-) diff --git a/src/modules/item-related/item-rate/data/services/item-rate-data.service.ts b/src/modules/item-related/item-rate/data/services/item-rate-data.service.ts index 1c8862f..3e7668a 100644 --- a/src/modules/item-related/item-rate/data/services/item-rate-data.service.ts +++ b/src/modules/item-related/item-rate/data/services/item-rate-data.service.ts @@ -4,14 +4,64 @@ import { ItemRateEntity } from '../../domain/entities/item-rate.entity'; import { InjectRepository } from '@nestjs/typeorm'; import { ItemRateModel } from '../models/item-rate.model'; import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants'; -import { Repository } from 'typeorm'; +import { In, Repository } from 'typeorm'; +import { ItemModel } from 'src/modules/item-related/item/data/models/item.model'; @Injectable() export class ItemRateDataService extends BaseDataService { constructor( @InjectRepository(ItemRateModel, CONNECTION_NAME.DEFAULT) private repo: Repository, + @InjectRepository(ItemModel, CONNECTION_NAME.DEFAULT) + private itemRepo: Repository, ) { super(repo); } + + async itemsRateTotal(season_id: string, items: string[]): Promise { + const rates = await this.repo.find({ + where: { + season_period_id: season_id, + item_id: In(items), + }, + }); + + return rates.reduce((total, current) => total + Number(current.price), 0); + } + + async updateRatesBySeasonItem( + season_id: string, + item_id: string, + price: number, + ): Promise { + this.repo.update( + { + season_period_id: season_id, + item_id, + }, + { price }, + ); + } + + async findBundlingByItem(item_id: string): Promise { + const bundlings = await this.itemRepo.find({ + where: { + breakdown_bundling: true, + bundling_items: { + id: item_id, + }, + }, + }); + + return Promise.all( + await bundlings.map(async (bundling) => { + return await this.itemRepo.findOne({ + relations: ['bundling_items'], + where: { + id: bundling.id, + }, + }); + }), + ); + } } diff --git a/src/modules/item-related/item-rate/domain/usecases/item-rate-data.orchestrator.ts b/src/modules/item-related/item-rate/domain/usecases/item-rate-data.orchestrator.ts index f383d6f..b24ff1c 100644 --- a/src/modules/item-related/item-rate/domain/usecases/item-rate-data.orchestrator.ts +++ b/src/modules/item-related/item-rate/domain/usecases/item-rate-data.orchestrator.ts @@ -5,7 +5,6 @@ import { ItemRateEntity } from '../entities/item-rate.entity'; import { DeleteItemRateManager } from './managers/delete-item-rate.manager'; import { UpdateItemRateManager } from './managers/update-item-rate.manager'; import { BaseDataOrchestrator } from 'src/core/modules/domain/usecase/orchestrators/base-data.orchestrator'; -import { STATUS } from 'src/core/strings/constants/base.constants'; import { BatchResult } from 'src/core/response/domain/ok-response.interface'; import { BatchDeleteItemRateManager } from './managers/batch-delete-item-rate.manager'; import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; diff --git a/src/modules/item-related/item-rate/domain/usecases/managers/update-item-rate.manager.ts b/src/modules/item-related/item-rate/domain/usecases/managers/update-item-rate.manager.ts index 42c13c5..5768aa4 100644 --- a/src/modules/item-related/item-rate/domain/usecases/managers/update-item-rate.manager.ts +++ b/src/modules/item-related/item-rate/domain/usecases/managers/update-item-rate.manager.ts @@ -20,6 +20,7 @@ export class UpdateItemRateManager extends BaseUpdateManager { } async afterProcess(): Promise { + this.updateBundlingBreakdown(this.dataId); return; } @@ -42,4 +43,25 @@ export class UpdateItemRateManager extends BaseUpdateManager { }, ]; } + + async updateBundlingBreakdown(id: string) { + const { item_id, season_period_id } = + await this.dataService.getOneByOptions({ + where: { id }, + }); + const bundlings = await this.dataService.findBundlingByItem(item_id); + + for (const bundling of bundlings) { + const ids = bundling.bundling_items.map((item) => item.id); + const totalRates = await this.dataService.itemsRateTotal( + season_period_id, + ids, + ); + this.dataService.updateRatesBySeasonItem( + season_period_id, + bundling.id, + totalRates, + ); + } + } } diff --git a/src/modules/item-related/item-rate/infrastructure/item-rate-data.controller.ts b/src/modules/item-related/item-rate/infrastructure/item-rate-data.controller.ts index 82dfa2b..d8252a3 100644 --- a/src/modules/item-related/item-rate/infrastructure/item-rate-data.controller.ts +++ b/src/modules/item-related/item-rate/infrastructure/item-rate-data.controller.ts @@ -1,11 +1,9 @@ -import { Body, Controller, Delete, Param, Post, Put } from '@nestjs/common'; +import { Body, Controller, Get, Param, Put } from '@nestjs/common'; import { ItemRateDataOrchestrator } from '../domain/usecases/item-rate-data.orchestrator'; import { ItemRateDto } from './dto/item-rate.dto'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ItemRateEntity } from '../domain/entities/item-rate.entity'; -import { BatchResult } from 'src/core/response/domain/ok-response.interface'; -import { BatchIdsDto } from 'src/core/modules/infrastructure/dto/base-batch.dto'; import { Public } from 'src/core/guards'; @ApiTags(`${MODULE_NAME.ITEM_RATE.split('-').join(' ')} - data`) diff --git a/src/modules/item-related/item-rate/item-rate.module.ts b/src/modules/item-related/item-rate/item-rate.module.ts index c0012e3..c4acfc1 100644 --- a/src/modules/item-related/item-rate/item-rate.module.ts +++ b/src/modules/item-related/item-rate/item-rate.module.ts @@ -19,13 +19,14 @@ import { ItemRateModel } from './data/models/item-rate.model'; import { SeasonPeriodHolidayHandler } from './domain/usecases/handlers/item-created.handler'; import { SeasonPeriodDataService } from 'src/modules/season-related/season-period/data/services/season-period-data.service'; import { SeasonPeriodModel } from 'src/modules/season-related/season-period/data/models/season-period.model'; +import { ItemModel } from '../item/data/models/item.model'; @Global() @Module({ imports: [ ConfigModule.forRoot(), TypeOrmModule.forFeature( - [ItemRateModel, SeasonPeriodModel], + [ItemRateModel, SeasonPeriodModel, ItemModel], CONNECTION_NAME.DEFAULT, ), CqrsModule, From 009576c841c97612695e74eded35a253c6a2b953 Mon Sep 17 00:00:00 2001 From: shancheas Date: Tue, 20 Aug 2024 18:37:10 +0700 Subject: [PATCH 14/21] feat: add bundling relation for couch db --- .../usecases/managers/confirm-data-transaction.manager.ts | 1 + .../domain/usecases/managers/confirm-transaction.manager.ts | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) 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 3961cbb..3b7a295 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 @@ -16,6 +16,7 @@ import { TransactionPaymentType } from '../../../constants'; @Injectable() export class ConfirmDataTransactionManager extends BaseUpdateStatusManager { + protected relations = ['items', 'items.bundling_items']; getResult(): string { return `Success active data ${this.result.invoice_code}`; } 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 f122f0e..8a955e4 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 @@ -18,7 +18,7 @@ import { apm } from 'src/core/apm'; @Injectable() export class ConfirmTransactionManager extends BaseUpdateStatusManager { - protected relations = ['items']; + protected relations = ['items', 'items.bundling_items']; getResult(): string { return `Success active data ${this.result.invoice_code}`; From d5adc48d9be265a10b52124095834a3d6939a7c5 Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 10:30:05 +0700 Subject: [PATCH 15/21] fix: breakdown item rates wrong value --- .../domain/usecases/managers/index-item-rates.manager.ts | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) 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 109393d..e083bc7 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 @@ -19,6 +19,7 @@ export class IndexItemRatesManager extends BaseIndexManager { } async afterProcess(): Promise { + const period_ids = this.filterParam.season_period_ids; this.result.data?.map((rates) => { const item = rates['item']; const item_price = @@ -28,7 +29,10 @@ export class IndexItemRatesManager extends BaseIndexManager { const bundlings = item?.bundling_items ?? []; const bundling_items = bundlings.map((bundling) => { - const rate = bundling.item_rates?.[0]?.price ?? 0; + const item_rates = bundling.item_rates?.find((rate) => { + return period_ids?.includes(rate.season_period_id); + }); + const rate = item_rates?.price ?? 0; return { ...bundling, item_rates: rate, @@ -77,7 +81,7 @@ export class IndexItemRatesManager extends BaseIndexManager { 'bundling_items.id', 'bundling_items.name', - 'item_rates.price', + 'item_rates', `season_period.id`, `season_period.priority`, From 22b418b25794eecb81bc5526d95bfcb51f4796b8 Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 10:56:57 +0700 Subject: [PATCH 16/21] fix: update price bundling items --- .../update-item-rate-price.manager.ts | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/modules/item-related/item/domain/usecases/managers/update-item-rate-price.manager.ts b/src/modules/item-related/item/domain/usecases/managers/update-item-rate-price.manager.ts index e11f875..4de2209 100644 --- a/src/modules/item-related/item/domain/usecases/managers/update-item-rate-price.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/update-item-rate-price.manager.ts @@ -22,20 +22,25 @@ export class UpdateItemRatePriceManager extends BaseCustomManager { async beforeProcess(): Promise { let query; + const bundling_items = []; const item_ids = this.data.items.map((item) => { + if (item.item.bundling_items) { + const bundlings = item.item.bundling_items.map(({ id }) => id); + bundling_items.push(...bundlings); + } return item.item.id; }); if (this.data.season_period_id) { query = { - item_id: In(item_ids), + item_id: In([...item_ids, ...bundling_items]), season_period: { id: this.data.season_period_id, }, }; } else { query = { - item_id: In(item_ids), + item_id: In([...item_ids, ...bundling_items]), season_period: { start_date: MoreThanOrEqual(this.data.booking_date), end_date: LessThanOrEqual(this.data.booking_date), @@ -54,6 +59,16 @@ export class UpdateItemRatePriceManager extends BaseCustomManager { const current_price = this.rates.find( (rate) => rate.item_id == item.item.id, ); + item.item.bundling_items = item.item.bundling_items?.map((bundling) => { + const current_price = this.rates.find( + (rate) => rate.item_id == bundling.id, + ); + + return { + ...bundling, + item_rates: current_price?.price ?? 0, + }; + }); Object.assign(item, { total_price: current_price?.price ?? item.item.base_price, From eaf0f43a24a3af064c7c592e7ba698c44d13ef3e Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 11:14:41 +0700 Subject: [PATCH 17/21] fix: add bundling to booking couch db --- .../configuration/couch/domain/managers/booking.handler.ts | 2 +- .../domain/usecases/managers/confirm-transaction.manager.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/modules/configuration/couch/domain/managers/booking.handler.ts b/src/modules/configuration/couch/domain/managers/booking.handler.ts index 8c6d4e4..200afed 100644 --- a/src/modules/configuration/couch/domain/managers/booking.handler.ts +++ b/src/modules/configuration/couch/domain/managers/booking.handler.ts @@ -95,7 +95,7 @@ export class ChangeStatusBookingHandler where: { id: dataID, }, - relations: ['items'], + relations: ['items', 'items.bundling_items'], }); console.log('change status', { dataID, couchData, booking }); mappingTransaction(booking); 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 8a955e4..f122f0e 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 @@ -18,7 +18,7 @@ import { apm } from 'src/core/apm'; @Injectable() export class ConfirmTransactionManager extends BaseUpdateStatusManager { - protected relations = ['items', 'items.bundling_items']; + protected relations = ['items']; getResult(): string { return `Success active data ${this.result.invoice_code}`; From 84b829a7fa536eaee32cdcb6d0977a832fcd3a74 Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 16:46:36 +0700 Subject: [PATCH 18/21] feat: add breakdown bundling to item transaction --- ...93743-add-breakdown-to-transaction-item.ts | 19 +++++++++++++++++++ .../data/models/transaction-item.model.ts | 3 +++ .../helpers/mapping-transaction.helper.ts | 2 ++ 3 files changed, 24 insertions(+) create mode 100644 src/database/migrations/1724233193743-add-breakdown-to-transaction-item.ts diff --git a/src/database/migrations/1724233193743-add-breakdown-to-transaction-item.ts b/src/database/migrations/1724233193743-add-breakdown-to-transaction-item.ts new file mode 100644 index 0000000..1cce0ce --- /dev/null +++ b/src/database/migrations/1724233193743-add-breakdown-to-transaction-item.ts @@ -0,0 +1,19 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddBreakdownToTransactionItem1724233193743 + implements MigrationInterface +{ + name = 'AddBreakdownToTransactionItem1724233193743'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transaction_items" ADD "breakdown_bundling" boolean NOT NULL DEFAULT false`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transaction_items" DROP COLUMN "breakdown_bundling"`, + ); + } +} 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 9a0560c..01eab5a 100644 --- a/src/modules/transaction/transaction/data/models/transaction-item.model.ts +++ b/src/modules/transaction/transaction/data/models/transaction-item.model.ts @@ -90,6 +90,9 @@ export class TransactionItemModel }) refunds: RefundItemModel[]; + @Column('boolean', { name: 'breakdown_bundling', default: false }) + breakdown_bundling: boolean; + @OneToMany( () => TransactionItemBreakdownModel, (model) => model.transaction_item, diff --git a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts index bedc6ec..d45dd62 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/helpers/mapping-transaction.helper.ts @@ -55,6 +55,7 @@ export function mappingTransaction(data, refundId?: string) { id: itemData.item_category_id, name: itemData.item_category_name, }, + breakdown_bundling: itemData.breakdown_bundling, bundling_items: itemData.bundling_items, }, id: itemData.id, @@ -189,6 +190,7 @@ export function mappingRevertTransaction(data, type) { item_bundlings: item.item.bundling_items?.map( (bundling) => bundling.name, ), + breakdown_bundling: item.item.breakdown_bundling, bundling_items: item.item.bundling_items?.map((bundling) => { if (bundling.item_id) return bundling; return { From 9815c667f0a25ff74790118af713958195b16634 Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 17:06:20 +0700 Subject: [PATCH 19/21] feat: create api to bulk update privileges --- .../user-privilege-configuration.controller.ts | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/modules/user-related/user-privilege/infrastructure/user-privilege-configuration.controller.ts b/src/modules/user-related/user-privilege/infrastructure/user-privilege-configuration.controller.ts index 684d7b5..30fbd1e 100644 --- a/src/modules/user-related/user-privilege/infrastructure/user-privilege-configuration.controller.ts +++ b/src/modules/user-related/user-privilege/infrastructure/user-privilege-configuration.controller.ts @@ -1,4 +1,4 @@ -import { Body, Controller, Get, Param, Put, Query } from '@nestjs/common'; +import { Body, Controller, Get, Put, Query } from '@nestjs/common'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { ExcludePrivilege, Public } from 'src/core/guards'; import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; @@ -28,6 +28,19 @@ export class UserPrivilegeConfigurationController { return await this.orchestrator.update(data); } + @Put('/bulk') + async updateBulk( + @Body() datum: UserPrivilegeConfigurationDto[], + ): Promise { + const results = []; + for (const data of datum) { + const result = await this.orchestrator.update(data); + results.push(result); + } + + return results; + } + @Get() @Pagination() async index( From 464c10722c1cf4c24b02d989d6ca6f8f46e60871 Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 18:42:53 +0700 Subject: [PATCH 20/21] fix: update item to update item rate --- .../item/data/services/item-data.service.ts | 32 +++++++++++++++++++ .../item/domain/entities/item.entity.ts | 1 + .../usecases/managers/update-item.manager.ts | 4 +++ 3 files changed, 37 insertions(+) diff --git a/src/modules/item-related/item/data/services/item-data.service.ts b/src/modules/item-related/item/data/services/item-data.service.ts index 534d542..70656a8 100644 --- a/src/modules/item-related/item/data/services/item-data.service.ts +++ b/src/modules/item-related/item/data/services/item-data.service.ts @@ -6,6 +6,7 @@ import { ItemModel } from '../models/item.model'; import { CONNECTION_NAME } from 'src/core/strings/constants/base.constants'; import { Repository } from 'typeorm'; import { ItemRateModel } from 'src/modules/item-related/item-rate/data/models/item-rate.model'; +import { ItemRateDataService } from 'src/modules/item-related/item-rate/data/services/item-rate-data.service'; @Injectable() export class ItemDataService extends BaseDataService { @@ -15,6 +16,7 @@ export class ItemDataService extends BaseDataService { @InjectRepository(ItemRateModel, CONNECTION_NAME.DEFAULT) private repoItemRate: Repository, + private rateService: ItemRateDataService, ) { super(repo); } @@ -31,4 +33,34 @@ export class ItemDataService extends BaseDataService { { price: newPrice }, ); } + + async updateBreakdownBundling(id: string): Promise { + const item_rates = await this.repoItemRate.find({ + where: { + item_id: id, + }, + }); + + for (const rate of item_rates) { + const { item_id, season_period_id } = rate; + const bundling = await this.repo.findOne({ + relations: ['bundling_items'], + where: { + id: item_id, + }, + }); + + console.log(bundling.name); + const ids = bundling.bundling_items.map((item) => item.id); + const totalRates = await this.rateService.itemsRateTotal( + season_period_id, + ids, + ); + this.rateService.updateRatesBySeasonItem( + season_period_id, + bundling.id, + totalRates, + ); + } + } } diff --git a/src/modules/item-related/item/domain/entities/item.entity.ts b/src/modules/item-related/item/domain/entities/item.entity.ts index 53620cd..90fa227 100644 --- a/src/modules/item-related/item/domain/entities/item.entity.ts +++ b/src/modules/item-related/item/domain/entities/item.entity.ts @@ -16,4 +16,5 @@ export interface ItemEntity extends BaseStatusEntity { use_queue: boolean; show_to_booking: boolean; + breakdown_bundling?: boolean; } diff --git a/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts b/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts index 12d972a..510da69 100644 --- a/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts +++ b/src/modules/item-related/item/domain/usecases/managers/update-item.manager.ts @@ -31,6 +31,10 @@ export class UpdateItemManager extends BaseUpdateManager { newBasePrice, itemId, ); + + if (this.result.breakdown_bundling) { + this.dataService.updateBreakdownBundling(itemId); + } return; } From c3950c704145a9384e6e61709d4f13df6572a08c Mon Sep 17 00:00:00 2001 From: shancheas Date: Wed, 21 Aug 2024 20:34:07 +0700 Subject: [PATCH 21/21] fix: update demography enum --- ...723716561482-fix-demography-nationality.ts | 6 --- .../1724240624025-add-value-to-demography.ts | 47 +++++++++++++++++++ .../transaction/transaction/constants.ts | 1 + 3 files changed, 48 insertions(+), 6 deletions(-) create mode 100644 src/database/migrations/1724240624025-add-value-to-demography.ts diff --git a/src/database/migrations/1723716561482-fix-demography-nationality.ts b/src/database/migrations/1723716561482-fix-demography-nationality.ts index 8e23f74..9742d91 100644 --- a/src/database/migrations/1723716561482-fix-demography-nationality.ts +++ b/src/database/migrations/1723716561482-fix-demography-nationality.ts @@ -21,9 +21,6 @@ export class FixDemographyNationality1723716561482 await queryRunner.query( `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`, ); - await queryRunner.query( - `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "UQ_a2b705884bca06c148e3b35ab04" UNIQUE ("transaction_id")`, - ); await queryRunner.query( `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`, ); @@ -33,9 +30,6 @@ export class FixDemographyNationality1723716561482 await queryRunner.query( `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "FK_a2b705884bca06c148e3b35ab04"`, ); - await queryRunner.query( - `ALTER TABLE "transaction_demographies" DROP CONSTRAINT "UQ_a2b705884bca06c148e3b35ab04"`, - ); await queryRunner.query( `ALTER TABLE "transaction_demographies" ADD CONSTRAINT "FK_a2b705884bca06c148e3b35ab04" FOREIGN KEY ("transaction_id") REFERENCES "transactions"("id") ON DELETE CASCADE ON UPDATE CASCADE`, ); diff --git a/src/database/migrations/1724240624025-add-value-to-demography.ts b/src/database/migrations/1724240624025-add-value-to-demography.ts new file mode 100644 index 0000000..9d80fa2 --- /dev/null +++ b/src/database/migrations/1724240624025-add-value-to-demography.ts @@ -0,0 +1,47 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class AddValueToDemography1724240624025 implements MigrationInterface { + name = 'AddValueToDemography1724240624025'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TYPE "public"."transaction_demographies_nationality_enum" RENAME TO "transaction_demographies_nationality_enum_old"`, + ); + await queryRunner.query( + `CREATE TYPE "public"."transaction_demographies_nationality_enum" AS ENUM('local', 'foreign', 'mix', 'foreigner')`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" TYPE "public"."transaction_demographies_nationality_enum" USING "nationality"::"text"::"public"."transaction_demographies_nationality_enum"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" SET DEFAULT 'local'`, + ); + await queryRunner.query( + `DROP TYPE "public"."transaction_demographies_nationality_enum_old"`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `CREATE TYPE "public"."transaction_demographies_nationality_enum_old" AS ENUM('local', 'foreign', 'mix')`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" DROP DEFAULT`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" TYPE "public"."transaction_demographies_nationality_enum_old" USING "nationality"::"text"::"public"."transaction_demographies_nationality_enum_old"`, + ); + await queryRunner.query( + `ALTER TABLE "transaction_demographies" ALTER COLUMN "nationality" SET DEFAULT 'local'`, + ); + await queryRunner.query( + `DROP TYPE "public"."transaction_demographies_nationality_enum"`, + ); + await queryRunner.query( + `ALTER TYPE "public"."transaction_demographies_nationality_enum_old" RENAME TO "transaction_demographies_nationality_enum"`, + ); + } +} diff --git a/src/modules/transaction/transaction/constants.ts b/src/modules/transaction/transaction/constants.ts index d289f01..e09954f 100644 --- a/src/modules/transaction/transaction/constants.ts +++ b/src/modules/transaction/transaction/constants.ts @@ -34,4 +34,5 @@ export enum DemographyNationality { LOCAL = 'local', FOREIGN = 'foreign', MIX = 'mix', + FOREIGNER = 'foreigner', }