Exemple #1
0
        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));
        }
Exemple #2
0
        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);
            }
        }