Files
bigcapital/packages/server/src/modules/BillLandedCosts/LandedCost.controller.ts
2026-01-17 21:42:27 +02:00

100 lines
3.1 KiB
TypeScript

import {
Body,
Controller,
Delete,
Get,
Param,
Post,
Query,
} from '@nestjs/common';
import { ApiTags, ApiOperation, ApiResponse } from '@nestjs/swagger';
import { AllocateBillLandedCostDto } from './dtos/AllocateBillLandedCost.dto';
import { AllocateLandedCostService } from './commands/AllocateLandedCost.service';
import { BillAllocatedLandedCostTransactions } from './commands/BillAllocatedLandedCostTransactions.service';
import { RevertAllocatedLandedCost } from './commands/RevertAllocatedLandedCost.service';
import { LandedCostTranasctions } from './commands/LandedCostTransactions.service';
import { LandedCostTransactionsQueryDto } from './dtos/LandedCostTransactionsQuery.dto';
import { ApiCommonHeaders } from '@/common/decorators/ApiCommonHeaders';
@ApiTags('Landed Cost')
@Controller('landed-cost')
@ApiCommonHeaders()
export class BillAllocateLandedCostController {
constructor(
private allocateLandedCost: AllocateLandedCostService,
private billAllocatedCostTransactions: BillAllocatedLandedCostTransactions,
private revertAllocatedLandedCost: RevertAllocatedLandedCost,
private landedCostTransactions: LandedCostTranasctions,
) { }
@Get('/transactions')
@ApiOperation({ summary: 'Get landed cost transactions' })
@ApiResponse({
status: 200,
description: 'List of landed cost transactions.',
})
async getLandedCostTransactions(
@Query() query: LandedCostTransactionsQueryDto,
) {
const transactions =
await this.landedCostTransactions.getLandedCostTransactions(query);
return transactions;
}
@Post('/bills/:billId/allocate')
@ApiOperation({ summary: 'Allocate landed cost to bill items' })
@ApiResponse({
status: 201,
description: 'Landed cost allocated successfully.',
})
public async calculateLandedCost(
@Param('billId') billId: number,
@Body() landedCostDTO: AllocateBillLandedCostDto,
) {
const billLandedCost = await this.allocateLandedCost.allocateLandedCost(
landedCostDTO,
billId,
);
return {
id: billLandedCost.id,
message: 'The items cost are located successfully.',
};
}
@Delete('/:allocatedLandedCostId')
@ApiOperation({ summary: 'Delete allocated landed cost' })
@ApiResponse({
status: 200,
description: 'Allocated landed cost deleted successfully.',
})
public async deleteAllocatedLandedCost(
@Param('allocatedLandedCostId') allocatedLandedCostId: number,
) {
await this.revertAllocatedLandedCost.deleteAllocatedLandedCost(
allocatedLandedCostId,
);
return {
id: allocatedLandedCostId,
message: 'The allocated landed cost are delete successfully.',
};
}
@Get('/bills/:billId/transactions')
@ApiOperation({ summary: 'Get bill landed cost transactions' })
@ApiResponse({
status: 200,
description: 'List of bill landed cost transactions.',
})
async getBillLandedCostTransactions(@Param('billId') billId: number) {
const data =
await this.billAllocatedCostTransactions.getBillLandedCostTransactions(
billId,
);
return {
billId,
data,
};
}
}