예제 #1
0
        public IActionResult ClientsList(string searchString)
        {
            IEnumerable <TicketIndexDto> tickets;
            SupportIndexViewModel        model = new SupportIndexViewModel();

            if (!string.IsNullOrEmpty(searchString))
            {
                model.SearchString = string.Concat(searchString.ToCharArray().Where(c => !Char.IsWhiteSpace(c)));

                tickets = _context.Set <Ticket>()
                          .GetAll()
                          .Include(t => t.Point)
                          .Include(t => t.TicketSubject)
                          .Include(t => t.TicketStatus)
                          ?.Where(t => t.Point.NamePoint
                                  .ToLower()
                                  .Contains(model.SearchString.ToLower()))
                          ?.Select(ticket => new TicketIndexDto
                {
                    ClientName        = ticket.Point.NamePoint,
                    TicketStatusName  = ticket.TicketStatus.TicketStatusName,
                    TicketSubjectName = ticket.TicketSubject.TicketSubjectName,
                    DateCreated       = ticket.DateCreated,
                    DateFinished      = ticket.DateFinished,
                    TimeElapsed       = ticket.DateFinished.Value.Subtract(ticket.DateCreated.Value).Minutes
                })
                          .OrderBy(t => t.DateCreated)
                          .ThenBy(t => t.ClientName);
                model.Tickets = tickets;
            }
            else
            {
                tickets = _context.Set <Ticket>()
                          .GetAll()
                          .Include(t => t.Point)
                          .Include(t => t.TicketSubject)
                          .Include(t => t.TicketStatus)
                          ?.Select(ticket => new TicketIndexDto
                {
                    ClientName        = ticket.Point.NamePoint,
                    TicketStatusName  = ticket.TicketStatus.TicketStatusName,
                    TicketSubjectName = ticket.TicketSubject.TicketSubjectName,
                    DateCreated       = ticket.DateCreated,
                    DateFinished      = ticket.DateFinished,
                    TimeElapsed       = ticket.DateFinished.Value.Subtract(ticket.DateCreated.Value).Minutes
                })
                          .OrderBy(t => t.DateCreated)
                          .ThenBy(t => t.ClientName);
                model.Tickets = tickets;
            }
            return(PartialView(model));
        }
예제 #2
0
        public async Task <ActionResult> Index(int?state, int?searchUserId, int?searchCompId, int page = 1)
        {
            ViewBag.State        = state;
            ViewBag.Page         = page;
            ViewBag.SearchUserId = searchUserId;
            ViewBag.SearchCompId = searchCompId;

            if (!Request.IsAjaxRequest())
            {
                return(View());
            }

            var model       = new SupportIndexViewModel();
            var login       = User.Identity.Name;
            var accountName = login.Substring(5, login.Length - 5);
            var person      = _db.Persons.FirstOrDefault(p => p.AccountName == accountName);

            if (person == null)
            {
                return(HttpNotFound());
            }
            model.UserId = person.Id;

            IEnumerable <SupportRequest> requests;

            //requests of a computer
            if (searchCompId != null)
            {
                var comp = await _db.Computers.FindAsync(searchCompId);

                if (comp != null)
                {
                    requests = comp.SupportRequests
                               .OrderBy(r => r.State)
                               .ThenByDescending(r => r.CreationTime).AsEnumerable();
                    model.SearchString = comp.ComputerName;
                }
                else
                {
                    return(HttpNotFound());
                }
            }
            //requests of a user
            else if (searchUserId != null)
            {
                var user = await _db.Persons.FindAsync(searchUserId);

                if (user != null)
                {
                    requests = user.SupportRequests.OrderBy(r => r.State)
                               .ThenByDescending(r => r.CreationTime).AsEnumerable();
                    model.SearchString = user.FullName;
                }
                else
                {
                    return(HttpNotFound());
                }
            }
            //all requests
            else
            {
                requests = _db.SupportRequests
                           .OrderBy(r => r.State)
                           .ThenByDescending(r => r.CreationTime).AsEnumerable();
            }

            List <SupportRequest> requestList;

            //non-IT user - show only user's requests
            if (!User.IsInRole(@"RIVS\IT-Dep"))
            {
                model.IsItUser = false;
                //user's requests with a selected state or all requests
                requestList = state != null
                    ? requests.Where(r => r.From == person && r.State == state).ToList()
                    : requests.Where(r => r.From == person).ToList();
            }
            else
            {
                model.IsItUser = true;
                //IT user - show all users' requests with a selected state or all requests
                requestList = state != null
                    ? requests.Where(r => r.State == state).ToList()
                    : requests.ToList();
            }

            var pager = new Pager(requestList.Count, page);

            model.Pager           = pager;
            model.SupportRequests = requestList.Skip((pager.CurrentPage - 1) * pager.PageSize).Take(pager.PageSize).ToList();
            return(PartialView("IndexPartial", model));
        }