Production tracing : Saving records OK, Verification should be OK (TODO: Test)
This commit is contained in:
@@ -202,10 +202,14 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
public void StopDevice2() {}
|
||||
|
||||
|
||||
public Process GetWorkflowAndWorkstep(IOrderInfo order, out Workstep workstep, ISession session = null)
|
||||
public Process GetWorkflowAndWorkstep(IOrderInfo order, out Workstep workstep, out string previousStepName,
|
||||
out string part1name, out string part2name, ISession session = null)
|
||||
{
|
||||
bool openAndCloseSession = (session == null) || !session.IsOpen;
|
||||
workstep = null;
|
||||
previousStepName = null;
|
||||
part1name = null;
|
||||
part2name = null;
|
||||
|
||||
if (order is OrderInfo)
|
||||
{
|
||||
@@ -222,6 +226,13 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
if (wflows.Count == 1)
|
||||
{
|
||||
workstep = wflows[0].Worksteps.FirstOrDefault(x => x.Name.ToLower().Contains("test"));
|
||||
int previousStepNr = workstep.WorkstepNr - 1;
|
||||
var previousStep = (previousStepNr < 1) ? null : wflows[0].Worksteps.FirstOrDefault(x => x.WorkstepNr == previousStepNr);
|
||||
var part1 = wflows[0].Parts.FirstOrDefault(x => x.StepNumber == 1);
|
||||
var part2 = wflows[0].Parts.FirstOrDefault(x => x.StepNumber == 2);
|
||||
if (previousStep != null) previousStepName = previousStep.Name;
|
||||
if (part1 != null) part1name = part1.Name;
|
||||
if (part2 != null) part2name = part2.Name;
|
||||
}
|
||||
|
||||
if (openAndCloseSession) session.Close();
|
||||
@@ -485,7 +496,6 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
var sampleWM = waterMeters.FirstOrDefault<Results.Entities.WaterMeter>(x => x != null && x.Disabled == false);
|
||||
if (sampleWM != null)
|
||||
{
|
||||
bool isAtLeastOneNOK = false;
|
||||
using (ISession session = SessionFactory.OpenSession())
|
||||
{
|
||||
for (int i = 0; i < waterMeters.Count; i++)
|
||||
@@ -495,47 +505,45 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
if ((wm != null) && !wm.Disabled)
|
||||
{
|
||||
CheckPreviousRecordOfSingleWM(session, wm);
|
||||
if (wm.LastRecordIsNok)
|
||||
{
|
||||
isAtLeastOneNOK = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
retVal = Retv.OK;
|
||||
retVal = Retv.OK; /// Successfully completed (regardless of wm.LastRecordIsNok)
|
||||
}
|
||||
}
|
||||
|
||||
return retVal;
|
||||
return retVal; /// Returns Retv.Error if checking not completed successfully
|
||||
}
|
||||
|
||||
|
||||
Retv CheckPreviousRecordOfSingleWM(ISession session, Results.Entities.WaterMeter wm)
|
||||
{
|
||||
if (string.IsNullOrEmpty(wm.SerialNr))
|
||||
if (!string.IsNullOrEmpty(wm.SerialNr))
|
||||
{
|
||||
/// S/N is missing
|
||||
wm.ProcessId = 0;
|
||||
wm.LastRecordIsNok = false; /// OK, this is an RFID comm. error, not a production tracing error
|
||||
return Retv.OK;
|
||||
}
|
||||
/// Get all reference records with Code == SerialNr from all worksteps different from 'Test_bench'
|
||||
var refRecords = session.QueryOver<ReferenceRecord>()
|
||||
.Where(rr => (rr.Code1 == wm.SerialNr))
|
||||
.List();
|
||||
|
||||
///
|
||||
/// Get all reference records with Code == SerialNr from all worksteps different from 'Test_bench'
|
||||
///
|
||||
var refRecords = session.QueryOver<ReferenceRecord>()
|
||||
.Where(rr => (rr.Code1 == wm.SerialNr))
|
||||
.List();
|
||||
if (refRecords.Count == 1)
|
||||
{
|
||||
ReferenceRecord refRecord = refRecords[0];
|
||||
StepRecord previousStep = refRecord.StepRecords.FirstOrDefault(x => x.Workstep == ProcessData.PreviousStepName);
|
||||
|
||||
if (refRecords.Count == 0)
|
||||
{
|
||||
/// No records found
|
||||
wm.ProcessId = 0;
|
||||
wm.LastRecordIsNok = true; /// NOK
|
||||
return Retv.OK;
|
||||
if (refRecord.Name1 == ProcessData.Part1Name &&
|
||||
refRecord.Name2 == ProcessData.Part2Name &&
|
||||
(ProcessData.PreviousStepName == null || (previousStep != null && previousStep.Workstep == ProcessData.PreviousStepName)))
|
||||
{
|
||||
wm.ProcessId = 0;
|
||||
wm.LastRecordIsNok = false; /// OK
|
||||
return Retv.OK;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/// S/N is missing OR no records found OR workflows do not match OR previous StepRecord is missing
|
||||
wm.ProcessId = 0;
|
||||
wm.LastRecordIsNok = false; /// NOK (=default if no matching record found)
|
||||
wm.LastRecordIsNok = true; /// NOK
|
||||
return Retv.OK;
|
||||
}
|
||||
|
||||
@@ -654,7 +662,9 @@ namespace TBF.Rig.Output.DB.ProductionTracing
|
||||
{
|
||||
refRecord = new ReferenceRecord((order != null) ? order.POName : null,
|
||||
(workflow != null) ? workflow.Name : null,
|
||||
wm.SerialNr, /// PcbNumber (iPERL) or ghousing S/N (620/640)
|
||||
ProcessData.Part1Name, /// PCB (iPERL) or housing (620/640) SAP number
|
||||
wm.SerialNr, /// PcbNumber (iPERL) or housing S/N (620/640)
|
||||
ProcessData.Part2Name, /// Flowtube SAP nummber (iPERL) or "eRegister#" (640) or empty
|
||||
wm.SerialNrAux, /// Flowtube S/N (iPERL) or eRegister number (640) or empty
|
||||
wm.CompleteSerialNr, /// Complete assigned S/N
|
||||
wm.RadioAddress); /// Radio address (iPERL and 640)
|
||||
|
||||
Reference in New Issue
Block a user