Ejemplo n.º 1
0
 public int InsertVehicleRoute(VehicleRoute vehicleRoute)
 {
     using (var connection = OpenConnection())
     {
         return(connection.QuerySingleOrDefault <int>(INSERT_VEHICLE_ROUTE, vehicleRoute));
     }
 }
Ejemplo n.º 2
0
        public TransfersPerStationCont GetRouteTransfersPerStation(bool skipForOnlyOneVehicle = true)
        {
            if (!HasValidData || VehicleSchedule.Vehicle.Route != null)
            {
                TransfersPerStationCont totalTransfers = new TransfersPerStationCont();
                VehicleRoute            route          = VehicleSchedule.Vehicle.Route;
                if (skipForOnlyOneVehicle && route.Vehicles.Count == 1)
                {
                    return(null);
                }
                foreach (Vehicle vehicle in route.Vehicles.ToArray())
                {
                    if (vehicle.IsEnabled)
                    {
                        VehicleScheduleData vehicleData = VehicleScheduleDataManager.Current[vehicle];
                        float?mult;
                        if (vehicleData == null || !vehicleData.Capacity.HasValidData || (mult = vehicleData.ScheduleMonthlyMultiplier) == null)
                        {
                            return(null);
                        }
                        totalTransfers.Add(vehicleData.Capacity.GetTransfersPerStation(), mult, vehicleData.ScheduleAvereageDuration.Estimated);
                    }
                }

                return(totalTransfers.AsReadonly());
            }
            return(null);
        }
Ejemplo n.º 3
0
        public IReadOnlyDictionary <Item, TransferData> GetRouteTotalTransfers(bool skipForOnlyOneVehicle = true)
        {
            if (!HasValidData || VehicleSchedule.Vehicle.Route != null)
            {
                TaskTransfers totalTransfers = new TaskTransfers();
                VehicleRoute  route          = VehicleSchedule.Vehicle.Route;
                if (skipForOnlyOneVehicle && route.Vehicles.Count == 1)
                {
                    return(null);
                }
                foreach (Vehicle vehicle in route.Vehicles.ToArray())
                {
                    if (vehicle.IsEnabled)
                    {
                        VehicleScheduleData vehicleData = VehicleScheduleDataManager.Current[vehicle];
                        float?mult;
                        if (vehicleData == null || !vehicleData.Capacity.HasValidData || (mult = vehicleData.ScheduleMonthlyMultiplier) == null)
                        {
                            return(null);
                        }
                        totalTransfers.Add(vehicleData.Capacity.TotalTransfers, mult, vehicleData.ScheduleAvereageDuration.Estimated);
                    }
                }

                return(totalTransfers.Transfers);
            }
            return(null);
        }
Ejemplo n.º 4
0
 private void OnRemoveRoute(VehicleRoute route)
 {
     if (_cache.TryGetValue(route, out CacheData routeData))
     {
         routeData.OnRouteDataRemove();
         _cache.Remove(route);
     }
 }
        public ActionResult DeleteConfirmed(int id)
        {
            VehicleRoute vehicleRoute = db.VehicleRoutes.Find(id);

            db.VehicleRoutes.Remove(vehicleRoute);
            db.SaveChanges();
            return(RedirectToAction("Index"));
        }
 private void OnVehicleRouteChanged(Vehicle vehicle, VehicleRoute oldRoute, VehicleRoute newRoute)
 {
     if (newRoute != null && oldRoute != newRoute && newRoute.Vehicles.Count > 1)
     {
         VehicleScheduleData vehicleData = ReplaceVehicleScheduleDataFromRouteCopy(vehicle);
         vehicleData.CallDataChangedEventsForRoute(null);
     }
 }
Ejemplo n.º 7
0
 private CacheData GetOrCreateCacheData(VehicleRoute route)
 {
     if (!_cache.TryGetValue(route, out CacheData result))
     {
         result = new CacheData(route);
         _cache.Add(route, result);
     }
     return(result);
 }
