public ActionResult ViewTicket(Ticket ticket)
        {
            if (!isLoggedIn())
            {
                return(RedirectToAction("Login", "Account"));
            }

            IEnumerable <Message> messages;

            messages = from message in _dbContext.Messages.ToList()
                       where message.IsPartOf == ticket.ID
                       select message;

            TicketContentsViewModel model = new TicketContentsViewModel();

            model.Messages = messages;
            // Weird stuff happens if you don't do this
            model.Ticket   = _dbContext.Ticket.Find(ticket.ID);
            model.TicketID = model.Ticket.ID;

            IEnumerable <Expert> experts;
            IEnumerable <Expert> preAddedExperts;

            experts = from expert in _dbContext.Experts.ToList()
                      where expert.Validated && expert.Id != getUser().Id                     // So experts don't add themselves
                      select expert;

            preAddedExperts = from expert in experts
                              from attached in _dbContext.AttachedUsers.ToList()
                              where expert.Id == attached.UserID && attached.TicketID ==
                              model.TicketID
                              select expert;

            experts = experts.Except(preAddedExperts);

            IEnumerable <ApplicationUser> users = from expert in experts
                                                  from user in _dbContext.Users.ToList()
                                                  where user.Id == expert.Id
                                                  select user;

            IEnumerable <ApplicationUser> preAddedUsers = from expert in preAddedExperts
                                                          from user in _dbContext.Users.ToList()
                                                          where user.Id == expert.Id
                                                          select user;

            model.AllExperts      = users;
            model.AttachedExperts = preAddedUsers;

            if (!isTicketCreator(model.Ticket))
            {
                return(View("ExpertTicketView", model));
            }

            return(View("UserTicketView", model));
        }
        public ActionResult PostResponse(TicketContentsViewModel model)
        {
            if (!isLoggedIn())
            {
                return(RedirectToAction("Oops"));
            }

            if (!getUser().ActiveStatus)
            {
                return(View("Deactivated"));
            }

            Ticket  ticket  = _dbContext.Ticket.Find(model.TicketID);
            Message message = new Message();

            message.BodyText = model.MessageToPost;
            message.Date     = System.DateTime.Now;
            message.User     = getUser();
            message.Ticket   = ticket;

            if (model.Deactivate)
            {
                message.BodyText = "Expert " + getUser().Name + " has removed themselves from this ticket. Reason: \n" + message.BodyText;
                _dbContext.Messages.Add(message);
                _dbContext.SaveChanges();

                AttachedUsers attached = _dbContext.AttachedUsers.Find(getUser().Id, ticket.ID);

                _dbContext.AttachedUsers.Remove(attached);
                _dbContext.SaveChanges();

                return(RedirectToAction("Index"));
            }

            _dbContext.Messages.Add(message);
            _dbContext.SaveChanges();

            return(RedirectToAction("ViewTicket", ticket));
        }