public async Task <IActionResult> Edit(int ticketId)
        {
            var ticket = await ticketRepository.GetTicketByIdAsync(ticketId);

            var projects = await projectRepository.AllProjects
                           .Select(p => new SelectListItem
            {
                Value = p.Id.ToString(),
                Text  = p.Name
            })
                           .ToListAsync();

            var statuses = await ticketRepository.AllTicketStatuses
                           .Select(p => new SelectListItem
            {
                Value = p.Id.ToString(),
                Text  = p.Name
            })
                           .ToListAsync();

            var ctvm = new EditTicketViewModel
            {
                Ticket   = ticket,
                Projects = projects,
                Statuses = statuses
            };

            return(View(ctvm));
        }
        public ActionResult EditAsAdminOrProjectManager(int?id)
        {
            if (!id.HasValue)
            {
                return(RedirectToAction(nameof(ProjectController.Index)));
            }

            var userId = User.Identity.GetUserId();

            var ticket = DbContext.Tickets
                         .FirstOrDefault(p => p.ID == id);

            if (ticket == null)
            {
                return(RedirectToAction(nameof(ProjectController.Index)));
            }

            var project = DbContext.Projects
                          .FirstOrDefault(p => p.ID == ticket.ProjectID);

            var model = new EditTicketViewModel
            {
                Title       = ticket.Title,
                Description = ticket.Description,
                ID          = ticket.ID,
                ProjectID   = ticket.ProjectID,
                Type        = DbContext.TicketTypes.FirstOrDefault(t => t.ID == ticket.TypeID).Name,
                Priority    = DbContext.TicketPriorities.FirstOrDefault(t => t.ID == ticket.PriorityID).Name,
                Status      = DbContext.TicketStatuses.FirstOrDefault(t => t.ID == ticket.StatusID).Name
            };

            DbContext.SaveChanges();
            return(View("Edit", model));
            //return RedirectToAction("FullProjectBySlug", "Project", new { slug = project.Slug });
        }
Esempio n. 3
0
        public ActionResult Edit(EditTicketViewModel vm)
        {
            if (ModelState.IsValid)
            {
                var selectedTicket = _ticketRepository.Get(vm.Id);
                if (selectedTicket != null)
                {
                    selectedTicket.TicketCategoryId    = vm.TicketCategoryId;
                    selectedTicket.TicketSubCategoryId = vm.TicketSubCategoryId;
                    selectedTicket.Title           = vm.Title;
                    selectedTicket.Description     = vm.Description;
                    selectedTicket.DueDate         = vm.DueDate;
                    selectedTicket.UpdatedByUserId = WebUser.Id;

                    _ticketRepository.Update(selectedTicket);
                    _unitOfWork.Commit();

                    return(RedirectToAction("Index"));
                }
            }

            ViewBag.TicketCategoryId    = new SelectList(_ticketCategoryRepository.GetAll(), "Id", "Title", vm.TicketCategoryId);
            ViewBag.TicketSubCategoryId = new SelectList(_ticketSubCategoryRepository.GetAll(), "Id", "Title", vm.TicketSubCategoryId);

            return(View(vm));
        }
        public ActionResult Edit(int?id)
        {
            var model = new EditTicketViewModel();

            userId = User.Identity.GetUserId();

            var currentTicket = bugTrackerHelper.GetCurrentTicketById(id.Value);

            model = Mapper.Map <EditTicketViewModel>(currentTicket);

            model.Types      = bugTrackerHelper.GetDropDownListTypes();
            model.Priorities = bugTrackerHelper.GetDropDownListPriorities();

            if (User.IsInRole("Admin") || User.IsInRole("ProjectManager"))
            {
                model.Statuses = bugTrackerHelper.GetDropDownListStatuses();
                model.Projects = bugTrackerHelper.GetDropDownListProjects();
            }
            else
            {
                model.Projects = bugTrackerHelper.GetDropDownListUsersProjectsEdit(userId, currentTicket.ProjectId);
            }

            return(View(model));
        }
