private void OnSelectedMppsChanged(ModalityPerformedProcedureStepDetail newSelection)
        {
            if (_selectedMpps != null)
            {
                // save changes to existing data first
                SaveData();
            }

            _selectedMpps = newSelection;

            UpdateActionEnablement();

            EventsHelper.Fire(_selectedMppsChanged, this, EventArgs.Empty);
        }
        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);
            }
        }
        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);
            }
        }
 internal void AddPerformedProcedureStep(ModalityPerformedProcedureStepDetail mpps)
 {
     _mppsTable.Items.Add(mpps);
     _mppsTable.Sort();
 }