mirror of
https://github.com/bigcapitalhq/bigcapital.git
synced 2026-02-16 12:50:38 +00:00
58 lines
1.7 KiB
TypeScript
58 lines
1.7 KiB
TypeScript
// @ts-nocheck
|
|
import { chain } from 'lodash';
|
|
import { pick } from 'lodash';
|
|
import { IItemEntryTransactionType } from '../TransactionItemEntry/ItemEntry.types';
|
|
import { TInventoryTransactionDirection } from './types/InventoryCost.types';
|
|
|
|
/**
|
|
* Grpups by transaction type and id the inventory transactions.
|
|
* @param {IInventoryTransaction} invTransactions
|
|
* @returns
|
|
*/
|
|
export function groupInventoryTransactionsByTypeId(
|
|
transactions: { transactionType: string; transactionId: number }[],
|
|
): { transactionType: string; transactionId: number }[][] {
|
|
return chain(transactions)
|
|
.groupBy((t) => `${t.transactionType}-${t.transactionId}`)
|
|
.values()
|
|
.value();
|
|
}
|
|
|
|
/**
|
|
* Transforms the items entries to inventory transactions.
|
|
*/
|
|
export function transformItemEntriesToInventory(transaction: {
|
|
transactionId: number;
|
|
transactionType: IItemEntryTransactionType;
|
|
transactionNumber?: string;
|
|
|
|
exchangeRate?: number;
|
|
|
|
warehouseId: number | null;
|
|
|
|
date: Date | string;
|
|
direction: TInventoryTransactionDirection;
|
|
entries: IItemEntry[];
|
|
createdAt: Date;
|
|
}): IInventoryTransaction[] {
|
|
const exchangeRate = transaction.exchangeRate || 1;
|
|
|
|
return transaction.entries.map((entry: IItemEntry) => ({
|
|
...pick(entry, ['itemId', 'quantity']),
|
|
rate: entry.rate * exchangeRate,
|
|
transactionType: transaction.transactionType,
|
|
transactionId: transaction.transactionId,
|
|
direction: transaction.direction,
|
|
date: transaction.date,
|
|
entryId: entry.id,
|
|
createdAt: transaction.createdAt,
|
|
costAccountId: entry.costAccountId,
|
|
|
|
warehouseId: entry.warehouseId || transaction.warehouseId,
|
|
meta: {
|
|
transactionNumber: transaction.transactionNumber,
|
|
description: entry.description,
|
|
},
|
|
}));
|
|
}
|