Esempio n. 5
0
        public ActionResult Edit(EditTicketViewModel model)
        {
            var ticket = db.Tickets.Find(model.Id);

            if (ModelState.IsValid)
            {
                ticket.Title            = model.Title;
                ticket.Description      = model.Description;
                ticket.Updated          = DateTimeOffset.Now;
                ticket.TicketTypeId     = model.TicketTypeId;
                ticket.TicketPriorityId = model.TicketPriorityId;
                ticket.TicketStatusId   = model.TicketStatusId;
                var oldTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);
                db.SaveChanges();

                HistoryHelper helper    = new HistoryHelper();
                var           newTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);
                var           userId    = User.Identity.GetUserId();
                helper.UpdateHistory(oldTicket, newTicket, userId);
                NotifManager.ManageTicketNotifs(oldTicket, newTicket);
                return(RedirectToAction("Details", "Tickets", new { id = ticket.Id }));
            }
            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);
            return(View(model));
        }
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Ticket ticket = db.Tickets.Find(id);

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

            if (ticket.Status == TicketStatus.Closed)
            {
                return(RedirectToActionPermanent("Closed", new { id = ticket.TicketId }));
            }
            EditTicketViewModel model = new EditTicketViewModel
            {
                Id               = ticket.TicketId,
                Priority         = ticket.Priority,
                Status           = ticket.Status,
                IncidentSolution = ticket.IncidentSolution,
                DueDate          = ticket.DueDate,
                ResultionDate    = ticket.ResultionDate,
            };

            return(View(model));
        }
        public ActionResult EditTicket(int id, EditTicketViewModel collection)
        {
            try
            {
                using (var context = TicketDbContext.Create())
                {
                    Ticket ticket = new Ticket();
                    ticket = context.Tickets.FirstOrDefault(x => x.TicketId == id);

                    if (null == ticket)
                    {
                        return(new HttpNotFoundResult("Specjalnie tu trafiłeś?"));
                    }

                    ticket.TypeOfTicket   = collection.TypeOfTicket;
                    ticket.StatusOfTicket = collection.StatusOfTicket;

                    context.SaveChanges();
                }

                return(RedirectToAction("ManageTicket"));
            }
            catch
            {
                return(View());
            }
        }
Esempio n. 8
0
        public ActionResult Edit(int id)
        {
            var ticket = _ticketRepository.Get(id);

            var vm = new EditTicketViewModel(ticket);

            ViewBag.TicketCategoryId    = new SelectList(_ticketCategoryRepository.GetAll(), "Id", "Title", ticket.TicketCategoryId);
            ViewBag.TicketSubCategoryId = new SelectList(_ticketSubCategoryRepository.GetAll(), "Id", "Title", ticket.TicketSubCategoryId);
            ViewBag.AssignedToUserId    = new SelectList(_userRepository.GetAllBy(u => u.Id != 1 && u.EmployeeStatus != EmployeeStatus.Ex, "Person"), "Id", "Person.Name", ticket.AssignedToUserId);

            return(CheckForNullAndExecute(ticket, () => View(vm)));
        }
        public ActionResult Create(EditTicketViewModel formData)
        {
            int projectID   = formData.ID;
            var userId      = User.Identity.GetUserId();
            var projectUser = DbContext.Users.Any(u => u.Projects.Any(p => p.ID == projectID) && u.Id == userId);

            if (projectUser == false)
            {
                return(View());
            }
            formData.Status = "Open";
            return(Save(null, formData));
        }
Esempio n. 10
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));
        }
Esempio n. 11
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));
        }
Esempio n. 12
0
        public ActionResult Update(int projectId, EditTicketViewModel model)
        {
            if (ModelState.IsValid)
            {
                var ticket = db.Tickets.Where(t => t.Project.ID == projectId).FirstOrDefault(t => t.ID == model.ID);
                model.UpdateTicket(ticket);

                db.Entry(ticket).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }

            // something went wrong!
            return(View(model));
        }
