Пример #1
0
        public ActionResult PMDashboard()
        {
            //HelperMethod for Histories/Notifications
            var ticketCustomHelper = new TicketCustomHelper();
            //UserRoles Helper
            var userRolesHelper = new UserRolesHelper(db);

            var currentUser        = db.Users.Find(User.Identity.GetUserId());
            var userProjects       = currentUser.Projects.ToList();
            var AllProjectsTickets = userProjects.SelectMany(p => p.Tickets).ToList();

            //Passes All Tickets for all projects to partial view
            var DispTicketsVM1 = new DispTicketsVM();

            DispTicketsVM1.TicketList         = AllProjectsTickets;
            DispTicketsVM1.TitleDesc          = "All Tickets from your Projects only.";
            ViewData["MyProjectsTicketsList"] = DispTicketsVM1;

            //List Tickets for Each Project and allow bulk assignment
            var allDevelopers = userRolesHelper.GetAllUsersInRole("Developer").OrderBy(u => u.DisplayName);


            //Instantiate Big View Model (for encapsulating other VMs)
            var PMDashboardVM = new PMDashboardVM();

            PMDashboardVM.PMVMListForPartials = new List <PMTicketProjectsSelectVM>();
            PMDashboardVM.MyProjects          = userProjects;

            var projectsArr = userProjects.ToArray();

            for (var i = 0; i < projectsArr.Length; i++)
            {
                //Instantiate New VM for each Project's Developers(select list) & UnAssigned Tickets(table/checkboxes)
                var PMTicketProjectsSelectVM = new PMTicketProjectsSelectVM();
                PMTicketProjectsSelectVM.PMUsersInProjectVMList  = new List <PMUsersInProjectVM>();
                PMTicketProjectsSelectVM.PMAssignUsersTicketList = new List <PMAssignUsersTicketVM>();
                //Get Developers & Unassigned Tickets
                var developersInProject = allDevelopers.Where(u => u.Projects.Contains(projectsArr[i])).ToArray();
                var ticketsInProject    = projectsArr[i].Tickets.Where(x => x.AssignedToUser == null).ToArray();

                //Build Developer User List
                for (var x = 0; x < developersInProject.Length; x++)
                {
                    PMTicketProjectsSelectVM.PMUsersInProjectVMList.Add(new PMUsersInProjectVM()
                    {
                        ProjectId = projectsArr[i].Id, UserDisplayName = developersInProject[x].DisplayName, UserId = developersInProject[x].Id
                    });
                }
                //Build Unassigned Ticket List w/ checkbox values
                for (var x = 0; x < ticketsInProject.Length; x++)
                {
                    PMTicketProjectsSelectVM.PMAssignUsersTicketList.Add(new PMAssignUsersTicketVM()
                    {
                        ProjectId = projectsArr[i].Id, TicketId = ticketsInProject[x].Id, Ticket = ticketsInProject[x], IsChecked = false
                    });
                }
                //Adds Developers & Tickets as one List Item
                PMTicketProjectsSelectVM.ProjectId   = projectsArr[i].Id;
                PMTicketProjectsSelectVM.ProjectName = projectsArr[i].Name;
                PMDashboardVM.PMVMListForPartials.Add(PMTicketProjectsSelectVM);
            }
            var ticketHistoriesList = new List <TicketHistory>();

            foreach (var item in userProjects)
            {
                var newList = db.TicketHistories.OrderByDescending(h => h.UpdatedTime).Where(h => h.Ticket.ProjectID == item.Id).ToList();
                ticketHistoriesList.AddRange(newList);
            }
            var projectHistoriesList = ticketHistoriesList.OrderByDescending(h => h.UpdatedTime).ToList();

            //Data for TicketHistories
            var historyTimesList  = projectHistoriesList.Select(x => x.UpdatedTime).Distinct().ToList();
            var ticketHistoryList = new List <TicketHistory>().ToArray();


            var TopList = new List <TopDispHist>();

            foreach (var item in historyTimesList)
            {
                var TopDispHist = new TopDispHist();
                TopDispHist.HistEntriesList = new List <TicketHistory>();

                var ticketEntry = projectHistoriesList.Where(t => t.UpdatedTime == item);
                TopDispHist.HistEntriesList.AddRange(ticketEntry.ToList());
                TopDispHist.Created     = item;
                TopDispHist.DisplayName = TopDispHist.HistEntriesList.First().UpdatedByUser.DisplayName;
                TopList.Add(TopDispHist);
            }

            ViewData["ticketHistoryList"] = (List <TopDispHist>)TopList.Take(15).ToList();

            var VMList = PMDashboardVM.PMVMListForPartials;

            ViewData["ViewModelList"] = (List <PMTicketProjectsSelectVM>)VMList;



            return(View(PMDashboardVM));
        }
