diff --git a/NKC_WF/Controllers/BatchProcController.cs b/NKC_WF/Controllers/BatchProcController.cs index 831b1a7..58fe076 100644 --- a/NKC_WF/Controllers/BatchProcController.cs +++ b/NKC_WF/Controllers/BatchProcController.cs @@ -135,6 +135,8 @@ namespace NKC_WF.Controllers * - è BatchReq / OfflineOrder * - è stima iniziale o NEST dettagliato * - si tratta di una stima di validazione ITEM ... + * + * 2021.07.21: aggiunto controllo coerenza risposta: accetto solo se sono in stato di richiesta (se ho annullato in precedenza scarto la risposta) * *************************************************/ if (batchProcAnsw.OrderType == oType.BatchRequest) @@ -146,139 +148,151 @@ namespace NKC_WF.Controllers // deserializzo come BatchreqIniziale (stima) nestReplyBatchInitial rispStima = JsonConvert.DeserializeObject(content); - // 2020.01.16 salvo su mongoDb la risposta... - ComLib.man.saveEstAnsw(rispStima); - - // recupero info sul batch / KIT specifico x capire se sia di tipo "validation" - bool isValidation = false; - bool isTesting = false; - var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID); - if (tabOrd.Count > 0) + // verifica preliminare che il batch possa accettare la risposta + var currBatchStatus = ComLib.BStatus(rispStima.BatchID); + if (currBatchStatus != BatchStatus.EstimationRequested) { - isValidation = tabOrd[0].OrdType == "V"; - isTesting = tabOrd[0].OrdType == "T"; + string message = $"Impossibile processing risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispStima.BatchID} | stato: {currBatchStatus}"; + logger.lg.scriviLog(message, tipoLog.ERROR); + // registro KO + answ = "KO"; } - // calcolo status del batch... - switch (rispStima.ProcessStatus) + else { - case procStatus.waiting: - case procStatus.running: - bStatus = 1; - break; + // 2020.01.16 salvo su mongoDb la risposta... + ComLib.man.saveEstAnsw(rispStima); - case procStatus.completed: - if (isValidation || isTesting) - { - bool pdfOk = true; - // se richiesto CheckPDF - if (memLayer.ML.CRB("checkPdfPathTV")) + // recupero info sul batch / KIT specifico x capire se sia di tipo "validation" + bool isValidation = false; + bool isTesting = false; + var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID); + if (tabOrd.Count > 0) + { + isValidation = tabOrd[0].OrdType == "V"; + isTesting = tabOrd[0].OrdType == "T"; + } + // calcolo status del batch... + switch (rispStima.ProcessStatus) + { + case procStatus.waiting: + case procStatus.running: + bStatus = 1; + break; + + case procStatus.completed: + if (isValidation || isTesting) { - // verifico PDF, se NON OK --> errore - string pdfPath = ""; - foreach (var item in rispStima.PartList) + bool pdfOk = true; + // se richiesto CheckPDF + if (memLayer.ML.CRB("checkPdfPathTV")) { - pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath); - if (!pdfOk) + // verifico PDF, se NON OK --> errore + string pdfPath = ""; + foreach (var item in rispStima.PartList) { - // codice è B.xxx dove xxx = BatchID - DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}"); + pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath); + if (!pdfOk) + { + // codice è B.xxx dove xxx = BatchID + DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}"); + } } } - } - // se non OK --> registro errore... - if (!pdfOk) - { - bStatus = 9; - } - // verifico se il tempo di procesisng stimato sia > minimo... - else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec")) - { - bStatus = 10; + // se non OK --> registro errore... + if (!pdfOk) + { + bStatus = 9; + } + // verifico se il tempo di procesisng stimato sia > minimo... + else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec")) + { + bStatus = 10; + } + else + { + bStatus = 9; + } } else + { + bStatus = 2; + } + break; + + case procStatus.accepted: + bStatus = 5; + break; + + case procStatus.refused: + if (isValidation || isTesting) { bStatus = 9; } - } - else - { - bStatus = 2; - } - break; + else + { + bStatus = 6; + } + break; - case procStatus.accepted: - bStatus = 5; - break; + case procStatus.error: + if (isValidation || isTesting) + { + bStatus = 9; + } + else + { + bStatus = 7; + } + break; - case procStatus.refused: - if (isValidation || isTesting) - { - bStatus = 9; - } - else - { - bStatus = 6; - } - break; - - case procStatus.error: - if (isValidation || isTesting) - { - bStatus = 9; - } - else - { - bStatus = 7; - } - break; - - case procStatus.aborted: - default: - if (isValidation || isTesting) - { - bStatus = 9; - } - else - { - bStatus = 0; - } - break; - } - // SALVO info riguardo al batch running - DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60); - // salvo update elenco ITEMS - ComLib.updatePartsFromNesting(rispStima.PartList); - // aggiorno cadPath x items che non abbiano valorizzato... - string dxfFolder = memLayer.ML.CRS("drawingFolder"); - if (isTesting) - { - dxfFolder = memLayer.ML.CRS("fileTestFolder"); - } - string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/"; - DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false); - // verifico IN CASO di validazione andata a buon fine --> valorizzo tabella! - if (bStatus > 7) - { - if (isValidation) + case procStatus.aborted: + default: + if (isValidation || isTesting) + { + bStatus = 9; + } + else + { + bStatus = 0; + } + break; + } + // SALVO info riguardo al batch running + DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60); + // salvo update elenco ITEMS + ComLib.updatePartsFromNesting(rispStima.PartList); + // aggiorno cadPath x items che non abbiano valorizzato... + string dxfFolder = memLayer.ML.CRS("drawingFolder"); + if (isTesting) { - // recupero ordine da batch - if (tabOrd.Count > 0) + dxfFolder = memLayer.ML.CRS("fileTestFolder"); + } + string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/"; + DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false); + // verifico IN CASO di validazione andata a buon fine --> valorizzo tabella! + if (bStatus > 7) + { + if (isValidation) { - DLMan.taIV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime); - } - } - else if (isTesting) - { - // recupero ordine da batch - if (tabOrd.Count > 0) - { - DLMan.taFV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime); + // recupero ordine da batch + if (tabOrd.Count > 0) + { + DLMan.taIV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime); + } + } + else if (isTesting) + { + // recupero ordine da batch + if (tabOrd.Count > 0) + { + DLMan.taFV.upsertQuery(tabOrd[0].OrderExtCode, rispStima.BatchID, bStatus, rispStima.EstimatedWorktime); + } } } + // registro OK + answ = "OK"; } - // registro OK - answ = "OK"; } // stima "extended" x splitting else if (batchProcAnsw.ProcType == 3) @@ -286,124 +300,135 @@ namespace NKC_WF.Controllers int bStatus = 0; // deserializzo come BatchreqIniziale (stima) nestReplyBatchExtEst rispStima = JsonConvert.DeserializeObject(content); - - // salvo su mongoDb la risposta... - ComLib.man.saveExtEstAnsw(rispStima); - - // recupero info sul batch / KIT specifico x capire se sia di tipo "validation" - bool isValidation = false; - bool isTesting = false; - var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID); - if (tabOrd.Count > 0) + // verifica preliminare che il batch possa accettare la risposta + var currBatchStatus = ComLib.BStatus(rispStima.BatchID); + if (currBatchStatus != BatchStatus.EstimationRequested) { - isValidation = tabOrd[0].OrdType == "V"; - isTesting = tabOrd[0].OrdType == "T"; + string message = $"Impossibile processing risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispStima.BatchID} | stato: {currBatchStatus}"; + logger.lg.scriviLog(message, tipoLog.ERROR); + // registro KO + answ = "KO"; } - // calcolo status del batch... - switch (rispStima.ProcessStatus) + else { - case procStatus.waiting: - case procStatus.running: - bStatus = 1; - break; + // salvo su mongoDb la risposta... + ComLib.man.saveExtEstAnsw(rispStima); - case procStatus.completed: - if (isValidation || isTesting) - { - bool pdfOk = true; - // se richiesto CheckPDF - if (memLayer.ML.CRB("checkPdfPathTV")) + // recupero info sul batch / KIT specifico x capire se sia di tipo "validation" + bool isValidation = false; + bool isTesting = false; + var tabOrd = DLMan.taOL.getByBatch(rispStima.BatchID); + if (tabOrd.Count > 0) + { + isValidation = tabOrd[0].OrdType == "V"; + isTesting = tabOrd[0].OrdType == "T"; + } + // calcolo status del batch... + switch (rispStima.ProcessStatus) + { + case procStatus.waiting: + case procStatus.running: + bStatus = 1; + break; + + case procStatus.completed: + if (isValidation || isTesting) { - // verifico PDF, se NON OK --> errore - string pdfPath = ""; - foreach (var item in rispStima.PartList) + bool pdfOk = true; + // se richiesto CheckPDF + if (memLayer.ML.CRB("checkPdfPathTV")) { - pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath); - if (!pdfOk) + // verifico PDF, se NON OK --> errore + string pdfPath = ""; + foreach (var item in rispStima.PartList) { - // codice è B.xxx dove xxx = BatchID - DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}"); + pdfOk = pdfOk && ComLib.checkPdfExistAccessible(item, out pdfPath); + if (!pdfOk) + { + // codice è B.xxx dove xxx = BatchID + DLMan.taEL.insertQuery(DateTime.Now, "Check PDF path", $"B.{rispStima.BatchID}", $"{rispStima.BatchID}.{item.PartExtCode}", $"Error: PDF file not found: {pdfPath}"); + } } } - } - // se non OK --> registro errore... - if (!pdfOk) - { - bStatus = 9; - } - // verifico se il tempo di procesisng stimato sia > minimo... - else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec")) - { - bStatus = 10; + // se non OK --> registro errore... + if (!pdfOk) + { + bStatus = 9; + } + // verifico se il tempo di procesisng stimato sia > minimo... + else if (rispStima.EstimatedWorktime > memLayer.ML.CRI("minValidEstSec")) + { + bStatus = 10; + } + else + { + bStatus = 9; + } } else + { + bStatus = 2; + } + break; + + case procStatus.accepted: + bStatus = 5; + break; + + case procStatus.refused: + if (isValidation || isTesting) { bStatus = 9; } - } - else - { - bStatus = 2; - } - break; + else + { + bStatus = 6; + } + break; - case procStatus.accepted: - bStatus = 5; - break; + case procStatus.error: + if (isValidation || isTesting) + { + bStatus = 9; + } + else + { + bStatus = 7; + } + break; - case procStatus.refused: - if (isValidation || isTesting) - { - bStatus = 9; - } - else - { - bStatus = 6; - } - break; + case procStatus.aborted: + default: + if (isValidation || isTesting) + { + bStatus = 9; + } + else + { + bStatus = 0; + } + break; + } + // SALVO info riguardo al batch running + DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60); + // salvo update elenco ITEMS + ComLib.updatePartsFromNesting(rispStima.PartList); - case procStatus.error: - if (isValidation || isTesting) - { - bStatus = 9; - } - else - { - bStatus = 7; - } - break; + // aggiorno la risposta dei tempi di esecuzione (+ NUM cart/part) degli ordini x permettere aggiustamenti + ComLib.updateExtEstimFromNesting(rispStima.BatchID, rispStima.EstOrderList); - case procStatus.aborted: - default: - if (isValidation || isTesting) - { - bStatus = 9; - } - else - { - bStatus = 0; - } - break; + // aggiorno cadPath x items che non abbiano valorizzato... + string dxfFolder = memLayer.ML.CRS("drawingFolder"); + if (isTesting) + { + dxfFolder = memLayer.ML.CRS("fileTestFolder"); + } + string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/"; + DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false); + // registro OK + answ = "OK"; } - // SALVO info riguardo al batch running - DLMan.taBL.updateStatus(rispStima.BatchID, bStatus, rispStima.EnvNum, (decimal)rispStima.EstimatedWorktime / 60); - // salvo update elenco ITEMS - ComLib.updatePartsFromNesting(rispStima.PartList); - - // aggiorno la risposta dei tempi di esecuzione (+ NUM cart/part) degli ordini x permettere aggiustamenti - ComLib.updateExtEstimFromNesting(rispStima.BatchID, rispStima.EstOrderList); - - // aggiorno cadPath x items che non abbiano valorizzato... - string dxfFolder = memLayer.ML.CRS("drawingFolder"); - if (isTesting) - { - dxfFolder = memLayer.ML.CRS("fileTestFolder"); - } - string cadBasePath = $"{memLayer.ML.CRS("nestBasePath")}{dxfFolder}/"; - DLMan.taIL.updateCadPath(cadBasePath, rispStima.BatchID, false); - // registro OK - answ = "OK"; } // nesting else if (batchProcAnsw.ProcType == 2) @@ -411,84 +436,71 @@ namespace NKC_WF.Controllers // deserializzo come BatchreqFinale nestReplyBatchFinal rispNest = JsonConvert.DeserializeObject(content); - // 2020.01.16 salvo su mongoDb la risposta... - ComLib.man.saveNestAnsw(rispNest); - - // calcolo status del batch... - int bStatus = 2; - switch (rispNest.ProcessStatus) + // verifica preliminare che il batch possa accettare la risposta + var currBatchStatus = ComLib.BStatus(rispNest.BatchID); + if (currBatchStatus != BatchStatus.NestRequested) { - case procStatus.waiting: - case procStatus.running: - bStatus = 3; - break; - - case procStatus.completed: - bStatus = 4; - break; - - case procStatus.accepted: - bStatus = 5; - break; - - case procStatus.refused: - bStatus = 6; - break; - - case procStatus.error: - bStatus = 7; - break; - - case procStatus.aborted: - default: - bStatus = 2; - break; + string message = $"Impossibile processing risposta da EgtNest | ProcType: {batchProcAnsw.ProcType} | BatchID: {rispNest.BatchID} | stato: {currBatchStatus}"; + logger.lg.scriviLog(message, tipoLog.ERROR); + // registro KO + answ = "KO"; } - // aggiorno il resto SOLO SE status == completo... - if (rispNest.ProcessStatus == procStatus.completed || rispNest.ProcessStatus == procStatus.error) + else { - // resetto le precedenti elaborazioni: elimino dati child MA NON il batch... - DLMan.taBL.resetTree(rispNest.BatchID); - // SALVO info riguardo al batch completato - DLMan.taBL.updateStatus(rispNest.BatchID, bStatus, rispNest.EnvNum, (decimal)rispNest.EstimatedWorktime / 60); - // salvo info riguardo ai vari Bunk / Sheets / Items... - ComLib.updateBunksFromNesting(rispNest.BatchID, rispNest.BunkList); - // salvo info x CART & BINS previsti - ComLib.updateBinsFromNesting(rispNest.BatchID, rispNest.BinList); - ComLib.updateCartsFromNesting(rispNest.BatchID, rispNest.CartList); -#if false - // NKC2: se è un batch ti dipo descendant - if (ComLib.BType(rispNest.BatchID) == BatchType.Descendant) + + // 2020.01.16 salvo su mongoDb la risposta... + ComLib.man.saveNestAnsw(rispNest); + + // calcolo status del batch... + int bStatus = 2; + switch (rispNest.ProcessStatus) { - // verifico se ce ne siano altri NON validati (ma splitted) - var tabDesc = ComLib.BatchOtherDescendant(rispNest.BatchID); - if (tabDesc != null && tabDesc.Count > 0) - { - // ciclo x tutte le righe che NON fossero con nesting effettuato - foreach (var item in tabDesc) - { - // se c'è qualcosa da processare lo richiede - if (item.STATUS == 2) - { - // invio il PRIMO batch descendant - ComLib.sendBatchReq(item.BatchID, "Nesting", 2, false); - // registro su DB nesting iniziato... - DLMan.taBL.updateStatus(item.BatchID, (int)BatchStatus.NestRequested, "", -1); - isSplitReq = true; - // esco - break; - } - // se non ha trovato nulla --> prova update Batch Ancestor... - } - } - } -#endif - isSplitReq = ComLib.checkSendBatchSplit(rispNest.BatchID); - } + case procStatus.waiting: + case procStatus.running: + bStatus = 3; + break; - // registro OK - answ = "OK"; + case procStatus.completed: + bStatus = 4; + break; + + case procStatus.accepted: + bStatus = 5; + break; + + case procStatus.refused: + bStatus = 6; + break; + + case procStatus.error: + bStatus = 7; + break; + + case procStatus.aborted: + default: + bStatus = 2; + break; + } + // aggiorno il resto SOLO SE status == completo... + if (rispNest.ProcessStatus == procStatus.completed || rispNest.ProcessStatus == procStatus.error) + { + // resetto le precedenti elaborazioni: elimino dati child MA NON il batch... + DLMan.taBL.resetTree(rispNest.BatchID); + // SALVO info riguardo al batch completato + DLMan.taBL.updateStatus(rispNest.BatchID, bStatus, rispNest.EnvNum, (decimal)rispNest.EstimatedWorktime / 60); + // salvo info riguardo ai vari Bunk / Sheets / Items... + ComLib.updateBunksFromNesting(rispNest.BatchID, rispNest.BunkList); + // salvo info x CART & BINS previsti + ComLib.updateBinsFromNesting(rispNest.BatchID, rispNest.BinList); + ComLib.updateCartsFromNesting(rispNest.BatchID, rispNest.CartList); + + isSplitReq = ComLib.checkSendBatchSplit(rispNest.BatchID); + } + + // registro OK + answ = "OK"; + } } } else if (batchProcAnsw.OrderType == oType.OfflineOrder)