public async Task <ActionResult> Edit([Bind(Include =
                                                        "Id,Title,Description,Created,Updated,ProjectId,TicketTypeId,TicketPriorityId,TicketStatusId,OwnerUserId,AssignedToUserId")]
                                              Ticket newTicket, string returnUrl)
        {
            var oldTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == newTicket.Id); //ticket before editing

            if (ModelState.IsValid)
            {
                newTicket.Updated         = DateTime.Now;
                db.Entry(newTicket).State = EntityState.Modified;
                db.SaveChanges();

                //takes in old and new tickets
                ticketHelper.AddTicketHistory(oldTicket, newTicket);

                //pass relevant data into method
                await ticketHelper.AddTicketNotification(newTicket.Id, oldTicket.AssignedToUserId, newTicket.AssignedToUserId);

                return(Redirect(returnUrl));
            }
            ViewBag.AssignedToUserId = new SelectList(db.Users, "Id", "FirstName", newTicket.AssignedToUserId);
            //ViewBag.OwnerUserId = new SelectList(db.Users, "Id", "FirstName", ticket.OwnerUserId);
            //ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", ticket.ProjectId);
            ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "Id", "Name", newTicket.TicketPriorityId);
            ViewBag.TicketStatusId   = new SelectList(db.TicketStatus, "Id", "Name", newTicket.TicketStatusId);
            ViewBag.TicketTypeId     = new SelectList(db.TicketTypes, "Id", "Name", newTicket.TicketTypeId);
            return(View(newTicket));
        }
        public async Task <ActionResult> Edit([Bind(Include = "Id,Title,Description,Created,Updated,ProjectId,TicketTypeId,TicketPriorityId,TicketStatusId,OwnerUserId,AssignedToUserId")] Ticket ticket)
        {
            var oldTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);

            if (ModelState.IsValid)
            {
                db.Entry(ticket).State = EntityState.Modified;
                ticket.Updated         = DateTime.Now;
                db.SaveChanges();
                tixHelper.AddTicketHistory(oldTicket, ticket);
                await tixHelper.AddTicketNotification(ticket.Id, oldTicket.AssignedToUserId, ticket.AssignedToUserId);

                return(RedirectToAction("Index"));
            }
            ViewBag.AssignedToUserId = new SelectList(db.Users, "Id", "FirstName", ticket.AssignedToUserId);
            ViewBag.OwnerUserId      = new SelectList(db.Users, "Id", "FirstName", ticket.OwnerUserId);
            ViewBag.ProjectId        = new SelectList(db.Projects, "Id", "Name", ticket.ProjectId);
            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(ticket));
        }
示例#3
0
        //public ActionResult Edit([Bind(Include = "Id,Title,Description,Created,Updated,ProjectId,TicketStatusId,TicketPriorityId,TicketTypeId,OwnerUserId,AssignedToUserId")] Ticket ticket)
        public async Task <ActionResult> Edit([Bind(Include = "Id,Title,Description,Created,Updated,ProjectId,TicketStatusId,TicketPriorityId,TicketTypeId,OwnerUserId,AssignedToUserId")] Ticket ticket)
        {
            //retrieve original ticket from database, but do not cache it in this dbcontext. This will be the "oldTicket"
            var oldTicket = this.db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);


            if (ModelState.IsValid)
            {
                //Sets ticket status according to whether it's been assigned or not.
                // rewrite to use switch statement
                if (ticket.AssignedToUserId != null && ticket.TicketStatusId == 2)
                {
                    ticket.TicketStatusId = 1;
                }
                if (ticket.AssignedToUserId == null && ticket.TicketStatusId == 1)
                {
                    ticket.TicketStatusId = 2;
                    if (User.IsInRole("Admin"))
                    {
                        ticket.AssignedToUserId = User.Identity.GetUserId();
                    }
                    else
                    {
                        ticket.AssignedToUserId = ticket.Project.PMID;
                    }
                }

                if (ticket.AssignedToUserId == null && ticket.TicketStatusId == 3)
                {
                    //ticket.AssignedToUserId = User.Identity.GetUserId();
                    ticket.AssignedToUserId = ticket.Project.PMID;
                    //this.db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);
                }
                if (ticket.AssignedToUserId != null && ticket.OwnerUserId != null)
                {
                    //Use ProjectsHelper to
                    //add developer to project once they are assigned to a ticket
                    ProjectsHelper phelper = new ProjectsHelper();
                    phelper.AddUserToProject(ticket.AssignedToUserId, ticket.ProjectId);
                    phelper.AddUserToProject(ticket.OwnerUserId, ticket.ProjectId);
                }
                if (ticket.OwnerUserId == null)
                {
                    ticket.OwnerUserId = User.Identity.GetUserId();
                }

                ticket.Updated = DateTimeOffset.Now;



                db.Entry(ticket).State = EntityState.Modified;
                db.SaveChanges();


                //ticketshelper to create the ticket history
                if (TicketsHelper.HasTicketChanged(oldTicket, ticket))
                {
                    TicketsHelper.AddTicketHistory(oldTicket, ticket);
                }

                //Send the relevant data to create notifications
                await this.tixHelper.GenerateNotifications(oldTicket, ticket);

                //return to ticket details so user can see updated changes.
                return(RedirectToAction("Details", "Tickets", new { id = ticket.Id }));
            }
            ViewBag.AssignedToUserId = new SelectList(db.Users, "Id", "FirstName", ticket.AssignedToUserId);
            ViewBag.OwnerUserId      = new SelectList(db.Users, "Id", "FirstName", ticket.OwnerUserId);
            ViewBag.ProjectId        = new SelectList(db.Projects, "Id", "Name", ticket.ProjectId);
            ViewBag.TicketPriorityId = new SelectList(db.TicketPrioritys, "Id", "Name", ticket.TicketPriorityId);
            ViewBag.TicketStatusId   = new SelectList(db.TicketStatus, "Id", "Name", ticket.TicketStatusId);
            ViewBag.TicketTypeId     = new SelectList(db.TicketTypes, "Id", "Name", ticket.TicketTypeId);
            return(View(ticket));
        }