This commit is contained in:
Ahmed Bouhuolia
2025-11-17 17:04:25 +02:00
parent 2383091b6e
commit 2c64e1b8ab
41 changed files with 709 additions and 87 deletions

View File

@@ -23,6 +23,8 @@ import {
EditSaleInvoiceDto,
} from './dtos/SaleInvoice.dto';
import { GenerateShareLink } from './commands/GenerateInvoicePaymentLink.service';
import { BulkDeleteSaleInvoicesService } from './BulkDeleteSaleInvoices.service';
import { ValidateBulkDeleteSaleInvoicesService } from './ValidateBulkDeleteSaleInvoices.service';
@Injectable()
export class SaleInvoiceApplication {
@@ -41,6 +43,8 @@ export class SaleInvoiceApplication {
private sendSaleInvoiceMailService: SendSaleInvoiceMail,
private getSaleInvoiceMailStateService: GetSaleInvoiceMailState,
private generateShareLinkService: GenerateShareLink,
private bulkDeleteSaleInvoicesService: BulkDeleteSaleInvoicesService,
private validateBulkDeleteSaleInvoicesService: ValidateBulkDeleteSaleInvoicesService,
) {}
/**
@@ -78,6 +82,27 @@ export class SaleInvoiceApplication {
return this.deleteSaleInvoiceService.deleteSaleInvoice(saleInvoiceId);
}
/**
* Deletes multiple sale invoices.
* @param {number[]} saleInvoiceIds
* @return {Promise<void>}
*/
public bulkDeleteSaleInvoices(saleInvoiceIds: number[]) {
return this.bulkDeleteSaleInvoicesService.bulkDeleteSaleInvoices(
saleInvoiceIds,
);
}
/**
* Validates which sale invoices can be deleted.
* @param {number[]} saleInvoiceIds
*/
public validateBulkDeleteSaleInvoices(saleInvoiceIds: number[]) {
return this.validateBulkDeleteSaleInvoicesService.validateBulkDeleteSaleInvoices(
saleInvoiceIds,
);
}
/**
* Retrieves the given sale invoice details.
* @param {ISalesInvoicesFilter} filterDTO

View File

@@ -39,6 +39,10 @@ import { PaginatedResponseDto } from '@/common/dtos/PaginatedResults.dto';
import { SaleInvoiceStateResponseDto } from './dtos/SaleInvoiceState.dto';
import { GenerateSaleInvoiceSharableLinkResponseDto } from './dtos/GenerateSaleInvoiceSharableLinkResponse.dto';
import { ApiCommonHeaders } from '@/common/decorators/ApiCommonHeaders';
import {
BulkDeleteDto,
ValidateBulkDeleteResponseDto,
} from '@/common/dtos/BulkDelete.dto';
@Controller('sale-invoices')
@ApiTags('Sale Invoices')
@@ -47,9 +51,43 @@ import { ApiCommonHeaders } from '@/common/decorators/ApiCommonHeaders';
@ApiExtraModels(SaleInvoiceStateResponseDto)
@ApiExtraModels(GenerateSaleInvoiceSharableLinkResponseDto)
@ApiCommonHeaders()
@ApiExtraModels(ValidateBulkDeleteResponseDto)
export class SaleInvoicesController {
constructor(private saleInvoiceApplication: SaleInvoiceApplication) { }
@Post('validate-bulk-delete')
@ApiOperation({
summary:
'Validates which sale invoices can be deleted and returns the results.',
})
@ApiResponse({
status: 200,
description:
'Validation completed with counts and IDs of deletable and non-deletable sale invoices.',
schema: {
$ref: getSchemaPath(ValidateBulkDeleteResponseDto),
},
})
validateBulkDeleteSaleInvoices(
@Body() bulkDeleteDto: BulkDeleteDto,
): Promise<ValidateBulkDeleteResponseDto> {
return this.saleInvoiceApplication.validateBulkDeleteSaleInvoices(
bulkDeleteDto.ids,
);
}
@Post('bulk-delete')
@ApiOperation({ summary: 'Deletes multiple sale invoices.' })
@ApiResponse({
status: 200,
description: 'Sale invoices deleted successfully',
})
bulkDeleteSaleInvoices(@Body() bulkDeleteDto: BulkDeleteDto): Promise<void> {
return this.saleInvoiceApplication.bulkDeleteSaleInvoices(
bulkDeleteDto.ids,
);
}
@Post()
@ApiOperation({ summary: 'Create a new sale invoice.' })
@ApiResponse({

View File

@@ -60,6 +60,8 @@ import { SaleInvoicesCost } from './SalesInvoicesCost';
import { SaleInvoicesExportable } from './commands/SaleInvoicesExportable';
import { SaleInvoicesImportable } from './commands/SaleInvoicesImportable';
import { PaymentLinksModule } from '../PaymentLinks/PaymentLinks.module';
import { BulkDeleteSaleInvoicesService } from './BulkDeleteSaleInvoices.service';
import { ValidateBulkDeleteSaleInvoicesService } from './ValidateBulkDeleteSaleInvoices.service';
@Module({
imports: [
@@ -126,6 +128,8 @@ import { PaymentLinksModule } from '../PaymentLinks/PaymentLinks.module';
SaleInvoicesCost,
SaleInvoicesExportable,
SaleInvoicesImportable,
BulkDeleteSaleInvoicesService,
ValidateBulkDeleteSaleInvoicesService,
],
exports: [
GetSaleInvoice,