public async Task<IVehicle> GetVehicle(VehicleFilter filter)
        {
            IVehicle vehicle = new EmptyVehicle();

            if (string.IsNullOrEmpty(filter.Code) && !filter.ProgrammeId.HasValue)
            {
                return vehicle;
            }
                
            var programme = _programmeDataStore.ProgrammeGetConfiguration(filter.ProgrammeId.Value);
            if (programme == null)
                return vehicle;

            vehicle = HydrateVehicleFromProgramme(programme);

            if (filter.Deep)
            {
                var availableDocuments = await ListAvailableOxoDocuments(filter);
                var availableImports = await ListAvailableImports(filter, programme);
                
                var availableMarketGroups = await ListAvailableMarketGroups(filter, programme);
                
                vehicle.AvailableDocuments = availableDocuments;
                vehicle.AvailableImports = availableImports;
                
                vehicle.AvailableMarketGroups = availableMarketGroups;
            }
            var availableModels = await ListAvailableModels(filter);
            vehicle.AvailableModels = availableModels;
            vehicle.Gateway = !string.IsNullOrEmpty(filter.Gateway) ? filter.Gateway : vehicle.Gateway;
            vehicle.ModelYear = !string.IsNullOrEmpty(filter.ModelYear) ? filter.ModelYear : vehicle.ModelYear;

            return vehicle;
        }
 public async Task<IEnumerable<OXODoc>> ListAvailableOxoDocuments(VehicleFilter filter)
 {
     return await Task.FromResult(_documentDataStore
                 .OXODocGetManyByUser(this.CDSID)
                 .Where(d => IsDocumentForVehicle(d, VehicleFilter.ToVehicle(filter)))
                 .Distinct(new OXODocComparer()));
 }
 public async Task<IVehicle> GetVehicle(ProgrammeFilter filter)
 {
     var vehicleFilter = new VehicleFilter()
     {
         ProgrammeId = filter.ProgrammeId,
         Code = filter.Code
     };
     return await GetVehicle(vehicleFilter);
 }
 public static IVehicle ToVehicle(VehicleFilter filter)
 {
     return new Vehicle()
     {
         ProgrammeId = filter.ProgrammeId,
         VehicleId = filter.VehicleId,
         Code = filter.Code,
         Make = filter.Make,
         ModelYear = filter.ModelYear,
         Gateway = filter.Gateway
     };
 }
 public static IVehicle ToVehicle(VehicleFilter filter)
 {
     return(new Vehicle()
     {
         ProgrammeId = filter.ProgrammeId,
         VehicleId = filter.VehicleId,
         Code = filter.Code,
         Make = filter.Make,
         ModelYear = filter.ModelYear,
         Gateway = filter.Gateway
     });
 }
        private VehicleViewModel GetFullAndPartialVehicleViewModel(VehicleFilter filter)
        {        
            var vehicleViewModel = new VehicleViewModel()
            {
                VehicleIndex = filter.VehicleIndex,
                Filter = filter,
                AvailableVehicles = ListAvailableVehicles(filter),
                PageSize = this.PageSize,
                PageIndex = this.PageIndex
            };

            return vehicleViewModel;
        }
        private IEnumerable<IVehicle> ListAvailableVehicles(VehicleFilter filter)
        {
            var cacheKey = string.Format("VehicleFilter_{0}", filter.GetHashCode());
            IEnumerable<IVehicle> vehicles = (IEnumerable<IVehicle>)HttpContext.Cache.Get(cacheKey);

            if (vehicles != null)
                return vehicles;

            vehicles = DataContext.Vehicle.ListAvailableVehicles(filter);

            HttpContext.Cache.Add(cacheKey, vehicles, null, DateTime.Now.AddMinutes(60), Cache.NoSlidingExpiration, CacheItemPriority.Default, null);

            return vehicles;
        }
        public async Task<IEnumerable<TakeRateSummary>> ListAvailableImports(VehicleFilter filter, Programme forProgramme)
        {
            var imports = await Task.FromResult(_volumeDataStore
                            .FdpTakeRateHeaderGetManyByUsername(new TakeRateFilter()
                            {
                                ProgrammeId = filter.ProgrammeId,
                                Gateway = filter.Gateway
                            })
                            .CurrentPage
                            .ToList());

            foreach (var import in imports) {
                //import.Vehicle = (Vehicle)HydrateVehicleFromProgramme(forProgramme);
                //import.Vehicle.Gateway = import.Gateway;
            }

            return imports;
        }
        public IEnumerable<IVehicle> ListAvailableVehicles(VehicleFilter filter)
        {
            var programmes = ListProgrammes(filter);
            if (programmes == null || !programmes.Any())
                return Enumerable.Empty<IVehicle>();

            return programmes.Select(p => HydrateVehicleFromProgramme(p, filter.VehicleIndex));
        }
 public async Task<IEnumerable<MarketGroup>> ListAvailableMarketGroups(VehicleFilter filter, Programme forProgramme)
 {
     var marketGroups = Enumerable.Empty<MarketGroup>();
     if (filter.DocumentId.HasValue) {
         marketGroups =  await Task.FromResult(_marketGroupDataStore
                            .MarketGroupGetMany(forProgramme.Id, filter.DocumentId.Value, true));
     } else {
         marketGroups = await Task.FromResult(_marketGroupDataStore
                            .MarketGroupGetMany(true));
     }
     return marketGroups;
 }
 public ActionResult FilterVehicles(VehicleFilter filter)
 {
     return Json(GetFullAndPartialVehicleViewModel(filter));
 }