// GET: Tickets/Edit/5
 public ActionResult Edit(int? id)
 {
     UserRoleHelper helper = new UserRoleHelper();
     if (id == null)
     {
         return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
     }
     Ticket ticket = db.Tickets.Find(id);
     if (ticket == null)
     {
         return HttpNotFound();
     }
     var query = db.ProjectUsers.Where(x => x.Project.Project == ticket.Project.Project).ToList();
     bool found = false;
     foreach(var item in query)
     {
         var user = db.Users.Where(x => x.Id == item.ProjectUserId).Single();
         if (helper.IsUserInRole(user.Id, "Developer"))
         {
             userassign.Add(user);
             found = true;
         }
     }
     if (found)
     {
         if(!string.IsNullOrWhiteSpace(ticket.AssignedId))
         {
             ticketd.ticketassign = new SelectList(userassign, "UserName", "UserName", ticket.Assigned.UserName);
         }
         else
         {
             ticketd.ticketassign = new SelectList(userassign, "UserName", "UserName");
         }
     }
     ViewBag.TicketPriorityId = new SelectList(db.Priorities, "Id", "Priority", ticket.TicketPriorityId);
     ViewBag.TicketStatusId = new SelectList(db.Status, "Id", "Status", ticket.TicketStatusId);
     ViewBag.TicketTypeId = new SelectList(db.Types, "Id", "Type", ticket.TicketTypeId);
     ticketd.ticketdetails = ticket;
     return View(ticketd);
 }
        public ActionResult Create([Bind(Include = "Id,Title,Description,Created,ProjectId,TicketTypeId,TicketPriorityId,TicketStatusId,OwnerId,AssignedId")] Ticket ticket, string Title, string Status, string Type, string Priority, string Project)
        {
            if (ModelState.IsValid)
            {
                var queryp = db.Priorities.AsQueryable();
                var querys = db.Status.AsQueryable();
                var querypr = db.Projects.AsQueryable();
                var queryty = db.Types.AsQueryable();
                if(!string.IsNullOrWhiteSpace(Priority))
                {
                    var queryt = queryp.Where(x => x.Priority == Priority).Select(y => y.Id).Single();
                    ticket.TicketPriorityId = queryt;
                }
                if(!string.IsNullOrWhiteSpace(Status))
                {
                    var queryt = querys.Where(x => x.Status == Status).Select(y => y.Id).Single();
                    ticket.TicketStatusId = queryt;
                }
                if(!string.IsNullOrWhiteSpace(Project))
                {
                    var queryt = querypr.Where(x => x.Project == Project).Select(y => y.Id).Single();
                    ticket.ProjectId = queryt;
                }
                if(!string.IsNullOrWhiteSpace(Type))
                {
                    var queryt = queryty.Where(x => x.Type == Type).Select(y => y.Id).Single();
                    ticket.TicketTypeId = queryt;
                }
                ticket.Title = Title;
                ticket.Created = System.DateTimeOffset.Now;
                ticket.OwnerId = User.Identity.GetUserId();

                TicketNotify note = new TicketNotify();
                note.TicketId = ticket.Id;
                note.NotifyUserId = ticket.OwnerId;
                db.Notifications.Add(note);

                UserRoleHelper helper = new UserRoleHelper();
                var manager = db.ProjectUsers.Where(x => x.ProjectId == ticket.ProjectId).ToList();
                foreach(var item in manager)
                {
                    if(helper.IsUserInRole(item.ProjectUserId, "ProjectManager"))
                    {
                        TicketNotify note2 = new TicketNotify();
                        note2.TicketId = ticket.Id;
                        note2.NotifyUserId = item.ProjectUserId;
                        db.Notifications.Add(note2);
                    }
                }

                var emails = db.Notifications.Where(x => x.TicketId == ticket.Id).Select(y => y.NotifyUser.Email).ToList();
                var username = ConfigurationManager.AppSettings["SendGridUserName"];
                var password = ConfigurationManager.AppSettings["SendGridPassword"];
                var from = ConfigurationManager.AppSettings["ContactEmail"];

                foreach (var email in emails)
                {
                    SendGridMessage myMessage = new SendGridMessage();
                    myMessage.AddTo(email);
                    myMessage.From = new MailAddress(from);
                    myMessage.Subject = "Notification for Ticket #" + ticket.Id;
                    myMessage.Html = "Ticket #" + ticket.Id + " has been created";
                    var credentials = new NetworkCredential(username, password);

                    var transportWeb = new Web(credentials);

                    transportWeb.DeliverAsync(myMessage);
                }

                db.Tickets.Add(ticket);
                db.SaveChanges();
                return RedirectToAction("Index");
            }

            return View(ticket);
        }
        public ActionResult UserRolePageSub(string id, string Username, string[] Roles)
        {
            UserRoleHelper helper = new UserRoleHelper();
            IList<string> temp = helper.ListUserRoles(id);
            var remove = true;
            IList<string> response = new List<string>();
            foreach(var item in Roles)
            {
                if(!helper.IsUserInRole(id, item))
                {
                    helper.AddUserToRole(id, item);
                    response.Add("Added Role " + item + " to User " + Username);
                }
            }
            foreach(var tempitem in temp)
            {
                remove = true;
                foreach(var item in Roles)
                {
                    if(tempitem == item)
                    {
                        remove = false;
                    }
                }
                if(remove)
                {
                    helper.RemoveUserFromRole(id, tempitem);
                    response.Add("Removed Role " + tempitem + " from User " + Username);
                }
            }
            assign.User = db.Users.Find(id);
            var selected = helper.ListUserRoles(id);
            assign.RoleInput = new MultiSelectList(db.Roles, "Name", "Name", selected);
            assign.response = response;

            return View(assign);
        }