From 83e698acf3902f7e9b244bae8f9220e70021f286 Mon Sep 17 00:00:00 2001 From: Ahmed Bouhuolia Date: Sun, 29 Jun 2025 16:55:02 +0200 Subject: [PATCH] fix:create customer/vendor --- packages/server/public/pdf/.gitignore | 0 packages/server/src/models/Model.ts | 2 +- .../src/modules/Customers/dtos/CreateCustomer.dto.ts | 5 ++++- packages/server/src/modules/Items/DeleteItem.service.ts | 7 ++++--- .../server/src/modules/Vendors/dtos/CreateVendor.dto.ts | 5 ++++- packages/webapp/src/hooks/query/customers.tsx | 2 +- packages/webapp/src/hooks/query/invoices.tsx | 4 ++-- packages/webapp/src/hooks/query/vendors.tsx | 2 +- 8 files changed, 17 insertions(+), 10 deletions(-) create mode 100644 packages/server/public/pdf/.gitignore diff --git a/packages/server/public/pdf/.gitignore b/packages/server/public/pdf/.gitignore new file mode 100644 index 000000000..e69de29bb diff --git a/packages/server/src/models/Model.ts b/packages/server/src/models/Model.ts index 16dcd02cd..61ccb4413 100644 --- a/packages/server/src/models/Model.ts +++ b/packages/server/src/models/Model.ts @@ -40,7 +40,7 @@ export class PaginationQueryBuilder< }: { type?: string; message?: string; - }) { + } = {}) { const relationMappings = this.modelClass().relationMappings; const relationNames = Object.keys(relationMappings || {}); diff --git a/packages/server/src/modules/Customers/dtos/CreateCustomer.dto.ts b/packages/server/src/modules/Customers/dtos/CreateCustomer.dto.ts index 78b60c8ba..bad384eaf 100644 --- a/packages/server/src/modules/Customers/dtos/CreateCustomer.dto.ts +++ b/packages/server/src/modules/Customers/dtos/CreateCustomer.dto.ts @@ -6,8 +6,8 @@ import { IsString, } from 'class-validator'; import { ApiProperty } from '@nestjs/swagger'; +import { IsOptional, ToNumber } from '@/common/decorators/Validators'; import { ContactAddressDto } from './ContactAddress.dto'; -import { IsOptional } from '@/common/decorators/Validators'; export class CreateCustomerDto extends ContactAddressDto { @ApiProperty({ @@ -35,6 +35,7 @@ export class CreateCustomerDto extends ContactAddressDto { }) @IsOptional() @IsNumber() + @ToNumber() openingBalance?: number; @ApiProperty({ @@ -53,6 +54,7 @@ export class CreateCustomerDto extends ContactAddressDto { }) @IsOptional() @IsNumber() + @ToNumber() openingBalanceExchangeRate?: number; @ApiProperty({ @@ -62,6 +64,7 @@ export class CreateCustomerDto extends ContactAddressDto { }) @IsOptional() @IsNumber() + @ToNumber() openingBalanceBranchId?: number; @ApiProperty({ diff --git a/packages/server/src/modules/Items/DeleteItem.service.ts b/packages/server/src/modules/Items/DeleteItem.service.ts index c2fef45df..141699dc4 100644 --- a/packages/server/src/modules/Items/DeleteItem.service.ts +++ b/packages/server/src/modules/Items/DeleteItem.service.ts @@ -40,7 +40,7 @@ export class DeleteItemService { const oldItem = await this.itemModel() .query() .findOne('id', itemId) - .deleteIfNoRelations(); + .throwIfNotFound(); // Delete item in unit of work. return this.uow.withTransaction(async (trx: Knex.Transaction) => { @@ -51,8 +51,9 @@ export class DeleteItemService { } as IItemEventDeletingPayload); // Deletes the item. - await this.itemModel().query(trx).findById(itemId).delete(); - + await this.itemModel().query(trx).findById(itemId).deleteIfNoRelations({ + type: ERRORS.ITEM_HAS_ASSOCIATED_TRANSACTINS, + }); // Triggers `onItemDeleted` event. await this.eventEmitter.emitAsync(events.item.onDeleted, { itemId, diff --git a/packages/server/src/modules/Vendors/dtos/CreateVendor.dto.ts b/packages/server/src/modules/Vendors/dtos/CreateVendor.dto.ts index b865b1225..e79951ec2 100644 --- a/packages/server/src/modules/Vendors/dtos/CreateVendor.dto.ts +++ b/packages/server/src/modules/Vendors/dtos/CreateVendor.dto.ts @@ -9,13 +9,14 @@ import { IsString, } from 'class-validator'; import { ContactAddressDto } from '@/modules/Customers/dtos/ContactAddress.dto'; -import { IsOptional } from '@/common/decorators/Validators'; +import { IsOptional, ToNumber } from '@/common/decorators/Validators'; export class CreateVendorDto extends ContactAddressDto { @ApiProperty({ required: false, description: 'Vendor opening balance' }) @IsOptional() @IsInt() @Min(0) + @ToNumber() openingBalance?: number; @ApiProperty({ @@ -26,6 +27,7 @@ export class CreateVendorDto extends ContactAddressDto { @IsOptional() @IsNumber() @Min(0.01) + @ToNumber() openingBalanceExchangeRate?: number; @ApiProperty({ required: false, description: 'Date of the opening balance' }) @@ -39,6 +41,7 @@ export class CreateVendorDto extends ContactAddressDto { }) @IsOptional() @IsInt() + @ToNumber() openingBalanceBranchId?: number; @ApiProperty({ description: 'Currency code for the vendor' }) diff --git a/packages/webapp/src/hooks/query/customers.tsx b/packages/webapp/src/hooks/query/customers.tsx index 139a8fc60..769ab0b5e 100644 --- a/packages/webapp/src/hooks/query/customers.tsx +++ b/packages/webapp/src/hooks/query/customers.tsx @@ -67,7 +67,7 @@ export function useEditCustomer(props) { const apiRequest = useApiRequest(); return useMutation( - ([id, values]) => apiRequest.post(`customers/${id}`, values), + ([id, values]) => apiRequest.put(`customers/${id}`, values), { onSuccess: (res, [id, values]) => { // Invalidate specific customer. diff --git a/packages/webapp/src/hooks/query/invoices.tsx b/packages/webapp/src/hooks/query/invoices.tsx index c5e0859b4..cbb465fa3 100644 --- a/packages/webapp/src/hooks/query/invoices.tsx +++ b/packages/webapp/src/hooks/query/invoices.tsx @@ -326,7 +326,7 @@ export function useInvoiceSMSDetail(invoiceId, query, props) { params: query, }, { - select: (res) => res.data.data, + select: (res) => res.data, defaultData: {}, ...props, }, @@ -341,7 +341,7 @@ export function useInvoicePaymentTransactions(invoiceId, props) { url: `sale-invoices/${invoiceId}/payments`, }, { - select: (res) => res.data.data, + select: (res) => res.data, defaultData: [], ...props, }, diff --git a/packages/webapp/src/hooks/query/vendors.tsx b/packages/webapp/src/hooks/query/vendors.tsx index b89c71c5b..0a9824d58 100644 --- a/packages/webapp/src/hooks/query/vendors.tsx +++ b/packages/webapp/src/hooks/query/vendors.tsx @@ -55,7 +55,7 @@ export function useEditVendor(props) { const apiRequest = useApiRequest(); return useMutation( - ([id, values]) => apiRequest.post(`vendors/${id}`, values), + ([id, values]) => apiRequest.put(`vendors/${id}`, values), { onSuccess: (res, [id, values]) => { // Invalidate specific vendor.