Ejemplo n.º 8
0
        private void PostProcessWithMinimumPathAlgorithm(Depot depot, VehicleRoute vehicleRoute, CeplexParameters ceplexParameters,
                                                         List <Address> addresses)
        {
            vehicleRoute.SubRoutes = new List <SubRoute>();
            int        i                     = 0;
            int        indexOrigin           = 0;
            int        indexDestiny          = 0;
            List <int> indexesAlreadyVisited = new List <int>();

            indexesAlreadyVisited.Add(0);
            while (i <= ceplexParameters.QuantityOfClients)
            {
                if (i == 0)
                {
                    var subRoute = new SubRoute();
                    subRoute.AddressOriginId = depot.Address.AddressId;
                    indexDestiny             = GetIndexNearestAddress(i, ceplexParameters, addresses, indexesAlreadyVisited);
                    var addressDestiny = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexDestiny);
                    subRoute.AddressDestinyId = addressDestiny.AddressId;
                    subRoute.Distance         = ceplexParameters.Distance[0][addressDestiny.indexVRPDistanceMatrix];
                    subRoute.Duration         = ceplexParameters.Duration[0][addressDestiny.indexVRPDistanceMatrix].ConvertMinutesToDateTime();
                    subRoute.AddressOrigin    = depot.Address;
                    subRoute.AddressDestiny   = addressDestiny;
                    vehicleRoute.SubRoutes.Add(subRoute);
                }
                else if (i == ceplexParameters.QuantityOfClients)
                {
                    var subRoute      = new SubRoute();
                    var addressOrigin = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexOrigin);
                    subRoute.AddressOriginId  = addressOrigin.AddressId;
                    subRoute.AddressDestinyId = depot.Address.AddressId;
                    subRoute.Distance         = ceplexParameters.Distance[indexOrigin][0];
                    subRoute.Duration         = ceplexParameters.Duration[indexOrigin][0].ConvertMinutesToDateTime();
                    subRoute.AddressOrigin    = addressOrigin;
                    subRoute.AddressDestiny   = depot.Address;
                    vehicleRoute.SubRoutes.Add(subRoute);
                }
                else
                {
                    var subRoute      = new SubRoute();
                    var addressOrigin = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexOrigin);
                    subRoute.AddressOriginId = addressOrigin.AddressId;
                    indexDestiny             = GetIndexNearestAddress(indexOrigin, ceplexParameters, addresses, indexesAlreadyVisited);
                    var addressDestiny = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == indexDestiny);
                    subRoute.AddressDestinyId = addressDestiny.AddressId;
                    subRoute.Distance         = ceplexParameters.Distance[indexOrigin][addressDestiny.indexVRPDistanceMatrix];
                    subRoute.Duration         = ceplexParameters.Duration[indexOrigin][addressDestiny.indexVRPDistanceMatrix].ConvertMinutesToDateTime();
                    subRoute.AddressOrigin    = addressOrigin;
                    subRoute.AddressDestiny   = addressDestiny;
                    vehicleRoute.SubRoutes.Add(subRoute);
                }
                indexesAlreadyVisited.Add(indexDestiny);
                indexOrigin = indexDestiny;
                i++;
            }
        }
