From de35155ffe7b77cbacacbdae2caeee1673729f1b Mon Sep 17 00:00:00 2001 From: Patrick Fic Date: Tue, 16 Apr 2024 15:15:25 -0700 Subject: [PATCH] Resolve CCC supplement with UNQ_SEQ. --- ...jobs-available-supplement.estlines.util.js | 46 +++++++++++++------ 1 file changed, 33 insertions(+), 13 deletions(-) diff --git a/client/src/components/jobs-available-table/jobs-available-supplement.estlines.util.js b/client/src/components/jobs-available-table/jobs-available-supplement.estlines.util.js index f87901e1c..a29a17de4 100644 --- a/client/src/components/jobs-available-table/jobs-available-supplement.estlines.util.js +++ b/client/src/components/jobs-available-table/jobs-available-supplement.estlines.util.js @@ -15,23 +15,43 @@ export const GetSupplementDelta = async (client, jobId, newLines) => { const linesToUpdate = []; newLines.forEach((newLine) => { - const matchingIndex = existingLines.findIndex((eL) => eL.unq_seq === newLine.unq_seq); + const matchingIndexLines = []; + existingLines.forEach((eL, index) => { + if (eL.unq_seq === newLine.unq_seq) { + matchingIndexLines.push({ index, record: eL }); + } + }); - //Should do a check to make sure there is only 1 matching unq sequence number. - - if (matchingIndex >= 0) { - //Found a relevant matching line. Add it to lines to update. - linesToUpdate.push({ - id: existingLines[matchingIndex].id, - newData: { ...newLine, removed: false, act_price_before_ppc: null } - }); - - //Splice out item we found for performance. - existingLines.splice(matchingIndex, 1); - } else { + if (matchingIndexLines.length === 0) { //Didn't find a match. Must be a new line. linesToInsert.push(newLine); } + //If we find only 1, we can use the old logic. + else if (matchingIndexLines.length === 1) { + //Found a relevant matching line. Add it to lines to update. + linesToUpdate.push({ + id: matchingIndexLines[0].record.id, + newData: { ...newLine, removed: false, act_price_before_ppc: null } + }); + //Splice out item we found for performance. + existingLines.splice(matchingIndexLines[0].index, 1); + } else if (matchingIndexLines.length === 2) { + //if we find 2, we need to separate it out by the non-refinish lines and splice one out. + //Find the mathcing one depending on whether this is the refiniish one or not. + const matchingLine = matchingIndexLines.find((i) => + newLine.mod_lbr_ty === "LAR" ? i.record.mod_lbr_ty === "LAR" : i.record.mod_lbr_ty !== "LAR" + ); + + linesToUpdate.push({ + id: matchingLine.record.id, + newData: { ...newLine, removed: false, act_price_before_ppc: null } + }); + //Splice out item we found for performance. + existingLines.splice(matchingLine.index, 1); + } else { + //We found more than 2 matching lines. We should never get here. Throw a warning and back out! + throw new Error("Too many matching lines found. Ensure EMS file is valid."); + } }); //Wahtever is left in the existing lines, are lines that should be removed.