protected override async Task ValidateAndSave()
        {
            TreatmentEvent.NotificationId           = NotificationId;
            TreatmentEvent.CaseManagerUsername      = Notification.HospitalDetails.CaseManagerUsername;
            TreatmentEvent.TbServiceCode            = Notification.HospitalDetails.TBServiceCode;
            TreatmentEvent.IsNotificationPostMortem = Notification.ClinicalDetails.IsPostMortem ?? false;

            // The required date will be marked as missing on the model, since we are setting it manually, rather than binding it
            ModelState.Remove("TreatmentEvent.EventDate");
            ValidationService.TrySetFormattedDate(TreatmentEvent, nameof(TreatmentEvent), nameof(TreatmentEvent.EventDate), FormattedEventDate);

            // TreatmentOutcomeId will be marked as missing on the model, since setting manually
            ModelState.Remove("TreatmentEvent.TreatmentOutcomeId");

            // Add additional fields required for date validation
            TreatmentEvent.Dob = Notification.PatientDetails.Dob;
            TreatmentEvent.DateOfNotification = Notification.NotificationDate;

            switch (TreatmentEvent.TreatmentEventType)
            {
            case TreatmentEventType.TreatmentOutcome:
                await TrySetOutcomeFromTypeAndSubTypeAsync();

                break;

            case TreatmentEventType.TreatmentRestart:
                TreatmentEvent.TreatmentOutcomeId = null;
                break;
            }

            if (TryValidateModel(TreatmentEvent, nameof(TreatmentEvent)))
            {
                if (RowId == null)
                {
                    TreatmentEvent.CaseManagerUsername = Notification.HospitalDetails.CaseManagerUsername;
                    TreatmentEvent.TbServiceCode       = Notification.HospitalDetails.TBServiceCode;
                    await _treatmentEventRepository.AddAsync(TreatmentEvent);
                }
                else
                {
                    TreatmentEvent.TreatmentEventId = RowId.Value;
                    await _treatmentEventRepository.UpdateAsync(Notification, TreatmentEvent);
                }
                await _alertService.AutoDismissAlertAsync <DataQualityTreatmentOutcome12>(Notification);

                await _alertService.AutoDismissAlertAsync <DataQualityTreatmentOutcome24>(Notification);

                await _alertService.AutoDismissAlertAsync <DataQualityTreatmentOutcome36>(Notification);
            }
            else
            {
                // Manual handling of TreatmentOutcomeId in switch statement below will cover all validation for property
                ModelState.Remove("TreatmentEvent.TreatmentOutcomeId");
            }
        }
        public async Task AcceptTransferAndDismissAlertAsync()
        {
            var currentTime      = DateTime.Now;
            var transferOutEvent = new TreatmentEvent
            {
                NotificationId      = NotificationId,
                EventDate           = currentTime,
                TreatmentEventType  = TreatmentEventType.TransferOut,
                CaseManagerUsername = Notification.HospitalDetails.CaseManagerUsername,
                TbServiceCode       = Notification.HospitalDetails.TBServiceCode,
                Note = TransferAlert.TransferRequestNote
            };
            var transferInEvent = new TreatmentEvent
            {
                NotificationId      = NotificationId,
                EventDate           = currentTime.AddSeconds(1),
                TreatmentEventType  = TreatmentEventType.TransferIn,
                CaseManagerUsername = TransferAlert.CaseManagerUsername,
                TbServiceCode       = TransferAlert.TbServiceCode,
                Note = TransferAlert.TransferRequestNote
            };

            var previousTbService = new PreviousTbService()
            {
                TransferDate  = currentTime,
                TbServiceCode = Notification.HospitalDetails.TBServiceCode,
                PhecCode      = Notification.HospitalDetails?.TBService?.PHECCode
            };

            Notification.PreviousTbServices.Add(previousTbService);
            Notification.HospitalDetails.TBServiceCode       = TransferAlert.TbServiceCode;
            Notification.HospitalDetails.HospitalId          = TargetHospitalId;
            Notification.HospitalDetails.CaseManagerUsername = TargetCaseManagerUsername;
            await Service.UpdateHospitalDetailsAsync(Notification, Notification.HospitalDetails);

            await _treatmentEventRepository.AddAsync(transferOutEvent);

            await _treatmentEventRepository.AddAsync(transferInEvent);

            await _alertService.DismissAlertAsync(TransferAlert.AlertId, User.FindFirstValue(ClaimTypes.Upn));
        }
Ejemplo n.º 3
0
 private async Task CreateTreatmentEventNotificationStart(Notification notification)
 {
     await _treatmentEventRepository.AddAsync(NotificationHelper.CreateTreatmentStartEvent(notification));
 }