fix(SPG-645) Button generate price belum berfungsi
parent
ef2697a3b1
commit
1ff5461311
|
@ -5,7 +5,7 @@ export abstract class BaseCustomManager<Entity> extends BaseManager {
|
||||||
protected result: any;
|
protected result: any;
|
||||||
abstract get entityTarget(): any;
|
abstract get entityTarget(): any;
|
||||||
|
|
||||||
setData(entity: Entity): void {
|
setData(entity: any): void {
|
||||||
this.data = entity;
|
this.data = entity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,8 @@ import { BatchInactiveItemManager } from './managers/batch-inactive-item.manager
|
||||||
import { BatchActiveItemManager } from './managers/batch-active-item.manager';
|
import { BatchActiveItemManager } from './managers/batch-active-item.manager';
|
||||||
import { BatchDeleteItemManager } from './managers/batch-delete-item.manager';
|
import { BatchDeleteItemManager } from './managers/batch-delete-item.manager';
|
||||||
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
|
import { TABLE_NAME } from 'src/core/strings/constants/table.constants';
|
||||||
|
import { UpdateItemRatePriceManager } from './managers/update-item-rate-price.manager';
|
||||||
|
import { ItemRateReadService } from 'src/modules/item-related/item-rate/data/services/item-rate-read.service';
|
||||||
|
|
||||||
@Injectable()
|
@Injectable()
|
||||||
export class ItemDataOrchestrator extends BaseDataTransactionOrchestrator<ItemEntity> {
|
export class ItemDataOrchestrator extends BaseDataTransactionOrchestrator<ItemEntity> {
|
||||||
|
@ -28,8 +30,10 @@ export class ItemDataOrchestrator extends BaseDataTransactionOrchestrator<ItemEn
|
||||||
private batchDeleteManager: BatchDeleteItemManager,
|
private batchDeleteManager: BatchDeleteItemManager,
|
||||||
private batchActiveManager: BatchActiveItemManager,
|
private batchActiveManager: BatchActiveItemManager,
|
||||||
private batchConfirmManager: BatchConfirmItemManager,
|
private batchConfirmManager: BatchConfirmItemManager,
|
||||||
|
private updatePriceManager: UpdateItemRatePriceManager,
|
||||||
private batchInactiveManager: BatchInactiveItemManager,
|
private batchInactiveManager: BatchInactiveItemManager,
|
||||||
private serviceData: ItemDataService,
|
private serviceData: ItemDataService,
|
||||||
|
private serviceRateData: ItemRateReadService,
|
||||||
) {
|
) {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
@ -60,6 +64,13 @@ export class ItemDataOrchestrator extends BaseDataTransactionOrchestrator<ItemEn
|
||||||
return this.updateManager.getResult();
|
return this.updateManager.getResult();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async updatePrice(data): Promise<any[]> {
|
||||||
|
this.updatePriceManager.setData(data);
|
||||||
|
this.updatePriceManager.setService(this.serviceRateData, TABLE_NAME.ITEM);
|
||||||
|
await this.updatePriceManager.execute();
|
||||||
|
return this.updatePriceManager.getResult();
|
||||||
|
}
|
||||||
|
|
||||||
async delete(dataId, tenantId?: string): Promise<string> {
|
async delete(dataId, tenantId?: string): Promise<string> {
|
||||||
this.deleteManager.setData(dataId);
|
this.deleteManager.setData(dataId);
|
||||||
this.deleteManager.setService(this.serviceData, TABLE_NAME.ITEM);
|
this.deleteManager.setService(this.serviceData, TABLE_NAME.ITEM);
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
import { Injectable } from '@nestjs/common';
|
||||||
|
import { BaseCustomManager } from 'src/core/modules/domain/usecase/managers/base-custom.manager';
|
||||||
|
import { ItemEntity } from '../../entities/item.entity';
|
||||||
|
import { EventTopics } from 'src/core/strings/constants/interface.constants';
|
||||||
|
import { ItemModel } from '../../../data/models/item.model';
|
||||||
|
import { In, LessThanOrEqual, MoreThanOrEqual } from 'typeorm';
|
||||||
|
|
||||||
|
@Injectable()
|
||||||
|
export class UpdateItemRatePriceManager extends BaseCustomManager<ItemEntity> {
|
||||||
|
protected rates = [];
|
||||||
|
get entityTarget(): any {
|
||||||
|
return ItemModel;
|
||||||
|
}
|
||||||
|
|
||||||
|
get eventTopics(): EventTopics[] {
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
|
||||||
|
async validateProcess(): Promise<void> {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async beforeProcess(): Promise<void> {
|
||||||
|
let query;
|
||||||
|
const item_ids = this.data.items.map((item) => {
|
||||||
|
return item.item.id;
|
||||||
|
});
|
||||||
|
|
||||||
|
if (this.data.season_period_id) {
|
||||||
|
query = {
|
||||||
|
item_id: In(item_ids),
|
||||||
|
season_period: {
|
||||||
|
id: this.data.season_period_id,
|
||||||
|
},
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
query = {
|
||||||
|
item_id: In(item_ids),
|
||||||
|
season_period: {
|
||||||
|
start_date: MoreThanOrEqual(this.data.booking_date),
|
||||||
|
end_date: LessThanOrEqual(this.data.booking_date),
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
this.rates = await this.dataService.getManyByOptions({
|
||||||
|
where: query,
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async process(): Promise<void> {
|
||||||
|
this.data.items.map((item) => {
|
||||||
|
const current_price = this.rates.find(
|
||||||
|
(rate) => rate.item_id == item.item.id,
|
||||||
|
);
|
||||||
|
|
||||||
|
Object.assign(item, {
|
||||||
|
total_price: current_price?.price ?? item.item.base_price,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async afterProcess(): Promise<void> {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
async getResult() {
|
||||||
|
return this.data.items;
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,43 @@
|
||||||
|
import { ApiProperty } from '@nestjs/swagger';
|
||||||
|
|
||||||
|
export class UpdateItemPriceDto {
|
||||||
|
@ApiProperty({
|
||||||
|
type: [Object],
|
||||||
|
required: true,
|
||||||
|
example: [
|
||||||
|
{
|
||||||
|
item: {
|
||||||
|
id: 'bee5c493-fb35-4ceb-b7a1-7bc3edb3c63b',
|
||||||
|
name: 'TEnant 2 wahana air',
|
||||||
|
item_type: 'wahana',
|
||||||
|
base_price: '100000',
|
||||||
|
hpp: '0',
|
||||||
|
tenant: {
|
||||||
|
id: 'e19a4637-d4db-48cc-89ce-501913d07cdd',
|
||||||
|
name: 'e19a4637-d4db-48cc-89ce-501913d07cdd',
|
||||||
|
share_margin: null,
|
||||||
|
},
|
||||||
|
item_category: {
|
||||||
|
id: '88633772-ec34-4645-bc04-6cfdce6af0cf',
|
||||||
|
name: 'Wahana Air',
|
||||||
|
},
|
||||||
|
},
|
||||||
|
qty: 1,
|
||||||
|
total_price: '100000',
|
||||||
|
},
|
||||||
|
],
|
||||||
|
})
|
||||||
|
items: Object[];
|
||||||
|
|
||||||
|
@ApiProperty({
|
||||||
|
type: String,
|
||||||
|
example: 'uuid',
|
||||||
|
})
|
||||||
|
season_period_id: string;
|
||||||
|
|
||||||
|
@ApiProperty({
|
||||||
|
type: Date,
|
||||||
|
example: '2024-08-17',
|
||||||
|
})
|
||||||
|
booking_date: Date;
|
||||||
|
}
|
|
@ -15,6 +15,7 @@ import { ItemEntity } from '../domain/entities/item.entity';
|
||||||
import { BatchResult } from 'src/core/response/domain/ok-response.interface';
|
import { BatchResult } from 'src/core/response/domain/ok-response.interface';
|
||||||
import { BatchIdsDto } from 'src/core/modules/infrastructure/dto/base-batch.dto';
|
import { BatchIdsDto } from 'src/core/modules/infrastructure/dto/base-batch.dto';
|
||||||
import { Public } from 'src/core/guards';
|
import { Public } from 'src/core/guards';
|
||||||
|
import { UpdateItemPriceDto } from './dto/update-item-price.dto';
|
||||||
|
|
||||||
@ApiTags(`${MODULE_NAME.ITEM.split('-').join(' ')} - data`)
|
@ApiTags(`${MODULE_NAME.ITEM.split('-').join(' ')} - data`)
|
||||||
@Controller(`v1/${MODULE_NAME.ITEM}`)
|
@Controller(`v1/${MODULE_NAME.ITEM}`)
|
||||||
|
@ -28,6 +29,11 @@ export class ItemDataController {
|
||||||
return await this.orchestrator.create(data);
|
return await this.orchestrator.create(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Post('update-price')
|
||||||
|
async updatePrice(@Body() body: UpdateItemPriceDto): Promise<any> {
|
||||||
|
return await this.orchestrator.updatePrice(body);
|
||||||
|
}
|
||||||
|
|
||||||
@Put('/batch-delete')
|
@Put('/batch-delete')
|
||||||
async batchDeleted(@Body() body: BatchIdsDto): Promise<BatchResult> {
|
async batchDeleted(@Body() body: BatchIdsDto): Promise<BatchResult> {
|
||||||
return await this.orchestrator.batchDelete(body.ids);
|
return await this.orchestrator.batchDelete(body.ids);
|
||||||
|
|
|
@ -25,6 +25,7 @@ import { ItemModel } from './data/models/item.model';
|
||||||
import { ItemRateModel } from '../item-rate/data/models/item-rate.model';
|
import { ItemRateModel } from '../item-rate/data/models/item-rate.model';
|
||||||
import { ItemRateReadService } from '../item-rate/data/services/item-rate-read.service';
|
import { ItemRateReadService } from '../item-rate/data/services/item-rate-read.service';
|
||||||
import { IndexItemRatesManager } from './domain/usecases/managers/index-item-rates.manager';
|
import { IndexItemRatesManager } from './domain/usecases/managers/index-item-rates.manager';
|
||||||
|
import { UpdateItemRatePriceManager } from './domain/usecases/managers/update-item-rate-price.manager';
|
||||||
|
|
||||||
@Global()
|
@Global()
|
||||||
@Module({
|
@Module({
|
||||||
|
@ -51,6 +52,7 @@ import { IndexItemRatesManager } from './domain/usecases/managers/index-item-rat
|
||||||
BatchActiveItemManager,
|
BatchActiveItemManager,
|
||||||
BatchConfirmItemManager,
|
BatchConfirmItemManager,
|
||||||
BatchInactiveItemManager,
|
BatchInactiveItemManager,
|
||||||
|
UpdateItemRatePriceManager,
|
||||||
|
|
||||||
ItemDataService,
|
ItemDataService,
|
||||||
ItemReadService,
|
ItemReadService,
|
||||||
|
|
Loading…
Reference in New Issue