I have below array of object:
const lineItems = [
{
"lineNumber": "0",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 10,
"quantityUOM": "Unit",
"batchNumber": "LO123678",
"receivedQty": 5,
"shippedQty": 10,
"itemCode": "Packagetest1"
},
{
"lineNumber": "1",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 40,
"quantityUOM": "Unit",
"batchNumber": "LO123678",
"receivedQty": 4,
"shippedQty": 20,
"itemCode": "Packagetest1"
},
{
"lineNumber": "2",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 10,
"quantityUOM": "Unit",
"receivedQty": 5,
"shippedQty": 30,
"itemCode": "Packagetest1"
},
{
"lineNumber": "3",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 10,
"quantityUOM": "Unit",
"receivedQty": 10,
"shippedQty": 30,
"itemCode": "Packagetest1"
}
];
Expecting the output:
[
{
"lineNumber": "0",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 50,
"quantityUOM": "Unit",
"batchNumber": "LO123678",
"receivedQty": 9,
"shippedQty": 30,
"itemCode": "Packagetest1"
},
{
"lineNumber": "2",
"item": "1496",
"itemDesc": "wertyuiasdfghj",
"qualityReceiptHold": "N",
"quantity": 20,
"quantityUOM": "Unit",
"receivedQty": 15,
"shippedQty": 60,
"itemCode": "Packagetest1"
}
]
the sum of properties like quantity, receivedQty and shippedQty based on grouping of batchNumber and item value. In first two grouped by batchNumber and item but last two line items grouped by item value only.
groupedVariantLineItems() {
let result = [];
for( let i = 0; i < this.variantLineItems.length; i++ ) {
let isExists = false;
for( let j=0; j<result.length; j++ ) {
if( typeof this.variantLineItems[i].batchNumber != "undefined" && result[j].batchNumber == this.variantLineItems[i].batchNumber && result[j].item == this.variantLineItems[i].item ) {
isExists = true;
result[j].quantity+= (this.variantLineItems[i].quantity!= undefined) ? Number(this.variantLineItems[i].quantity) : 0;
result[j].shippedQty += (this.variantLineItems[i].shippedQty != undefined) ? Number(this.variantLineItems[i].shippedQty) : 0;
result[j].receivedQty += (this.variantLineItems[i].receivedQty != undefined) ? Number(this.variantLineItems[i].receivedQty) : 0;
result[j].quantity= ( isNaN(result[j].quantity) ) ? 0 : result[j].quantity;
result[j].shippedQty = ( isNaN(result[j].shippedQty) ) ? 0 : result[j].shippedQty;
result[j].receivedQty = ( isNaN(result[j].receivedQty) ) ? 0 : result[j].receivedQty;
break;
} else if( typeof this.variantLineItems[i].batchNumber == "undefined" && result[j].item == this.variantLineItems[i].item ) {
isExists = true;
result[j].quantity+= (this.variantLineItems[i].quantity!= undefined) ? Number(this.variantLineItems[i].quantity) : 0;
result[j].shippedQty += (this.variantLineItems[i].shippedQty != undefined) ? Number(this.variantLineItems[i].shippedQty) : 0;
result[j].receivedQty += (this.variantLineItems[i].receivedQty != undefined) ? Number(this.variantLineItems[i].receivedQty) : 0;
result[j].quantity= ( isNaN(result[j].quantity) ) ? 0 : result[j].quantity;
result[j].shippedQty = ( isNaN(result[j].shippedQty) ) ? 0 : result[j].shippedQty;
result[j].receivedQty = ( isNaN(result[j].receivedQty) ) ? 0 : result[j].receivedQty;
break;
}
}
if( !isExists ) {
result.push( this.variantLineItems[i] );
}
}
return result;
}
the above code given the correct output for first two line items which have batchNumber, but not correct for last two.