Esempio n. 13
0
        public ActionResult Edit(int id)
        {
            var ticket    = _context.Tickets.SingleOrDefault(t => t.Id == id);
            var projectId = ticket.ProjectId;
            var project   = _context.Projects.SingleOrDefault(p => p.Id == projectId);

            var viewModel = new EditTicketViewModel
            {
                Project          = project,
                Ticket           = ticket,
                TicketTypes      = _context.TicketTypes.ToList(),
                TicketPriorities = _context.TicketPriorities.ToList()
            };

            return(View(viewModel));
        }
        public ActionResult Edit(int id, EditTicketViewModel model)
        {
            if (ModelState.IsValid)
            {
                Ticket ticket = db.Tickets.Find(id);
                if (ticket == null)
                {
                    return(HttpNotFound());
                }
                ticket.Priority         = model.Priority;
                ticket.IncidentSolution = model.IncidentSolution;
                ticket.Status           = TicketStatus.InProgress;
                ticket.ResultionDate    = model.ResultionDate;

                if (model.Priority == TicketPriority.Critical)
                {
                    ticket.DueDate = AddBusinessDays(ticket.CreationDate, 1);
                }
                if (model.Priority == TicketPriority.High)
                {
                    ticket.DueDate = AddBusinessDays(ticket.CreationDate, 3);
                }
                if (model.Priority == TicketPriority.Medium)
                {
                    ticket.DueDate = AddBusinessDays(ticket.CreationDate, 5);
                }
                if (model.Priority == TicketPriority.Low)
                {
                    ticket.DueDate = AddBusinessDays(ticket.CreationDate, 7);
                }
                if (!(model.Priority == TicketPriority.NotSet))
                {
                    ticket.Status = TicketStatus.InProgress;
                }
                if (!(model.IncidentSolution == null))
                {
                    ticket.Status        = TicketStatus.Closed;
                    ticket.ResultionDate = DateTime.Now;
                }

                db.Entry(ticket).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            return(View(model));
        }
Esempio n. 15
0
        // GET: Tickets/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            Ticket ticket = db.Tickets.Find(id);

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

            EditTicketViewModel model = new EditTicketViewModel(ticket);

            return(View(model));
        }
        public ActionResult Edit(int?id, EditTicketViewModel formData)
        {
            var ticket = bugTrackerHelper.GetCurrentTicketById(id.Value);

            ticket.Title            = formData.Title;
            ticket.Description      = formData.Description;
            ticket.ProjectId        = formData.ProjectId;
            ticket.TicketTypeId     = formData.TicketTypeId;
            ticket.TicketPriorityId = formData.TicketPriorityId;
            ticket.DateUpdated      = DateTime.Now;

            if (User.IsInRole("Admin") || User.IsInRole("ProjectManager"))
            {
                ticket.TicketStatusId = formData.TicketStatusId;
            }

            DbContext.SaveChanges();

            return(RedirectToAction(nameof(TicketController.AllTickets)));
        }
        /// <summary>
        /// This action informs IT staff that ticket in closed and cannot be edited.
        /// </summary>
        /// <param name="id">Ticket Id as a parameter</param>
        /// <returns></returns>
        public ActionResult Closed(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Ticket ticket = db.Tickets.Find(id);

            if (ticket == null)
            {
                return(HttpNotFound());
            }
            var model = new EditTicketViewModel
            {
                Id            = ticket.TicketId,
                ResultionDate = ticket.ResultionDate,
            };

            return(View(model));
        }
Esempio n. 18
0
        public ActionResult Create(int?id)
        {
            if (id == null)
            {
                return(RedirectToAction(nameof(ProjectController.Index)));
            }

            int projectID   = id.GetValueOrDefault();
            var userId      = User.Identity.GetUserId();
            var projectUser = DbContext.Users.Any(u => u.Projects.Any(p => p.ID == projectID) && u.Id == userId);

            if (projectUser == false)
            {
                return(View());
            }

            var ticket = new EditTicketViewModel();

            ticket.ProjectID = projectID;
            return(PartialView(ticket));
        }
        public ActionResult EditTicket(int id)
        {
            EditTicketViewModel ticketToEdit = new EditTicketViewModel();

            using (var context = TicketDbContext.Create())
            {
                ticketToEdit = context.Tickets.Where(x => x.TicketId == id)
                               .Select(x => new EditTicketViewModel()
                {
                    Id             = x.TicketId,
                    StatusOfTicket = x.StatusOfTicket,
                    Title          = x.Title,
                    TypeOfTicket   = x.TypeOfTicket,
                    UserName       = x.User.UserName
                }).FirstOrDefault();
            }
            if (null == ticketToEdit)
            {
                return(new HttpNotFoundResult("Specjalnie tu trafiłeś?"));
            }

            return(View(ticketToEdit));
        }
