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 }); }
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()); }
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()); }