Пример #2
0
        public ActionResult Ticket(int Id)
        {
            //UserRoles Helper
            var userRolesHelper = new UserRolesHelper(db);
            //Get Ticket & Instantiate Model
            var ticket      = db.TicketPosts.Find(Id);
            var currentUser = db.Users.Find(User.Identity.GetUserId());
            var TicketPost  = new TicketPost();

            TicketPost = ticket;

            if (currentUser == ticket.AssignedToUser || currentUser == ticket.OwnerUser || User.IsInRole("Project Manager") || User.IsInRole("Admin") || ticket.Project.Users.Contains(currentUser))
            {
            }
            else
            {
                string errcode = "Access Denied, Ticket ( #" + ticket.Id.ToString() + " ) User:"******"Err403", "BT", new { errcode = errcode }));
            }

            //Set Dropdowns for edit tab.
            ViewBag.TicketPriorityID = new SelectList(db.TicketPriorities, "Id", "Name", ticket.TicketPriorityID);
            ViewBag.TicketStatusID   = new SelectList(db.TicketStatuses, "Id", "Name", ticket.TicketStatusID);
            ViewBag.TicketTypeID     = new SelectList(db.TicketTypes, "Id", "Name", ticket.TicketTypeID);
            var    allDevelopers       = userRolesHelper.GetAllUsersInRole("Developer").OrderBy(u => u.DisplayName);
            var    developersInProject = allDevelopers.Where(u => u.Projects.Contains(ticket.Project));
            string assignedUser;

            if (ticket.AssignedToUserID == null)
            {
                assignedUser = "******";
            }
            else
            {
                assignedUser = ticket.AssignedToUserID;
            }
            ViewBag.AssignedToUserID = new SelectList(developersInProject, "Id", "DisplayName", assignedUser);

            //Data for TicketHistories
            var ticketHistory     = TicketPost.TicketHistories.OrderByDescending(x => x.UpdatedTime).ToList();
            var historyTimesList  = ticketHistory.Select(x => x.UpdatedTime).Distinct().ToList();
            var ticketHistoryList = new List <TicketHistory>().ToArray();


            var TopList = new List <TopDispHist>();

            foreach (var item in historyTimesList)
            {
                var TopDispHist = new TopDispHist();
                TopDispHist.HistEntriesList = new List <TicketHistory>();

                var ticketEntry = ticketHistory.Where(t => t.UpdatedTime == item);
                TopDispHist.HistEntriesList.AddRange(ticketEntry.ToList());
                TopDispHist.Created     = item;
                TopDispHist.DisplayName = TopDispHist.HistEntriesList.First().UpdatedByUser.DisplayName;
                TopList.Add(TopDispHist);
            }

            ViewData["ticketHistoryList"] = (List <TopDispHist>)TopList;
            ViewBag.TopDisp = (List <TopDispHist>)TopList;

            //Get Comments for ticket
            var commentList = ticket.TicketComments.OrderByDescending(c => c.Created).ToList();

            ViewData["CommentList"] = (List <TicketComment>)commentList;

            //For Attachment Partial - May not need.
            ViewData["currentTicket"] = (TicketPost)ticket;

            if (User.IsInRole("Admin") || User.IsInRole("Project Manager"))
            {
                return(View(TicketPost));
            }
            if (ticket.Project.Users.Contains(currentUser))
            {
                return(View(TicketPost));
            }
            else
            {
                string errcode = User.Identity.Name + " Permission not granted, ViewTicket, Ticket:" + ticket.Id;
                return(RedirectToAction("Err403", "BT", new { errcode = errcode }));
            }
        }