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&amp;fullname=1&amp;email=1&amp;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);
        }
Beispiel #4
0
        public ActionResult GetUpcomingTicket()
        {
            var search = new TicketSearchQuery(int.Parse(User.Identity.GetUserId()));

            return(PartialView("Partials/_Tickets", Mapper.Map <TicketResultViewModel>(_ticketsService.Where(search))));
        }