private void StopPerformedProcedureStep() { // bail if no selected step (this shouldn't ever happen) if (_selectedMpps == null) { return; } // bail on validation errors if (this.HasValidationErrors) { ShowValidation(true); return; } // if downtime recovery mode, need to get the time from the user DateTime?endTime = _selectedMpps.StartTime; if (DowntimeRecovery.InDowntimeRecoveryMode) { if (!DateTimeEntryComponent.PromptForTime(this.Host.DesktopWindow, SR.TitleCompletedTime, false, ref endTime)) { return; } } try { SaveData(); CompleteModalityPerformedProcedureStepResponse response = null; Platform.GetService <IModalityWorkflowService>( service => { var request = new CompleteModalityPerformedProcedureStepRequest(_selectedMpps) { CompletedTime = DowntimeRecovery.InDowntimeRecoveryMode ? endTime : null }; response = service.CompleteModalityPerformedProcedureStep(request); }); RefreshProcedurePlanTree(response.ProcedurePlan); _mppsTable.Items.Replace( mppsSummary => mppsSummary.ModalityPerformendProcedureStepRef.Equals(_selectedMpps.ModalityPerformendProcedureStepRef, true), response.StoppedMpps); // Refresh selection _selectedMpps = response.StoppedMpps; UpdateActionEnablement(); _mppsTable.Sort(); // notify pages that selection has been updated EventsHelper.Fire(_selectedMppsChanged, this, EventArgs.Empty); NotifyPerformedProcedureStepComplete(); } catch (Exception e) { ExceptionHandler.Report(e, this.Host.DesktopWindow); } }
public CompleteModalityPerformedProcedureStepResponse CompleteModalityPerformedProcedureStep(CompleteModalityPerformedProcedureStepRequest request) { var mpps = this.PersistenceContext.Load <ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef); // update extended properties (should this be in an assembler?) ExtendedPropertyUtils.Update(mpps.ExtendedProperties, request.Mpps.ExtendedProperties); var dicomSeriesAssembler = new DicomSeriesAssembler(); dicomSeriesAssembler.SynchronizeDicomSeries(mpps, request.Mpps.DicomSeries, this.PersistenceContext); var op = new CompleteModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.CompletedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // Drill back to order so we can refresh procedure plan var onePs = CollectionUtils.FirstElement(mpps.Activities).As <ProcedureStep>(); var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return(new CompleteModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(onePs.Procedure.Order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext))); }