public StartModalityProcedureStepsResponse StartModalityProcedureSteps(StartModalityProcedureStepsRequest 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));

            var hasProcedureNotCheckedIn = CollectionUtils.Contains(
                modalitySteps,
                mps => mps.Procedure.IsPreCheckIn);

            if (hasProcedureNotCheckedIn)
            {
                throw new RequestValidationException(SR.ExceptionProcedureNotCheckedIn);
            }

            var op   = new StartModalityProcedureStepsOperation();
            var mpps = op.Execute(modalitySteps, request.StartTime, this.CurrentUserStaff, new PersistentWorkflow(PersistenceContext));

            this.PersistenceContext.SynchState();

            var procedurePlanAssembler = new ProcedurePlanAssembler();
            var mppsAssembler          = new ModalityPerformedProcedureStepAssembler();

            return(new StartModalityProcedureStepsResponse(
                       procedurePlanAssembler.CreateProcedurePlanSummary(modalitySteps[0].Procedure.Order, this.PersistenceContext),
                       mppsAssembler.CreateModalityPerformedProcedureStepDetail(mpps, this.PersistenceContext)));
        }
        private void StartModalityProcedureSteps()
        {
            try
            {
                var checkedItems = ListCheckedSummmaryTableItems();
                var firstItem    = CollectionUtils.FirstElement(checkedItems);

                if (CollectionUtils.Contains(
                        checkedItems,
                        item => item.ModalityProcedureStep.Modality.Id != firstItem.ModalityProcedureStep.Modality.Id))
                {
                    this.Host.ShowMessageBox("Cannot start procedure steps of different modalities at the same time.",
                                             MessageBoxActions.Ok);
                    return;
                }

                var checkedMpsRefs = CollectionUtils.Map <ProcedurePlanSummaryTableItem, EntityRef>(
                    checkedItems,
                    item => item.ModalityProcedureStep.ProcedureStepRef);

                if (checkedMpsRefs.Count > 0)
                {
                    DateTime?startTime = Platform.Time;
                    if (DowntimeRecovery.InDowntimeRecoveryMode)
                    {
                        if (!DateTimeEntryComponent.PromptForTime(this.Host.DesktopWindow, "Start Time", false, ref startTime))
                        {
                            return;
                        }
                    }

                    Platform.GetService <IModalityWorkflowService>(service =>
                    {
                        var request = new StartModalityProcedureStepsRequest(checkedMpsRefs)
                        {
                            StartTime = DowntimeRecovery.InDowntimeRecoveryMode ? startTime : null
                        };
                        var response = service.StartModalityProcedureSteps(request);

                        RefreshProcedurePlanSummary(response.ProcedurePlan);
                        UpdateActionEnablement();

                        _ppsComponent.AddPerformedProcedureStep(response.StartedMpps);
                    });
                }
            }
            catch (Exception e)
            {
                ExceptionHandler.Report(e, this.Host.DesktopWindow);
            }
        }