public ActionResult Edit([Bind(Include = "Id,ProjectId,TicketTypeId,TicketPriorityId,SubmiterId,DeveloperID,Title,Discription,Created")] Ticket ticket, TicketAttachment ticketAttachment, HttpPostedFileBase file)
        {
            if (ModelState.IsValid)
            {
                var oldTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);

                if (ticket.DeveloperID == null)
                {
                    ticketHelper.UnassignTicket(ticket.Id);
                    ticket.TicketStatusId = db.TicketStatus.FirstOrDefault(ts => ts.Name == "Open").Id;
                }
                else
                {
                    ticketHelper.AssignTicket(ticket.DeveloperID, ticket.Id);
                    ticket.TicketStatusId = db.TicketStatus.FirstOrDefault(ts => ts.Name == "Assigned").Id;
                }

                if (file != null)
                {
                    var fileName = DateTime.Now.Ticks + Path.GetFileName(file.FileName);
                    file.SaveAs(Path.Combine(Server.MapPath("~/Uploads/"), fileName));

                    var attachment = new TicketAttachment
                    {
                        TicketID = ticket.Id,
                        UserId   = User.Identity.GetUserId(),
                        Created  = DateTime.Now,
                        FilePath = "/Uploads/" + fileName
                    };

                    db.TicketAttachments.Add(attachment);
                }

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

                var newTicket = db.Tickets.AsNoTracking().FirstOrDefault(t => t.Id == ticket.Id);

                if (newTicket.DeveloperID == null)
                {
                    notificationHelper.AddUnAssignmentNotification(oldTicket, newTicket);
                }
                else
                {
                    notificationHelper.AddAssignmentNotification(newTicket);
                }

                historyHelper.RecordHistoricalChanges(oldTicket, newTicket);

                return(RedirectToAction("Index"));
            }
            ViewBag.DeveloperID      = new SelectList(db.Users, "Id", "FirstName", ticket.DeveloperID);
            ViewBag.ProjectId        = new SelectList(db.Projects, "Id", "Name", ticket.ProjectId);
            ViewBag.SubmiterId       = new SelectList(db.Users, "Id", "FirstName", ticket.Submiter);
            ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "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));
        }
        public ActionResult ManageUserTickets(string userId, List <int> addTicketIds, List <int> removeTicketIds)
        {
            if (addTicketIds != null)
            {
                foreach (var ticketId in addTicketIds)
                {
                    ticketHelper.AssignTicket(userId, ticketId);
                }
            }

            if (removeTicketIds != null)
            {
                foreach (var ticketId in removeTicketIds)
                {
                    ticketHelper.UnAssignTicket(ticketId);
                }
            }

            return(Redirect(Request.UrlReferrer.ToString()));
        }