Esempio n. 20
0
        // GET: Tickets/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            Ticket ticket = db.Tickets.Find(id);

            if (ticket == null)
            {
                return(HttpNotFound());
            }
            EditTicketViewModel model = new EditTicketViewModel();

            model.Title              = ticket.Title;
            model.Description        = ticket.Description;
            model.TicketPriorityId   = ticket.TicketPriorityId;
            model.TicketTypeId       = ticket.TicketTypeId;
            model.TicketStatusId     = ticket.TicketStatusId;
            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);
            return(View(model));
        }
Esempio n. 21
0
        private ActionResult Save(int?id, EditTicketViewModel formData)
        {
            var project = DbContext.Projects
                          .FirstOrDefault(p => p.ID == formData.ProjectID);

            if (!ModelState.IsValid)
            {
                //return View(formData.ProjectID);
                return(RedirectToAction("FullProjectBySlug", "Project", new { slug = project.Slug }));
            }

            var userId = User.Identity.GetUserId();

            var ticketType = DbContext.TicketTypes.FirstOrDefault(t => t.Name == formData.Type);

            var ticketPriority = DbContext.TicketPriorities.FirstOrDefault(t => t.Name == formData.Priority);

            Ticket ticket;

            if (!id.HasValue)
            {
                ticket = new Ticket
                {
                    DateCreated = DateTime.Now,
                    OwnerUserID = userId,
                    Slug        = ProjectController.Slugify(formData.Title),
                    ProjectID   = formData.ProjectID
                };
                DbContext.Tickets.Add(ticket);
            }
            else
            {
                ticket = DbContext.Tickets.FirstOrDefault(
                    p => p.ID == id);

                if ((User.IsInRole("Admin") || User.IsInRole("Project Manager")) ||
                    (User.IsInRole("Developer") && userId == ticket.AssignedToUserID) ||
                    (User.IsInRole("Submitter") && userId == ticket.OwnerUserID))
                {
                    // continue
                }
                else
                {
                    return(RedirectToAction("FullProjectBySlug", "Project", new { slug = project.Slug }));
                }

                if (ticket == null)
                {
                    return(RedirectToAction(nameof(ProjectController.Index)));
                }

                ticket.DateUpdated = DateTime.Now;

                var historyWriter = new CustomHelpers();
                historyWriter.MakeTicketHistories(ticket, formData, userId);

                var notifyUsers = DbContext.TicketNotifications.Where(u => u.TicketID == ticket.ID).ToList();
                foreach (var notifyuser in notifyUsers)
                {
                    var    user  = DbContext.Users.FirstOrDefault(u => u.Id == notifyuser.UserID);
                    string alert = $"there has been a change to a ticket you are watching: {ticket.Title}";
                    if (user == ticket.AssignedToUser)
                    {
                        alert = $"there has been a change to a ticket assign to you: {ticket.Title}";
                    }
                    var message = new IdentityMessage
                    {
                        Destination = $"{user.Email}",
                        Subject     = $"{alert}",
                        Body        = $"{alert}"
                    };
                    var emailService = new EmailService();
                    emailService.SendAsync(message);
                }
            }

            ticket.Title       = formData.Title;
            ticket.Description = formData.Description;
            ticket.TypeID      = ticketType.ID;
            ticket.PriorityID  = ticketPriority.ID;
            ticket.StatusID    = DbContext.TicketStatuses.FirstOrDefault(t => t.Name == formData.Status).ID;

            DbContext.SaveChanges();

            return(RedirectToAction("FullProjectBySlug", "Project", new { slug = project.Slug }));
        }
