public async Task <OrderPostAllResponse> PostAll(ApplicationUser currentUser, OrderPostAllRequest request)
        {
            var response = new OrderPostAllResponse();

            var query = _fuelContext.Orders.AsQueryable();

            if (request.Numbers != null && request.Numbers.Any())
            {
                query = query.Where(x => request.Numbers.Contains(x.Number));
            }

            var queryOrderIds = query.Select(x => x.Id);

            if (request.Statuses != null && request.Statuses.Any())
            {
                // узнаем последние статусы у заказов, полученных на предыдущем шаге
                var lastStatuses = await _fuelContext.StatusHistory
                                   .Where(x => queryOrderIds.Contains(x.OrderId))
                                   .GroupBy(x => x.OrderId)
                                   .SelectMany(x => x.OrderByDescending(t => t.ChangeTime).Take(1))
                                   .Where(x => request.Statuses.Contains((OrderStatusVM)x.Status))
                                   .ToListAsync();

                queryOrderIds = lastStatuses.Select(x => x.OrderId).AsQueryable();
                query         = query.Where(x => lastStatuses.Any(t => t.OrderId == x.Id));
            }

            if (request.BeginDate.HasValue)
            {
                var beginDateDetalizations = await _fuelContext.ClientDetalizations
                                             .Where(x => queryOrderIds.Contains(x.OrderId) && x.CreationDate >= request.BeginDate.Value)
                                             .ToListAsync();

                queryOrderIds = beginDateDetalizations.Select(x => x.OrderId).AsQueryable();
                query         = query.Where(x => beginDateDetalizations.Any(t => t.OrderId == x.Id));
            }

            if (request.EndDate.HasValue)
            {
                var endDateDetalizations = await _fuelContext.ClientDetalizations
                                           .Where(x => queryOrderIds.Contains(x.OrderId) && x.CreationDate <= request.EndDate.Value)
                                           .ToListAsync();

                queryOrderIds = endDateDetalizations.Select(x => x.OrderId).AsQueryable();
                query         = query.Where(x => endDateDetalizations.Any(t => t.OrderId == x.Id));
            }

            var orders = await query.ToListAsync();

            if (!orders.Any())
            {
                response.AddMessage(Common.BaseResponseResources.MessageType.INFO, _stringLocalizer[CustomStringLocalizer.ORDERS_NOT_FOUND]);
                return(response);
            }

            var ordersVM = new List <OrderVM>();

            foreach (var order in orders)
            {
                var clientDetalization = await _fuelContext.ClientDetalizations.FirstOrDefaultAsync(x => x.OrderId == order.Id);

                var driverDetalizations = await GetDriverDetalizationsAsync(order.Id);

                var statusHistories = await GetStatusHistoryAsync(order.Id);

                var item = Convert(order, clientDetalization, driverDetalizations, statusHistories);
                ordersVM.Add(item);
            }
            response.Items = ordersVM;
            return(response);
        }
        public async Task <OrderPostAllResponse> PostAll([FromBody] OrderPostAllRequest request)
        {
            var currentUser = await _userManager.GetUserAsync(User);

            return(await _orderModel.PostAll(currentUser, request));
        }