Ejemplo n.º 9
0
        public void GetOptimalSequenceOfClientsToVisit(Depot depot, VehicleRoute vehicleRoute, int[][] routeMatrix, CeplexParameters ceplexParameters,
                                                       List <Address> addresses)
        {
            vehicleRoute.SubRoutes = new List <SubRoute>();
            int sequenceNumber = 1;

            for (int j = 0; j <= ceplexParameters.QuantityOfClients; j++)
            {
                for (int i = 0; i <= ceplexParameters.QuantityOfClients; i++)
                {
                    if (routeMatrix[j][i] == 1 && j != i && j == 0)
                    {
                        var subRoute = new SubRoute();
                        subRoute.AddressOriginId = depot.Address.AddressId;
                        var addressDestiny = addresses.FirstOrDefault(a => a.indexVRPDistanceMatrix == i);
                        subRoute.AddressDestinyId = addressDestiny.AddressId;
                        subRoute.Distance         = ceplexParameters.Distance[j][i];
                        subRoute.Duration         = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime();
                        subRoute.AddressOrigin    = depot.Address;
                        subRoute.AddressDestiny   = addressDestiny;
                        subRoute.SequenceNumber   = sequenceNumber;
                        sequenceNumber++;
                        vehicleRoute.SubRoutes.Add(subRoute);
                    }
                    else if (routeMatrix[j][i] == 1 && j != i && j > 0 && i != 0)
                    {
                        var subRoute      = new SubRoute();
                        var addressOrigin = addresses.FirstOrDefault(c => c.indexVRPDistanceMatrix == j);
                        subRoute.AddressOriginId = addressOrigin.AddressId;
                        var addressDestiny = addresses.FirstOrDefault(c => c.indexVRPDistanceMatrix == i);
                        subRoute.AddressDestinyId = addressDestiny.AddressId;
                        subRoute.Distance         = ceplexParameters.Distance[j][i];
                        subRoute.Duration         = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime();
                        subRoute.AddressOrigin    = addressOrigin;
                        subRoute.AddressDestiny   = addressDestiny;
                        subRoute.SequenceNumber   = sequenceNumber;
                        sequenceNumber++;
                        vehicleRoute.SubRoutes.Add(subRoute);
                    }
                    else if (routeMatrix[j][i] == 1 && j != i && j > 0 && i == 0)
                    {
                        var subRoute      = new SubRoute();
                        var addressOrigin = addresses.FirstOrDefault(c => c.indexVRPDistanceMatrix == j);
                        subRoute.AddressOriginId  = addressOrigin.AddressId;
                        subRoute.AddressDestinyId = depot.Address.AddressId;
                        subRoute.Distance         = ceplexParameters.Distance[j][i];
                        subRoute.Duration         = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime();
                        subRoute.AddressOrigin    = addressOrigin;
                        subRoute.AddressDestiny   = depot.Address;
                        subRoute.SequenceNumber   = sequenceNumber;
                        sequenceNumber++;
                        vehicleRoute.SubRoutes.Add(subRoute);
                    }
                }
            }
        }
Ejemplo n.º 10
0
        private List <Address> GetAddressesOfVehicleRoute(VehicleRoute vehicleRoute)
        {
            List <Address> addresses = new List <Address>();

            for (int i = 0; i < vehicleRoute.SubRoutes.Count; i++)
            {
                addresses.Add(vehicleRoute.SubRoutes[i].AddressOrigin);
            }
            return(addresses);
        }
Ejemplo n.º 11
0
            public CacheData(VehicleRoute route)
            {
                VehicleScheduleDataManager manager = Manager <VehicleScheduleDataManager> .Current;

                this.route = route;
                foreach (Vehicle vehicle in route.Vehicles.ToArray())
                {
                    manager.GetOrCreateVehicleScheduleData(vehicle).SubscribeOwnDataChanged(OnVehicleDataChanged);
                }
            }
Ejemplo n.º 12
0
 private CacheData this[VehicleRoute route]
 {
     get
     {
         if (_cache.TryGetValue(route, out CacheData result))
         {
             return(result);
         }
         return(null);
     }
 }
        public ActionResult Edit([Bind(Include = "id,StartLocation,DestinationLocation,userid")] VehicleRoute vehicleRoute)
        {
            if (ModelState.IsValid)
            {
                vehicleRoute.userid = User.Identity.GetUserId();

                db.Entry(vehicleRoute).State = EntityState.Modified;
                db.SaveChanges();
                return(RedirectToAction("Index"));
            }
            //ViewBag.userid = new SelectList(db.AspNetUsers, "Id", "Email", vehicleRoute.userid);
            return(View(vehicleRoute));
        }
Ejemplo n.º 14
0
 public static VehicleRouteDto CreateDto(this VehicleRoute entity)
 {
     return(new VehicleRouteDto()
     {
         vehicleRouteId = entity.VehicleRouteId,
         dateCreation = entity.DateCreation,
         dateScheduled = entity.DateScheduled,
         departureTime = entity.DepartureTime,
         estimatedTimeReturn = entity.EstimatedTimeReturn,
         vehicleId = entity.VehicleId,
         depot = entity.Depot.CreateDto(),
         subRoutes = entity.SubRoutes.CreateDto()
     });
 }
        // GET: VehicleRoutes/Details/5
        public ActionResult Details(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            VehicleRoute vehicleRoute = db.VehicleRoutes.Find(id);

            if (vehicleRoute == null)
            {
                return(HttpNotFound());
            }
            return(View(vehicleRoute));
        }
