public static Domain.CaseStatusAnswer ToDomain(this Infrastructure.CaseStatusAnswer caseStatusAnswer)
 {
     return(new Domain.CaseStatusAnswer()
     {
         Option = caseStatusAnswer.Option,
         Value = caseStatusAnswer.Value,
         StartDate = caseStatusAnswer.StartDate,
         CreatedAt = caseStatusAnswer.CreatedAt,
         GroupId = caseStatusAnswer.GroupId,
         EndDate = caseStatusAnswer.EndDate,
         DiscardedAt = caseStatusAnswer.DiscardedAt
     });
 }
Exemple #2
0
        public CaseStatus CreateCaseStatusAnswer(CreateCaseStatusAnswerRequest request)
        {
            var caseStatus = _databaseContext.CaseStatuses.Include(x => x.Answers).FirstOrDefault(x => x.Id == request.CaseStatusId);

            if (caseStatus == null)
            {
                throw new CaseStatusDoesNotExistException($"Case status id {request.CaseStatusId} does not exist.");
            }

            if (caseStatus.Answers == null)
            {
                caseStatus.Answers = new List <CaseStatusAnswer>();
            }

            Guid identifier = Guid.NewGuid();

            foreach (var answer in request.Answers)
            {
                var caseStatusAnswer = new Infrastructure.CaseStatusAnswer()
                {
                    CaseStatusId = caseStatus.Id,
                    CreatedBy    = request.CreatedBy,
                    StartDate    = request.StartDate,
                    Option       = answer.Option,
                    Value        = answer.Value,
                    GroupId      = identifier.ToString(),
                    CreatedAt    = _systemTime.Now
                };

                caseStatus.Answers.Add(caseStatusAnswer);
            }

            _databaseContext.SaveChanges();

            return(caseStatus.ToDomain());
        }
Exemple #3
0
        public CaseStatus ReplaceCaseStatusAnswers(CreateCaseStatusAnswerRequest request)
        {
            var caseStatus = _databaseContext.CaseStatuses.Include(x => x.Answers).FirstOrDefault(x => x.Id == request.CaseStatusId);

            if (caseStatus == null)
            {
                throw new CaseStatusDoesNotExistException($"Case status id {request.CaseStatusId} does not exist.");
            }

            var activeAnswers = caseStatus
                                .Answers
                                .Where(x => x.DiscardedAt == null && x.EndDate == null);

            //discard future ones
            if (activeAnswers.Any(x => x.StartDate > DateTime.Today.Date))
            {
                foreach (var answer in activeAnswers)
                {
                    answer.DiscardedAt    = _systemTime.Now;
                    answer.LastModifiedBy = request.CreatedBy;
                }
            }
            //end the current ones and add new episode end reason (hard coded for data migration purposes)
            else
            {
                caseStatus.Answers.Add(new CaseStatusAnswer()
                {
                    CreatedBy = request.CreatedBy,
                    EndDate   = request.StartDate,
                    StartDate = activeAnswers.First().StartDate,
                    Option    = CaseStatusAnswerOption.EpisodeReason,
                    Value     = CaseStatusAnswerValue.X1,
                    GroupId   = activeAnswers.First().GroupId
                });

                foreach (var answer in activeAnswers)
                {
                    answer.EndDate        = request.StartDate;
                    answer.LastModifiedBy = request.CreatedBy;
                }
            }

            //add new ones
            Guid identifier = Guid.NewGuid();

            foreach (var answer in request.Answers)
            {
                var caseStatusAnswer = new Infrastructure.CaseStatusAnswer()
                {
                    CaseStatusId = caseStatus.Id,
                    CreatedBy    = request.CreatedBy,
                    StartDate    = request.StartDate,
                    Option       = answer.Option,
                    Value        = answer.Value,
                    GroupId      = identifier.ToString(),
                    CreatedAt    = _systemTime.Now
                };

                caseStatus.Answers.Add(caseStatusAnswer);
            }

            _databaseContext.SaveChanges();

            return(caseStatus.ToDomain());
        }