// GET: Tickets

        public ActionResult Index()
        {
            if (User.Identity.GetUserId() == null)
            {
                return(RedirectToAction("Index", "Home"));
            }

            var tickets   = new List <Ticket>();
            var ticketsVM = new IndexTicketViewModel();

            //var users = roleHelper.UsersInRole("Developer");
            //var userOnCurrentProject = projectHelper.UsersInProject()
            ViewBag.AssignedToUserId = new SelectList(roleHelper.UsersInRole("Developer"), "Id", "FirstName");
            ViewBag.ProjectId        = new SelectList(db.Projects, "Id", "Name");
            ViewBag.TicketPriorityId = new SelectList(db.TicketPriorities, "Id", "Name");
            ViewBag.TicketStatusId   = new SelectList(db.TicketStatus, "Id", "Name");
            ViewBag.TicketTypeId     = new SelectList(db.TicketTypes, "Id", "Name");


            ViewBag.AssignUsers = new SelectList(db.Users, "Id", "FullName");
            ViewBag.UsersIds    = new MultiSelectList(db.Users, "Id", "FullName");
            var loggedInUser = User.Identity.GetUserId();

            if (User.IsInRole("Admin") || User.IsInRole("DemoAdmin"))
            {
                //tickets = db.Tickets.Include(t => t.AssignedToUser).Include(t => t.Project).Include(t => t.TicketPriority).Include(t => t.TIcketStatus).Include(t => t.TicketType).ToList();
                tickets = db.Tickets.OrderByDescending(t => t.TicketPriorityId).ToList();
            }
            else if (User.IsInRole("Submitter") || User.IsInRole("DemoSubmitter"))
            {
                tickets = db.Tickets.Where(t => t.OwnerUserId == loggedInUser).ToList();
            }
            else if (User.IsInRole("Developer") || User.IsInRole("DemoDeveloper"))
            {
                tickets = db.Tickets.Where(t => t.AssignedToUserId == loggedInUser).ToList();
            }
            else if (User.IsInRole("Project Manager") || User.IsInRole("Admin"))
            {
                var userId = User.Identity.GetUserId();

                var user = db.Users.Find(userId);

                tickets.AddRange(user.Projects.SelectMany(p => p.Tickets));

                //ICollection<Project> projects = projectHelper.ListUserProjects(loggedInUser);

                //foreach (var project in projects)
                //{
                //    foreach (var tick in project.Tickets)
                //    {
                //        tickets.Add(tick);
                //    }
                //}
            }

            ticketsVM.Tickets = tickets;
            ticketsVM.Users   = db.Users.ToList();

            return(View(ticketsVM));
        }
        // GET: Ticket
        public async Task <ActionResult> Index()
        {
            var model = new IndexTicketViewModel();

            if (CurrentDrawing != null)
            {
                model.Tickets = await repository.GetNotPayedTicketsAsync(CurrentUser.Id);
            }
            return(View(model));
        }
        public async Task <ActionResult> PurchasedTickets()
        {
            var model = new IndexTicketViewModel();

            if (CurrentDrawing != null)
            {
                model.Tickets = await repository.GetTicketsByUserDrawingIdsAsync(CurrentUser.Id, CurrentDrawing.Id);
            }
            return(View("Index", model));
        }
        public async Task <ActionResult> CreateComment(IndexTicketViewModel formdata, string ticketId)
        {
            var currentUserId = User.Identity.GetUserId();
            var ticket        = DbContext.Tickets.FirstOrDefault(p => p.Id == ticketId);

            if (ticket == null || ticket.Project.Archived == true)
            {
                return(RedirectToAction("AllTickets", "Tickets"));
            }
            var currentUser = DbContext.Users.FirstOrDefault(p => p.Id == currentUserId);


            var isUserAssigned = ticket.AssignedMembers.Any(p => p.Id == currentUserId);
            var isUserOwner    = ticket.TicketOwnerId == currentUserId;
            var isUserADeveloperAndSubmitter = User.IsInRole("Developer") && User.IsInRole("Submitter");

            if (!User.IsInRole("Admin") && !User.IsInRole("Project Manager"))
            {
                if (isUserADeveloperAndSubmitter && !isUserAssigned && !isUserOwner)
                {
                    return(RedirectToAction("ViewTicket", "Tickets", new { id = ticketId }));
                }
                else if (User.IsInRole("Developer") && !isUserAssigned && !User.IsInRole("Submitter"))
                {
                    return(RedirectToAction("ViewTicket", "Tickets", new { id = ticketId }));
                }
                else if (User.IsInRole("Submitter") && !isUserOwner && !User.IsInRole("Developer"))
                {
                    return(RedirectToAction("ViewTicket", "Tickets", new { id = ticketId }));
                }
            }


            var comment = new Comment();

            comment.CommentCreatorId = currentUserId;
            comment.TicketId         = ticketId;
            comment.CommentData      = formdata.CommentData;

            ticket.Comments.Add(comment);
            currentUser.Comments.Add(comment);

            DbContext.Comments.Add(comment);

            DbContext.SaveChanges();

            await RolesAndUsersHelper.MassEmailSender(ticket.Id, "Modify");

            return(RedirectToAction("ViewTicket", "Tickets", new { id = ticketId }));
        }