Ejemplo n.º 16
0
            public void OnRouteRemovedFromVehicle(Vehicle vehicle, VehicleRoute oldRoute)
            {
                MarkDirty();
                VehicleScheduleData data = Manager <VehicleScheduleDataManager> .Current[vehicle];

                if (data != null)
                {
                    data.UnsubscribeOwnDataChanged(OnVehicleDataChanged);
                    if (oldRoute.Vehicles.Count > 0)
                    {
                        data = Manager <VehicleScheduleDataManager> .Current[oldRoute.Vehicles[0]];
                        data.CallDataChangedEventsForRoute(null);
                    }
                }
            }
Ejemplo n.º 17
0
 private void OnVehicleRouteChange(Vehicle vehicle, VehicleRoute oldRoute, VehicleRoute newRoute)
 {
     if (oldRoute != null && _cache.TryGetValue(oldRoute, out CacheData oldData))
     {
         oldData.OnRouteRemovedFromVehicle(vehicle, oldRoute);
     }
     if (newRoute != null && _cache.TryGetValue(newRoute, out CacheData newData))
     {
         newData.OnRouteAddedToVehicle(vehicle);
     }
     if (oldRoute?.Vehicles.Count == 0)
     {
         OnRemoveRoute(oldRoute);
     }
 }
        // GET: VehicleRoutes/Edit/5
        public ActionResult Edit(int?id)
        {
            if (id == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }
            VehicleRoute vehicleRoute = db.VehicleRoutes.Find(id);

            if (vehicleRoute == null)
            {
                return(HttpNotFound());
            }
            //ViewBag.userid = new SelectList(db.AspNetUsers, "Id", "Email", vehicleRoute.userid);
            return(View(vehicleRoute));
        }
Ejemplo n.º 19
0
        private void FindSequenceNumberOfSubRoutes(VehicleRoute vehicleRoute, Depot depot)
        {
            int indexOfDepot = vehicleRoute.SubRoutes.FindIndex(s => s.AddressOriginId == depot.Address.AddressId);

            vehicleRoute.SubRoutes[indexOfDepot].SequenceNumber = 1;
            int addressIdPreviousDestiny = vehicleRoute.SubRoutes[indexOfDepot].AddressDestinyId;
            int nextSequenceNumber       = 2;

            while (nextSequenceNumber <= vehicleRoute.SubRoutes.Count)
            {
                var nextIndex = vehicleRoute.SubRoutes.FindIndex(s => s.AddressOriginId == addressIdPreviousDestiny);
                vehicleRoute.SubRoutes[nextIndex].SequenceNumber = nextSequenceNumber;
                addressIdPreviousDestiny = vehicleRoute.SubRoutes[nextIndex].AddressDestinyId;
                nextSequenceNumber++;
            }
        }
Ejemplo n.º 20
0
        //called only when route has more than one vehicle
        public void CallDataChangedEventsForRoute(RootTask task)
        {
            VehicleRoute route = Vehicle.Route;

            if (route?.Vehicles.Count > 1)
            {
                int?taskIndex = task?.GetIndex();
                VehicleScheduleDataManager manager = Manager <VehicleScheduleDataManager> .Current;
                foreach (Vehicle vehicle in route.Vehicles.ToArray())
                {
                    RootTask localTask = taskIndex != null?vehicle.Schedule.GetTasks()[taskIndex.Value] : null;

                    manager[vehicle]?.CallDataChangedEvents(localTask);
                }
            }
        }
