private static OperationData Capture(DiscontinueModalityPerformedProcedureStepRequest request, IPersistenceContext persistenceContext) { var mpps = persistenceContext.Load <ModalityPerformedProcedureStep>(request.Mpps.ModalityPerformendProcedureStepRef, EntityLoadFlags.None); var procedures = mpps.Activities.Select(a => a.Downcast <ModalityProcedureStep>().Procedure).ToList(); var order = procedures.First().Order; var patientProfile = procedures.First().PatientProfile; return(new OperationData(Operations.Discontinue, patientProfile, order, procedures)); }
private void DiscontinuePerformedProcedureStep() { // bail if no selected step (this shouldn't ever happen) if (_selectedMpps == null) { return; } // confirm with user that they really want to do this if (this.Host.DesktopWindow.ShowMessageBox(SR.MessageConfirmDiscontinueSelectedProcedures, MessageBoxActions.YesNo) == DialogBoxAction.No) { 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.TitleDiscontinuedTime, false, ref endTime)) { return; } } try { SaveData(); DiscontinueModalityPerformedProcedureStepResponse response = null; Platform.GetService <IModalityWorkflowService>( service => { var request = new DiscontinueModalityPerformedProcedureStepRequest(_selectedMpps) { DiscontinuedTime = DowntimeRecovery.InDowntimeRecoveryMode ? endTime : null }; response = service.DiscontinueModalityPerformedProcedureStep(request); }); RefreshProcedurePlanTree(response.ProcedurePlan); _mppsTable.Items.Replace( mpps => mpps.ModalityPerformendProcedureStepRef.Equals(_selectedMpps.ModalityPerformendProcedureStepRef, true), response.DiscontinuedMpps); // Refresh selection _selectedMpps = response.DiscontinuedMpps; 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 DiscontinueModalityPerformedProcedureStepResponse DiscontinueModalityPerformedProcedureStep(DiscontinueModalityPerformedProcedureStepRequest 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 DiscontinueModalityPerformedProcedureStepOperation(); op.Execute(mpps, request.DiscontinuedTime, new PersistentWorkflow(PersistenceContext)); this.PersistenceContext.SynchState(); // If discontinuing the MPPS caused any associated procedures to be discontinued, // create an HL7 event. foreach (var activity in mpps.Activities) { var procedure = activity.As <ProcedureStep>().Procedure; if (procedure.IsTerminated) { LogicalHL7Event.ProcedureCancelled.EnqueueEvents(procedure); } } // Drill back to order so we can refresh procedure plan var order = CollectionUtils.FirstElement(mpps.Activities).As <ProcedureStep>().Procedure.Order; var planAssembler = new ProcedurePlanAssembler(); var stepAssembler = new ModalityPerformedProcedureStepAssembler(); return(new DiscontinueModalityPerformedProcedureStepResponse( planAssembler.CreateProcedurePlanSummary(order, this.PersistenceContext), stepAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext))); }