Пример #1
0
 /**
  * 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;
 }