Ejemplo n.º 21
0
        public ResultModel Start(VehicleRoute vehicleRoute)
        {
            Vehicle vehicle = vehicleRoute.Vehicle;

            foreach (char command in vehicleRoute.Commands)
            {
                switch (command)
                {
                case (char)Commands.Move:
                    vehicle.Coordination = MoveForward(vehicle);
                    break;

                case (char)Commands.Right:
                    vehicle.Direction = TurnRight(vehicle.Direction);
                    break;

                case (char)Commands.Left:
                    vehicle.Direction = TurnLeft(vehicle.Direction);
                    break;

                default:
                    //Do nothing. I believe it is just better than throw exception if it is wrong type of command.
                    break;
                }
            }

            ResultModel result = new ResultModel();

            if (vehicle.Coordination.Xaxis <= vehicle.Coordination.MapRange[0, 0] && vehicle.Coordination.Xaxis > 0 &&
                vehicle.Coordination.Yaxis <= vehicle.Coordination.MapRange[0, 1] && vehicle.Coordination.Yaxis > 0)
            {
                result.Type    = ResultTypes.Success;
                result.Message = string.Format("{0} : {1}", Helper.GetMessage(SuccessMessages.EverythingsOkay),
                                               string.Format("{0} {1} {2}", vehicle.Coordination.Xaxis, vehicle.Coordination.Yaxis, (char)vehicle.Direction));
            }
            else
            {
                result.Type    = ResultTypes.Fail;
                result.Message = Helper.GetMessage(FailMessages.VehicleWentOffRoute);
            }

            return(result);
        }
Ejemplo n.º 22
0
        public IReadOnlyDictionary <Item, TransferData> GetRouteTaskTransfers(RootTask task, bool skipForOnlyOneVehicle = true)
        {
            if (task == null)
            {
                throw new ArgumentNullException("task");
            }
            if (!HasValidData || VehicleSchedule.Vehicle.Route != null)
            {
                TaskTransfers routeTransfers = new TaskTransfers();
                VehicleRoute  route          = VehicleSchedule.Vehicle.Route;
                if (skipForOnlyOneVehicle && route.Vehicles.Count == 1)
                {
                    return(null);
                }
                int taskIndex = task.GetIndex();
                foreach (Vehicle vehicle in route.Vehicles.ToArray())
                {
                    if (vehicle.IsEnabled)
                    {
                        VehicleScheduleData vehicleData = VehicleScheduleDataManager.Current[vehicle];
                        float?mult;
                        if (vehicleData == null || !vehicleData.Capacity.HasValidData || (mult = vehicleData.ScheduleMonthlyMultiplier) == null)
                        {
                            return(null);
                        }

                        IReadOnlyDictionary <Item, TransferData> transfers = vehicleData.Capacity.GetTransfers(vehicle.Schedule.GetTasks()[taskIndex]);
                        if (transfers != null)
                        {
                            routeTransfers.Add(transfers, mult, vehicleData.ScheduleAvereageDuration.Estimated);
                        }
                        else
                        {
                            return(null);
                        }
                    }
                }

                return(routeTransfers.Transfers);
            }
            return(null);
        }
Ejemplo n.º 23
0
        private void OnDataChanged(RootTask task, bool notifyRoute = true)
        {
            MarkDirty();
            if (NotificationsTurnedOff)
            {
                _notificationPending = true;
                return;
            }
            _notificationPending = false;
            ownDataChanged?.Invoke(this);
            VehicleRoute route = Vehicle.Route;

            if (notifyRoute && route?.Vehicles.Count > 1)
            {
                CallDataChangedEventsForRoute(task);
            }
            else
            {
                CallDataChangedEvents(task);
            }
        }
Ejemplo n.º 24
0
 static private void Vehicle_SetRouteInternal_prf(Vehicle __instance, VehicleRoute route, out VehicleRoute __state)
 {
     __state = __instance.Route;
 }
Ejemplo n.º 25
0
 public IReadOnlyDictionary <Item, TransferData> GetRouteTaskTransfers(VehicleRoute route, RootTask task)
 {
     return(GetOrCreateCacheData(route).GetTransfers(task));
 }
