/** * HSR code: replace with checkRideFeasibility * todo upgrade this to be exact and supply suggestions ... * @param \DateTime $dayTime * @param $direction * @param $duration * @param $additionalTime * @return bool */ public function checkFeasibility(\DateTime $dayTime, $direction, $duration, $additionalTime = 0) { $dispoManagement = $this->container->get('tixi_app.dispomanagement'); $shift = $dispoManagement->getResponsibleShiftForDayAndTime($dayTime); if ($shift === null) { return false; // not yet planned } $day = $shift->getDate(); $drivingPools = $shift->getDrivingPoolsAsArray(); $drivingMissions = $dispoManagement->getDrivingMissionsInShift($shift); $feasibleNode = RideNode::registerFeasibleRide($dayTime, $direction, $duration, $additionalTime); $rideStrategy = new RideStrategyTimeWindow(); $rideConfigurator = new ConfigurationBuilder($drivingMissions, $drivingPools, $rideStrategy); $rideConfigurator->createConfigurationFromExistingMissions(); //ride configuration with factor of all nodes (change all first entries once) and the same amount for shuffling $rideConfiguration = $rideConfigurator->buildConfiguration(); //already not feasible nodes in time if ($rideConfiguration->hasNotFeasibleNodes()) { return false; } //analyze configuration with an feasibleRide object if its fit $rideAnalyzer = new ConfigurationAnalyzer($rideConfiguration); $isFeasible = $rideAnalyzer->checkIfNodeIsFeasibleInConfiguration($feasibleNode); return $isFeasible; }