private static OperationData Capture(DiscontinueModalityProcedureStepsRequest request, IPersistenceContext persistenceContext)
            {
                var procedures     = request.ModalityProcedureSteps.Select(r => persistenceContext.Load <ModalityProcedureStep>(r, EntityLoadFlags.None).Procedure).ToList();
                var order          = procedures.First().Order;
                var patientProfile = procedures.First().PatientProfile;

                return(new OperationData(Operations.Discontinue, patientProfile, order, procedures));
            }
        private void DiscontinueModalityProcedureSteps()
        {
            try
            {
                var checkedMpsRefs = CollectionUtils.Map <ProcedurePlanSummaryTableItem, EntityRef, List <EntityRef> >(
                    ListCheckedSummmaryTableItems(),
                    item => item.ModalityProcedureStep.ProcedureStepRef);

                if (checkedMpsRefs.Count > 0)
                {
                    if (this.Host.DesktopWindow.ShowMessageBox("Are you sure you want to discontinue the selected procedure(s)?", MessageBoxActions.YesNo) != DialogBoxAction.No)
                    {
                        DateTime?discontinueTime = Platform.Time;
                        if (DowntimeRecovery.InDowntimeRecoveryMode)
                        {
                            if (!DateTimeEntryComponent.PromptForTime(this.Host.DesktopWindow, "Cancel Time", false, ref discontinueTime))
                            {
                                return;
                            }
                        }

                        Platform.GetService <IModalityWorkflowService>(service =>
                        {
                            var request = new DiscontinueModalityProcedureStepsRequest(checkedMpsRefs)
                            {
                                DiscontinuedTime = DowntimeRecovery.InDowntimeRecoveryMode ? discontinueTime : null
                            };
                            var response = service.DiscontinueModalityProcedureSteps(request);

                            RefreshProcedurePlanSummary(response.ProcedurePlan);
                            UpdateActionEnablement();
                        });
                    }
                }
            }
            catch (Exception e)
            {
                ExceptionHandler.Report(e, this.Host.DesktopWindow);
            }
        }
        public DiscontinueModalityProcedureStepsResponse DiscontinueModalityProcedureSteps(DiscontinueModalityProcedureStepsRequest request)
        {
            Platform.CheckForNullReference(request, "request");
            Platform.CheckMemberIsSet(request.ModalityProcedureSteps, "ModalityProcedureSteps");

            // load the set of mps
            var modalitySteps = CollectionUtils.Map <EntityRef, ModalityProcedureStep>(
                request.ModalityProcedureSteps,
                mpsRef => this.PersistenceContext.Load <ModalityProcedureStep>(mpsRef));

            foreach (var step in modalitySteps)
            {
                var op = new DiscontinueModalityProcedureStepOperation();
                op.Execute(step, request.DiscontinuedTime, new PersistentWorkflow(this.PersistenceContext));

                // If discontinuing the procedure step caused the parent procedure to be discontinued,
                // create an HL7 event.
                if (step.Procedure.IsTerminated)
                {
                    LogicalHL7Event.ProcedureCancelled.EnqueueEvents(step.Procedure);
                }
            }

            this.PersistenceContext.SynchState();

            var assembler = new ProcedurePlanAssembler();

            return(new DiscontinueModalityProcedureStepsResponse(
                       assembler.CreateProcedurePlanSummary(modalitySteps[0].Procedure.Order, this.PersistenceContext)));
        }