Ejemplo n.º 26
0
        private CeplexParameters GetCeplexParametersVehicleRoutingProblem(Depot depot, VehicleRoute vehicleRoute)
        {
            var ceplexParametersVRP = new CeplexParameters();

            ceplexParametersVRP.QuantityOfClients = vehicleRoute.SubRoutes.Count - 1;

            ceplexParametersVRP.ClientsDemand = new double[ceplexParametersVRP.QuantityOfClients];
            for (int i = 0; i < ceplexParametersVRP.QuantityOfClients; i++)
            {
                ceplexParametersVRP.ClientsDemand[i] = vehicleRoute.SubRoutes[(i + 1)].DemandOrigin;
            }

            ceplexParametersVRP.Distance = new double[vehicleRoute.SubRoutes.Count][];
            ceplexParametersVRP.Duration = new long[vehicleRoute.SubRoutes.Count][];
            vehicleRoute.SubRoutes       = vehicleRoute.SubRoutes.OrderBy(s => s.SequenceNumber).ToList();
            for (int i = 0; i < vehicleRoute.SubRoutes.Count; i++)
            {
                ceplexParametersVRP.Distance[i] = new double[vehicleRoute.SubRoutes.Count];
                ceplexParametersVRP.Duration[i] = new long[vehicleRoute.SubRoutes.Count];
                for (int j = 0; j < vehicleRoute.SubRoutes.Count; j++)
                {
                    vehicleRoute.SubRoutes[i].AddressOrigin.indexVRPDistanceMatrix = i;
                    if (i == 0 && i != j)
                    {
                        var tupleDistanceDuration = _googleMapsRepository.GetDistanceBetweenTwoAddressesWithCache(depot.Address,
                                                                                                                  vehicleRoute.SubRoutes[j].AddressOrigin);
                        ceplexParametersVRP.Distance[i][j] = tupleDistanceDuration.Item1.Value;
                        ceplexParametersVRP.Duration[i][j] = tupleDistanceDuration.Item2;
                    }
                    else if (i != 0 && i < j && i != j)
                    {
                        var tupleDistanceDuration = _googleMapsRepository.GetDistanceBetweenTwoAddressesWithCache(
                            vehicleRoute.SubRoutes[i].AddressOrigin, vehicleRoute.SubRoutes[j].AddressDestiny);
                        ceplexParametersVRP.Distance[i][j] = tupleDistanceDuration.Item1.Value;
                        ceplexParametersVRP.Duration[i][j] = tupleDistanceDuration.Item2;
                    }
                    else if (i != 0 && i > j && i != j)
                    {
                        ceplexParametersVRP.Distance[i][j] = ceplexParametersVRP.Distance[j][i];
                        ceplexParametersVRP.Duration[i][j] = ceplexParametersVRP.Duration[j][i];
                    }
                    else
                    {
                        ceplexParametersVRP.Distance[i][j] = 0;
                        ceplexParametersVRP.Duration[i][j] = 0;
                    }
                }
            }
            return(ceplexParametersVRP);
        }
Ejemplo n.º 27
0
 public TransfersPerStationCont GetRouteTransfersPerStation(VehicleRoute route)
 {
     return(GetOrCreateCacheData(route).TransfersPerStation);
 }
Ejemplo n.º 28
0
 static private void Vehicle_SetRouteInternal_pof(Vehicle __instance, VehicleRoute route, VehicleRoute __state)
 {
     Current.OnVehicleRouteChanged(__instance, __state, route);
 }
