Beispiel #1
0
        public Boundary.Response.MashReferral UpdateMashReferral(UpdateMashReferral request, long referralId)
        {
            if (request.UpdateType == "UNASSIGN-WORKER")
            {
                return(_mashReferralGateway.UpdateReferral(request, referralId).ToResponse());
            }

            var worker = request.WorkerId != null?_workerGateway.GetWorkerByWorkerId(request.WorkerId.Value) : _databaseGateway.GetWorkerByEmail(request.WorkerEmail)?.ToDomain(false);

            if (worker == null)
            {
                throw new WorkerNotFoundException($"Worker with email \"{request.WorkerEmail}\" not found");
            }

            return(_mashReferralGateway.UpdateReferral(request, referralId).ToResponse());
        }
        public IActionResult UpdateMashReferral([FromBody] UpdateMashReferral request, long referralId)
        {
            var validator  = new UpdateMashReferralValidator();
            var validation = validator.Validate(request);

            if (!validation.IsValid)
            {
                return(BadRequest(validation.ToString()));
            }

            try
            {
                var updatedReferral = _mashReferralUseCase.UpdateMashReferral(request, referralId);
                return(Ok(updatedReferral));
            }
            catch (Exception e) when(
                e is MashReferralNotFoundException ||
                e is WorkerNotFoundException ||
                e is MashReferralStageMismatchException)
            {
                return(BadRequest(e.Message));
            }
        }
Beispiel #3
0
        public MashReferral UpdateReferral(UpdateMashReferral request, long referralId)
        {
            var referral = _databaseContext.MashReferrals
                           .Include(x => x.MashResidents)
                           .Include(x => x.Worker)
                           .FirstOrDefault(x => x.Id == referralId);

            if (referral == null)
            {
                throw new MashReferralNotFoundException($"MASH referral with id {referralId} not found");
            }

            if (request.UpdateType.Equals("CONTACT-DECISION"))
            {
                if (!referral.Stage.Equals("CONTACT"))
                {
                    throw new MashReferralStageMismatchException(
                              $"Referral {referral.Id} is in stage '{referral.Stage}', this request requires the referral to be in stage 'CONTACT'");
                }

                referral.ContactDecisionCreatedAt             = _systemTime.Now;
                referral.ContactDecisionUrgentContactRequired = request.RequiresUrgentContact;
                referral.Stage = "INITIAL";
                if (request.WorkerEmail != null)
                {
                    referral.WorkerId = _databaseContext.Workers.FirstOrDefault(w => w.Email == request.WorkerEmail).Id;
                }
                else if (request.WorkerId != null)
                {
                    referral.WorkerId = request.WorkerId;
                }
            }

            if (request.UpdateType.Equals("INITIAL-DECISION"))
            {
                if (!referral.Stage.Equals("INITIAL"))
                {
                    throw new MashReferralStageMismatchException(
                              $"Referral {referral.Id} is in stage '{referral.Stage}', this request requires the referral to be in stage 'INITIAL'");
                }

                referral.InitialDecisionCreatedAt             = _systemTime.Now;
                referral.InitialDecision                      = request.Decision;
                referral.InitialDecisionUrgentContactRequired = request.RequiresUrgentContact;
                referral.InitialDecisionReferralCategory      = request.ReferralCategory;
                referral.Stage = "SCREENING";
            }

            if (request.UpdateType.Equals("SCREENING-DECISION"))
            {
                if (!referral.Stage.Equals("SCREENING"))
                {
                    throw new MashReferralStageMismatchException(
                              $"Referral {referral.Id} is in stage '{referral.Stage}', this request requires the referral to be in stage 'SCREENING'");
                }

                referral.ScreeningCreatedAt             = _systemTime.Now;
                referral.ScreeningDecision              = request.Decision;
                referral.ScreeningUrgentContactRequired = request.RequiresUrgentContact;
                referral.Stage = "FINAL";
            }

            if (request.UpdateType.Equals("FINAL-DECISION"))
            {
                if (!referral.Stage.Equals("FINAL"))
                {
                    throw new MashReferralStageMismatchException(
                              $"Referral {referral.Id} is in stage '{referral.Stage}', this request requires the referral to be in stage 'FINAL'");
                }

                referral.FinalDecisionCreatedAt             = _systemTime.Now;
                referral.FinalDecision                      = request.Decision;
                referral.FinalDecisionUrgentContactRequired = request.RequiresUrgentContact;
                referral.FinalDecisionReferralCategory      = request.ReferralCategory;
                referral.Stage = "POST-FINAL";
            }

            if (request.UpdateType.Equals("ASSIGN-WORKER"))
            {
                if (request.WorkerId != null)
                {
                    if (_databaseContext.Workers.Find(request.WorkerId) == null)
                    {
                        throw new WorkerNotFoundException($"Worker with id {request.WorkerId} not found");
                    }

                    referral.WorkerId = request.WorkerId;
                }
                else
                {
                    Worker worker = _databaseContext.Workers.FirstOrDefault(w => w.Email == request.WorkerEmail);
                    if (worker == null)
                    {
                        throw new WorkerNotFoundException($"Worker with email {request.WorkerEmail} not found");
                    }

                    referral.WorkerId = worker.Id;
                }
            }

            if (request.UpdateType.Equals("UNASSIGN-WORKER"))
            {
                referral.WorkerId = null;
            }

            _databaseContext.SaveChanges();

            return(referral.ToDomain());
        }