public CalcTravelRoute GetTravelRouteFromSrcLoc([NotNull] CalcLocation srcLocation,
                                                        [NotNull] CalcSite dstSite, [NotNull] TimeStep startTimeStep,
                                                        [NotNull] string personName, CalcRepo calcRepo)
        {
            CalcSite srcSite = LocationSiteLookup[srcLocation];

            if (srcSite == dstSite)
            {
                return(SameSiteRoutes[srcSite]);
            }
            //first get the routes, no matter if busy
            var devicesAtSrc   = AllMoveableDevices.Where(x => x.Currentsite == srcSite).ToList();
            var possibleRoutes = srcSite.GetAllRoutesTo(dstSite, devicesAtSrc);

            if (possibleRoutes.Count == 0)
            {
                return(null);
            }

            //check if the route is busy by calculating the duration. If busy, duration will be null
            int?            dur = null;
            CalcTravelRoute ctr = null;

            while (dur == null && possibleRoutes.Count > 0)
            {
                ctr = possibleRoutes[calcRepo.Rnd.Next(possibleRoutes.Count)];
                possibleRoutes.Remove(ctr);
                dur = ctr.GetDuration(startTimeStep, personName, AllMoveableDevices);
            }

            if (dur == null)
            {
                ctr = null;
            }

            return(ctr);
        }
 public void AddVehicleDepotDevice([NotNull] CalcTransportationDevice dev)
 {
     VehicleDepot.Add(dev);
     AllMoveableDevices.Add(dev);
 }