Пример #1
0
        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}");
        }
Пример #2
0
        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}");
        }
Пример #3
0
        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} ");
        }
Пример #4
0
        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
        }
Пример #5
0
        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());
        }
Пример #6
0
        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());
        }