public IActionResult Post([FromBody] ProjectDeletionRequestModel model) { if (!ModelState.IsValid) { return(BadRequest(ModelState)); } if (model.ProjectId == 0) { return(BadRequest("Invalid project id provided")); } int userId = 0; string userIdVal = User.FindFirst(ClaimTypes.NameIdentifier)?.Value; if (!string.IsNullOrEmpty(userIdVal)) { userId = Convert.ToInt32(userIdVal); } if (userId == 0) { return(BadRequest("Unauthorized user access to api")); } model.UserId = userId; var response = service.AddRequest(model); if (!response.Success) { return(BadRequest(response.Message)); } return(Ok(true)); }
public ActionResponse AddRequest(ProjectDeletionRequestModel model) { using (var unitWork = new UnitOfWork(context)) { ActionResponse response = new ActionResponse(); IMessageHelper mHelper; var project = unitWork.ProjectRepository.GetByID(model.ProjectId); if (project == null) { mHelper = new MessageHelper(); response.Success = false; response.Message = mHelper.GetNotFound("Project"); return(response); } var user = unitWork.UserRepository.GetWithInclude(u => u.Id == model.UserId, new string[] { "Organization" }).FirstOrDefault(); if (user == null) { mHelper = new MessageHelper(); response.Success = false; response.Message = mHelper.GetNotFound("User"); return(response); } var isRequestExists = unitWork.ProjectDeletionRepository.GetOne(p => p.ProjectId == project.Id); if (isRequestExists != null && isRequestExists.Status == ProjectDeletionStatus.Requested) { mHelper = new MessageHelper(); response.Success = false; response.Message = mHelper.GetProjectDeletionExistsMessage(); return(response); } if (isRequestExists != null && isRequestExists.Status == ProjectDeletionStatus.Approved) { mHelper = new MessageHelper(); response.Success = false; response.Message = mHelper.GetProjectDeletionApprovedMessage(); return(response); } if (isRequestExists != null && isRequestExists.Status == ProjectDeletionStatus.Cancelled) { isRequestExists.Status = ProjectDeletionStatus.Requested; isRequestExists.RequestedOn = DateTime.Now; isRequestExists.StatusUpdatedOn = DateTime.Now; isRequestExists.RequestedBy = user; unitWork.ProjectDeletionRepository.Update(isRequestExists); } else { unitWork.ProjectDeletionRepository.Insert(new EFProjectDeletionRequests() { Project = project, RequestedBy = user, RequestedOn = DateTime.Now, StatusUpdatedOn = DateTime.Now, Status = ProjectDeletionStatus.Requested }); } unitWork.Save(); var projectFunderIds = unitWork.ProjectFundersRepository.GetProjection(f => f.ProjectId == project.Id, f => f.FunderId); var projectImplementerIds = unitWork.ProjectImplementersRepository.GetProjection(i => i.ProjectId == project.Id, i => i.ImplementerId); var orgIds = projectFunderIds.Union(projectImplementerIds).ToList(); if (!orgIds.Contains(user.OrganizationId)) { orgIds.Add(user.OrganizationId); } var userEmails = unitWork.UserRepository.GetProjection(u => u.UserType == UserTypes.Standard && orgIds.Contains(u.OrganizationId) && u.Id != user.Id, u => u.Email); //var adminEmails = unitWork.UserRepository.GetProjection(u => u.UserType == UserTypes.Manager && u.Id != user.Id, u => u.Email); //var allEmails = userEmails.Union(adminEmails); List <EmailAddress> usersEmailList = new List <EmailAddress>(); foreach (var email in userEmails) { usersEmailList.Add(new EmailAddress() { Email = email }); } if (usersEmailList.Count > 0) { ISMTPSettingsService smtpService = new SMTPSettingsService(context); var smtpSettings = smtpService.GetPrivate(); SMTPSettingsModel smtpSettingsModel = new SMTPSettingsModel(); if (smtpSettings != null) { smtpSettingsModel.Host = smtpSettings.Host; smtpSettingsModel.Port = smtpSettings.Port; smtpSettingsModel.Username = smtpSettings.Username; smtpSettingsModel.Password = smtpSettings.Password; smtpSettingsModel.AdminEmail = smtpSettings.AdminEmail; smtpSettingsModel.SenderName = smtpSettings.SenderName; } string message = "", subject = "", footerMessage = ""; string projectTitle = "<h5>Project title: " + project.Title + "</h5>"; string requestedBy = "<h5>Requested by: " + user.Email + " (" + user.Organization.OrganizationName + ")</h5>"; var emailMessage = unitWork.EmailMessagesRepository.GetOne(m => m.MessageType == EmailMessageType.ProjectDeletionRequest); if (emailMessage != null) { subject = emailMessage.Subject; message = projectTitle + requestedBy + emailMessage.Message; footerMessage = emailMessage.FooterMessage; } IEmailHelper emailHelper = new EmailHelper(smtpSettingsModel.AdminEmail, smtpSettings.SenderName, smtpSettingsModel); emailHelper.SendEmailToUsers(usersEmailList, subject, "", message, footerMessage); } return(response); } }