/// <summary> /// Returns the instance of the element if the procedure is completed, null otherwise /// </summary> protected virtual Element GetProcedureElement(ManualMeasurementItem proc) { Element result = null; if (proc != null) { var elements = (Session?.CurrentContext?.ActiveWorkView?.RootItem as Plane)?.GetAllElements(); if (elements != null) { var e = elements.Where(ei => ei.EditProcedure == proc.ProcName && ( (proc.BodySide.HasValue && ei.PatientsBodySide == proc.BodySide.Value) || (!proc.BodySide.HasValue && ei.PatientsBodySide == Session.PatientBodySide) || ei.PatientsBodySide == PatientsBodySide.None )).FirstOrDefault(); if (e != null && e.State == ElementState.Complete) { result = e; } } } return(result); }
/// <summary> /// Update session body side for specified measurement<param name="measurement"/>. /// </summary> protected void UpdateSessionBodySide(ManualMeasurementItem measurement) { if (measurement != null) { if (measurement.BodySide.HasValue) { Session.PatientBodySide = measurement.BodySide.Value; } else { Session.PatientBodySide = mPatientBodySide; } } }
/// <summary> /// Adds the current <param name="curProc"/> procedure into the Ignore List in case it is not completed, otherwise removes it from the Ignore List. /// This method should be used when we skip the procedure (click in the 'Next' button until the procedure has completed) /// </summary> protected void AddProcedureToIgnoreList(ManualMeasurementItem curProc) { if (curProc != null) { var procElement = GetProcedureElement(curProc); if (procElement == null || procElement.State != ElementState.Complete) { if (!mMeasurementIgnoreList.Contains(curProc)) { mMeasurementIgnoreList.Add(curProc); } } else { mMeasurementIgnoreList.Remove(curProc); } } }
/// <summary> /// Move to the next measurement if the current one is completed or added into <see cref="mMeasurementIgnoreList"/>. /// </summary> /// <param name="curMeasurementIndex">the index of the current measurement</param> /// <returns>True if the procedure is not completed, False otherwise</returns> private bool SkipIfCompleted(ref int curMeasurementIndex) { bool result = false; ManualMeasurementItem mItem = null; if (mSkipMeasurementIfCompleted) { while ((mItem = GetProcedureInfo(curMeasurementIndex)) != null) { UpdateSessionBodySide(mItem); var procElement = GetProcedureElement(mItem); if ((procElement == null || procElement.State != ElementState.Complete) && !IsInIgnoreList(mItem)) { result = true; break; } else { curMeasurementIndex++; } } } else { while ((mItem = GetProcedureInfo(curMeasurementIndex)) != null) { var procElement = GetProcedureElement(mItem); if (!IsInIgnoreList(mItem)) { result = true; break; } else { curMeasurementIndex++; } } } return(result); }
/// <summary> /// Starts a procedure /// </summary> /// <param name="procToStart">The procedure to start</param> protected virtual Procedure BeginProcedure(ManualMeasurementItem procToStart) { Procedure result = null; try { mbBeginProcInProgress = true; if (procToStart != null) { UpdateSessionBodySide(procToStart); result = Session.CurrentContext?.BeginProcedure(procToStart.ProcName, procToStart.Parameter, this, GetProcedureElement(procToStart)); mWizardView?.UpdateView(); } } finally { mbBeginProcInProgress = false; } return(result); }
/// <summary> /// Moving to the previous measurement until finding one that is not in the <see cref="mMeasurementIgnoreList"/> or until we reach the end of the list /// </summary> /// <param name="curMeasurementIndex">Index of the current procedure (updating inside the function)/param> /// <returns>True if a suitable procedure is found, False otherwise</returns> protected bool SkipPrev(ref int curMeasurementIndex) { bool result = false; ManualMeasurementItem mItem = null; while ((mItem = GetProcedureInfo(curMeasurementIndex)) != null) { UpdateSessionBodySide(mItem); var procElement = GetProcedureElement(mItem); if (!IsInIgnoreList(mItem)) { result = true; break; } else { curMeasurementIndex--; } } return(result); }
/// <summary> /// Checks if the current <param name="item"/> procedure is in the Ignore List (<seealso cref="mMeasurementIgnoreList"/>) /// </summary> protected bool IsInIgnoreList(ManualMeasurementItem item) { return(IsInIgnoreList(item?.ProcName)); }
/// <summary> /// Checks if the procedure has been executed successfully before /// </summary> protected bool CheckIfExecuted(ManualMeasurementItem item) { return(GetProcedureElement(item) != null); }