Esempio n. 22
0
        public ActionResult EditTicket(int?Id)
        {
            if (!Id.HasValue)
            {
                return(RedirectToAction(nameof(HomeController.Index), "Home"));
            }
            var userId = User.Identity.GetUserId();

            var user = GetUserById(userId);

            var ticketToEdit = (from t in DbContext.Tickets
                                where t.Id == Id
                                select t).FirstOrDefault();

            if (ticketToEdit == null)
            {
                return(RedirectToAction(nameof(HomeController.Index), "Home"));
            }

            if (User.IsInRole(nameof(UserRoles.Submitter)) && (ticketToEdit.CreatorId != userId))
            {
                return(RedirectToAction(nameof(BugController.Index), "Home"));
            }

            if (User.IsInRole(nameof(UserRoles.Developer)) && (ticketToEdit.AssignedDeveloperId != userId))
            {
                return(RedirectToAction(nameof(BugController.Index), "Home"));
            }

            var types = (from t in DbContext.TicketTypes
                         where t != null
                         select t).ToList();

            var priorities = (from p in DbContext.TicketPriorities
                              where p != null
                              select p).ToList();

            var statuses = (from s in DbContext.TicketStatuses
                            where s != null
                            select s).ToList();

            var allProjects = (from p in DbContext.Projects
                               where p.Active
                               select p).ToList();

            var model = new EditTicketViewModel()
            {
                Id          = ticketToEdit.Id,
                Title       = ticketToEdit.Title,
                Description = ticketToEdit.Description,
                ProjectId   = ticketToEdit.ProjectId,
                TypeId      = ticketToEdit.TypeId,
                PriorityId  = ticketToEdit.PriorityId,
                StatusId    = ticketToEdit.StatusId,
                Creator     = ticketToEdit.Creator,
                Projects    = allProjects,
                Types       = types,
                Priorities  = priorities
            };

            if (User.IsInRole(nameof(UserRoles.Admin)) || User.IsInRole(nameof(UserRoles.ProjectManager)))
            {
                model.Statuses = statuses;
            }

            return(View(model));
        }
Esempio n. 23
0
        public ActionResult EditTicket(EditTicketViewModel formData)
        {
            if (!ModelState.IsValid)
            {
                // Redirect back to the form with the inputed from data, since something is missing or incorrect.
                EditTicketViewModel viewModelTicket = TicketHelper.TicketDataByRole(formData, User, RoleManager, UserManager, DbContext);
                return(View(viewModelTicket));
            }

            if (formData is null)
            {
                return(RedirectToDashError());
            }

            var ticket = DbContext.Tickets.FirstOrDefault(tckt => tckt.Id == formData.Id);

            if (ticket is null)
            {
                return(RedirectToDashError());
            }

            // Apply changes
            if (ProjectHelper.IsAdminOrManager(User))
            {
                ticket.Title            = formData.Title;
                ticket.Description      = formData.Description;
                ticket.DateUpdated      = DateTime.Now;
                ticket.ProjectId        = formData.ProjectId;
                ticket.TicketStatusId   = (int)formData.TicketStatusId;
                ticket.TicketPriorityId = formData.TicketPriorityId;
                ticket.TicketTypeId     = formData.TicketTypeId;
                ticket.AssignedToId     = formData.AssignedToId;
            }
            else if (ProjectHelper.IsDevOrSubmitter(User))
            {
                ticket.Title            = formData.Title;
                ticket.Description      = formData.Description;
                ticket.DateUpdated      = DateTime.Now;
                ticket.ProjectId        = formData.ProjectId;
                ticket.TicketPriorityId = formData.TicketPriorityId;
                ticket.TicketTypeId     = formData.TicketTypeId;
            }

            // Generate history
            var user          = UserManager.FindById(User.Identity.GetUserId());
            var ticketHistory = TicketHelper.GenerateTicketHistory(DbContext, ticket, user);

            if (ticketHistory != null)
            {
                ticket.TicketHistories.Add(ticketHistory);
                // Notify users (Only if there's a change...)
                TicketHelper.SendNotificationsToUsers(ticket, "Ticket changes");

                // If a new dev has been assigned to this ticket,
                // >Remove the old dev from the mailing list,
                // >Add the new dev,
                // >Then notify the user they've been assigned to this ticket.
                if (TicketHelper.IsNewDevAssigned(ticketHistory))
                {
                    var history = ticketHistory.TicketHistoryDetails.FirstOrDefault(p => p.Property == "Dev Assigned");

                    var devUserOld = UserManager.Users.FirstOrDefault(p => p.DisplayName == history.OldValue);
                    var devUserNew = UserManager.Users.FirstOrDefault(p => p.DisplayName == history.NewValue);

                    TicketHelper.ManageDevNotificationAssignment(devUserOld, devUserNew, ticket);
                    TicketHelper.NotifyUserByEmail(devUserNew, ticket.Title);
                }
            }

            // Save to db
            DbContext.SaveChanges();

            // Return to details page of the ticket.
            return(RedirectToAction("DetailsTicket", "Ticket", new
            {
                ticketId = ticket.Id
            }));
        }
