public QueryResult <TicketModelWithSchedule> Where(TicketSearchQuery searchQuery) { var result = new QueryResult <TicketModelWithSchedule>(); var ticketRepo = _uow.GetRepostirory <Ticket>(); result.Total = ticketRepo.All.Count(x => x.BuyerId == searchQuery.BuyerId); bool hasDestination = !string.IsNullOrWhiteSpace(searchQuery.Destination), hasDeparture = !string.IsNullOrWhiteSpace(searchQuery.Departure), hasWaypoint = !string.IsNullOrWhiteSpace(searchQuery.WayPoint); var currentDate = DateTime.Now.Date; var query = ticketRepo.Where(x => !searchQuery.BuyerId.HasValue || x.BuyerId == searchQuery.BuyerId, x => !searchQuery.IsPayment.HasValue || x.IsPaid == searchQuery.IsPayment, x => !hasDestination || x.ScheduleItem.Route.Destination.Equals(searchQuery.Destination, StringComparison.CurrentCultureIgnoreCase), x => !hasDeparture || x.ScheduleItem.Route.Departure.Equals(searchQuery.Departure, StringComparison.CurrentCultureIgnoreCase), x => !searchQuery.DepartureDate.HasValue && DbFunctions.TruncateTime(x.ScheduleItem.DepartureDate) >= currentDate || DbFunctions.TruncateTime(x.ScheduleItem.DepartureDate) >= searchQuery.DepartureDate, x => !searchQuery.DestinationDate.HasValue || DbFunctions.TruncateTime(x.ScheduleItem.DestinationDate) <= searchQuery.DestinationDate, x => !hasDeparture || x.ScheduleItem.Route.Departure.ToLower().Contains(searchQuery.Departure.ToLower()), x => !hasWaypoint || x.ScheduleItem.Route.WayPoints.Any(wp => wp.WayPoint.Name.ToLower().Contains(searchQuery.WayPoint.ToLower()))); result.TotalFiltered = query.Count(); query = query.OrderBy(x => x.ScheduleItem.DepartureDate) .Skip(searchQuery.Paging.Skip) .Take(searchQuery.Paging.Length); result.Data = query.ProjectTo <TicketModelWithSchedule>().ToList(); result.Paging = searchQuery.Paging; return(result); }
/// <summary> /// Run a search on tickets. You can combine the search factors to make the span multiple areas. /// For example, to search the full name, contents and email you can send the arguments as: /// query=John&fullname=1&email=1&contents=1 /// </summary> public TicketCollection SearchTickets(TicketSearchQuery query) { if (String.IsNullOrEmpty(query.Query)) { throw new ArgumentException("A search query must be provided"); } string apiMethod = "/Tickets/TicketSearch"; RequestBodyBuilder parameters = query.GetRequestBodyParameters(); TicketCollection tickets = Connector.ExecutePost <TicketCollection>(apiMethod, parameters.ToString()); return(tickets); }
public void DoTicketSearch() { var depts = TestSetup.KayakoApiService.Departments.GetDepartments(); depts.Add(new Department { Id = 0 }); var tickets = TestSetup.KayakoApiService.Tickets.GetTickets(depts.Select(d => d.Id).ToArray()); var randomTicket = tickets[new Random().Next(tickets.Count)]; var expectedSearchAmount = tickets.Count(t => t.Email.Equals(randomTicket.Email, StringComparison.InvariantCultureIgnoreCase)); var query = new TicketSearchQuery(randomTicket.Email); query.AddSearchField(TicketSearchField.EmailAddress); var queriedTickets = TestSetup.KayakoApiService.Tickets.SearchTickets(query); Assert.AreEqual(expectedSearchAmount, queriedTickets.Count); }
public ActionResult GetUpcomingTicket() { var search = new TicketSearchQuery(int.Parse(User.Identity.GetUserId())); return(PartialView("Partials/_Tickets", Mapper.Map <TicketResultViewModel>(_ticketsService.Where(search)))); }