Example #1
0
        public ActionResult Edit(string ticketIdentifier)
        {
            if (string.IsNullOrWhiteSpace(ticketIdentifier))
            {
                TempData.AddDangerToast("We were unable to locate a ticket with this identifier.");
                return(RedirectToAction("Index", "Projects"));
            }
            Ticket ticket = db.Tickets.ToList().FirstOrDefault(t => t.GetTicketIdentifier() == ticketIdentifier);

            if (ticket == null)
            {
                TempData.AddDangerToast("We were unable to locate a ticket with this identifier.");
                return(RedirectToAction("Index", "Projects"));
            }
            if (!_permissionsHelper.CanEditTicket(User, ticket.Id))
            {
                TempData.AddDangerToast("You are not allowed to view this resource / perform this action.");
                return(RedirectToAction("Index", "Home"));
            }

            ProjectWorkflow        parentProjWorkflow = ticket.ParentProject.ActiveWorkflow;
            List <ApplicationUser> solvers            = null;

            if (_permissionsHelper.IsProjectManager(User, ticket.ParentProjectId) || User.IsInRole("ServerAdmin"))
            {
                solvers = ticket.ParentProject.GetSolverMembers();
            }

            List <TicketStatus> availStatuses = null;

            if ((_permissionsHelper.IsUserStaff(User) && parentProjWorkflow.CanStaffSetStatusOnInteract) ||
                (_permissionsHelper.IsTicketOwner(User, ticket.Id) && parentProjWorkflow.CanTicketOwnerSetStatusOnInteract))
            {
                availStatuses = parentProjWorkflow.GetAvailableStatuses(ticket.Id, User, db);
            }

            var viewModel = new EditTicketViewModel()
            {
                ParentProject        = ticket.ParentProject,
                Reporter             = db.Users.Find(User.Identity.GetUserId()),
                PrioritySelections   = db.TicketPriorityTypes.ToDictionary(tp => tp.Name, tp => tp.Id),
                AvailableTicketTypes = db.TicketTypes.ToList(),
                AvailableStatuses    = availStatuses,
                CurrentTicket        = ticket,
                AvailableSolvers     = solvers
            };

            return(View(viewModel));
        }
Example #2
0
        public ActionResult Show(string ticketIdentifier)
        {
            if (string.IsNullOrWhiteSpace(ticketIdentifier))
            {
                TempData.AddDangerToast("You must provide the ticket identifier to display. Please try again.");
                return(RedirectToAction("Index", "Tickets"));
            }
            Ticket ticket = db.Tickets.ToList().FirstOrDefault(t => t.GetTicketIdentifier() == ticketIdentifier);

            if (ticket == null)
            {
                TempData.AddDangerToast("We were unable to locate this ticket. Please try again.");
                return(RedirectToAction("Index", "Tickets"));
            }

            if (!_permissionsHelper.CanViewTicket(User, ticket.Id))
            {
                TempData.AddDangerToast("You are not allowed to view this resource.");
                return(RedirectToAction("Index", "Tickets"));
            }


            ProjectWorkflow        parentProjWorkflow = ticket.ParentProject.ActiveWorkflow;
            List <ApplicationUser> solvers            = null;

            if (User.Identity.GetUserId() == ticket.ParentProject.ProjectManagerId || User.IsInRole("ServerAdmin"))
            {
                solvers = ticket.ParentProject.GetSolverMembers();
            }
            List <TicketStatus> availStatuses = null;

            if (ticket.Permissions(User).CanUpdateTicketStatus)
            {
                availStatuses = parentProjWorkflow.GetAvailableStatuses(ticket.Id, User, db);
            }

            var viewModel = new EditTicketViewModel()
            {
                ParentProject        = ticket.ParentProject,
                Reporter             = ticket.Reporter,
                PrioritySelections   = db.TicketPriorityTypes.ToDictionary(tp => tp.Name, tp => tp.Id),
                AvailableTicketTypes = db.TicketTypes.ToList(),
                CurrentTicket        = ticket,
                AvailableSolvers     = solvers,
                AvailableStatuses    = availStatuses
            };

            return(View(viewModel));
        }