public async Task <bool> Handle(UpdateGatewayPageAnswerRequest request, CancellationToken cancellationToken) { _auditService.StartTracking(UserAction.UpdateGatewayPageOutcome, request.UserId, request.UserName); var application = await _applyRepository.GetApplication(request.ApplicationId); var answer = await _gatewayRepository.GetGatewayPageAnswer(request.ApplicationId, request.PageId); var isNew = answer == null; if (isNew) { answer = CreateNewGatewayPageAnswer(request.ApplicationId, request.PageId); _auditService.AuditInsert(answer); } else { _auditService.AuditUpdate(answer); } if (answer != null) { answer.Status = request.Status; answer.Comments = request.Comments; answer.UpdatedAt = DateTime.UtcNow; answer.UpdatedBy = request.UserName; answer.ClarificationAnswer = request.ClarificationAnswer; if (string.IsNullOrEmpty(answer.ClarificationAnswer)) { answer.ClarificationComments = null; answer.ClarificationBy = null; answer.ClarificationDate = null; } } bool updatedSuccessfully; if (isNew) { updatedSuccessfully = await _gatewayRepository.InsertGatewayPageAnswer(answer, request.UserId, request.UserName); } else { updatedSuccessfully = await _gatewayRepository.UpdateGatewayPageAnswer(answer, request.UserId, request.UserName); } if (application.GatewayUserId != request.UserId || application.GatewayUserName != request.UserName) { _auditService.AuditUpdate(application); application.GatewayUserId = request.UserId; application.GatewayUserName = request.UserName; application.UpdatedBy = request.UserName; application.UpdatedAt = DateTime.UtcNow; await _applyRepository.UpdateApplication(application); } _auditService.Save(); return(updatedSuccessfully); }
public async Task <Unit> Handle(RecordOversightGatewayFailOutcomeCommand request, CancellationToken cancellationToken) { _logger.LogInformation($"Recording Oversight review status of Unsuccessful for gateway fail application Id {request.ApplicationId}"); var application = await _applyRepository.GetApplication(request.ApplicationId); if (application == null) { throw new InvalidOperationException($"Application {request.ApplicationId} not found"); } var oversightReview = new OversightReview { ApplicationId = request.ApplicationId, Status = OversightReviewStatus.Unsuccessful, UserId = request.UserId, UserName = request.UserName, }; _auditService.StartTracking(UserAction.RecordOversightGatewayFailOutcome, request.UserId, request.UserName); _auditService.AuditInsert(oversightReview); _auditService.AuditUpdate(application); _oversightReviewRepository.Add(oversightReview); application.ApplicationStatus = ApplicationStatus.Rejected; _applyRepository.Update(application); _auditService.Save(); return(Unit.Value); }
public async Task <Unit> Handle(CreateAppealCommand request, CancellationToken cancellationToken) { var oversightReview = await GetOversightReview(request.OversightReviewId, request.ApplicationId); await VerifyAppealDoesNotExist(request.OversightReviewId); _auditService.StartTracking(UserAction.CreateAppeal, request.UserId, request.UserName); var appeal = new Appeal { OversightReviewId = request.OversightReviewId, Message = request.Message, UserId = request.UserId, UserName = request.UserName }; _appealRepository.Add(appeal); _auditService.AuditInsert(appeal); var uploads = await _appealUploadRepository.GetByApplicationId(oversightReview.ApplicationId); foreach (var upload in uploads) { _auditService.AuditUpdate(upload); upload.AppealId = appeal.Id; _appealUploadRepository.Update(upload); } _auditService.Save(); return(Unit.Value); }
public async Task <bool> Handle(UpdateGatewayReviewStatusAndCommentCommand request, CancellationToken cancellationToken) { _auditService.StartTracking(UserAction.UpdateGatewayReviewStatus, request.UserId, request.UserName); var application = await _applyRepository.GetApplication(request.ApplicationId); if (application?.ApplyData == null) { throw new InvalidOperationException($"Application {request.ApplicationId} not found"); } else if (application.ApplyData.GatewayReviewDetails == null) { application.ApplyData.GatewayReviewDetails = new ApplyGatewayDetails(); } _auditService.AuditUpdate(application); application.ApplicationStatus = request.GatewayReviewStatus == GatewayReviewStatus.Rejected ? ApplicationStatus.Rejected : ApplicationStatus.GatewayAssessed; application.GatewayReviewStatus = request.GatewayReviewStatus; application.ApplyData.GatewayReviewDetails.OutcomeDateTime = DateTime.UtcNow; application.ApplyData.GatewayReviewDetails.Comments = request.GatewayReviewComment; application.ApplyData.GatewayReviewDetails.ExternalComments = request.GatewayReviewExternalComment; application.ApplyData.GatewayReviewDetails.SubcontractingLimit = request.SubcontractingLimit; var updatedSuccessfully = await _gatewayRepository.UpdateGatewayReviewStatusAndComment(application.ApplicationId, application.ApplyData, application.GatewayReviewStatus, request.UserId, request.UserName); if (updatedSuccessfully && request.GatewayReviewStatus == GatewayReviewStatus.Rejected) { var oversightReview = new OversightReview { ApplicationId = request.ApplicationId, Status = OversightReviewStatus.Rejected, UserId = request.UserId, UserName = request.UserName, InternalComments = request.GatewayReviewComment, ExternalComments = request.GatewayReviewExternalComment }; _auditService.AuditInsert(oversightReview); _oversightReviewRepository.Add(oversightReview); await _applicationUpdatedEmailService.SendEmail(request.ApplicationId); } _auditService.Save(); await _unitOfWork.Commit(); return(updatedSuccessfully); }
private async Task <(Appeal, bool)> GetExistingAppeal(Guid applicationId) { var isNew = false; var appeal = await _appealRepository.GetByApplicationId(applicationId); if (appeal == null) { isNew = true; appeal = new Appeal { ApplicationId = applicationId }; _auditService.AuditInsert(appeal); } else { if (appeal.Status != AppealStatus.InProgress && appeal.Status != AppealStatus.Submitted) { throw new InvalidOperationException($"Unable to modify appeal review for application {applicationId} with a status of {appeal.Status}"); } _auditService.AuditUpdate(appeal); } return(appeal, isNew); }
public async Task <Unit> Handle(UploadAppealFileCommand request, CancellationToken cancellationToken) { _auditService.StartTracking(UserAction.UploadAppealFile, request.UserId, request.UserName); var appealFile = await _appealFileRepository.Get(request.ApplicationId, request.AppealFile.FileName); if (appealFile is null) { appealFile = new AppealFile { ApplicationId = request.ApplicationId, ContentType = request.AppealFile.ContentType, FileName = request.AppealFile.FileName, Size = request.AppealFile.Data.Length, UserId = request.UserId, UserName = request.UserName }; _auditService.AuditInsert(appealFile); _appealFileRepository.Add(appealFile); } else { _auditService.AuditUpdate(appealFile); appealFile.ContentType = request.AppealFile.ContentType; appealFile.Size = request.AppealFile.Data.Length; appealFile.UserId = request.UserId; appealFile.UserName = request.UserName; appealFile.CreatedOn = DateTime.UtcNow; _appealFileRepository.Update(appealFile); } _auditService.Save(); return(await Task.FromResult(Unit.Value)); }
public async Task <bool> Handle(UpdateGatewayReviewStatusAsClarificationRequest request, CancellationToken cancellationToken) { _auditService.StartTracking(UserAction.UpdateGatewayReviewStatus, request.UserId, request.UserName); var application = await _applyRepository.GetApplication(request.ApplicationId); if (application == null) { return(false); } _auditService.AuditUpdate(application); application.ApplicationStatus = ApplicationStatus.Submitted; application.GatewayReviewStatus = GatewayReviewStatus.ClarificationSent; if (application.ApplyData == null) { application.ApplyData = new ApplyData(); } if (application.ApplyData.GatewayReviewDetails == null) { application.ApplyData.GatewayReviewDetails = new ApplyGatewayDetails(); } application.ApplyData.GatewayReviewDetails.ClarificationRequestedOn = DateTime.UtcNow; application.ApplyData.GatewayReviewDetails.ClarificationRequestedBy = request.UserId; var updatedSuccessfully = await _gatewayRepository.UpdateGatewayReviewStatusAndComment(request.ApplicationId, application.ApplyData, application.GatewayReviewStatus, request.UserId, request.UserName); _auditService.Save(); await _unitOfWork.Commit(); return(updatedSuccessfully); }