From c8f817b16df555bb1e0dec9fddc0a4105ead6677 Mon Sep 17 00:00:00 2001 From: "a.bouhuolia" Date: Tue, 26 Jan 2021 14:07:11 +0200 Subject: [PATCH] fix: items accounts issue. fix: write item id, transaction reference and number on journal entries. --- server/src/api/controllers/Items.ts | 2 +- server/src/interfaces/Journal.ts | 4 ++ server/src/interfaces/SaleInvoice.ts | 2 + .../services/Accounting/JournalCommands.ts | 41 +++++-------------- server/src/services/Items/ItemsService.ts | 8 ++-- 5 files changed, 21 insertions(+), 36 deletions(-) diff --git a/server/src/api/controllers/Items.ts b/server/src/api/controllers/Items.ts index f96b1e0b6..3f205a1ea 100644 --- a/server/src/api/controllers/Items.ts +++ b/server/src/api/controllers/Items.ts @@ -466,7 +466,7 @@ export default class ItemsController extends BaseController { } if (error.errorType === 'INVENTORY_ACCOUNT_NOT_INVENTORY') { return res.status(400).send({ - errors: [{ type: 'INVENTORY.ACCOUNT.NOT.CURRENT.ASSET', code: 300 }], + errors: [{ type: 'INVENTORY.ACCOUNT.NOT.INVENTORY.TYPE', code: 300 }], }); } if (error.errorType === 'ITEMS_HAVE_ASSOCIATED_TRANSACTIONS') { diff --git a/server/src/interfaces/Journal.ts b/server/src/interfaces/Journal.ts index 3a13642e1..220b1bcc1 100644 --- a/server/src/interfaces/Journal.ts +++ b/server/src/interfaces/Journal.ts @@ -13,6 +13,10 @@ export interface IJournalEntry { referenceTypeFormatted: string, + itemId?: number, + transactionNumber?: string, + referenceNumber?: string, + transactionType?: string, note?: string, userId?: number, diff --git a/server/src/interfaces/SaleInvoice.ts b/server/src/interfaces/SaleInvoice.ts index 3fd3e5507..9e7770bef 100644 --- a/server/src/interfaces/SaleInvoice.ts +++ b/server/src/interfaces/SaleInvoice.ts @@ -9,6 +9,8 @@ export interface ISaleInvoice { dueAmount: number, overdueDays: number, customerId: number, + referenceNo: string, + invoiceNo: string, entries: IItemEntry[], deliveredAt: string | Date, userId: number, diff --git a/server/src/services/Accounting/JournalCommands.ts b/server/src/services/Accounting/JournalCommands.ts index 17cf153ba..9453a34d7 100644 --- a/server/src/services/Accounting/JournalCommands.ts +++ b/server/src/services/Accounting/JournalCommands.ts @@ -15,37 +15,6 @@ import { IItemEntry, } from 'interfaces'; -interface IInventoryCostEntity { - date: Date; - - referenceType: string; - referenceId: number; - - costAccount: number; - incomeAccount: number; - inventoryAccount: number; - - inventory: number; - cost: number; - income: number; -} - -interface NonInventoryJEntries { - date: Date; - - referenceType: string; - referenceId: number; - - receivable: number; - payable: number; - - incomeAccountId: number; - income: number; - - costAccountId: number; - cost: number; -} - export default class JournalCommands { journal: JournalPoster; @@ -90,6 +59,9 @@ export default class JournalCommands { referenceType: 'Bill', date: formattedDate, userId: bill.userId, + + referenceNumber: bill.referenceNo, + transactionNumber: bill.billNumber, }; // Overrides the old bill entries. if (override) { @@ -122,6 +94,7 @@ export default class JournalCommands { ? item.inventoryAccountId : item.costAccountId, index: index + 2, + itemId: entry.itemId }); this.journal.debit(debitEntry); }); @@ -362,6 +335,7 @@ export default class JournalCommands { debit: inventoryCostLot.cost, account: inventoryCostLot.item.costAccountId, index: 3, + itemId: inventoryCostLot.itemId }); // XXX Credit - Inventory account. const inventoryEntry = new JournalEntry({ @@ -369,6 +343,7 @@ export default class JournalCommands { credit: inventoryCostLot.cost, account: inventoryCostLot.item.inventoryAccountId, index: 4, + itemId: inventoryCostLot.itemId }); this.journal.credit(inventoryEntry); this.journal.debit(costEntry); @@ -395,6 +370,9 @@ export default class JournalCommands { referenceId: saleInvoice.id, date: saleInvoice.invoiceDate, userId: saleInvoice.userId, + + transactionNumber: saleInvoice.invoiceNo, + referenceNumber: saleInvoice.referenceNo, }; // XXX Debit - Receivable account. const receivableEntry = new JournalEntry({ @@ -416,6 +394,7 @@ export default class JournalCommands { account: entry.item.sellAccountId, note: entry.description, index: index + 2, + itemId: entry.itemId, }); this.journal.credit(incomeEntry); } diff --git a/server/src/services/Items/ItemsService.ts b/server/src/services/Items/ItemsService.ts index 2508a2594..813aa0c77 100644 --- a/server/src/services/Items/ItemsService.ts +++ b/server/src/services/Items/ItemsService.ts @@ -10,7 +10,7 @@ import DynamicListingService from 'services/DynamicListing/DynamicListService'; import TenancyService from 'services/Tenancy/TenancyService'; import { ServiceError } from 'exceptions'; import InventoryService from 'services/Inventory/Inventory'; -import { ACCOUNT_ROOT_TYPE, ACCOUNT_TYPE } from 'data/AccountTypes' +import { ACCOUNT_PARENT_TYPE, ACCOUNT_ROOT_TYPE, ACCOUNT_TYPE } from 'data/AccountTypes' const ERRORS = { NOT_FOUND: 'NOT_FOUND', @@ -131,7 +131,7 @@ export default class ItemsService implements IItemsService { throw new ServiceError(ERRORS.COST_ACCOUNT_NOT_FOUMD); // Detarmines the cost of goods sold account. - } else if (foundAccount.isRootType(ACCOUNT_ROOT_TYPE.EXPENSE)) { + } else if (!foundAccount.isParentType(ACCOUNT_PARENT_TYPE.EXPENSE)) { this.logger.info('[items] validate cost account not COGS type.', { tenantId, costAccountId, @@ -167,7 +167,7 @@ export default class ItemsService implements IItemsService { }); throw new ServiceError(ERRORS.SELL_ACCOUNT_NOT_FOUND); - } else if (!foundAccount.isRootType(ACCOUNT_ROOT_TYPE.INCOME)) { + } else if (!foundAccount.isParentType(ACCOUNT_ROOT_TYPE.INCOME)) { this.logger.info('[items] sell account not income type.', { tenantId, sellAccountId, @@ -204,7 +204,7 @@ export default class ItemsService implements IItemsService { }); throw new ServiceError(ERRORS.INVENTORY_ACCOUNT_NOT_FOUND); - } else if (foundAccount.isAccountType(ACCOUNT_TYPE.INVENTORY)) { + } else if (!foundAccount.isAccountType(ACCOUNT_TYPE.INVENTORY)) { this.logger.info('[items] inventory account not inventory type.', { tenantId, inventoryAccountId,