feat: partial return functionality for batched items

This commit is contained in:
AbleKSaju
2025-01-24 12:24:00 +05:30
parent 41a641495d
commit 0141743766
+49 -66
View File
@@ -269,10 +269,18 @@ export class BespokeQueries {
};
}
docItemsMap[item.item].batches![item.batch] = {
quantity: item.quantity,
serialNumbers,
};
if (!docItemsMap[item.item].batches![item.batch]) {
docItemsMap[item.item].batches![item.batch] = {
quantity: item.quantity,
serialNumbers,
};
} else {
docItemsMap[item.item].batches![item.batch] = {
quantity: (docItemsMap[item.item].batches![item.batch].quantity +=
item.quantity),
serialNumbers,
};
}
} else {
docItemsMap[item.item].quantity += item.quantity;
}
@@ -331,22 +339,35 @@ export class BespokeQueries {
for (const row in docItemsMap) {
const balanceSerialNumbersMap: string[] | undefined = [];
const balanceQty = safeParseFloat(-docItemsMap[row].quantity);
let balanceQty = safeParseFloat(-docItemsMap[row].quantity);
const docItem = docItemsMap[row];
const returnedDocItem = returnedItemsMap[row];
const docItemHasBatch = !!Object.keys(docItem.batches ?? {}).length;
if (docItem.serialNumbers && docItem.serialNumbers) {
for (const serialNumber of docItem.serialNumbers) {
if (!docItem.serialNumbers.includes(serialNumber)) {
balanceSerialNumbersMap.push(serialNumber);
if (returnedItemsMap) {
for (const item in returnedItemsMap) {
if (docItemHasBatch && item !== row) {
continue;
}
balanceQty = -(
Math.abs(balanceQty) + returnedItemsMap[item].quantity
);
const returnedItem = returnedItemsMap[item];
if (docItem.serialNumbers && returnedItem.serialNumbers) {
for (const serialNumber of docItem.serialNumbers) {
if (!returnedItem.serialNumbers.includes(serialNumber)) {
balanceSerialNumbersMap.push(serialNumber);
}
}
}
}
}
if (docItemHasBatch && docItem.batches) {
for (const batch in docItem.batches) {
const ItemQty = Math.abs(docItem.batches[batch].quantity);
const balanceQty = safeParseFloat(-ItemQty);
const docItemSerialNumbers = docItem.batches[batch].serialNumbers;
const itemSerialNumbers = docItem.batches[batch].serialNumbers;
let balanceSerialNumbers: string[] | undefined;
@@ -358,54 +379,27 @@ export class BespokeQueries {
);
}
balanceBatchQtyMap[batch] = {
quantity: balanceQty,
serialNumbers: balanceSerialNumbers,
};
}
}
const ItemQty = Math.abs(docItem.batches[batch].quantity);
let balanceQty = safeParseFloat(-ItemQty);
returnBalanceItems[row] = {
quantity: balanceQty,
batches: balanceBatchQtyMap,
serialNumbers: balanceSerialNumbersMap,
};
}
if (!returnedDocItem || !returnedDocItem?.batches) {
continue;
}
for (const row in returnedItemsMap) {
const balanceSerialNumbersMap: string[] | undefined = [];
const returnedItem = returnedDocItem?.batches[batch];
if (!docItemsMap[row]) {
continue;
}
if (!returnedItem) {
balanceBatchQtyMap[batch] = {
quantity: balanceQty,
serialNumbers: balanceSerialNumbers,
};
continue;
}
const returnedItem = returnedItemsMap[row];
const docItem = docItemsMap[row];
let balanceQty = 0;
const docItemHasBatch = !!Object.keys(docItem.batches ?? {}).length;
const returnedItemHasBatch = !!Object.keys(returnedItem.batches ?? {})
.length;
if (docItemHasBatch && returnedItemHasBatch && docItem.batches) {
for (const batch in returnedItem.batches) {
const returnedItemQty = Math.abs(
returnedItem.batches[batch].quantity
balanceQty = -(
Math.abs(safeParseFloat(-ItemQty)) -
Math.abs(returnedDocItem.batches[batch].quantity)
);
const docBatchItemQty = docItem.batches[batch].quantity;
const balanceQty = returnedItemQty - docBatchItemQty;
const docItemSerialNumbers = docItem.batches[batch].serialNumbers;
const returnItemSerialNumbers =
returnedItem.batches[batch].serialNumbers;
let balanceSerialNumbers: string[] | undefined;
if (docItemSerialNumbers && returnItemSerialNumbers) {
balanceSerialNumbers = docItemSerialNumbers.filter(
(serialNumber: string) =>
returnItemSerialNumbers.indexOf(serialNumber) == -1
);
}
balanceBatchQtyMap[batch] = {
quantity: balanceQty,
@@ -414,24 +408,13 @@ export class BespokeQueries {
}
}
if (docItem.serialNumbers && returnedItem.serialNumbers) {
for (const serialNumber of docItem.serialNumbers) {
if (!returnedItem.serialNumbers.includes(serialNumber)) {
balanceSerialNumbersMap.push(serialNumber);
}
}
}
balanceQty = safeParseFloat(
Math.abs(returnedItem.quantity) - docItemsMap[row].quantity
);
returnBalanceItems[row] = {
quantity: balanceQty,
batches: balanceBatchQtyMap,
serialNumbers: balanceSerialNumbersMap,
};
}
return returnBalanceItems;
}