From 78ae2a5d8ef0ea22c8b675308ca0806c8e96e869 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Mon, 15 Jul 2024 16:21:15 +0700 Subject: [PATCH] fix(SPG-602) Harga Item belum mengambil harga season periode --- .../managers/index-item-rate.manager.ts | 3 +++ .../domain/entities/filter-item.entity.ts | 1 + .../managers/index-item-rates.manager.ts | 25 ++++++++++++------- .../infrastructure/dto/filter-item.dto.ts | 6 +++++ 4 files changed, 26 insertions(+), 9 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 4f34708..7cc92b8 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 @@ -6,6 +6,7 @@ import { RelationParam, } from 'src/core/modules/domain/entities/base-filter.entity'; import { ItemEntity } from 'src/modules/item-related/item/domain/entities/item.entity'; +import { STATUS } from 'src/core/strings/constants/base.constants'; @Injectable() export class IndexItemRateManager extends BaseIndexManager { @@ -27,6 +28,7 @@ export class IndexItemRateManager extends BaseIndexManager { ) { const rate = item['item_rates']?.find( (rate) => + rate.season_period?.status == STATUS.ACTIVE && d >= new Date(rate.season_period.start_date) && d <= new Date(rate.season_period.end_date), ); @@ -84,6 +86,7 @@ export class IndexItemRateManager extends BaseIndexManager { 'item_rates.price', 'season_period.id', + 'season_period.status', 'season_period.holiday_name', 'season_period.start_date', 'season_period.end_date', diff --git a/src/modules/item-related/item/domain/entities/filter-item.entity.ts b/src/modules/item-related/item/domain/entities/filter-item.entity.ts index 1bde43f..19a0b72 100644 --- a/src/modules/item-related/item/domain/entities/filter-item.entity.ts +++ b/src/modules/item-related/item/domain/entities/filter-item.entity.ts @@ -6,4 +6,5 @@ export interface FilterItemEntity extends BaseFilterEntity { limit_types: string[]; tenant_ids: string[]; all_item: boolean; + season_period_ids: string[]; } 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 3017db9..d51a110 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 @@ -10,7 +10,7 @@ import { ItemRateEntity } from 'src/modules/item-related/item-rate/domain/entiti @Injectable() export class IndexItemRatesManager extends BaseIndexManager { async prepareData(): Promise { - this.filterParam.order_by = `${this.tableName}.id`; + this.filterParam.order_by = `season_period.id`; return; } @@ -38,9 +38,11 @@ export class IndexItemRatesManager extends BaseIndexManager { get selects(): string[] { return [ `${this.tableName}.id`, + `${this.tableName}.item_id`, `${this.tableName}.price`, `season_period.id`, + `season_period.priority`, `season_period.created_at`, `season_period.creator_name`, `season_period.editor_name`, @@ -68,20 +70,25 @@ export class IndexItemRatesManager extends BaseIndexManager { itemIds: this.filterParam.item_ids, }); } - if (this.filterParam.start_date) { - queryBuilder.andWhere(`season_period.start_date BETWEEN :from AND :to`, { - from: this.filterParam.start_date, - to: this.filterParam.end_date, + + if (this.filterParam.season_period_ids) { + queryBuilder.andWhere(`season_period.id In (:...itemIds)`, { + itemIds: this.filterParam.season_period_ids, }); } - if (this.filterParam.end_date) { - queryBuilder.andWhere(`season_period.end_date BETWEEN :from AND :to`, { - from: this.filterParam.start_date, - to: this.filterParam.end_date, + if (this.filterParam.start_date) { + queryBuilder.andWhere(`season_period.start_date < :inputStartDate`, { + inputStartDate: this.filterParam.end_date, + }); + + queryBuilder.andWhere(`season_period.end_date > :inputEndDate`, { + inputEndDate: this.filterParam.start_date, }); } + queryBuilder.addOrderBy('season_period.priority', 'ASC'); + return queryBuilder; } } diff --git a/src/modules/item-related/item/infrastructure/dto/filter-item.dto.ts b/src/modules/item-related/item/infrastructure/dto/filter-item.dto.ts index 5a0d70f..07b9845 100644 --- a/src/modules/item-related/item/infrastructure/dto/filter-item.dto.ts +++ b/src/modules/item-related/item/infrastructure/dto/filter-item.dto.ts @@ -10,6 +10,12 @@ export class FilterItemDto extends BaseFilterDto implements FilterItemEntity { }) item_categories: string[]; + @ApiProperty({ type: ['string'], required: false }) + @Transform((body) => { + return Array.isArray(body.value) ? body.value : [body.value]; + }) + season_period_ids: string[]; + @ApiProperty({ type: ['string'], required: false }) @Transform((body) => { return Array.isArray(body.value) ? body.value : [body.value];