Esempio n. 24
0
        public static EditTicketViewModel TicketDataByRole(EditTicketViewModel ticket, IPrincipal User, RoleManager <Microsoft.AspNet.Identity.EntityFramework.IdentityRole> RoleManager, ApplicationUserManager UserManager, ApplicationDbContext DbContext)
        {
            EditTicketViewModel viewModelTicket;
            var currentUser = UserManager.FindById(User.Identity.GetUserId());
            var devRole     = RoleManager.FindByName(ProjectConstants.DeveloperRole);

            if (ProjectHelper.IsAdminOrManager(User))
            {
                viewModelTicket = new EditTicketViewModel()
                {
                    Id               = ticket.Id,
                    Title            = ticket.Title,
                    Description      = ticket.Description,
                    ProjectId        = ticket.ProjectId,
                    TicketStatusId   = ticket.TicketStatusId,
                    TicketPriorityId = ticket.TicketPriorityId,
                    TicketTypeId     = ticket.TicketTypeId,
                    AssignedToId     = ticket?.AssignedToId,
                    Projects         = DbContext.Projects.Select(p =>
                                                                 new SelectListItem()
                    {
                        Text  = p.Title,
                        Value = p.Id.ToString()
                    }).ToList(),
                    DevUsers = DbContext.Users.Where(user => user.Roles.Any(role => role.RoleId == devRole.Id)).Select(p =>
                                                                                                                       new SelectListItem()
                    {
                        Text  = p.DisplayName,
                        Value = p.Id.ToString()
                    }).ToList(),
                    TicketTypes = DbContext.TicketTypes.Select(p =>
                                                               new SelectListItem()
                    {
                        Text  = p.Name,
                        Value = p.Id.ToString()
                    }).ToList(),
                    TicketPriorities = DbContext.TicketPriorities.Select(p =>
                                                                         new SelectListItem()
                    {
                        Text  = p.Name,
                        Value = p.Id.ToString()
                    }).ToList(),
                    TicketStatuses = DbContext.TicketStatuses.Select(p =>
                                                                     new SelectListItem()
                    {
                        Text  = p.Name,
                        Value = p.Id.ToString()
                    }).ToList(),
                };
            }
            else if (ProjectHelper.IsDevOrSubmitter(User))
            {
                // get the ticket because we need the ticketStatusId
                var ticketStatusId = DbContext.Tickets.FirstOrDefault(tckt => tckt.Id == ticket.Id).TicketStatusId;

                viewModelTicket = new EditTicketViewModel()
                {
                    Id               = ticket.Id,
                    Title            = ticket.Title,
                    Description      = ticket.Description,
                    ProjectId        = ticket.ProjectId,
                    TicketPriorityId = ticket.TicketPriorityId,
                    TicketStatusId   = ticketStatusId,
                    TicketTypeId     = ticket.TicketTypeId,
                    // This works for both submitter and devs, as they HAVE to be assigned to the project.
                    Projects = DbContext.Projects.Where(user => user.Users.Any(usr => usr.Id == currentUser.Id)).Select(p =>
                                                                                                                        new SelectListItem()
                    {
                        Text  = p.Title,
                        Value = p.Id.ToString()
                    }).ToList(),
                    TicketTypes = DbContext.TicketTypes.Select(p =>
                                                               new SelectListItem()
                    {
                        Text  = p.Name,
                        Value = p.Id.ToString()
                    }).ToList(),
                    TicketPriorities = DbContext.TicketPriorities.Select(p =>
                                                                         new SelectListItem()
                    {
                        Text  = p.Name,
                        Value = p.Id.ToString()
                    }).ToList(),
                };
            }
            else
            {
                throw new Exception("Error in Ticket Data Method. Missing Role.");
            }

            return(viewModelTicket);
        }
