/// <summary> /// Gets vehicle to init route. /// </summary> /// <param name="list">Vehicles for first selection.</param> /// <param name="index">Vehicle index.</param> /// <returns>Vehicle object.</returns> private Vehicle _GetNextVehicle(IList <Vehicle> list, int index) { Vehicle obj = null; if (index < list.Count) { obj = list[index]; // get presented } else { // create new object AppData.IDataObjectCollection <Vehicle> vehicles = DataKeeper.Project.Vehicles; obj = new Vehicle(DataKeeper.Project.CapacitiesInfo); obj.Name = _GetNewName(App.Current.FindString("Vehicle"), vehicles); // init fuel type - use first presented AppData.IDataObjectCollection <FuelType> fuelTypes = DataKeeper.Project.FuelTypes; if (0 < fuelTypes.Count) { obj.FuelType = fuelTypes[0]; } vehicles.Add(obj); } return(obj); }
/// <summary> /// Gets driver to init route. /// </summary> /// <param name="list">Drivers for first selection.</param> /// <param name="index">Driver index.</param> /// <returns>Driver object.</returns> private Driver _GetNextDriver(IList <Driver> list, int index) { Driver obj = null; if (index < list.Count) { obj = list[index]; // get presented } else { // create new object AppData.IDataObjectCollection <Driver> drivers = DataKeeper.Project.Drivers; obj = new Driver(); obj.Name = _GetNewName(App.Current.FindString("Driver"), drivers); drivers.Add(obj); } return(obj); }
/// <summary> /// Does grow list of routes. /// </summary> /// <param name="vehicleNumber">New vehicle number.</param> private void _DoGrowList(int vehicleNumber) { _EndEditTable(); // select objects in use List <Driver> driversInUse = new List <Driver>(); List <Vehicle> vehiclesInUse = new List <Vehicle>(); AppData.IDataObjectCollection <Route> routes = DataKeeper.Routes; for (int index = 0; index < routes.Count; ++index) { Route route = routes[index]; if (!_IsObjectPresentInCollection(route.Driver, driversInUse)) { driversInUse.Add(route.Driver); } if (!_IsObjectPresentInCollection(route.Vehicle, vehiclesInUse)) { vehiclesInUse.Add(route.Vehicle); } } Project project = DataKeeper.Project; // filter project objects - select not used objects IList <Driver> drivers = _GetNotUsedObjects(driversInUse, project.Drivers); IList <Vehicle> vehicles = _GetNotUsedObjects(vehiclesInUse, project.Vehicles); // use older as default location var sortCollection = from loc in project.Locations orderby loc.CreationTime select loc; Location defaultLocation = sortCollection.First(); // create, init and add new routes int maxOrders = _GetInputedMaxOrder(); int maxWorkTime = _GetInputedMaxWorkTime(); int maxTravelDuration = _GetCorrectedMaxTravelDuration(maxWorkTime); int presentedVehicleNumber = DataKeeper.Routes.Count; int needAddCount = vehicleNumber - presentedVehicleNumber; for (int index = 0; index < needAddCount; ++index) { // create route Route route = project.CreateRoute(); // init route route.Name = _GetNewName(App.Current.FindString("Route"), routes); route.Color = RouteColorManager.Instance.NextRouteColor(routes); route.StartLocation = defaultLocation; route.EndLocation = defaultLocation; route.Driver = _GetNextDriver(drivers, index); route.Vehicle = _GetNextVehicle(vehicles, index); TimeWindow startTimeWindow = route.StartTimeWindow; startTimeWindow.From = textBoxStart.Time; startTimeWindow.To = textBoxEnd.Time; route.MaxOrders = maxOrders; route.MaxTravelDuration = maxTravelDuration; route.MaxTotalDuration = maxWorkTime; routes.Add(route); } _StoreChanges(); }