public DABSendTestResult.Response DABSendTestResult(TestResultParameter testResult) { var command = new DABSendTestResult { Result = testResult }; return(CallCommand <DABSendTestResult, DABSendTestResult.Response>("DABSendTestResult", command)); }
private DABSendTestResult.Response DABSendTestResultHandler(DABSendTestResult command) { var response = new DABSendTestResult.Response(); List <ActualProducedMaterial> actualProdMats = Platform.ProjectionQuery <ActualProducedMaterial>().Include("WorkOrderOperation.ToBeUsedMachines").Include(apm => apm.MaterialItem).Where(apm => apm.PartialWorkedQuantity == 1).Where(apm => apm.MaterialItem.SerialNumberCode == command.Result.SerialNumber).ToList(); if (!actualProdMats.Any()) { response.SetError(-1000, $"Nessun Ordine attivo trovato per il seriale {command.Result.SerialNumber}"); return(response); } List <int> equipIds = actualProdMats.SelectMany(m => m.WorkOrderOperation.ToBeUsedMachines).Where(e => e.Machine != null).Select(e => e.Machine.Value).ToList(); var testingIds = Platform.ProjectionQuery <Equipment>().Where(e => equipIds.Contains(e.Id)).Where(e => e.MachineDefinitionNId == "Testing").Select(e => e.Id).ToList(); if (!testingIds.Any()) { response.SetError(-1000, $"Nessun Ordine attivo trovato per il seriale {command.Result.SerialNumber}"); return(response); } ActualProducedMaterial actualProdMat = actualProdMats.FirstOrDefault(mat => mat.WorkOrderOperation.ToBeUsedMachines.Any(m => testingIds.Contains(m.Machine.Value))); if (actualProdMat == null) { response.SetError(-1000, $"Seriale {command.Result.SerialNumber} non ancora disponibile o già completato"); return(response); } int?workOrderId = actualProdMat.WorkOrderOperation.WorkOrder_Id; var resultResponse = Platform.CallCommand <SendTestResult, SendTestResult.Response>(new SendTestResult { Result = command.Result, WorkOrderId = workOrderId.Value }); if (!resultResponse.Succeeded) { response.SetError(resultResponse.Error.ErrorCode, resultResponse.Error.ErrorMessage); return(response); } if (command.Result.Esito != "PASS") { response.SetError(-1268, $"Collaudo fallito: {command.Result.DescrizioneEsito}"); return(response); } var matDef = Platform.ProjectionQuery <MaterialDefinition>().Where(md => md.Id == actualProdMat.MaterialItem.MaterialDefinition).Select(md => md.NId).FirstOrDefault(); if (!workOrderId.HasValue || workOrderId == 0) { response.SetError(-1001, $"Nessun Ordine attivo trovato per il seriale {command.Result.SerialNumber}"); return(response); } var toBeUsedMachine = actualProdMat.WorkOrderOperation.ToBeUsedMachines.Where(tum => tum.Machine.HasValue).FirstOrDefault().Machine.Value; var equip = Platform.ProjectionQuery <Equipment>().Where(e => e.Id == toBeUsedMachine).FirstOrDefault(); var completeResponse = Platform.CallCommand <DABCompleteSerial, DABCompleteSerial.Response>(new DABCompleteSerial { CompleteSerializedWoOpParameterList = new List <CompleteSerializedParameterType> { new CompleteSerializedParameterType { EquipmentNId = equip.NId, Id = actualProdMat.WorkOrderOperation.Id, NId = actualProdMat.WorkOrderOperation.NId, ActualProducedMaterials = new List <MaterialItemParameterType> { new MaterialItemParameterType { NId = actualProdMat.MaterialItem.NId, EquipmentNId = equip.NId, MaterialDefinitionNId = matDef, SerialNumber = command.Result.SerialNumber } } } } }); if (!completeResponse.Succeeded) { response.SetError(completeResponse.Error.ErrorCode, completeResponse.Error.ErrorMessage); return(response); } RefreshOTWebSerials(workOrderId.Value); return(response); }