Esempio n. 25
0
        public void MakeTicketHistories(Ticket ticket, EditTicketViewModel formData, string userId)
        {
            var newTicketType     = DbContext.TicketTypes.FirstOrDefault(t => t.Name == formData.Type);
            var newTicketPriority = DbContext.TicketPriorities.FirstOrDefault(t => t.Name == formData.Priority);
            var newTicketStatus   = DbContext.TicketStatuses.FirstOrDefault(t => t.Name == formData.Status);

            if (ticket.Title != formData.Title)
            {
                var history = new TicketHistory
                {
                    TicketID = ticket.ID,
                    Property = "Title",
                    OldValue = ticket.Title,
                    NewValue = formData.Title,
                    Changed  = DateTime.Now,
                    UserID   = userId
                };
                DbContext.TicketHistories.Add(history);
            }
            if (ticket.Description != formData.Description)
            {
                var history = new TicketHistory
                {
                    TicketID = ticket.ID,
                    Property = "Description",
                    OldValue = ticket.Description,
                    NewValue = formData.Description,
                    Changed  = DateTime.Now,
                    UserID   = userId
                };
                DbContext.TicketHistories.Add(history);
            }
            if (ticket.TypeID != newTicketType.ID)
            {
                var history = new TicketHistory
                {
                    TicketID = ticket.ID,
                    Property = "Type",
                    OldValue = ticket.Type.Name,
                    NewValue = formData.Type,
                    Changed  = DateTime.Now,
                    UserID   = userId
                };
                DbContext.TicketHistories.Add(history);
            }
            if (ticket.PriorityID != newTicketPriority.ID)
            {
                var history = new TicketHistory
                {
                    TicketID = ticket.ID,
                    Property = "Priority",
                    OldValue = ticket.Priority.Name,
                    NewValue = formData.Priority,
                    Changed  = DateTime.Now,
                    UserID   = userId
                };
                DbContext.TicketHistories.Add(history);
            }
            if (ticket.StatusID != newTicketStatus.ID)
            {
                var history = new TicketHistory
                {
                    TicketID = ticket.ID,
                    Property = "Status",
                    OldValue = ticket.Status.Name,
                    NewValue = formData.Status,
                    Changed  = DateTime.Now,
                    UserID   = userId
                };
                DbContext.TicketHistories.Add(history);
            }
            DbContext.SaveChanges();
        }
Esempio n. 26
0
        protected override DriverResult Editor(TicketPart part, IUpdateModel updater, dynamic shapeHelper)
        {
            if (this.contentOwnershipService.CurrentUserCanEditContent(part.ContentItem))
            {
                EditTicketViewModel model = new EditTicketViewModel();
                updater.TryUpdateModel(model, Prefix, null, null);

                // Requesting User
                if (part.Record.RequestingUser == null)
                {
                    int userId = this.orchardServices.WorkContext.CurrentUser.Id;
                    part.Record.RequestingUser = new UserPartRecord {
                        Id = userId
                    };
                }

                // Title
                part.Record.Title = string.IsNullOrEmpty(model.Title) ? string.Empty : model.Title.Trim();

                // statusId
                part.Record.StatusRecord = model.StatusId.HasValue ? new StatusRecord {
                    Id = model.StatusId.Value
                } : null;

                // Priority
                part.Record.PriorityRecord = model.PriorityId.HasValue ? new PriorityRecord {
                    Id = model.PriorityId.Value
                } : null;

                // TicketType
                part.Record.TicketType = model.TypeId.HasValue ? new TicketTypeRecord {
                    Id = model.TypeId.Value
                } : null;

                // Service
                part.Record.Service = model.ServiceId.HasValue ? new ServiceRecord {
                    Id = model.ServiceId.Value
                } : null;

                // DueDate
                part.Record.DueDate = model.DueDate;

                // Description
                part.Description = model.Text;

                // RelatedContentItemId
                if (model.RelatedContentItemId.HasValue)
                {
                    part.Record.RelatedContentItem = new ContentItemRecord {
                        Id = model.RelatedContentItemId.Value
                    };
                }

                // Parent TicketId
                if (model.ParentTicketId.HasValue)
                {
                    var parentTicket = this.orchardServices.ContentManager.Get(model.ParentTicketId.Value);
                    if (parentTicket.ContentType == "Ticket" && this.contentOwnershipService.CurrentUserCanViewContent(parentTicket))
                    {
                        part.Record.Parent = new TicketPartRecord {
                            Id = model.ParentTicketId.Value
                        };
                    }
                }

                if (part.Record.Identity == null)
                {
                    TicketIdentityRecord identity = new TicketIdentityRecord();
                    this.ticketIdentityRecordRepository.Create(identity);
                    part.Record.Identity = identity;
                }

                return(Editor(part, shapeHelper));
            }
            else
            {
                throw new Security.OrchardSecurityException(T("You don't have permission to view the item"));
            }
        }
