示例#1
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));
        }