Ejemplo n.º 29
0
        private List <VehicleRoute> GetRoutesFindedMultipleVehicleRouteProblem(Depot depot, List <DeliveryTruckTrip> fractionedScheduledTrips,
                                                                               CeplexParameters ceplexParameters, int[][][] routeMatrix)
        {
            var routes = new List <VehicleRoute>();

            for (int k = 0; k < ceplexParameters.QuantityOfVehiclesAvailable; k++)
            {
                var route = new VehicleRoute();
                route.DepotId       = depot.DepotId;
                route.DateCreation  = DateTime.Now.Date;
                route.DateScheduled = DateTime.Now.Date;
                for (int j = 0; j <= ceplexParameters.QuantityOfClients; j++)
                {
                    for (int i = 0; i <= ceplexParameters.QuantityOfClients; i++)
                    {
                        if (routeMatrix[k][j][i] == 1 && j != i && j == 0)
                        {
                            var subRoute = new SubRoute();
                            subRoute.AddressOriginId = depot.Address.AddressId;
                            subRoute.DemandOrigin    = 0;
                            var clientDestiny = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == i);
                            subRoute.DemandDestiny    = clientDestiny.QuantityProduct;
                            subRoute.AddressDestinyId = clientDestiny.Address.AddressId;
                            subRoute.Distance         = ceplexParameters.Distance[j][i];
                            subRoute.Duration         = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime();
                            subRoute.AddressOrigin    = depot.Address;
                            subRoute.AddressDestiny   = clientDestiny.Address;
                            route.SubRoutes.Add(subRoute);
                        }
                        else if (routeMatrix[k][j][i] == 1 && j != i && j > 0 && i != 0)
                        {
                            var subRoute     = new SubRoute();
                            var clientOrigin = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == j);
                            subRoute.DemandOrigin    = clientOrigin.QuantityProduct;
                            subRoute.AddressOriginId = clientOrigin.Address.AddressId;
                            var clientDestiny = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == i);
                            subRoute.DemandDestiny    = clientDestiny.QuantityProduct;
                            subRoute.AddressDestinyId = clientDestiny.Address.AddressId;
                            subRoute.Distance         = ceplexParameters.Distance[j][i];
                            subRoute.Duration         = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime();
                            subRoute.AddressOrigin    = clientOrigin.Address;
                            subRoute.AddressDestiny   = clientDestiny.Address;
                            route.SubRoutes.Add(subRoute);
                        }
                        else if (routeMatrix[k][j][i] == 1 && j != i && j > 0 && i == 0)
                        {
                            var subRoute     = new SubRoute();
                            var clientOrigin = fractionedScheduledTrips.FirstOrDefault(c => c.ColumnIndex == j);
                            subRoute.DemandOrigin     = clientOrigin.QuantityProduct;
                            subRoute.AddressOriginId  = clientOrigin.Address.AddressId;
                            subRoute.DemandDestiny    = 0;
                            subRoute.AddressDestinyId = depot.Address.AddressId;
                            subRoute.Distance         = ceplexParameters.Distance[j][i];
                            subRoute.Duration         = ceplexParameters.Duration[j][i].ConvertMinutesToDateTime();
                            subRoute.AddressOrigin    = clientOrigin.Address;
                            subRoute.AddressDestiny   = depot.Address;
                            route.SubRoutes.Add(subRoute);
                        }
                    }
                }
                if (route.SubRoutes.Count > 0)
                {
                    routes.Add(route);
                }
            }
            return(routes);
        }
Ejemplo n.º 30
0
 private void OnVehicleRouteChanged(Vehicle vehicle, VehicleRoute oldRoute, VehicleRoute newRoute)
 {
     VehicleRouteChanged?.Invoke(vehicle, oldRoute, newRoute);
 }
Ejemplo n.º 31
0
        public bool SaveVehicleRoute(Ride.Business.Objects.Employee employee, Ride.Business.Objects.Vehicles.Vehicle vehicle, Ride.Business.Objects.Routes.Route route)
        {
            try
                {
                    using (RideWCFServiceImplementation client = GetSyncClient())
                    {

                        VehicleRoute request = new VehicleRoute();
                        SaveResponse response = null;
                        string gpsGateUser = string.Empty;
                        request.UniqueID = Guid.NewGuid().ToString();
                        request.VehicleID = vehicle.VehicleID;
                        request.VehicleIDSpecified = true;
                        if (employee == null)
                            request.PersonID = 0;
                        else
                            request.PersonID = employee.PersonID;
                        request.PersonIDSpecified = true;
                        if (route == null)
                            request.RouteID = 0;
                        else
                            request.RouteID = route.RouteID;
                        request.RouteIDSpecified = true;
                        //Only get the GPS Gate User if it is required. Otherwise, just move the vehicle/route...
                        if (Config.AppSettings.Ref.ProgramSettings.RequireGPSGateForVehicleRoute)
                        {
                            gpsGateUser = Config.AppSettings.Ref.GetGPSGateUser();
                            //If we don't have a GPS Gate User, then exit out because we dont have a user to update with
                            if (string.IsNullOrEmpty(gpsGateUser))
                                return false;
                            request.GpsGateUserName = gpsGateUser;
                            response = client.SaveVehicleRoute(_rideCredential, request);

                        }
                        else
                        {
                            response = client.MoveVehicleToRouteWithoutGPSGateUser(_rideCredential, request);
                        }
                        if (response == null)
                            return false;
                        return response.Success;

                    }
                }
                catch (System.Net.WebException ex)
                {
                    Console.Write(ex.Message);
                    return false;
                }
                catch (Exception ex)
                {

                    throw ex;
                }
        }