mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 04:40:32 +00:00
wip
This commit is contained in:
@@ -8,21 +8,31 @@ import { DeleteVendorCreditService } from './commands/DeleteVendorCredit.service
|
||||
export class BulkDeleteVendorCreditsService {
|
||||
constructor(
|
||||
private readonly deleteVendorCreditService: DeleteVendorCreditService,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
async bulkDeleteVendorCredits(
|
||||
vendorCreditIds: number | Array<number>,
|
||||
options?: { skipUndeletable?: boolean },
|
||||
trx?: Knex.Transaction,
|
||||
): Promise<void> {
|
||||
const { skipUndeletable = false } = options ?? {};
|
||||
const creditsIds = uniq(castArray(vendorCreditIds));
|
||||
|
||||
const results = await PromisePool.withConcurrency(1)
|
||||
.for(creditsIds)
|
||||
.process(async (vendorCreditId: number) => {
|
||||
await this.deleteVendorCreditService.deleteVendorCredit(vendorCreditId);
|
||||
try {
|
||||
await this.deleteVendorCreditService.deleteVendorCredit(
|
||||
vendorCreditId,
|
||||
);
|
||||
} catch (error) {
|
||||
if (!skipUndeletable) {
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
if (results.errors && results.errors.length > 0) {
|
||||
if (!skipUndeletable && results.errors && results.errors.length > 0) {
|
||||
throw results.errors[0].raw;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,23 +7,82 @@ import {
|
||||
Post,
|
||||
Put,
|
||||
Query,
|
||||
DefaultValuePipe,
|
||||
ParseBoolPipe,
|
||||
} from '@nestjs/common';
|
||||
import { VendorCreditsApplicationService } from './VendorCreditsApplication.service';
|
||||
import { IVendorCreditsQueryDTO } from './types/VendorCredit.types';
|
||||
import { ApiOperation, ApiTags } from '@nestjs/swagger';
|
||||
import {
|
||||
ApiExtraModels,
|
||||
ApiOperation,
|
||||
ApiQuery,
|
||||
ApiResponse,
|
||||
ApiTags,
|
||||
getSchemaPath,
|
||||
} from '@nestjs/swagger';
|
||||
import {
|
||||
CreateVendorCreditDto,
|
||||
EditVendorCreditDto,
|
||||
} from './dtos/VendorCredit.dto';
|
||||
import { ApiCommonHeaders } from '@/common/decorators/ApiCommonHeaders';
|
||||
import {
|
||||
BulkDeleteDto,
|
||||
ValidateBulkDeleteResponseDto,
|
||||
} from '@/common/dtos/BulkDelete.dto';
|
||||
|
||||
@Controller('vendor-credits')
|
||||
@ApiTags('Vendor Credits')
|
||||
@ApiCommonHeaders()
|
||||
@ApiExtraModels(ValidateBulkDeleteResponseDto)
|
||||
export class VendorCreditsController {
|
||||
constructor(
|
||||
private readonly vendorCreditsApplication: VendorCreditsApplicationService,
|
||||
) {}
|
||||
) { }
|
||||
|
||||
@Post('validate-bulk-delete')
|
||||
@ApiOperation({
|
||||
summary:
|
||||
'Validates which vendor credits can be deleted and returns the results.',
|
||||
})
|
||||
@ApiResponse({
|
||||
status: 200,
|
||||
description:
|
||||
'Validation completed with counts and IDs of deletable and non-deletable vendor credits.',
|
||||
schema: {
|
||||
$ref: getSchemaPath(ValidateBulkDeleteResponseDto),
|
||||
},
|
||||
})
|
||||
async validateBulkDeleteVendorCredits(
|
||||
@Body() bulkDeleteDto: BulkDeleteDto,
|
||||
): Promise<ValidateBulkDeleteResponseDto> {
|
||||
return this.vendorCreditsApplication.validateBulkDeleteVendorCredits(
|
||||
bulkDeleteDto.ids,
|
||||
);
|
||||
}
|
||||
|
||||
@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<void> {
|
||||
return this.vendorCreditsApplication.bulkDeleteVendorCredits(
|
||||
bulkDeleteDto.ids,
|
||||
{ skipUndeletable },
|
||||
);
|
||||
}
|
||||
|
||||
@Post()
|
||||
@ApiOperation({ summary: 'Create a new vendor credit.' })
|
||||
|
||||
@@ -28,6 +28,8 @@ import { DynamicListModule } from '../DynamicListing/DynamicList.module';
|
||||
import { InventoryCostModule } from '../InventoryCost/InventoryCost.module';
|
||||
import { VendorCreditsExportable } from './commands/VendorCreditsExportable';
|
||||
import { VendorCreditsImportable } from './commands/VendorCreditsImportable';
|
||||
import { BulkDeleteVendorCreditsService } from './BulkDeleteVendorCredits.service';
|
||||
import { ValidateBulkDeleteVendorCreditsService } from './ValidateBulkDeleteVendorCredits.service';
|
||||
|
||||
@Module({
|
||||
imports: [
|
||||
@@ -61,6 +63,8 @@ import { VendorCreditsImportable } from './commands/VendorCreditsImportable';
|
||||
VendorCreditAutoSerialSubscriber,
|
||||
VendorCreditsExportable,
|
||||
VendorCreditsImportable,
|
||||
BulkDeleteVendorCreditsService,
|
||||
ValidateBulkDeleteVendorCreditsService,
|
||||
],
|
||||
exports: [
|
||||
CreateVendorCreditService,
|
||||
@@ -74,6 +78,8 @@ import { VendorCreditsImportable } from './commands/VendorCreditsImportable';
|
||||
OpenVendorCreditService,
|
||||
VendorCreditsExportable,
|
||||
VendorCreditsImportable,
|
||||
BulkDeleteVendorCreditsService,
|
||||
ValidateBulkDeleteVendorCreditsService,
|
||||
],
|
||||
controllers: [VendorCreditsController],
|
||||
})
|
||||
|
||||
@@ -3,12 +3,21 @@ import { CreateVendorCreditService } from './commands/CreateVendorCredit.service
|
||||
import { DeleteVendorCreditService } from './commands/DeleteVendorCredit.service';
|
||||
import { EditVendorCreditService } from './commands/EditVendorCredit.service';
|
||||
import { GetVendorCreditService } from './queries/GetVendorCredit.service';
|
||||
import { IVendorCreditEditDTO, IVendorCreditsQueryDTO } from './types/VendorCredit.types';
|
||||
import {
|
||||
IVendorCreditEditDTO,
|
||||
IVendorCreditsQueryDTO,
|
||||
} from './types/VendorCredit.types';
|
||||
import { IVendorCreditCreateDTO } from './types/VendorCredit.types';
|
||||
import { Injectable } from '@nestjs/common';
|
||||
import { OpenVendorCreditService } from './commands/OpenVendorCredit.service';
|
||||
import { GetVendorCreditsService } from './queries/GetVendorCredits.service';
|
||||
import { CreateVendorCreditDto, EditVendorCreditDto } from './dtos/VendorCredit.dto';
|
||||
import {
|
||||
CreateVendorCreditDto,
|
||||
EditVendorCreditDto,
|
||||
} from './dtos/VendorCredit.dto';
|
||||
import { BulkDeleteVendorCreditsService } from './BulkDeleteVendorCredits.service';
|
||||
import { ValidateBulkDeleteVendorCreditsService } from './ValidateBulkDeleteVendorCredits.service';
|
||||
import { ValidateBulkDeleteResponseDto } from '@/common/dtos/BulkDelete.dto';
|
||||
|
||||
@Injectable()
|
||||
export class VendorCreditsApplicationService {
|
||||
@@ -25,7 +34,9 @@ export class VendorCreditsApplicationService {
|
||||
private readonly getVendorCreditService: GetVendorCreditService,
|
||||
private readonly openVendorCreditService: OpenVendorCreditService,
|
||||
private readonly getVendorCreditsService: GetVendorCreditsService,
|
||||
) {}
|
||||
private readonly bulkDeleteVendorCreditsService: BulkDeleteVendorCreditsService,
|
||||
private readonly validateBulkDeleteVendorCreditsService: ValidateBulkDeleteVendorCreditsService,
|
||||
) { }
|
||||
|
||||
/**
|
||||
* Creates a new vendor credit.
|
||||
@@ -90,4 +101,22 @@ export class VendorCreditsApplicationService {
|
||||
getVendorCredits(query: IVendorCreditsQueryDTO) {
|
||||
return this.getVendorCreditsService.getVendorCredits(query);
|
||||
}
|
||||
|
||||
bulkDeleteVendorCredits(
|
||||
vendorCreditIds: number[],
|
||||
options?: { skipUndeletable?: boolean },
|
||||
) {
|
||||
return this.bulkDeleteVendorCreditsService.bulkDeleteVendorCredits(
|
||||
vendorCreditIds,
|
||||
options,
|
||||
);
|
||||
}
|
||||
|
||||
validateBulkDeleteVendorCredits(
|
||||
vendorCreditIds: number[],
|
||||
): Promise<ValidateBulkDeleteResponseDto> {
|
||||
return this.validateBulkDeleteVendorCreditsService.validateBulkDeleteVendorCredits(
|
||||
vendorCreditIds,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user