Example #1
0
        public async Task <IHttpActionResult> AddOrUpdateProjectAccess(ProjectShqUsersViewModel projectShqUsersViewModel)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest("Not a valid model"));
            }

            Project project = await db.Projects.Where(item => item.Id == projectShqUsersViewModel.ProjectId).FirstOrDefaultAsync();

            if (project == null)
            {
                return(NotFound());
            }

            var CreatedBy = await db.ShqUsers.Include("IdentityUser").FirstOrDefaultAsync(item => item.IdentityUserId == project.CreatedById);

            if (HttpContext.Current.User.Identity.Name != CreatedBy.IdentityUser.UserName &&
                HttpContext.Current.User.IsInRole(ShqConstants.AdministratorRole) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            ShqUser shqUser = await db.ShqUsers.Where(item => item.EmailAddress == projectShqUsersViewModel.EmailAddress).FirstOrDefaultAsync();

            if (shqUser == null)
            {
                return(NotFound());
            }

            var ps = shqUser.ProjectsAccess.Where(item => item.ProjectId == projectShqUsersViewModel.ProjectId && item.ShqUserId == shqUser.IdentityUserId).FirstOrDefault();

            if (ps != null)
            {
                ps.Privilege        = projectShqUsersViewModel.Privilege;
                ps.LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId;
                ps.LastModfiedTime  = DateTime.Now;
            }

            else
            {
                var newAccess = new ProjectShqUsers()
                {
                    ProjectId        = projectShqUsersViewModel.ProjectId,
                    ShqUserId        = shqUser.IdentityUserId,
                    Privilege        = projectShqUsersViewModel.Privilege,
                    CreatedById      = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId,
                    LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId
                };
                newAccess.LastModifiedById = newAccess.CreatedById;
                shqUser.ProjectsAccess.Add(newAccess);
            }

            await db.SaveChangesAsync();

            (new AuditsController()).AddAuditEntry("api/Projects/AddOrUpdateAccess", JsonConvert.SerializeObject(projectShqUsersViewModel));
            return(Ok(projectShqUsersViewModel));
        }
Example #2
0
        public async Task <IHttpActionResult> UpdateProject(ProjectRequestViewModel project)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Project pro = await db.Projects.FindAsync(project.Id);

            if (pro == null)
            {
                return(NotFound());
            }

            if (ProjectHelper.HasUpdateAccess(pro) == false)
            {
                throw new HttpResponseException(Request.CreateErrorResponse(HttpStatusCode.Forbidden, "No Access"));
            }

            db.Entry(pro).State  = EntityState.Modified;
            pro.ProjectName      = project.Name;
            pro.Description      = project.Description;
            pro.Tag              = project.Tag;
            pro.Status           = project.Status;
            pro.LastModifiedById = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId;
            pro.LastModfiedTime  = DateTime.Now;

            pro.ProjectsAccess.RemoveAll(item => item.ProjectId == pro.Id);
            if (project.UsersPrivileges.Count > 0)
            {
                foreach (var item in project.UsersPrivileges)
                {
                    var newAccess = new ProjectShqUsers()
                    {
                        ProjectId        = project.Id,
                        ShqUserId        = db.ShqUsers.Where(u => u.EmailAddress == item.EmailAddress).FirstOrDefault().IdentityUserId,
                        Privilege        = item.Privilege,
                        CreatedById      = pro.CreatedById,
                        LastModifiedById = pro.CreatedById
                    };
                    newAccess.LastModifiedById = newAccess.CreatedById;
                    pro.ProjectsAccess.Add(newAccess);
                }
            }

            await db.SaveChangesAsync();

            ProjectViewModel result = new ProjectViewModel(pro, db);

            result.Privilege = ShqConstants.AllowProjectUpdate;
            (new AuditsController()).AddAuditEntry("api/Projects/Update", JsonConvert.SerializeObject(result));
            return(Ok(result));
        }
Example #3
0
        public async Task <IHttpActionResult> AddProject(ProjectRequestViewModel projectView)
        {
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            Project pro = await db.Projects.FindAsync(projectView.Id);

            if (pro != null)
            {
                return(Ok("已存在"));
            }

            pro = await db.Projects.FirstOrDefaultAsync(item => item.ProjectName == projectView.Name);

            if (pro != null)
            {
                return(Ok("已存在"));
            }

            Project project = projectView.ToProject();

            project.CreatedById      = db.ShqUsers.Where(u => u.IdentityUser.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault().IdentityUserId;
            project.LastModifiedById = project.CreatedById;

            db.Projects.Add(project);

            if (project.Type == "FTAProject")
            {
                db.FTAProjects.Add(new FTAProject()
                {
                    Id = Guid.NewGuid(), ProjectId = projectView.Id, CreatedById = project.CreatedById, LastModifiedById = project.LastModifiedById
                });
            }

            if (project.Type == "FMEAProject")
            {
                db.FMEAProjects.Add(new FMEAProject()
                {
                    Id = Guid.NewGuid(), ProjectId = projectView.Id, CreatedById = project.CreatedById, LastModifiedById = project.LastModifiedById
                });
            }

            if (project.Type == "WorkProject")
            {
                var wp = db.WorkProjects.Add(new WorkProject()
                {
                    Id = Guid.NewGuid(), ProjectId = projectView.Id, Level = projectView.Level, CreatedById = project.CreatedById, LastModifiedById = project.LastModifiedById, WorkProjectTemplateId = ShqConstants.DefaultWorkProjectTemplateId
                });
                db.SaveChanges();
                try
                {
                    ProjectFilesController pfc = new ProjectFilesController();
                    await pfc.SyncProjectFiles(wp.ProjectId);
                }
                catch (Exception)
                {
                }
            }

            int i = 0;

            if (projectView.UsersPrivileges.Count > 0)
            {
                i++;
                foreach (var item in projectView.UsersPrivileges)
                {
                    var newAccess = new ProjectShqUsers()
                    {
                        ProjectId        = project.Id,
                        ShqUserId        = db.ShqUsers.Where(u => u.EmailAddress == item.EmailAddress).FirstOrDefault().IdentityUserId,
                        Privilege        = item.Privilege,
                        CreatedById      = project.CreatedById,
                        LastModifiedById = project.CreatedById
                    };
                    newAccess.LastModifiedById = newAccess.CreatedById;
                    db.ProjectShqUsers.Add(newAccess);
                }
            }

            await db.SaveChangesAsync();

            ProjectViewModel result = new ProjectViewModel(project, db);

            result.Description = i.ToString();
            result.Privilege   = ShqConstants.AllowProjectUpdate;

            (new AuditsController()).AddAuditEntry("api/Projects/Add", JsonConvert.SerializeObject(result));
            return(Ok(result));
        }