feat: writing inventory cost lot of opening item quantity transaction.

This commit is contained in:
a.bouhuolia
2020-12-24 12:06:10 +02:00
parent 47b40f6940
commit af96d4bde4
3 changed files with 49 additions and 19 deletions

View File

@@ -10,7 +10,9 @@ export interface IInventoryTransaction {
transactionType: string,
transactionId: number,
lotNumber: string,
entryId: number
entryId: number,
createdAt?: Date,
updatedAt?: Date,
};
export interface IInventoryLotCost {
@@ -18,11 +20,12 @@ export interface IInventoryLotCost {
date: Date,
direction: string,
itemId: number,
quantity: number,
rate: number,
remaining: number,
cost: number,
lotNumber: string|number,
transactionType: string,
transactionId: string,
transactionId: number,
entryId: number
}

View File

@@ -4,7 +4,7 @@ import {
EventDispatcher,
EventDispatcherInterface,
} from 'decorators/eventDispatcher';
import { IInventoryTransaction, IItem, IItemEntry } from 'interfaces'
import { IInventoryLotCost, IInventoryTransaction, IItem, IItemEntry } from 'interfaces'
import InventoryAverageCost from 'services/Inventory/InventoryAverageCost';
import InventoryCostLotTracker from 'services/Inventory/InventoryCostLotTracker';
import TenancyService from 'services/Tenancy/TenancyService';
@@ -146,7 +146,7 @@ export default class InventoryService {
tenantId: number,
inventoryEntry: IInventoryTransaction,
deleteOld: boolean = false,
) {
): Promise<IInventoryTransaction> {
const { InventoryTransaction, Item } = this.tenancy.models(tenantId);
if (deleteOld) {
@@ -156,7 +156,7 @@ export default class InventoryService {
inventoryEntry.transactionType,
);
}
await InventoryTransaction.query().insert({
return InventoryTransaction.query().insert({
...inventoryEntry,
lotNumber: inventoryEntry.lotNumber,
});
@@ -182,6 +182,23 @@ export default class InventoryService {
.delete();
}
/**
* Records the inventory cost lot transaction.
* @param {number} tenantId
* @param {IInventoryLotCost} inventoryLotEntry
* @return {Promise<IInventoryLotCost>}
*/
async recordInventoryCostLotTransaction(
tenantId: number,
inventoryLotEntry: IInventoryLotCost,
): Promise<void> {
const { InventoryCostLotTracker } = this.tenancy.models(tenantId);
return InventoryCostLotTracker.query().insert({
...inventoryLotEntry,
});
}
/**
* Retrieve the lot number after the increment.
* @param {number} tenantId - Tenant id.

View File

@@ -1,4 +1,4 @@
import { defaultTo, difference } from 'lodash';
import { defaultTo, difference, omit } from 'lodash';
import { Service, Inject } from 'typedi';
import {
EventDispatcher,
@@ -283,11 +283,11 @@ export default class ItemsService implements IItemsService {
/**
* Records the opening items inventory transaction.
* @param {number} tenantId
* @param itemId
* @param openingQuantity
* @param openingCost
* @param openingDate
* @param {number} tenantId -
* @param itemId -
* @param openingQuantity -
* @param openingCost -
* @param openingDate -
*/
public async recordOpeningItemsInventoryTransaction(
tenantId: number,
@@ -299,14 +299,24 @@ export default class ItemsService implements IItemsService {
// Gets the next inventory lot number.
const lotNumber = this.inventoryService.getNextLotNumber(tenantId);
await this.inventoryService.recordInventoryTransaction(tenantId, {
date: openingDate,
quantity: openingQuantity,
rate: openingCost,
direction: 'IN',
transactionType: 'OpeningItem',
itemId,
lotNumber,
// Records the inventory transaction.
const inventoryTransaction = await this.inventoryService.recordInventoryTransaction(
tenantId,
{
date: openingDate,
quantity: openingQuantity,
rate: openingCost,
direction: 'IN',
transactionType: 'OpeningItem',
itemId,
lotNumber,
}
);
// Records the inventory cost lot transaction.
await this.inventoryService.recordInventoryCostLotTransaction(tenantId, {
...omit(inventoryTransaction, ['updatedAt', 'createdAt']),
cost: openingQuantity * openingCost,
remaining: 0,
});
await this.inventoryService.incrementNextLotNumber(tenantId);
}