diff --git a/src/core/helpers/query/default-filter.helper.ts b/src/core/helpers/query/default-filter.helper.ts index 9189025..10f1f81 100644 --- a/src/core/helpers/query/default-filter.helper.ts +++ b/src/core/helpers/query/default-filter.helper.ts @@ -10,39 +10,14 @@ export function setQueryFilterDefault( baseFilter: BaseFilterEntity, tableName: TABLE_NAME, ): SelectQueryBuilder { - // filter berdasarkan statuses - if (!!baseFilter.statuses) { - queryBuilder.andWhere( - new Brackets((qb) => { - baseFilter.statuses.map((status) => { - // trim search - const statusData = status.includes("'") - ? status.trim().replace(/'/g, "''").replace(/\s+/g, ' ') - : status.trim().replace(/\s+/g, ' '); - - // jika searching status terdapat dalam enum, maka dia mencari specific data - // ? karena jika tidak, ketika dia search "active" maka "inactive" juga ikut - if (STATUS[statusData.toUpperCase()]) - qb.orWhere(`${tableName}.status = :statusData`, { - statusData: statusData, - }); - else - qb['orWhere']( - `${tableName}.status::text ILIKE '%${[statusData]}%'`, - ); - }); - }), - ); - } - // filter berdasarkan id pembuat if (!!baseFilter.created_ids) new WhereInQueryHelper( queryBuilder, tableName, - 'created_id', + 'creator_id', baseFilter.created_ids, - 'created_ids', + 'creator_ids', ).getQuery(); // filter berdasarkan tanggal terakhir dibuat diff --git a/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts b/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts index 127875a..4125276 100644 --- a/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-batch-update-status.manager.ts @@ -107,7 +107,7 @@ export abstract class BaseBatchUpdateStatusManager extends BaseManager { if (!this.eventTopics.length) return; for (const topic of this.eventTopics) { let data; - if (!topic.relations) { + if (topic.relations?.length) { data = await this.dataService.getOneByOptions({ where: { id: dataNew.id, diff --git a/src/core/modules/domain/usecase/managers/base-index.manager.ts b/src/core/modules/domain/usecase/managers/base-index.manager.ts index 9c757fa..89c2f54 100644 --- a/src/core/modules/domain/usecase/managers/base-index.manager.ts +++ b/src/core/modules/domain/usecase/managers/base-index.manager.ts @@ -8,6 +8,7 @@ import { } from 'src/core/helpers/query/default-filter.helper'; import { Param } from '../../entities/base-filter.entity'; import { joinRelationHelper } from 'src/core/helpers/query/join-relations.helper'; +import { STATUS } from 'src/core/strings/constants/base.constants'; export abstract class BaseIndexManager extends BaseReadManager { protected result: PaginationResponse; @@ -19,6 +20,7 @@ export abstract class BaseIndexManager extends BaseReadManager { } async process(): Promise { + const specificFilter = this.specificFilter; const { joinRelations, selectRelations, countRelations } = this.relations; if (joinRelations?.length) @@ -40,10 +42,26 @@ export abstract class BaseIndexManager extends BaseReadManager { if (this.selects?.length) this.queryBuilder.select(this.selects); + if (this.filterParam.statuses?.length > 0) { + const data = this.filterParam.statuses.map((status) => { + const statusData = status.includes("'") + ? status.trim().replace(/'/g, "''").replace(/\s+/g, ' ') + : status.trim().replace(/\s+/g, ' '); + + // jika searching status terdapat dalam enum, maka dia mencari specific data + // ? karena jika tidak, ketika dia search "active" maka "inactive" juga ikut + return STATUS[statusData.toUpperCase()] ?? statusData; + }); + specificFilter.push({ + cols: `${this.tableName}.status::text`, + data: data, + }); + } + new SpecificSearchFilter( this.queryBuilder, this.tableName, - this.specificFilter, + specificFilter, ).getFilter(); getOrderBy(this.filterParam, this.queryBuilder, this.tableName); diff --git a/src/database/migrations/1721284234428-update-midtrans-column-transaction.ts b/src/database/migrations/1721284234428-update-midtrans-column-transaction.ts deleted file mode 100644 index 681c011..0000000 --- a/src/database/migrations/1721284234428-update-midtrans-column-transaction.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { MigrationInterface, QueryRunner } from 'typeorm'; - -export class UpdateMidtransColumnTransaction1721284234428 - implements MigrationInterface -{ - name = 'UpdateMidtransColumnTransaction1721284234428'; - - public async up(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "transactions" DROP COLUMN "payment_midtrans_url"`, - ); - await queryRunner.query( - `ALTER TABLE "transactions" DROP COLUMN "payment_midtrans_token"`, - ); - } - - public async down(queryRunner: QueryRunner): Promise { - await queryRunner.query( - `ALTER TABLE "transactions" ADD "payment_midtrans_token" character varying`, - ); - await queryRunner.query( - `ALTER TABLE "transactions" ADD "payment_midtrans_url" character varying`, - ); - } -} diff --git a/src/database/migrations/1721385120750-update-column-transaction.ts b/src/database/migrations/1721385120750-update-column-transaction.ts new file mode 100644 index 0000000..ebec03d --- /dev/null +++ b/src/database/migrations/1721385120750-update-column-transaction.ts @@ -0,0 +1,25 @@ +import { MigrationInterface, QueryRunner } from 'typeorm'; + +export class UpdateColumnTransaction1721385120750 + implements MigrationInterface +{ + name = 'UpdateColumnTransaction1721385120750'; + + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transactions" DROP COLUMN "discount_percentage"`, + ); + await queryRunner.query( + `ALTER TABLE "transactions" ADD "discount_percentage" numeric`, + ); + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query( + `ALTER TABLE "transactions" DROP COLUMN "discount_percentage"`, + ); + await queryRunner.query( + `ALTER TABLE "transactions" ADD "discount_percentage" integer`, + ); + } +} diff --git a/src/modules/configuration/mail/domain/handlers/payment-transaction.handler.ts b/src/modules/configuration/mail/domain/handlers/payment-transaction.handler.ts index f050ba1..e3fb8ad 100644 --- a/src/modules/configuration/mail/domain/handlers/payment-transaction.handler.ts +++ b/src/modules/configuration/mail/domain/handlers/payment-transaction.handler.ts @@ -24,7 +24,8 @@ export class PaymentTransactionHandler if ( old_data.status == STATUS.DRAFT && current_data.status == STATUS.PENDING && - current_data.payment_type != TransactionPaymentType.COUNTER + current_data.payment_type != TransactionPaymentType.COUNTER && + !!current_data.customer_email ) { if (current_data.payment_type != TransactionPaymentType.MIDTRANS) { payments = await this.paymentService.getManyByOptions({ diff --git a/src/modules/transaction/transaction/data/models/transaction.model.ts b/src/modules/transaction/transaction/data/models/transaction.model.ts index 786623f..c181d7a 100644 --- a/src/modules/transaction/transaction/data/models/transaction.model.ts +++ b/src/modules/transaction/transaction/data/models/transaction.model.ts @@ -93,7 +93,7 @@ export class TransactionModel @Column('varchar', { name: 'discount_code', nullable: true }) discount_code: string; - @Column('int', { name: 'discount_percentage', nullable: true }) + @Column('decimal', { name: 'discount_percentage', nullable: true }) discount_percentage: number; @Column('decimal', { name: 'discount_value', nullable: true }) 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 a53c28a..32be4b0 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 @@ -56,7 +56,10 @@ export class ConfirmTransactionManager extends BaseUpdateStatusManager { - const total_price = Number(item.item.base_price) * Number(item.qty); + const total_price = + Number(item.item.price ?? item.item.base_price) * Number(item.qty); const share_margin = item.item.tenant?.share_margin ?? 0; const total_share_tenant = share_margin > 0 ? (Number(share_margin) / 100) * total_price : 0; diff --git a/src/modules/transaction/transaction/domain/usecases/managers/index-transaction.manager.ts b/src/modules/transaction/transaction/domain/usecases/managers/index-transaction.manager.ts index cde5623..342e5c1 100644 --- a/src/modules/transaction/transaction/domain/usecases/managers/index-transaction.manager.ts +++ b/src/modules/transaction/transaction/domain/usecases/managers/index-transaction.manager.ts @@ -48,6 +48,7 @@ export class IndexTransactionManager extends BaseIndexManager `${this.tableName}.id`, `${this.tableName}.status`, `${this.tableName}.invoice_code`, + `${this.tableName}.creator_counter_no`, `${this.tableName}.booking_date`, `${this.tableName}.no_of_group`, `${this.tableName}.type`,