예제 #1
0
        public ActionResult Manage(string id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            var model   = new AssignPageModel();
            var theUser = db.Users.Find(id);
            // send a select list of projects the user is NOT on
            // send a select list of tickets the user is NOT on
            // send a select list of roles the user is NOT on

            // send a list of projects, tickets, roles the user is on
            var roles = new List <IdentityRole>();

            foreach (var rol in db.Roles)
            {
                if (!theUser.Roles.Any(r => r.RoleId == rol.Id))
                {
                    roles.Add(rol);
                }
            }
            var tick    = db.Tickets;
            var helper  = new UserRolesHelper();
            var helperP = new UserProjectsHelper();

            model.TicketOwner = id;
            model.DisplayName = theUser.DisplayName;

            var UNP = helperP.ListUserNOTProjects(theUser.Id);

            model.UserNotProjects = new MultiSelectList(UNP.OrderBy(p => p.Name), "Id", "Name");

            var UNT = db.Tickets.Where(t => t.AssignedUser.Id != theUser.Id).OrderBy(m => m.Title);

            model.UserNotTickets = new MultiSelectList(UNT, "Id", "Title");

            model.UserNotRoles = new MultiSelectList(roles, "Id", "Name");

            var UP = theUser.Projects.OrderBy(p => p.Name);

            model.UserProjects = new MultiSelectList(UP, "Id", "Name");

            //model.UserProjects = null;

            var UT = theUser.Tickets.OrderBy(t => t.Title);

            model.UserTickets = new MultiSelectList(UT, "Id", "Title");
            //model.UserTickets = null;

            model.UserRoles = new MultiSelectList(helper.ListUserRoles(theUser.Id));
            //model.UserRoles = null;

            if (model == null)
            {
                return(HttpNotFound());
            }

            return(View(model));
        }
예제 #2
0
        public ActionResult Manage(AssignPageModel model)
        {
            if (ModelState.IsValid)
            {
                var user = db.Users.Find(model.TicketOwner);
                if (model.newTickets != null)
                {
                    foreach (var newTicket in model.newTickets)
                    {
                        // assigning a ticket
                        if (newTicket != "" && newTicket != null)
                        {
                            int tickId = Convert.ToInt32(newTicket);
                            var tick   = db.Tickets.Find(tickId);
                            // add to user's tickets
                            user.Tickets.Add(tick);
                            // add ticket's project to user's projects if not currently on the project
                            if (!user.Projects.Contains(tick.Project))
                            {
                                user.Projects.Add(tick.Project);
                            }
                            // assign the ticket
                            tick.AssignedUser   = user;
                            tick.AssignedUserId = model.TicketOwner;
                            //create the new ticket notification
                            var tn = new TicketNotification()
                            {
                                TicketId = tick.Id,
                                UserId   = user.Id,
                                Ticket   = tick,
                            };
                            // notify the new ticket owner
                            var helper = new UserRolesHelper();
                            helper.Notify(tn, "Add");
                            // save the ticket
                            db.Entry(tick).State = EntityState.Modified;
                        }
                    }
                }
                // assigning a project
                if (model.newProjects != null)
                {
                    foreach (var newProject in model.newProjects)
                    {
                        if (newProject != "" && newProject != null)
                        {
                            int projId = Convert.ToInt32(newProject);
                            var proj   = db.Projects.Find(projId);
                            //add the project to the user's projects
                            user.Projects.Add(proj);
                            // add the user to the project's users
                            proj.Members.Add(user);
                            db.Entry(proj).State = EntityState.Modified;
                        }
                    }
                }
                if (model.newRoles != null)
                {
                    foreach (var newRole in model.newRoles)
                    {
                        if (newRole != "" && newRole != null)
                        {
                            string roleId = newRole;
                            var    role   = db.Roles.Find(roleId);
                            var    helper = new UserRolesHelper();
                            //add user to role
                            helper.AddUserToRole(user.Id, db.Roles.Find(roleId).Name);
                        }
                    }
                }
                if (model.remTickets != null)
                {
                    foreach (var remTicket in model.remTickets)
                    {
                        if (remTicket != "" && remTicket != null)
                        {
                            int tickId = Convert.ToInt32(remTicket);
                            var tick   = db.Tickets.Find(tickId);
                            // create new ticketNotification
                            var tn = new TicketNotification()
                            {
                                TicketId = tick.Id,
                                UserId   = user.Id,
                            };
                            var helper = new UserRolesHelper();
                            //notify the user who is removed
                            helper.Notify(tn, "Remove");
                            user.Tickets.Remove(tick);
                            // assign ticket to project's project manager
                            tick.AssignedUser   = tick.Project.Manager;
                            tick.AssignedUserId = tick.Project.ManagerId;
                            tick.Project.Manager.Tickets.Add(tick);
                            //save changes
                            db.Entry(tick).State = EntityState.Modified;
                        }
                    }
                }
                if (model.remProjects != null)
                {
                    foreach (var remProject in model.remProjects)
                    {
                        if (remProject != "" && remProject != null)
                        {
                            int projId = Convert.ToInt32(remProject);
                            var proj   = db.Projects.Find(projId);
                            //find tickets on project
                            var theTicketsToRemove = new List <Ticket>();
                            foreach (var tick in user.Tickets)
                            {
                                if (tick.ProjectId == projId)
                                {
                                    theTicketsToRemove.Add(tick);
                                }
                            }

                            // reassign user's tickets to not include any on project
                            user.Tickets = user.Tickets.Except(theTicketsToRemove).ToList();
                            user.Projects.Remove(proj);
                            proj.Members.Remove(user);
                            db.Entry(proj).State = EntityState.Modified;
                        }
                    }
                }
                if (model.remRoles != null)
                {
                    foreach (var remRole in model.remRoles)
                    {
                        if (remRole != "" && remRole != null)
                        {
                            string roleName = remRole;
                            var    helper   = new UserRolesHelper();
                            helper.RemoveUserFromRole(user.Id, roleName);
                        }
                    }
                }
                db.Entry(user).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            else
            {
                return(View(model));
            }
        }