private void SendCarrRequestedEmailsToAllAgentManagementUsers(AOCANotificationViewModel aocaNotificationViewModel) { if (aocaNotificationViewModel == null) { return; } var agentEmails = _genericUnitOfWork.GetRepository <User, Guid>().GetAll().Where(c => c.Roles.Any(p => GeneralService.AgentManagementDepartmentAgents.Any(q => q == p.Role.Id))); var emailRequest = new EmailRequest <AOCANotificationViewModel>() { Model = aocaNotificationViewModel }; if (!string.IsNullOrEmpty(aocaNotificationViewModel.ToEmail)) { emailRequest.To.Add(new System.Net.Mail.MailAddress(aocaNotificationViewModel.ToEmail)); } if (!string.IsNullOrEmpty(aocaNotificationViewModel.CcEmail)) { emailRequest.CC.Add(new System.Net.Mail.MailAddress(aocaNotificationViewModel.CcEmail)); } agentEmails.ForEachAsync(agent => emailRequest.To.Add(new System.Net.Mail.MailAddress(agent.Email))); _emailComposer.SendAOCAEmails(emailRequest, EmailTemplate.AocacarrRequested, $"MBOS: CARR(s) for Assessment No: {aocaNotificationViewModel.AssessmentNo}"); }
private void SendCarrResponsedEmailToAreaAdministrator(AOCANotificationViewModel aocaNotificationViewModel) { if (aocaNotificationViewModel == null) { return; } var emailRequest = new EmailRequest <AOCANotificationViewModel>() { Model = aocaNotificationViewModel }; emailRequest.To.Add(new System.Net.Mail.MailAddress(aocaNotificationViewModel.ToEmail)); _emailComposer.SendAOCAEmails(emailRequest, EmailTemplate.AocacarrResponsed, $"MBOS: Report for CARR with Reference No: {aocaNotificationViewModel.AOCACARRReferenceNo}"); }
private void SendCarrResponseVerifiedEmailToAgentManagement(AOCANotificationViewModel aocaNotificationViewModel) { if (aocaNotificationViewModel == null) { return; } var emailRequest = new EmailRequest <AOCANotificationViewModel>() { Model = aocaNotificationViewModel }; if (!string.IsNullOrEmpty(aocaNotificationViewModel.ToEmail)) { emailRequest.To.Add(new System.Net.Mail.MailAddress(aocaNotificationViewModel.ToEmail)); } aocaNotificationViewModel.ToEmails.ForEach(c => emailRequest.To.Add(new System.Net.Mail.MailAddress(c))); _emailComposer.SendAOCAEmails(emailRequest, EmailTemplate.AocacarrResponseVerified, $"MBOS: CARR with reference no: {aocaNotificationViewModel.AOCACARRReferenceNo} {aocaNotificationViewModel.VerifiedRejected} "); }
public void UpdateAocaCarrRequest(ServiceRequestModel <AOCACARRRequestViewModel> serviceRequestModel) { #region Update done by AA/AAA var carrRequestEntity = CarrRequestRepository.GetById(serviceRequestModel.Model.Id); if (GeneralService.IsAreaAdministratorRole(serviceRequestModel.LoginInfo.RoleId)) { if (!serviceRequestModel.Model.PreviousResponses.Any()) { return; } var resp = serviceRequestModel.Model.PreviousResponses.Last(); var respEntity = CarrResponseRepository.GetById(resp.Id); if (respEntity != null) { respEntity.CARRResponseStatus = resp.CARRResponseStatus; CarrResponseRepository.Update(respEntity); if (!string.IsNullOrEmpty(resp.RecommendedReplyDate)) { carrRequestEntity.RecommendedReplyDate = resp.RecommendedReplyDate.ToStringDate(); } carrRequestEntity.CARRStatus = resp.CARRResponseStatus; CarrRequestRepository.Update(carrRequestEntity); var agentEmails = _genericUnitOfWork.GetRepository <User, Guid>().GetAll().Where(c => c.Roles.Any(p => GeneralService.AgentManagementDepartmentAgents.Any(q => q == p.Role.Id))); var aocaNotificationViewModel = new AOCANotificationViewModel { AOCACARRReferenceNo = serviceRequestModel.Model.ReferenceNo, AOCACARRResponseStatus = resp.CARRResponseStatus, ToEmail = carrRequestEntity.AOCA.AOCAAssessment.Agent.User.Email, AssessmentNo = carrRequestEntity.AOCA.AOCAAssessment.AssessmentNo }; if (agentEmails.Any()) { aocaNotificationViewModel.ToEmails = agentEmails.Select(c => c.Email).ToList(); } _genericUnitOfWork.SaveChanges(); //aocaNotificationViewModel.ToEmails.Add(carrRequestEntity.AOCA.AOCAAssessment.Agent.CarrResponseEmail); SendCarrResponseVerifiedEmailToAgentManagement(aocaNotificationViewModel); } if (resp.CARRResponseStatus != CARRStatus.Closed) { return; } carrRequestEntity.CARRStatus = CARRStatus.Closed; CarrRequestRepository.Update(carrRequestEntity); var assessment = AssessmentRepository.GetAll().FirstOrDefault(x => x.AssessmentNo == serviceRequestModel.Model.AssessmentNo); if (assessment == null) { return; } var carrsQueryable = CarrRequestRepository.GetAll().Where(car => car.AOCA.AOCAAssessment.Id == assessment.Id); if (carrsQueryable.Count() != carrsQueryable.Count(c => c.CARRStatus == CARRStatus.Closed)) { return; } assessment.Status = AssessmentStatus.Closed; AssessmentRepository.Update(assessment); _genericUnitOfWork.SaveChanges(); } #endregion #region Update done by Agent else if (serviceRequestModel.Model.CurrentResponse != null && serviceRequestModel.LoginInfo.RoleId == new Guid(ApplicationConstants.AgentRoleId)) { var mappedResponse = _mapper.Map <AocacarrResponseViewModel, AOCACARRResponse>(serviceRequestModel.Model.CurrentResponse); mappedResponse.Id = Guid.NewGuid(); mappedResponse.AOCACARRRequestId = serviceRequestModel.Model.Id; mappedResponse.CARRResponseStatus = CARRStatus.Submitted; mappedResponse.CARRResponseDate = GeneralService.CurrentDate; mappedResponse.ResponserId = serviceRequestModel.CurrentUserId; if (mappedResponse.Attachments.Any()) { foreach (var aocaCarrResponseAttachment in mappedResponse.Attachments) { aocaCarrResponseAttachment.Id = Guid.NewGuid(); } } CarrResponseRepository.Add(mappedResponse); _genericUnitOfWork.SaveChanges(); carrRequestEntity.CARRStatus = CARRStatus.Submitted; CarrRequestRepository.Update(carrRequestEntity); _genericUnitOfWork.SaveChanges(); var areaAdminUser = _setupService.GetUserByuserId(serviceRequestModel.Model.AssessorId); if (areaAdminUser == null) { return; } var aocaNotificationViewModel = new AOCANotificationViewModel { AOCACARRReferenceNo = serviceRequestModel.Model.ReferenceNo, AOCACARRResponseStatus = mappedResponse.CARRResponseStatus, ToEmail = areaAdminUser.Email, AssessmentNo = carrRequestEntity.AOCA.AOCAAssessment.AssessmentNo }; SendCarrResponsedEmailToAreaAdministrator(aocaNotificationViewModel); } #endregion }
public AocaAssessmentViewModel UpdateAocaAssessment(ServiceRequestModel <AocaAssessmentViewModel> serviceRequestModel) { var agentCode = _genericUnitOfWork.GetRepository <Agent, Guid>().GetAll().FirstOrDefault(c => c.Id == serviceRequestModel.Model.AgentId)?.Code; var carrCount = 0; var assessmentDb = AssessmentRepository.GetById(serviceRequestModel.Model.Id); if (!serviceRequestModel.Model.IsPartialSave) { assessmentDb.IsCompleted = true; assessmentDb.CreatedDate = GeneralService.CurrentDate; assessmentDb.Status = serviceRequestModel.Model.ChecklistCriteria.SelectMany(x => x.AOCAChecklist).Where(x => x.CARRRequest != null).Select(x => x.CARRRequest).Any() ? AssessmentStatus.Open : AssessmentStatus.Closed; AssessmentRepository.Update(assessmentDb); } serviceRequestModel.Model.ChecklistCriteria.SelectMany(x => x.AOCAChecklist).ToList().ForEach(x => { var aoca = _mapper.Map <AOCAViewModel, AOCA>(x); aoca.Attachments = null; aoca.AOCAAssessmentId = assessmentDb.Id; AocaRepository.AddOrUpdate(aoca); x.Id = aoca.Id; var carr = CarrRequestRepository.GetAll().FirstOrDefault(p => p.AOCAId == aoca.Id); if (carr != null) { CarrRequestRepository.Delete(carr); } if (x.ScoringGuideId > 2) { x.CARRRequest = null; } if (x.CARRRequest != null) { if (!serviceRequestModel.Model.IsPartialSave) { var nextCarrRunningNo = _sharedService.GetNextRunningNumber(RunningNumberType.AOCACARR, assessmentDb.Date.Year, agentCode); x.CARRRequest.ReferenceNo = $"{"AOCA/CARR"}/{assessmentDb.Date.Year}-{agentCode}-{nextCarrRunningNo.ToString().PadLeft(3, '0')}"; } var carrRequest = _mapper.Map <AOCACARRRequestViewModel, AOCACARRRequest>(x.CARRRequest); carrRequest.AOCAId = aoca.Id; //carrRequest.RecommendedReplyDate = serviceRequestModel.Model.Date.ToStringDate().AddDays(14); carrRequest.CARRStatus = CARRStatus.Pending; carrRequest.Id = Guid.NewGuid(); CarrRequestRepository.Add(carrRequest); x.CARRRequest.Id = carrRequest.Id; carrCount++; } if (x.Attachments.Any()) { x.Attachments.ForEach(y => { if (y.Id == Guid.Empty) { y.Id = Guid.NewGuid(); } y.AOCAId = aoca.Id; var attachment = _mapper.Map <AocaAttachmentViewModel, AOCAAttachment>(y); var attachmentFullName = attachment.AttachmentFullName.MoveToDestination(serviceRequestModel.Model.HostingEnviromentPath, "AOCA/" + assessmentDb.Id); attachment.AttachmentFullName = attachmentFullName; y.AttachmentFullName = attachmentFullName; AttachmentRepository.AddOrUpdate(attachment); }); } ; }); _genericUnitOfWork.SaveChanges(); if (serviceRequestModel.Model.IsPartialSave) { return(serviceRequestModel.Model); } if (carrCount == 0) { return(new AocaAssessmentViewModel()); } var agentDetail = AgentRepository.GetById(assessmentDb.AgentId); var aocaNotificationViewModel = new AOCANotificationViewModel { AssessmentNo = assessmentDb.AssessmentNo, CARRRequestCount = carrCount, ToEmail = agentDetail.User.Email }; SendCarrRequestedEmailsToAllAgentManagementUsers(aocaNotificationViewModel); return(new AocaAssessmentViewModel()); }
public AocaAssessmentViewModel AddAocaAssessment(ServiceRequestModel <AocaAssessmentViewModel> serviceRequestModel) { DateTime assessmentDate; DateTime.TryParse(serviceRequestModel.Model.Date, out assessmentDate); var monthStartDate = assessmentDate.FirstDayOfMonth(); var monthEndDate = assessmentDate.LastDayOfMonth(); if (assessmentDate.Date > GeneralService.CurrentDate.Date) { throw new ArgumentNullException($"The assessment date cannot be in future.", innerException: null); } var assessmentExists = AssessmentRepository.GetAll().Any(c => c.AgentId == serviceRequestModel.Model.AgentId && c.Date >= monthStartDate && c.Date <= monthEndDate); if (assessmentExists) { throw new ArgumentNullException($"AOCA Assessment for the month {assessmentDate.ToString(@"MMM\'yy")} already exists in the system", innerException: null); } var agentCode = _genericUnitOfWork.GetRepository <Agent, Guid>().GetAll().FirstOrDefault(c => c.Id == serviceRequestModel.Model.AgentId)?.Code; var mapped = _mapper.Map <AocaAssessmentViewModel, AOCAAssessment>(serviceRequestModel.Model); mapped.AssessmentNo = _sharedService.GenerateNumber(RunningNumberType.AOCA, mapped.Date.Year, agentCode ?? "", "AOCA/", "yy", "MM", 3); mapped.CreatedById = serviceRequestModel.LoginInfo.UserId; mapped.CreatedDate = GeneralService.CurrentDate; mapped.Status = AssessmentStatus.Open; if (!serviceRequestModel.Model.IsPartialSave) { mapped.Status = serviceRequestModel.Model.ChecklistCriteria.SelectMany(x => x.AOCAChecklist).Where(x => x.CARRRequest != null).Select(x => x.CARRRequest).Any() ? AssessmentStatus.Open : AssessmentStatus.Closed; mapped.IsCompleted = true; } AssessmentRepository.Add(mapped); var carrCount = 0; foreach (var aocaViewModel in serviceRequestModel.Model.ChecklistCriteria.SelectMany(x => x.AOCAChecklist).ToList()) { //aocaViewModel.Id = Guid.NewGuid(); aocaViewModel.AOCAAssessmentId = mapped.Id; var aoca = _mapper.Map <AOCAViewModel, AOCA>(aocaViewModel); aoca.Attachments = null; AocaRepository.Add(aoca); if (aocaViewModel.CARRRequest != null) { var carrReq = _mapper.Map <AOCACARRRequestViewModel, AOCACARRRequest>(aocaViewModel.CARRRequest); var carrId = Guid.NewGuid(); // response for partial save aocaViewModel.CARRRequest.Id = carrId; carrReq.Id = carrId; carrReq.AOCAId = aoca.Id; if (!serviceRequestModel.Model.IsPartialSave) { var nextCarrRunningNo = _sharedService.GetNextRunningNumber(RunningNumberType.AOCACARR, mapped.Date.Year, agentCode); carrReq.ReferenceNo = $"{"AOCA/CARR"}/{mapped.Date.Year}-{agentCode}-{nextCarrRunningNo.ToString().PadLeft(3, '0')}"; } // carrReq.RecommendedReplyDate = mapped.Date.AddDays(14); carrReq.CARRStatus = CARRStatus.Pending; CarrRequestRepository.Add(carrReq); carrCount++; } if (aocaViewModel.Attachments.Any()) { aocaViewModel.Attachments.ForEach(y => { y.Id = Guid.NewGuid(); y.AOCAId = aoca.Id; var attachment = _mapper.Map <AocaAttachmentViewModel, AOCAAttachment>(y); var attachmentFullName = attachment.AttachmentFullName.MoveToDestination( serviceRequestModel.Model.HostingEnviromentPath, "AOCA/" + mapped.Id); attachment.AttachmentFullName = attachmentFullName; y.AttachmentFullName = attachmentFullName; AttachmentRepository.Add(attachment); }); } } _genericUnitOfWork.SaveChanges(); if (serviceRequestModel.Model.IsPartialSave) { serviceRequestModel.Model.AssessmentNo = mapped.AssessmentNo; return(serviceRequestModel.Model); } if (carrCount == 0) { return(new AocaAssessmentViewModel()); } var agentDetail = AgentRepository.GetById(mapped.AgentId); var aocaNotificationViewModel = new AOCANotificationViewModel { AssessmentNo = mapped.AssessmentNo, CARRRequestCount = carrCount, ToEmail = agentDetail.User.Email, CcEmail = agentDetail.User.Email }; SendCarrRequestedEmailsToAllAgentManagementUsers(aocaNotificationViewModel); return(new AocaAssessmentViewModel()); }