Esempio n. 27
0
        public ActionResult EditTicket(EditTicketViewModel model)
        {
            if (!ModelState.IsValid)
            {
                return(View(model));
            }

            var type         = DbContext.TicketTypes.FirstOrDefault(t => t.Id == model.TypeId);
            var priority     = DbContext.TicketPriorities.FirstOrDefault(p => p.Id == model.PriorityId);
            var project      = DbContext.Projects.FirstOrDefault(p => p.Id == model.ProjectId);
            var ticketToEdit = (from t in DbContext.Tickets
                                where t.Id == model.Id
                                select t).FirstOrDefault();

            var userId     = User.Identity.GetUserId();
            var user       = GetUserById(userId);
            var newHistory = new TicketHistory();

            if (ticketToEdit.Title != model.Title)
            {
                var propChange = new PropertyChange();
                propChange.PropertyName = nameof(ticketToEdit.Title);
                propChange.OldValue     = ticketToEdit.Title;
                propChange.NewValue     = model.Title;
                newHistory.PropertyChanges.Add(propChange);
                ticketToEdit.Title = model.Title;
            }

            if (ticketToEdit.Project != project)
            {
                var propChange = new PropertyChange();
                propChange.PropertyName = nameof(ticketToEdit.Project);
                propChange.OldValue     = ticketToEdit.Project.Name;
                propChange.NewValue     = project.Name;
                newHistory.PropertyChanges.Add(propChange);
                ticketToEdit.Project = project;
            }

            if (ticketToEdit.Description != model.Description)
            {
                var propChange = new PropertyChange();
                propChange.PropertyName = nameof(ticketToEdit.Description);
                propChange.OldValue     = ticketToEdit.Description;
                propChange.NewValue     = model.Description;
                newHistory.PropertyChanges.Add(propChange);
                ticketToEdit.Description = model.Description;
            }

            if (ticketToEdit.Type != type)
            {
                var propChange = new PropertyChange();
                propChange.PropertyName = nameof(ticketToEdit.Type);
                propChange.OldValue     = ticketToEdit.Type.Name;
                propChange.NewValue     = type.Name;
                newHistory.PropertyChanges.Add(propChange);
                ticketToEdit.Type = type;
            }

            if (ticketToEdit.Priority != priority)
            {
                var propChange = new PropertyChange();
                propChange.PropertyName = nameof(ticketToEdit.Priority);
                propChange.OldValue     = ticketToEdit.Priority.Name;
                propChange.NewValue     = priority.Name;
                newHistory.PropertyChanges.Add(propChange);
                ticketToEdit.Priority = priority;
            }

            if (User.IsInRole(nameof(UserRoles.Admin)) || User.IsInRole(nameof(UserRoles.ProjectManager)))
            {
                var status = DbContext.TicketStatuses.FirstOrDefault(t => t.Id == model.StatusId);
                if (ticketToEdit.Status != status)
                {
                    var propChange = new PropertyChange();
                    propChange.PropertyName = nameof(ticketToEdit.Status);
                    propChange.OldValue     = ticketToEdit.Status.Name;
                    propChange.NewValue     = status.Name;
                    newHistory.PropertyChanges.Add(propChange);
                    ticketToEdit.Status = status;
                }
            }

            if (newHistory.PropertyChanges.Any())
            {
                newHistory.DateTime = DateTime.Now;
                newHistory.User     = user;
                ticketToEdit.Histories.Add(newHistory);
                SendNotification(newHistory, user, ticketToEdit);
            }

            ticketToEdit.DateUpdated = DateTime.Now;
            DbContext.SaveChanges();

            return(RedirectToAction(nameof(BugController.ViewTicketDetails), "Bug", new { Id = ticketToEdit.Id }));
        }
Esempio n. 28
0
 public ActionResult Edit(int id, int projectId, EditTicketViewModel formData)
 {
     return(Save(id, formData));
 }