diff --git a/packages/server/src/common/dtos/BulkDelete.dto.ts b/packages/server/src/common/dtos/BulkDelete.dto.ts index 6b1415499..84edab2bf 100644 --- a/packages/server/src/common/dtos/BulkDelete.dto.ts +++ b/packages/server/src/common/dtos/BulkDelete.dto.ts @@ -1,5 +1,7 @@ -import { IsArray, IsInt, ArrayNotEmpty } from 'class-validator'; -import { ApiProperty } from '@nestjs/swagger'; +import { IsArray, IsInt, ArrayNotEmpty, IsBoolean, IsOptional } from 'class-validator'; +import { ApiProperty, ApiPropertyOptional } from '@nestjs/swagger'; +import { Transform } from 'class-transformer'; +import { parseBoolean } from '@/utils/parse-boolean'; export class BulkDeleteDto { @IsArray() @@ -11,6 +13,16 @@ export class BulkDeleteDto { example: [1, 2, 3], }) ids: number[]; + + @IsOptional() + @IsBoolean() + @Transform(({ value }) => parseBoolean(value, false)) + @ApiPropertyOptional({ + description: 'When true, undeletable items will be skipped and only deletable ones will be removed.', + type: Boolean, + default: false, + }) + skipUndeletable?: boolean; } export class ValidateBulkDeleteResponseDto { diff --git a/packages/server/src/modules/Accounts/Accounts.controller.ts b/packages/server/src/modules/Accounts/Accounts.controller.ts index a58fa95af..458079de9 100644 --- a/packages/server/src/modules/Accounts/Accounts.controller.ts +++ b/packages/server/src/modules/Accounts/Accounts.controller.ts @@ -7,8 +7,6 @@ import { Get, Query, ParseIntPipe, - DefaultValuePipe, - ParseBoolPipe, } from '@nestjs/common'; import { AccountsApplication } from './AccountsApplication.service'; import { CreateAccountDTO } from './CreateAccount.dto'; @@ -66,24 +64,15 @@ export class AccountsController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple accounts in bulk.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable accounts will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'The accounts have been successfully deleted.', }) async bulkDeleteAccounts( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.accountsApplication.bulkDeleteAccounts(bulkDeleteDto.ids, { - skipUndeletable, + skipUndeletable: bulkDeleteDto.skipUndeletable ?? false, }); } diff --git a/packages/server/src/modules/Accounts/DeleteAccount.service.ts b/packages/server/src/modules/Accounts/DeleteAccount.service.ts index 985989998..7f02b6cc0 100644 --- a/packages/server/src/modules/Accounts/DeleteAccount.service.ts +++ b/packages/server/src/modules/Accounts/DeleteAccount.service.ts @@ -50,8 +50,12 @@ export class DeleteAccount { /** * Deletes the account from the storage. * @param {number} accountId + * @param {Knex.Transaction} trx - Database transaction instance. */ - public deleteAccount = async (accountId: number): Promise => { + public deleteAccount = async ( + accountId: number, + trx?: Knex.Transaction, + ): Promise => { // Retrieve account or not found service error. const oldAccount = await this.accountModel().query().findById(accountId); @@ -82,6 +86,6 @@ export class DeleteAccount { oldAccount, trx, } as IAccountEventDeletedPayload); - }); + }, trx); }; } diff --git a/packages/server/src/modules/Accounts/ValidateBulkDeleteAccounts.service.ts b/packages/server/src/modules/Accounts/ValidateBulkDeleteAccounts.service.ts index de513bb48..b65398875 100644 --- a/packages/server/src/modules/Accounts/ValidateBulkDeleteAccounts.service.ts +++ b/packages/server/src/modules/Accounts/ValidateBulkDeleteAccounts.service.ts @@ -35,7 +35,7 @@ export class ValidateBulkDeleteAccountsService { for (const accountId of accountIds) { try { - await this.deleteAccountService.deleteAccount(accountId); + await this.deleteAccountService.deleteAccount(accountId, trx); deletableIds.push(accountId); } catch (error) { if (error instanceof ModelHasRelationsError) { diff --git a/packages/server/src/modules/Bills/Bills.controller.ts b/packages/server/src/modules/Bills/Bills.controller.ts index 287b747b2..3619ecd18 100644 --- a/packages/server/src/modules/Bills/Bills.controller.ts +++ b/packages/server/src/modules/Bills/Bills.controller.ts @@ -2,7 +2,6 @@ import { ApiExtraModels, ApiOperation, ApiParam, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -16,8 +15,6 @@ import { Delete, Get, Query, - DefaultValuePipe, - ParseBoolPipe, } from '@nestjs/common'; import { BillsApplication } from './Bills.application'; import { IBillsFilter } from './Bills.types'; @@ -59,24 +56,15 @@ export class BillsController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple bills.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable bills will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Bills deleted successfully', }) bulkDeleteBills( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.billsApplication.bulkDeleteBills(bulkDeleteDto.ids, { - skipUndeletable, + skipUndeletable: bulkDeleteDto.skipUndeletable ?? false, }); } diff --git a/packages/server/src/modules/Bills/ValidateBulkDeleteBills.service.ts b/packages/server/src/modules/Bills/ValidateBulkDeleteBills.service.ts index d16145901..f65f076a6 100644 --- a/packages/server/src/modules/Bills/ValidateBulkDeleteBills.service.ts +++ b/packages/server/src/modules/Bills/ValidateBulkDeleteBills.service.ts @@ -27,7 +27,7 @@ export class ValidateBulkDeleteBillsService { for (const billId of billIds) { try { - await this.deleteBillService.deleteBill(billId); + await this.deleteBillService.deleteBill(billId, trx); deletableIds.push(billId); } catch (error) { nonDeletableIds.push(billId); diff --git a/packages/server/src/modules/Bills/commands/DeleteBill.service.ts b/packages/server/src/modules/Bills/commands/DeleteBill.service.ts index 62d691da9..de2c8b26f 100644 --- a/packages/server/src/modules/Bills/commands/DeleteBill.service.ts +++ b/packages/server/src/modules/Bills/commands/DeleteBill.service.ts @@ -29,9 +29,10 @@ export class DeleteBill { /** * Deletes the bill with associated entries. * @param {number} billId + * @param {Knex.Transaction} trx - Database transaction instance. * @return {void} */ - public async deleteBill(billId: number) { + public async deleteBill(billId: number, trx?: Knex.Transaction) { // Retrieve the given bill or throw not found error. const oldBill = await this.billModel() .query() @@ -75,6 +76,6 @@ export class DeleteBill { oldBill, trx, } as IBIllEventDeletedPayload); - }); + }, trx); } } diff --git a/packages/server/src/modules/CreditNotes/CreditNotes.controller.ts b/packages/server/src/modules/CreditNotes/CreditNotes.controller.ts index 603709042..3ca2b48da 100644 --- a/packages/server/src/modules/CreditNotes/CreditNotes.controller.ts +++ b/packages/server/src/modules/CreditNotes/CreditNotes.controller.ts @@ -3,7 +3,6 @@ import { ApiOperation, ApiResponse, ApiParam, - ApiQuery, ApiExtraModels, getSchemaPath, } from '@nestjs/swagger'; @@ -12,9 +11,7 @@ import { Controller, Delete, Get, - DefaultValuePipe, Param, - ParseBoolPipe, Post, Put, Query, @@ -143,25 +140,16 @@ export class CreditNotesController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple credit notes.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable credit notes will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Credit notes deleted successfully', }) bulkDeleteCreditNotes( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.creditNoteApplication.bulkDeleteCreditNotes( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/CreditNotes/ValidateBulkDeleteCreditNotes.service.ts b/packages/server/src/modules/CreditNotes/ValidateBulkDeleteCreditNotes.service.ts index 46fab3735..18c011fb7 100644 --- a/packages/server/src/modules/CreditNotes/ValidateBulkDeleteCreditNotes.service.ts +++ b/packages/server/src/modules/CreditNotes/ValidateBulkDeleteCreditNotes.service.ts @@ -9,7 +9,7 @@ export class ValidateBulkDeleteCreditNotesService { private readonly deleteCreditNoteService: DeleteCreditNoteService, @Inject(TENANCY_DB_CONNECTION) private readonly tenantKnex: () => Knex, - ) {} + ) { } public async validateBulkDeleteCreditNotes(creditNoteIds: number[]): Promise<{ deletableCount: number; @@ -27,7 +27,10 @@ export class ValidateBulkDeleteCreditNotesService { for (const creditNoteId of creditNoteIds) { try { - await this.deleteCreditNoteService.deleteCreditNote(creditNoteId); + await this.deleteCreditNoteService.deleteCreditNote( + creditNoteId, + trx, + ); deletableIds.push(creditNoteId); } catch (error) { nonDeletableIds.push(creditNoteId); diff --git a/packages/server/src/modules/CreditNotes/commands/DeleteCreditNote.service.ts b/packages/server/src/modules/CreditNotes/commands/DeleteCreditNote.service.ts index beb16d606..b1d94a1cb 100644 --- a/packages/server/src/modules/CreditNotes/commands/DeleteCreditNote.service.ts +++ b/packages/server/src/modules/CreditNotes/commands/DeleteCreditNote.service.ts @@ -49,9 +49,13 @@ export class DeleteCreditNoteService { /** * Deletes the given credit note transactions. * @param {number} creditNoteId + * @param {Knex.Transaction} trx - Database transaction instance. * @returns {Promise} */ - public async deleteCreditNote(creditNoteId: number): Promise { + public async deleteCreditNote( + creditNoteId: number, + trx?: Knex.Transaction, + ): Promise { // Retrieve the credit note or throw not found service error. const oldCreditNote = await this.creditNoteModel() .query() @@ -88,7 +92,7 @@ export class DeleteCreditNoteService { creditNoteId, trx, } as ICreditNoteDeletedPayload); - }); + }, trx); } /** diff --git a/packages/server/src/modules/Expenses/Expenses.controller.ts b/packages/server/src/modules/Expenses/Expenses.controller.ts index 3e55bafc3..2f80404a2 100644 --- a/packages/server/src/modules/Expenses/Expenses.controller.ts +++ b/packages/server/src/modules/Expenses/Expenses.controller.ts @@ -7,15 +7,12 @@ import { Post, Put, Query, - DefaultValuePipe, - ParseBoolPipe, } from '@nestjs/common'; import { ExpensesApplication } from './ExpensesApplication.service'; import { IExpensesFilter } from './Expenses.types'; import { ApiExtraModels, ApiOperation, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -62,24 +59,15 @@ export class ExpensesController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple expenses.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable expenses will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Expenses deleted successfully', }) public bulkDeleteExpenses( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ) { return this.expensesApplication.bulkDeleteExpenses(bulkDeleteDto.ids, { - skipUndeletable, + skipUndeletable: bulkDeleteDto.skipUndeletable ?? false, }); } diff --git a/packages/server/src/modules/Expenses/ValidateBulkDeleteExpenses.service.ts b/packages/server/src/modules/Expenses/ValidateBulkDeleteExpenses.service.ts index 49684968d..42c73e304 100644 --- a/packages/server/src/modules/Expenses/ValidateBulkDeleteExpenses.service.ts +++ b/packages/server/src/modules/Expenses/ValidateBulkDeleteExpenses.service.ts @@ -27,7 +27,7 @@ export class ValidateBulkDeleteExpensesService { for (const expenseId of expenseIds) { try { - await this.deleteExpenseService.deleteExpense(expenseId); + await this.deleteExpenseService.deleteExpense(expenseId, trx); deletableIds.push(expenseId); } catch (error) { nonDeletableIds.push(expenseId); diff --git a/packages/server/src/modules/Expenses/commands/DeleteExpense.service.ts b/packages/server/src/modules/Expenses/commands/DeleteExpense.service.ts index 5820642a2..14feff3c3 100644 --- a/packages/server/src/modules/Expenses/commands/DeleteExpense.service.ts +++ b/packages/server/src/modules/Expenses/commands/DeleteExpense.service.ts @@ -36,9 +36,12 @@ export class DeleteExpense { /** * Deletes the given expense. * @param {number} expenseId - * @param {ISystemUser} authorizedUser + * @param {Knex.Transaction} trx - Database transaction instance. */ - public async deleteExpense(expenseId: number): Promise { + public async deleteExpense( + expenseId: number, + trx?: Knex.Transaction, + ): Promise { // Retrieves the expense transaction with associated entries or // throw not found error. const oldExpense = await this.expenseModel() @@ -74,6 +77,6 @@ export class DeleteExpense { oldExpense, trx, } as IExpenseEventDeletePayload); - }); + }, trx); } } diff --git a/packages/server/src/modules/ItemCategories/ValidateBulkDeleteItemCategories.service.ts b/packages/server/src/modules/ItemCategories/ValidateBulkDeleteItemCategories.service.ts index a9de7ab7d..d66239175 100644 --- a/packages/server/src/modules/ItemCategories/ValidateBulkDeleteItemCategories.service.ts +++ b/packages/server/src/modules/ItemCategories/ValidateBulkDeleteItemCategories.service.ts @@ -27,7 +27,10 @@ export class ValidateBulkDeleteItemCategoriesService { for (const itemCategoryId of itemCategoryIds) { try { - await this.deleteItemCategoryService.deleteItemCategory(itemCategoryId); + await this.deleteItemCategoryService.deleteItemCategory( + itemCategoryId, + trx, + ); deletableIds.push(itemCategoryId); } catch (error) { nonDeletableIds.push(itemCategoryId); diff --git a/packages/server/src/modules/ItemCategories/commands/DeleteItemCategory.service.ts b/packages/server/src/modules/ItemCategories/commands/DeleteItemCategory.service.ts index c1f8e45e8..0fa68a217 100644 --- a/packages/server/src/modules/ItemCategories/commands/DeleteItemCategory.service.ts +++ b/packages/server/src/modules/ItemCategories/commands/DeleteItemCategory.service.ts @@ -32,9 +32,13 @@ export class DeleteItemCategoryService { /** * Deletes the given item category. * @param {number} itemCategoryId - Item category id. + * @param {Knex.Transaction} trx - Database transaction instance. * @return {Promise} */ - public async deleteItemCategory(itemCategoryId: number) { + public async deleteItemCategory( + itemCategoryId: number, + trx?: Knex.Transaction, + ) { // Retrieve item category or throw not found error. const oldItemCategory = await this.itemCategoryModel() .query() @@ -56,7 +60,7 @@ export class DeleteItemCategoryService { itemCategoryId, oldItemCategory, } as IItemCategoryDeletedPayload); - }); + }, trx); } /** diff --git a/packages/server/src/modules/ManualJournals/ManualJournals.controller.ts b/packages/server/src/modules/ManualJournals/ManualJournals.controller.ts index ebdabee2a..239ebadf7 100644 --- a/packages/server/src/modules/ManualJournals/ManualJournals.controller.ts +++ b/packages/server/src/modules/ManualJournals/ManualJournals.controller.ts @@ -8,15 +8,12 @@ import { Post, Put, Query, - DefaultValuePipe, - ParseBoolPipe, } from '@nestjs/common'; import { ManualJournalsApplication } from './ManualJournalsApplication.service'; import { ApiExtraModels, ApiOperation, ApiParam, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -64,25 +61,16 @@ export class ManualJournalsController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple manual journals.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable journals will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Manual journals deleted successfully', }) public bulkDeleteManualJournals( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.manualJournalsApplication.bulkDeleteManualJournals( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/ManualJournals/ValidateBulkDeleteManualJournals.service.ts b/packages/server/src/modules/ManualJournals/ValidateBulkDeleteManualJournals.service.ts index 44eba602c..3d275cabb 100644 --- a/packages/server/src/modules/ManualJournals/ValidateBulkDeleteManualJournals.service.ts +++ b/packages/server/src/modules/ManualJournals/ValidateBulkDeleteManualJournals.service.ts @@ -31,6 +31,7 @@ export class ValidateBulkDeleteManualJournalsService { try { await this.deleteManualJournalService.deleteManualJournal( manualJournalId, + trx, ); deletableIds.push(manualJournalId); } catch (error) { diff --git a/packages/server/src/modules/ManualJournals/commands/DeleteManualJournal.service.ts b/packages/server/src/modules/ManualJournals/commands/DeleteManualJournal.service.ts index 0f87103e3..d703dcabe 100644 --- a/packages/server/src/modules/ManualJournals/commands/DeleteManualJournal.service.ts +++ b/packages/server/src/modules/ManualJournals/commands/DeleteManualJournal.service.ts @@ -29,10 +29,12 @@ export class DeleteManualJournalService { /** * Deletes the given manual journal * @param {number} manualJournalId + * @param {Knex.Transaction} trx - Database transaction instance. * @return {Promise} */ public deleteManualJournal = async ( manualJournalId: number, + trx?: Knex.Transaction, ): Promise<{ oldManualJournal: ManualJournal; }> => { @@ -70,6 +72,6 @@ export class DeleteManualJournalService { } as IManualJournalEventDeletedPayload); return { oldManualJournal }; - }); + }, trx); }; } diff --git a/packages/server/src/modules/PaymentReceived/PaymentsReceived.controller.ts b/packages/server/src/modules/PaymentReceived/PaymentsReceived.controller.ts index 3ec616ad4..06a501e17 100644 --- a/packages/server/src/modules/PaymentReceived/PaymentsReceived.controller.ts +++ b/packages/server/src/modules/PaymentReceived/PaymentsReceived.controller.ts @@ -1,7 +1,6 @@ import { ApiExtraModels, ApiOperation, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -14,12 +13,10 @@ import { Headers, HttpCode, Param, - ParseBoolPipe, ParseIntPipe, Post, Put, Query, - DefaultValuePipe, } from '@nestjs/common'; import { PaymentReceivesApplication } from './PaymentReceived.application'; import { @@ -174,25 +171,16 @@ export class PaymentReceivesController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple payments received.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable payments will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Payments received deleted successfully.', }) public bulkDeletePaymentsReceived( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ) { return this.paymentReceivesApplication.bulkDeletePaymentReceives( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/PaymentReceived/ValidateBulkDeletePaymentReceived.service.ts b/packages/server/src/modules/PaymentReceived/ValidateBulkDeletePaymentReceived.service.ts index 159572f2f..81bbfd729 100644 --- a/packages/server/src/modules/PaymentReceived/ValidateBulkDeletePaymentReceived.service.ts +++ b/packages/server/src/modules/PaymentReceived/ValidateBulkDeletePaymentReceived.service.ts @@ -9,7 +9,7 @@ export class ValidateBulkDeletePaymentReceivedService { private readonly deletePaymentReceivedService: DeletePaymentReceivedService, @Inject(TENANCY_DB_CONNECTION) private readonly tenantKnex: () => Knex, - ) {} + ) { } public async validateBulkDeletePaymentReceived( paymentReceiveIds: number[], @@ -31,6 +31,7 @@ export class ValidateBulkDeletePaymentReceivedService { try { await this.deletePaymentReceivedService.deletePaymentReceive( paymentReceiveId, + trx, ); deletableIds.push(paymentReceiveId); } catch (error) { diff --git a/packages/server/src/modules/PaymentReceived/commands/DeletePaymentReceived.service.ts b/packages/server/src/modules/PaymentReceived/commands/DeletePaymentReceived.service.ts index 7d17c4f2f..b621ede45 100644 --- a/packages/server/src/modules/PaymentReceived/commands/DeletePaymentReceived.service.ts +++ b/packages/server/src/modules/PaymentReceived/commands/DeletePaymentReceived.service.ts @@ -30,7 +30,7 @@ export class DeletePaymentReceivedService { private paymentReceiveEntryModel: TenantModelProxy< typeof PaymentReceivedEntry >, - ) {} + ) { } /** * Deletes the given payment receive with associated entries @@ -43,9 +43,12 @@ export class DeletePaymentReceivedService { * - Revert the payment amount of the associated invoices. * @async * @param {Integer} paymentReceiveId - Payment receive id. - * @param {IPaymentReceived} paymentReceive - Payment receive object. + * @param {Knex.Transaction} trx - Database transaction instance. */ - public async deletePaymentReceive(paymentReceiveId: number) { + public async deletePaymentReceive( + paymentReceiveId: number, + trx?: Knex.Transaction, + ) { // Retreive payment receive or throw not found service error. const oldPaymentReceive = await this.paymentReceiveModel() .query() @@ -79,6 +82,6 @@ export class DeletePaymentReceivedService { oldPaymentReceive, trx, } as IPaymentReceivedDeletedPayload); - }); + }, trx); } } diff --git a/packages/server/src/modules/SaleEstimates/SaleEstimates.controller.ts b/packages/server/src/modules/SaleEstimates/SaleEstimates.controller.ts index 7565de7e3..a8fe3d2f5 100644 --- a/packages/server/src/modules/SaleEstimates/SaleEstimates.controller.ts +++ b/packages/server/src/modules/SaleEstimates/SaleEstimates.controller.ts @@ -2,7 +2,6 @@ import { ApiExtraModels, ApiOperation, ApiParam, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -12,11 +11,9 @@ import { Controller, Delete, Get, - DefaultValuePipe, Headers, HttpCode, Param, - ParseBoolPipe, ParseIntPipe, Post, Put, @@ -75,25 +72,16 @@ export class SaleEstimatesController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple sale estimates.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable estimates will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Sale estimates deleted successfully', }) public bulkDeleteSaleEstimates( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.saleEstimatesApplication.bulkDeleteSaleEstimates( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/SaleEstimates/ValidateBulkDeleteSaleEstimates.service.ts b/packages/server/src/modules/SaleEstimates/ValidateBulkDeleteSaleEstimates.service.ts index efde94c4a..3ab7609d0 100644 --- a/packages/server/src/modules/SaleEstimates/ValidateBulkDeleteSaleEstimates.service.ts +++ b/packages/server/src/modules/SaleEstimates/ValidateBulkDeleteSaleEstimates.service.ts @@ -11,7 +11,9 @@ export class ValidateBulkDeleteSaleEstimatesService { private readonly tenantKnex: () => Knex, ) { } - public async validateBulkDeleteSaleEstimates(saleEstimateIds: number[]): Promise<{ + public async validateBulkDeleteSaleEstimates( + saleEstimateIds: number[], + ): Promise<{ deletableCount: number; nonDeletableCount: number; deletableIds: number[]; @@ -27,7 +29,10 @@ export class ValidateBulkDeleteSaleEstimatesService { for (const saleEstimateId of saleEstimateIds) { try { - await this.deleteSaleEstimateService.deleteEstimate(saleEstimateId); + await this.deleteSaleEstimateService.deleteEstimate( + saleEstimateId, + trx, + ); deletableIds.push(saleEstimateId); } catch (error) { nonDeletableIds.push(saleEstimateId); @@ -48,4 +53,3 @@ export class ValidateBulkDeleteSaleEstimatesService { } } } - diff --git a/packages/server/src/modules/SaleEstimates/commands/DeleteSaleEstimate.service.ts b/packages/server/src/modules/SaleEstimates/commands/DeleteSaleEstimate.service.ts index 823c60bb2..5a1e5b5ff 100644 --- a/packages/server/src/modules/SaleEstimates/commands/DeleteSaleEstimate.service.ts +++ b/packages/server/src/modules/SaleEstimates/commands/DeleteSaleEstimate.service.ts @@ -24,18 +24,22 @@ export class DeleteSaleEstimate { private readonly eventPublisher: EventEmitter2, private readonly uow: UnitOfWork, - ) {} + ) { } /** * Deletes the given estimate id with associated entries. * @async - * @param {number} estimateId + * @param {number} estimateId - Sale estimate id. + * @param {Knex.Transaction} trx - Database transaction instance. * @return {Promise} */ - public async deleteEstimate(estimateId: number): Promise { + public async deleteEstimate( + estimateId: number, + trx?: Knex.Transaction, + ): Promise { // Retrieve sale estimate or throw not found service error. const oldSaleEstimate = await this.saleEstimateModel() - .query() + .query(trx) .findById(estimateId) .throwIfNotFound(); @@ -70,6 +74,6 @@ export class DeleteSaleEstimate { oldSaleEstimate, trx, } as ISaleEstimateDeletedPayload); - }); + }, trx); } } diff --git a/packages/server/src/modules/SaleInvoices/SaleInvoices.controller.ts b/packages/server/src/modules/SaleInvoices/SaleInvoices.controller.ts index c38d8caed..476c7cd3b 100644 --- a/packages/server/src/modules/SaleInvoices/SaleInvoices.controller.ts +++ b/packages/server/src/modules/SaleInvoices/SaleInvoices.controller.ts @@ -2,13 +2,11 @@ import { Response } from 'express'; import { Body, Controller, - DefaultValuePipe, Delete, Get, Headers, HttpCode, Param, - ParseBoolPipe, ParseIntPipe, Post, Put, @@ -80,25 +78,16 @@ export class SaleInvoicesController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple sale invoices.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable invoices will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Sale invoices deleted successfully', }) bulkDeleteSaleInvoices( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.saleInvoiceApplication.bulkDeleteSaleInvoices( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/SaleInvoices/ValidateBulkDeleteSaleInvoices.service.ts b/packages/server/src/modules/SaleInvoices/ValidateBulkDeleteSaleInvoices.service.ts index c69157c57..167369f83 100644 --- a/packages/server/src/modules/SaleInvoices/ValidateBulkDeleteSaleInvoices.service.ts +++ b/packages/server/src/modules/SaleInvoices/ValidateBulkDeleteSaleInvoices.service.ts @@ -27,7 +27,10 @@ export class ValidateBulkDeleteSaleInvoicesService { for (const saleInvoiceId of saleInvoiceIds) { try { - await this.deleteSaleInvoiceService.deleteSaleInvoice(saleInvoiceId); + await this.deleteSaleInvoiceService.deleteSaleInvoice( + saleInvoiceId, + trx, + ); deletableIds.push(saleInvoiceId); } catch (error) { nonDeletableIds.push(saleInvoiceId); diff --git a/packages/server/src/modules/SaleInvoices/commands/DeleteSaleInvoice.service.ts b/packages/server/src/modules/SaleInvoices/commands/DeleteSaleInvoice.service.ts index 1f3e0c91e..d586f6f9e 100644 --- a/packages/server/src/modules/SaleInvoices/commands/DeleteSaleInvoice.service.ts +++ b/packages/server/src/modules/SaleInvoices/commands/DeleteSaleInvoice.service.ts @@ -47,7 +47,7 @@ export class DeleteSaleInvoice { @Inject(ItemEntry.name) private itemEntryModel: TenantModelProxy, - ) {} + ) { } /** * Validate the sale invoice has no payment entries. @@ -86,9 +86,12 @@ export class DeleteSaleInvoice { * Deletes the given sale invoice with associated entries * and journal transactions. * @param {Number} saleInvoiceId - The given sale invoice id. - * @param {ISystemUser} authorizedUser - + * @param {Knex.Transaction} trx - Database transaction instance. */ - public async deleteSaleInvoice(saleInvoiceId: number): Promise { + public async deleteSaleInvoice( + saleInvoiceId: number, + trx?: Knex.Transaction, + ): Promise { // Retrieve the given sale invoice with associated entries // or throw not found error. const oldSaleInvoice = await this.saleInvoiceModel() @@ -138,6 +141,6 @@ export class DeleteSaleInvoice { saleInvoiceId, trx, } as ISaleInvoiceDeletedPayload); - }); + }, trx); } } diff --git a/packages/server/src/modules/SaleReceipts/SaleReceipts.controller.ts b/packages/server/src/modules/SaleReceipts/SaleReceipts.controller.ts index b671ee4c3..9b907f7e0 100644 --- a/packages/server/src/modules/SaleReceipts/SaleReceipts.controller.ts +++ b/packages/server/src/modules/SaleReceipts/SaleReceipts.controller.ts @@ -6,8 +6,6 @@ import { Headers, HttpCode, Param, - ParseBoolPipe, - DefaultValuePipe, ParseIntPipe, Post, Put, @@ -19,7 +17,6 @@ import { ApiExtraModels, ApiOperation, ApiParam, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -73,25 +70,16 @@ export class SaleReceiptsController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple sale receipts.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable receipts will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Sale receipts deleted successfully', }) bulkDeleteSaleReceipts( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.saleReceiptApplication.bulkDeleteSaleReceipts( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/SaleReceipts/ValidateBulkDeleteSaleReceipts.service.ts b/packages/server/src/modules/SaleReceipts/ValidateBulkDeleteSaleReceipts.service.ts index 2bf86a9f9..c824eed91 100644 --- a/packages/server/src/modules/SaleReceipts/ValidateBulkDeleteSaleReceipts.service.ts +++ b/packages/server/src/modules/SaleReceipts/ValidateBulkDeleteSaleReceipts.service.ts @@ -29,7 +29,10 @@ export class ValidateBulkDeleteSaleReceiptsService { for (const saleReceiptId of saleReceiptIds) { try { - await this.deleteSaleReceiptService.deleteSaleReceipt(saleReceiptId); + await this.deleteSaleReceiptService.deleteSaleReceipt( + saleReceiptId, + trx, + ); deletableIds.push(saleReceiptId); } catch (error) { nonDeletableIds.push(saleReceiptId); diff --git a/packages/server/src/modules/SaleReceipts/commands/DeleteSaleReceipt.service.ts b/packages/server/src/modules/SaleReceipts/commands/DeleteSaleReceipt.service.ts index ef89df19b..72aeb648f 100644 --- a/packages/server/src/modules/SaleReceipts/commands/DeleteSaleReceipt.service.ts +++ b/packages/server/src/modules/SaleReceipts/commands/DeleteSaleReceipt.service.ts @@ -29,9 +29,13 @@ export class DeleteSaleReceipt { /** * Deletes the sale receipt with associated entries. * @param {Integer} saleReceiptId - Sale receipt identifier. + * @param {Knex.Transaction} trx - Database transaction instance. * @return {void} */ - public async deleteSaleReceipt(saleReceiptId: number) { + public async deleteSaleReceipt( + saleReceiptId: number, + trx?: Knex.Transaction, + ) { const oldSaleReceipt = await this.saleReceiptModel() .query() .findById(saleReceiptId) @@ -65,6 +69,6 @@ export class DeleteSaleReceipt { oldSaleReceipt, trx, } as ISaleReceiptEventDeletedPayload); - }); + }, trx); } } diff --git a/packages/server/src/modules/VendorCredit/ValidateBulkDeleteVendorCredits.service.ts b/packages/server/src/modules/VendorCredit/ValidateBulkDeleteVendorCredits.service.ts index 4bdf864ac..c5a4d1929 100644 --- a/packages/server/src/modules/VendorCredit/ValidateBulkDeleteVendorCredits.service.ts +++ b/packages/server/src/modules/VendorCredit/ValidateBulkDeleteVendorCredits.service.ts @@ -31,6 +31,7 @@ export class ValidateBulkDeleteVendorCreditsService { try { await this.deleteVendorCreditService.deleteVendorCredit( vendorCreditId, + trx, ); deletableIds.push(vendorCreditId); } catch (error) { diff --git a/packages/server/src/modules/VendorCredit/VendorCredits.controller.ts b/packages/server/src/modules/VendorCredit/VendorCredits.controller.ts index cd03119e1..a98bcf9b7 100644 --- a/packages/server/src/modules/VendorCredit/VendorCredits.controller.ts +++ b/packages/server/src/modules/VendorCredit/VendorCredits.controller.ts @@ -7,15 +7,12 @@ import { Post, Put, Query, - DefaultValuePipe, - ParseBoolPipe, } from '@nestjs/common'; import { VendorCreditsApplicationService } from './VendorCreditsApplication.service'; import { IVendorCreditsQueryDTO } from './types/VendorCredit.types'; import { ApiExtraModels, ApiOperation, - ApiQuery, ApiResponse, ApiTags, getSchemaPath, @@ -62,25 +59,16 @@ export class VendorCreditsController { @Post('bulk-delete') @ApiOperation({ summary: 'Deletes multiple vendor credits.' }) - @ApiQuery({ - name: 'skip_undeletable', - required: false, - type: Boolean, - description: - 'When true, undeletable vendor credits will be skipped and only deletable ones will be removed.', - }) @ApiResponse({ status: 200, description: 'Vendor credits deleted successfully', }) async bulkDeleteVendorCredits( @Body() bulkDeleteDto: BulkDeleteDto, - @Query('skip_undeletable', new DefaultValuePipe(false), ParseBoolPipe) - skipUndeletable: boolean, ): Promise { return this.vendorCreditsApplication.bulkDeleteVendorCredits( bulkDeleteDto.ids, - { skipUndeletable }, + { skipUndeletable: bulkDeleteDto.skipUndeletable ?? false }, ); } diff --git a/packages/server/src/modules/VendorCredit/commands/DeleteVendorCredit.service.ts b/packages/server/src/modules/VendorCredit/commands/DeleteVendorCredit.service.ts index f50987cc4..8f537633e 100644 --- a/packages/server/src/modules/VendorCredit/commands/DeleteVendorCredit.service.ts +++ b/packages/server/src/modules/VendorCredit/commands/DeleteVendorCredit.service.ts @@ -93,7 +93,7 @@ export class DeleteVendorCreditService { oldVendorCredit, trx, } as IVendorCreditDeletedPayload); - }); + }, trx); }; /** diff --git a/packages/webapp/src/containers/Dialogs/Accounts/AccountBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/Accounts/AccountBulkDeleteDialog.tsx index 0111f9eb3..e2c2fcbac 100644 --- a/packages/webapp/src/containers/Dialogs/Accounts/AccountBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/Accounts/AccountBulkDeleteDialog.tsx @@ -46,8 +46,8 @@ function AccountBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('accounts-table'); - closeDialog(dialogName); setAccountsSelectedRows([]); + closeDialog(dialogName); }) .catch((errors) => { handleDeleteErrors(errors); diff --git a/packages/webapp/src/containers/Dialogs/Bills/BillBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/Bills/BillBulkDeleteDialog.tsx index a484cb8a9..dec28008c 100644 --- a/packages/webapp/src/containers/Dialogs/Bills/BillBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/Bills/BillBulkDeleteDialog.tsx @@ -45,8 +45,8 @@ function BillBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('bills-table'); - closeDialog(dialogName); setBillsSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/CreditNotes/CreditNoteBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/CreditNotes/CreditNoteBulkDeleteDialog.tsx index 731cbcd8e..d8cd70f48 100644 --- a/packages/webapp/src/containers/Dialogs/CreditNotes/CreditNoteBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/CreditNotes/CreditNoteBulkDeleteDialog.tsx @@ -46,8 +46,8 @@ function CreditNoteBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('credit-notes-table'); - closeDialog(dialogName); setCreditNotesSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/Estimates/EstimateBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/Estimates/EstimateBulkDeleteDialog.tsx index 95aa299f4..767cfa8bd 100644 --- a/packages/webapp/src/containers/Dialogs/Estimates/EstimateBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/Estimates/EstimateBulkDeleteDialog.tsx @@ -46,8 +46,8 @@ function EstimateBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('estimates-table'); - closeDialog(dialogName); setEstimatesSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/Expenses/ExpenseBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/Expenses/ExpenseBulkDeleteDialog.tsx index c8c3d22fe..a22c832da 100644 --- a/packages/webapp/src/containers/Dialogs/Expenses/ExpenseBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/Expenses/ExpenseBulkDeleteDialog.tsx @@ -46,8 +46,8 @@ function ExpenseBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('expenses-table'); - closeDialog(dialogName); setExpensesSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/Invoices/InvoiceBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/Invoices/InvoiceBulkDeleteDialog.tsx index 9b13c394b..cdc44db34 100644 --- a/packages/webapp/src/containers/Dialogs/Invoices/InvoiceBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/Invoices/InvoiceBulkDeleteDialog.tsx @@ -51,8 +51,8 @@ function InvoiceBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('invoices-table'); - closeDialog(dialogName); resetInvoicesSelectedRows(); + closeDialog(dialogName); }) .catch((errors) => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/ManualJournals/ManualJournalBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/ManualJournals/ManualJournalBulkDeleteDialog.tsx index 643333069..a18e9c93f 100644 --- a/packages/webapp/src/containers/Dialogs/ManualJournals/ManualJournalBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/ManualJournals/ManualJournalBulkDeleteDialog.tsx @@ -46,8 +46,8 @@ function ManualJournalBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('manual-journals-table'); - closeDialog(dialogName); setManualJournalsSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/PaymentsReceived/PaymentReceivedBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/PaymentsReceived/PaymentReceivedBulkDeleteDialog.tsx index 7ef6743e1..73aa0cee1 100644 --- a/packages/webapp/src/containers/Dialogs/PaymentsReceived/PaymentReceivedBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/PaymentsReceived/PaymentReceivedBulkDeleteDialog.tsx @@ -48,8 +48,8 @@ function PaymentReceivedBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('payments-received-table'); - closeDialog(dialogName); setPaymentReceivesSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/Receipts/ReceiptBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/Receipts/ReceiptBulkDeleteDialog.tsx index e5db5ab96..b975e1647 100644 --- a/packages/webapp/src/containers/Dialogs/Receipts/ReceiptBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/Receipts/ReceiptBulkDeleteDialog.tsx @@ -46,8 +46,8 @@ function ReceiptBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('sale-receipts-table'); - closeDialog(dialogName); setReceiptsSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/containers/Dialogs/VendorCredits/VendorCreditBulkDeleteDialog.tsx b/packages/webapp/src/containers/Dialogs/VendorCredits/VendorCreditBulkDeleteDialog.tsx index 27decd9ee..a79b2ae70 100644 --- a/packages/webapp/src/containers/Dialogs/VendorCredits/VendorCreditBulkDeleteDialog.tsx +++ b/packages/webapp/src/containers/Dialogs/VendorCredits/VendorCreditBulkDeleteDialog.tsx @@ -48,8 +48,8 @@ function VendorCreditBulkDeleteDialog({ intent: Intent.SUCCESS, }); queryCache.invalidateQueries('vendor-credits-table'); - closeDialog(dialogName); setVendorsCreditNoteSelectedRows([]); + closeDialog(dialogName); }) .catch(() => { AppToaster.show({ diff --git a/packages/webapp/src/hooks/query/accounts.tsx b/packages/webapp/src/hooks/query/accounts.tsx index da4e3bef0..46b5f30e3 100644 --- a/packages/webapp/src/hooks/query/accounts.tsx +++ b/packages/webapp/src/hooks/query/accounts.tsx @@ -165,15 +165,10 @@ export function useBulkDeleteAccounts(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'accounts/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('accounts/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/creditNote.tsx b/packages/webapp/src/hooks/query/creditNote.tsx index e88406498..f994a473a 100644 --- a/packages/webapp/src/hooks/query/creditNote.tsx +++ b/packages/webapp/src/hooks/query/creditNote.tsx @@ -126,15 +126,10 @@ export function useBulkDeleteCreditNotes(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'credit-notes/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('credit-notes/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/estimates.tsx b/packages/webapp/src/hooks/query/estimates.tsx index 486f3c34a..4f58162cc 100644 --- a/packages/webapp/src/hooks/query/estimates.tsx +++ b/packages/webapp/src/hooks/query/estimates.tsx @@ -139,15 +139,10 @@ export function useBulkDeleteEstimates(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'sale-estimates/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('sale-estimates/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/expenses.tsx b/packages/webapp/src/hooks/query/expenses.tsx index 3e1e3d11d..2f825eb76 100644 --- a/packages/webapp/src/hooks/query/expenses.tsx +++ b/packages/webapp/src/hooks/query/expenses.tsx @@ -117,15 +117,10 @@ export function useBulkDeleteExpenses(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'expenses/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('expenses/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/invoices.tsx b/packages/webapp/src/hooks/query/invoices.tsx index bd8f2272f..6fdcbbe38 100644 --- a/packages/webapp/src/hooks/query/invoices.tsx +++ b/packages/webapp/src/hooks/query/invoices.tsx @@ -140,15 +140,10 @@ export function useBulkDeleteInvoices(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'sale-invoices/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('sale-invoices/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/manualJournals.tsx b/packages/webapp/src/hooks/query/manualJournals.tsx index 0f3f3d95e..5f5f2bf2a 100644 --- a/packages/webapp/src/hooks/query/manualJournals.tsx +++ b/packages/webapp/src/hooks/query/manualJournals.tsx @@ -103,15 +103,10 @@ export function useBulkDeleteManualJournals(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'manual-journals/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('manual-journals/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/paymentReceives.tsx b/packages/webapp/src/hooks/query/paymentReceives.tsx index dfa8e663b..bb170b22e 100644 --- a/packages/webapp/src/hooks/query/paymentReceives.tsx +++ b/packages/webapp/src/hooks/query/paymentReceives.tsx @@ -165,15 +165,10 @@ export function useBulkDeletePaymentReceives(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'payments-received/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('payments-received/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/receipts.tsx b/packages/webapp/src/hooks/query/receipts.tsx index 8e7a52c6a..914c0670c 100644 --- a/packages/webapp/src/hooks/query/receipts.tsx +++ b/packages/webapp/src/hooks/query/receipts.tsx @@ -119,15 +119,10 @@ export function useBulkDeleteReceipts(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'sale-receipts/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('sale-receipts/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries. diff --git a/packages/webapp/src/hooks/query/vendorCredit.tsx b/packages/webapp/src/hooks/query/vendorCredit.tsx index 82a36db88..e12026a32 100644 --- a/packages/webapp/src/hooks/query/vendorCredit.tsx +++ b/packages/webapp/src/hooks/query/vendorCredit.tsx @@ -128,15 +128,10 @@ export function useBulkDeleteVendorCredits(props) { ids: number[]; skipUndeletable?: boolean; }) => - apiRequest.post( - 'vendor-credits/bulk-delete', - { ids }, - { - params: skipUndeletable - ? { skip_undeletable: true } - : undefined, - }, - ), + apiRequest.post('vendor-credits/bulk-delete', { + ids, + skipUndeletable, + }), { onSuccess: () => { // Common invalidate queries.