示例#1
0
        public static IQueryable <Vehicle> GetVehicleQueryable(Dictionary <DictionaryParameter, string> parameters, MarsDBDataContext dataContext
                                                               , bool includeRev, bool includeNonRev)
        {
            var vehicles = dataContext.Vehicles.Select(d => d);

            vehicles = VehicleRestriction.RestrictVehicleQueryable(dataContext, vehicles);

            if (!(includeRev && includeNonRev))
            {
                if (!includeRev)
                {
                    vehicles = vehicles.Where(d => d.IsNonRev);
                }
                if (!includeNonRev)
                {
                    vehicles = vehicles.Where(d => !d.IsNonRev);
                }
            }

            var defleetedVehicle = parameters.ContainsKey(DictionaryParameter.DefleetedVehicles)
            ? parameters[DictionaryParameter.DefleetedVehicles] : string.Empty;

            var noReason = parameters.ContainsKey(DictionaryParameter.NoReason)
                  ? parameters[DictionaryParameter.NoReason] : string.Empty;

            if (defleetedVehicle == string.Empty)
            {
                vehicles = vehicles.Where(d => d.IsFleet);
            }

            if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.CarGroup))
            {
                vehicles = VehicleFieldRestrictions.RestrictByCarGroup(vehicles,
                                                                       parameters[DictionaryParameter.CarGroup], dataContext);
            }
            else if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.CarClass))
            {
                vehicles = VehicleFieldRestrictions.RestrictByCarClass(vehicles,
                                                                       parameters[DictionaryParameter.CarClass], dataContext);
            }
            else if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.CarSegment))
            {
                vehicles = VehicleFieldRestrictions.RestrictByCarSegment(vehicles,
                                                                         parameters[DictionaryParameter.CarSegment], dataContext);
            }
            else if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.OwningCountry))
            {
                vehicles = VehicleFieldRestrictions.RestrictByOwningCountry(vehicles,
                                                                            parameters[DictionaryParameter.OwningCountry]);
            }

            var expectedLocationLogic = parameters.ContainsValueAndIsntEmpty(DictionaryParameter.ExpectedLocationLogic);

            bool restrictByLocationCountry = true;

            if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.Location))
            {
                vehicles = VehicleFieldRestrictions.RestrictByLocation(vehicles,
                                                                       parameters[DictionaryParameter.Location], dataContext, expectedLocationLogic);
                restrictByLocationCountry = false;
            }
            else
            {
                if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.LocationGroup))
                {
                    vehicles = VehicleFieldRestrictions.RestrictByLocationGroup(vehicles,
                                                                                parameters[DictionaryParameter.LocationGroup], dataContext, expectedLocationLogic);
                    restrictByLocationCountry = false;
                }
                else if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.Pool))
                {
                    vehicles = VehicleFieldRestrictions.RestrictByPool(vehicles,
                                                                       parameters[DictionaryParameter.Pool], dataContext, expectedLocationLogic);
                    restrictByLocationCountry = false;
                }

                if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.Area))
                {
                    vehicles = VehicleFieldRestrictions.RestrictByArea(vehicles,
                                                                       parameters[DictionaryParameter.Area], dataContext, expectedLocationLogic);
                    restrictByLocationCountry = false;
                }
                else if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.Region))
                {
                    vehicles = VehicleFieldRestrictions.RestrictByRegion(vehicles,
                                                                         parameters[DictionaryParameter.Region], dataContext, expectedLocationLogic);
                    restrictByLocationCountry = false;
                }
            }

            if (restrictByLocationCountry && parameters.ContainsValueAndIsntEmpty(DictionaryParameter.LocationCountry))
            {
                vehicles = VehicleFieldRestrictions.RestrictByLocationCountry(vehicles,
                                                                              parameters[DictionaryParameter.LocationCountry], expectedLocationLogic);
            }

            if (noReason == "0")
            {
                var reasonsEntered = from per in dataContext.VehicleNonRevPeriodEntryRemarks
                                     where per.VehicleNonRevPeriodEntry.VehicleNonRevPeriod.Active &&
                                     per.ExpectedResolutionDate >= DateTime.Now.Date //
                                     select per.VehicleNonRevPeriodEntry.VehicleNonRevPeriod.Vehicle;

                vehicles = vehicles.Except(reasonsEntered.Distinct());
            }

            if (parameters.ContainsValueAndIsntEmpty(DictionaryParameter.FleetTypes))
            {
                var selectedFleetTypes = parameters[DictionaryParameter.FleetTypes].Split(',').Select(byte.Parse);
                vehicles = vehicles.Where(d => selectedFleetTypes.Contains(d.VehicleFleetTypeId));
            }


            if (parameters.ContainsKey(DictionaryParameter.OwningArea))
            {
                if (parameters[DictionaryParameter.OwningArea] != string.Empty)
                {
                    //var selectedOwningAreas = parameters[DictionaryParameter.OwningArea].Split(',').Select(d => d);
                    //vehicles = vehicles.Where(d => selectedOwningAreas.Contains(d.OwningArea));
                    vehicles = vehicles.Where(d => d.OwningArea == parameters[DictionaryParameter.OwningArea]);
                }
            }
            return(vehicles);
        }