Пример #1
0
        public BrokerOperationResult Add(string dfn, TrackingEntryType eventType, string reason, string comment)
        {
            BrokerOperationResult result = new BrokerOperationResult();

            if (this.broker != null)
            {
                DsioCreateTrackingLogCommand command = new DsioCreateTrackingLogCommand(this.broker);
                string eventTypeString = ((int)eventType).ToString();

                string[] commentArray = (string.IsNullOrWhiteSpace(comment)) ? null : Util.Split(comment);
                command.AddCommandArguments(dfn, eventTypeString, reason, commentArray);

                RpcResponse response = command.Execute();

                result.Success = (response.Status == RpcResponseStatus.Success);
                result.Message = response.InformationalMessage;
            }
            else
            {
                result.Message = "No broker";
            }

            return(result);
        }
        private CreateTrackingEntry GetNewModel(TrackingEntryType entryType, string dfn)
        {
            // *** Gets appropriate model based on entry type and dfn ***

            CreateTrackingEntry returnModel = new CreateTrackingEntry();

            // *** Set up button text, title, other ui elements ***
            switch (entryType)
            {
            case TrackingEntryType.Start:
                returnModel.ButtonText  = "Start Tracking";
                returnModel.PageTitle   = "Start Tracking a Patient";
                returnModel.PageMessage = "The following patient will appear as a tracked patient in the dashboard";
                SelectListResult selectListResult = this.DashboardRepository.SelectLists.GetReasonList();
                if (selectListResult.Success)
                {
                    returnModel.Reasons = selectListResult.SelectList;
                }
                returnModel.ReasonText = "Reason for Tracking";
                break;

            case TrackingEntryType.Stop:
                returnModel.ButtonText         = "Stop Tracking";
                returnModel.PageTitle          = "Stop Tracking a Patient";
                returnModel.PageMessage        = "Patient will no longer appear as a tracked patient in the dashboard";
                returnModel.OutcomeTableHeader = "Pregnancy Outcome";
                returnModel.OutcomeHeader      = "Outcome:";
                returnModel.DateHeader         = "Outcome/Delivery Date:";
                returnModel.ReasonText         = "Stop Tracking Reason";
                List <string> stopTrackingReasonList = new List <string>()
                {
                    "First trimester pregnancy failure or loss",
                    "Second trimester pregnancy failure or loss",
                    "Term or pre-term delivery, completed 8 weeks of postpartum care",
                    "Transfer of care",
                    "Moved out of area",
                    "Other"
                };
                returnModel.Reasons = stopTrackingReasonList;
                break;

            case TrackingEntryType.Accept:
                returnModel.ButtonText  = "Accept Tracking";
                returnModel.PageTitle   = "Accept Flagged Patient";
                returnModel.PageMessage = "The following patient will appear as a tracked patient in the dashboard";
                break;

            case TrackingEntryType.Reject:
                returnModel.ButtonText  = "Reject Tracking";
                returnModel.PageTitle   = "Reject Flagged Patient";
                returnModel.PageMessage = "The following patient will not appear as a tracked or flagged patient in the dashboard";
                break;
            }

            // *** Set return url ***
            if (TempData.ContainsKey(ReturnUrl))
            {
                returnModel.ReturnUrl = TempData[ReturnUrl].ToString();
                TempData[ReturnUrl]   = TempData[ReturnUrl];
            }

            // *** Get patient demographics ***
            this.CurrentPatientDfn = dfn;
            BasePatient currentPatient = this.CurrentPatient;

            if (!currentPatient.NotFound)
            {
                // *** Populate model with data ***
                returnModel.TrackingEntry = new TrackingEntry()
                {
                    PatientDfn  = dfn,
                    EntryType   = entryType,
                    PatientName = currentPatient.Name
                };

                returnModel.Patient = currentPatient;
            }

            return(returnModel);
        }
        public ActionResult Create(CreateTrackingEntry newTrackingEntry)
        {
            // *** Post new tracking entry data ***

            ActionResult returnResult;

            Nullable <bool> success = null;

            try
            {
                // *** Get entry type **
                TrackingEntryType eventType = newTrackingEntry.TrackingEntry.EntryType;

                // *** If start, make sure there's a reason ***
                if (eventType == TrackingEntryType.Start)
                {
                    if (string.IsNullOrWhiteSpace(newTrackingEntry.TrackingEntry.Reason))
                    {
                        success = false;
                        this.Error("Please select a reason");
                    }
                }

                if (eventType == TrackingEntryType.Stop)
                {
                    if (newTrackingEntry.TrackingEntry.Reason == "Other")
                    {
                        newTrackingEntry.TrackingEntry.Reason = newTrackingEntry.ReasonDetail;
                    }
                }

                // *** Check if a determination's been made yet ***
                if (!success.HasValue)
                {
                    // *** Set values for repository ***
                    string dfn     = newTrackingEntry.TrackingEntry.PatientDfn;
                    string reason  = newTrackingEntry.TrackingEntry.Reason;
                    string comment = newTrackingEntry.TrackingEntry.Comment;

                    // *** Add tracking history entry ***
                    BrokerOperationResult result = this.DashboardRepository.TrackingHistory.Add(dfn, eventType, reason, comment);

                    // *** Set return success ***
                    success = result.Success;

                    // *** Show a message ***
                    if (result.Success)
                    {
                        // *** Update pregnancy status ***
                        if (newTrackingEntry.TrackingEntry.EntryType == TrackingEntryType.Start)
                        {
                            if (newTrackingEntry.UpdatePregnancyStatus)
                            {
                                UpdatePregnancyStatus(dfn);
                            }
                        }

                        if (newTrackingEntry.TrackingEntry.EntryType == TrackingEntryType.Stop)
                        {
                            this.Information("The patient is no longer being tracked.");
                        }
                        else
                        {
                            this.Information("Tracking History Entry Created Successfully");
                        }
                    }
                    else
                    if (string.IsNullOrWhiteSpace(result.Message))
                    {
                        this.Error("Could not add tracking history entry");
                    }
                    else
                    {
                        this.Error(result.Message);
                    }
                }
            }
            catch (Exception genericException)
            {
                this.Error(genericException.Message);
                success = false;
            }

            if (success.Value)
            {
                if ((newTrackingEntry.TrackingEntry.EntryType == TrackingEntryType.Accept) ||
                    (newTrackingEntry.TrackingEntry.EntryType == TrackingEntryType.Reject))
                {
                    returnResult = RedirectToAction("Index", "FlaggedPatients");
                }
                else
                {
                    returnResult = RedirectToAction("Overview", "PatientList");
                }
            }
            else
            {
                // *** Repopulate model for error or problem
                CreateTrackingEntry model = GetNewModel(newTrackingEntry.TrackingEntry.EntryType, newTrackingEntry.TrackingEntry.PatientDfn);
                model.TrackingEntry.Comment = newTrackingEntry.TrackingEntry.Comment;
                returnResult = View("~/Views/Track/Create.cshtml", model);
            }

            return(returnResult);
        }