public (CaseSubmissionResponse, CaseSubmission) ExecutePost(CreateCaseSubmissionRequest request) { var worker = GetSanitisedWorker(request.CreatedBy); var resident = GetSanitisedResident(request.ResidentId); var dateTimeNow = DateTime.Now; var caseSubmission = new CaseSubmission { FormId = request.FormId, Residents = new List <Person> { resident }, Workers = new List <Worker> { worker }, CreatedAt = dateTimeNow, CreatedBy = worker, SubmissionState = SubmissionState.InProgress, EditHistory = new List <EditHistory <Worker> > { new EditHistory <Worker> { Worker = worker, EditTime = dateTimeNow } }, FormAnswers = new Dictionary <string, string>() }; _mongoGateway.InsertRecord(_collectionName, caseSubmission); return(caseSubmission.ToDomain().ToResponse(), caseSubmission); }
private static void UpdateTitle(CaseSubmission caseSubmission, string?title) { if (title == null) { return; } caseSubmission.Title = title; }
private static void UpdateDateOfEvent(CaseSubmission caseSubmission, DateTime?dateOfEvent) { if (dateOfEvent == null) { return; } caseSubmission.DateOfEvent = dateOfEvent; }
private void UpdateResidents(CaseSubmission caseSubmission, UpdateCaseSubmissionRequest request) { if (request.Residents == null) { return; } if (request.Residents.Count == 0) { throw new UpdateSubmissionException("A submission must be against at least one resident"); } if (caseSubmission.SubmissionState != SubmissionState.InProgress) { throw new UpdateSubmissionException("Cannot update residents for submission, submission state not 'in progress'"); } var residentsWithoutDuplicates = new HashSet <long>(request.Residents); var newResident = residentsWithoutDuplicates.Select(GetSanitisedResident).ToList(); caseSubmission.Residents = newResident; }
private static void UpdateSubmissionState(CaseSubmission submission, UpdateCaseSubmissionRequest request, Worker worker) { if (request.SubmissionState == null) { return; } var mapSubmissionStateToResponseString = new Dictionary <SubmissionState, string> { { SubmissionState.InProgress, "In progress" }, { SubmissionState.Submitted, "Submitted" }, { SubmissionState.Approved, "Approved" }, { SubmissionState.Discarded, "Discarded" }, { SubmissionState.PanelApproved, "Panel Approved" } }; if (!_stringToSubmissionState.ContainsKey(request.SubmissionState.ToLower())) { throw new UpdateSubmissionException($"Invalid submission state supplied {request.SubmissionState}"); } var newSubmissionState = _stringToSubmissionState[request.SubmissionState.ToLower()]; // We should never hit the default but C# compiler complains if we don't provide a default case // https://stackoverflow.com/questions/1098644/switch-statement-without-default-when-dealing-with-enumerations switch (newSubmissionState) { case SubmissionState.Discarded: if (submission.SubmissionState != SubmissionState.InProgress) { throw new UpdateSubmissionException($"Invalid submission state change from {mapSubmissionStateToResponseString[submission.SubmissionState]} to {mapSubmissionStateToResponseString[newSubmissionState]}"); } break; case SubmissionState.InProgress: if (submission.SubmissionState != SubmissionState.Submitted && submission.SubmissionState != SubmissionState.Approved) { throw new UpdateSubmissionException($"Invalid submission state change from {mapSubmissionStateToResponseString[submission.SubmissionState]} to {mapSubmissionStateToResponseString[newSubmissionState]}"); } submission.RejectionReason = request.RejectionReason; break; case SubmissionState.Submitted: if (submission.SubmissionState != SubmissionState.InProgress) { throw new UpdateSubmissionException($"Invalid submission state change from {mapSubmissionStateToResponseString[submission.SubmissionState]} to {mapSubmissionStateToResponseString[newSubmissionState]}"); } submission.SubmittedAt = DateTime.Now; submission.SubmittedBy = worker; break; case SubmissionState.Approved: if (submission.SubmissionState != SubmissionState.Submitted) { throw new UpdateSubmissionException($"Invalid submission state change from {mapSubmissionStateToResponseString[submission.SubmissionState]} to {mapSubmissionStateToResponseString[newSubmissionState]}"); } if (submission.CreatedBy.Email.Equals(request.EditedBy, StringComparison.OrdinalIgnoreCase)) { throw new UpdateSubmissionException($"Worker with email {request.EditedBy} cannot approve the submission as they created the submission"); } submission.ApprovedAt = DateTime.Now; submission.ApprovedBy = worker; break; case SubmissionState.PanelApproved: if (submission.SubmissionState != SubmissionState.Approved) { throw new UpdateSubmissionException($"Invalid submission state change from {mapSubmissionStateToResponseString[submission.SubmissionState]} to {mapSubmissionStateToResponseString[newSubmissionState]}"); } if (submission.CreatedBy.Email.Equals(request.EditedBy, StringComparison.OrdinalIgnoreCase)) { throw new UpdateSubmissionException($"Worker with email {request.EditedBy} cannot panel approve the submission as they created the submission"); } submission.PanelApprovedAt = DateTime.Now; submission.PanelApprovedBy = worker; break; default: throw new ArgumentOutOfRangeException(nameof(request)); } submission.SubmissionState = newSubmissionState; }