fix: adjust contact balance

This commit is contained in:
Ahmed Bouhuolia
2025-06-26 17:04:46 +02:00
parent 6a39e9d71f
commit e7178a6575
19 changed files with 180 additions and 54 deletions

View File

@@ -16,6 +16,7 @@ import {
import { ApiOperation, ApiTags } from '@nestjs/swagger';
import { CreateVendorDto } from './dtos/CreateVendor.dto';
import { EditVendorDto } from './dtos/EditVendor.dto';
import { GetVendorsQueryDto } from './dtos/GetVendorsQuery.dto';
@Controller('vendors')
@ApiTags('vendors')
@@ -24,7 +25,7 @@ export class VendorsController {
@Get()
@ApiOperation({ summary: 'Retrieves the vendors.' })
getVendors(@Query() filterDTO: Partial<IVendorsFilter>) {
getVendors(@Query() filterDTO: GetVendorsQueryDto) {
return this.vendorsApplication.getVendors(filterDTO);
}

View File

@@ -12,6 +12,7 @@ import {
import { GetVendorsService } from './queries/GetVendors.service';
import { CreateVendorDto } from './dtos/CreateVendor.dto';
import { EditVendorDto } from './dtos/EditVendor.dto';
import { GetVendorsQueryDto } from './dtos/GetVendorsQuery.dto';
@Injectable()
export class VendorsApplication {
@@ -82,7 +83,7 @@ export class VendorsApplication {
* @param {Partial<IVendorsFilter>} filterDTO
* @returns {Promise<{ vendors: Vendor[], pagination: IPaginationMeta, filterMeta: IFilterMeta }>>}
*/
public getVendors(filterDTO: Partial<IVendorsFilter>) {
public getVendors(filterDTO: GetVendorsQueryDto) {
return this.getVendorsService.getVendorsList(filterDTO);
}
}

View File

@@ -1,9 +1,15 @@
import { ApiProperty } from '@nestjs/swagger';
import { IsBoolean, IsEmail, IsString } from 'class-validator';
import {
IsISO8601,
IsInt,
IsNumber,
Min,
IsBoolean,
IsEmail,
IsString,
} from 'class-validator';
import { ContactAddressDto } from '@/modules/Customers/dtos/ContactAddress.dto';
import { IsInt, IsNumber } from 'class-validator';
import { IsOptional, Min } from 'class-validator';
import { IsISO8601 } from 'class-validator';
import { IsOptional } from '@/common/decorators/Validators';
export class CreateVendorDto extends ContactAddressDto {
@ApiProperty({ required: false, description: 'Vendor opening balance' })

View File

@@ -0,0 +1,26 @@
import { ToNumber } from '@/common/decorators/Validators';
import { DynamicFilterQueryDto } from '@/modules/DynamicListing/dtos/DynamicFilterQuery.dto';
import { parseBoolean } from '@/utils/parse-boolean';
import { Transform } from 'class-transformer';
import { IsBoolean, IsInt, IsOptional, IsString } from 'class-validator';
export class GetVendorsQueryDto extends DynamicFilterQueryDto {
@IsString()
@IsOptional()
stringifiedFilterRoles?: string;
@IsOptional()
@IsInt()
@ToNumber()
page?: number;
@IsOptional()
@IsInt()
@ToNumber()
pageSize?: number;
@IsOptional()
@IsBoolean()
@Transform(({ value }) => parseBoolean(value, false))
inactiveMode?: boolean;
}

View File

@@ -1,12 +1,5 @@
import { Model, mixin } from 'objection';
// import TenantModel from 'models/TenantModel';
// import PaginationQueryBuilder from './Pagination';
// import ModelSetting from './ModelSetting';
// import VendorSettings from './Vendor.Settings';
// import CustomViewBaseModel from './CustomViewBaseModel';
// import { DEFAULT_VIEWS } from '@/services/Contacts/Vendors/constants';
// import ModelSearchable from './ModelSearchable';
import { BaseModel } from '@/models/Model';
import { Model } from 'objection';
import { BaseQueryBuilder } from '@/models/Model';
import { TenantBaseModel } from '@/modules/System/models/TenantBaseModel';
import { ExportableModel } from '@/modules/Export/decorators/ExportableModel.decorator';
import { InjectModelMeta } from '@/modules/Tenancy/TenancyModels/decorators/InjectModelMeta.decorator';
@@ -14,6 +7,22 @@ import { VendorMeta } from './Vendor.meta';
import { InjectModelDefaultViews } from '@/modules/Views/decorators/InjectModelDefaultViews.decorator';
import { VendorDefaultViews } from '../constants';
export class VendorQueryBuilder<
M extends Model,
R = M[],
> extends BaseQueryBuilder<M, R> {
constructor(...args) {
// @ts-ignore
super(...args);
this.onBuild((builder) => {
if (builder.isFind() || builder.isDelete() || builder.isUpdate()) {
builder.where('contact_service', 'vendor');
}
});
}
}
@ExportableModel()
@InjectModelMeta(VendorMeta)
@InjectModelDefaultViews(VendorDefaultViews)
@@ -64,9 +73,7 @@ export class Vendor extends TenantBaseModel {
/**
* Query builder.
*/
// static get QueryBuilder() {
// return VendorQueryBuilder;
// }
static QueryBuilder = VendorQueryBuilder;
/**
* Table name

View File

@@ -6,6 +6,7 @@ import { TransformerInjectable } from '@/modules/Transformer/TransformerInjectab
import { VendorTransfromer } from './VendorTransformer';
import { GetVendorsResponse, IVendorsFilter } from '../types/Vendors.types';
import { TenantModelProxy } from '@/modules/System/models/TenantBaseModel';
import { GetVendorsQueryDto } from '../dtos/GetVendorsQuery.dto';
@Injectable()
export class GetVendorsService {
@@ -28,7 +29,7 @@ export class GetVendorsService {
* @returns {Promise<GetVendorsResponse>}
*/
public async getVendorsList(
filterDto: Partial<IVendorsFilter>,
filterDto: GetVendorsQueryDto,
): Promise<GetVendorsResponse> {
const _filterDto = {
inactiveMode: false,