/** * @param integer $availableMinutes * @param Address $startAddress * @param Address $endAddress * @return bool */ private function isFeasibleEmptyRide($availableMinutes, Address $startAddress, Address $endAddress) { if (null !== $this->routeManagement) { /** @var Route $route */ $route = $this->routeManagement->getRouteFromAddresses($startAddress, $endAddress); if ($availableMinutes >= $route->getDurationInMinutes() + DispositionVariables::ARRIVAL_BEFORE_PICKUP) { return true; // time to spare ... } return false; // too far to cope ... } return false; // can't check feasibility ... }
/** * @param DrivingOrderRegisterDTO $registerDTO * @param Passenger $passenger * @param array $errors * @return RepeatedDrivingOrderPlan */ public function registerDTOtoNewDrivingOrderPlan(DrivingOrderRegisterDTO $registerDTO, Passenger $passenger, &$errors) { /** @var Address $fromAddress */ $fromAddress = $this->addressAssembler->addressLookaheadDTOtoAddress($registerDTO->lookaheadaddressFrom); /** @var Address $toAddress */ $toAddress = $this->addressAssembler->addressLookaheadDTOtoAddress($registerDTO->lookaheadaddressTo); /** @var Zone $zone */ $zone = $this->zonePlanManagement->getZoneWithHighestPriorityForCities(array($fromAddress->getCity(), $toAddress->getCity())); if (null == $zone) { $errors[] = 'drivingorder.form.error.zone'; } if ($zone->isUnclassified()) { $errors[] = 'repeateddrivingorder.form.error.longDistance'; } $route = $this->routeManagement->getRouteFromAddresses($fromAddress, $toAddress); $drivingOrderPlan = RepeatedDrivingOrderPlan::registerRepeatedDrivingOrderPlan($registerDTO->anchorDate, $registerDTO->withHolidays, $registerDTO->compagnion, $registerDTO->endDate, $registerDTO->memo, $registerDTO->additionalTime); $drivingOrderPlan->assignPassenger($passenger); $drivingOrderPlan->assignRoute($route); $drivingOrderPlan->assignZone($zone); $passenger->assignRepeatedDrivingOrderPlan($drivingOrderPlan); return $drivingOrderPlan; }
/** ------------------------- * Register one driving order (one way: outbound or return) * * @param DrivingOrderRegisterDTO $registerDTO * @param Passenger $passenger * @param $direction * @param mixed $status * @param array $errors * @return DrivingOrder|null * @throws Exception */ protected function registerDtoToDrivingOrder(DrivingOrderRegisterDTO $registerDTO, Passenger $passenger, $direction, $status, &$errors) { /** @var Address $fromAddress */ $fromAddress = $this->addressAssembler->addressLookaheadDTOtoAddress($registerDTO->lookaheadaddressFrom); /** @var Address $toAddress */ $toAddress = $this->addressAssembler->addressLookaheadDTOtoAddress($registerDTO->lookaheadaddressTo); if ($fromAddress->getId() === $toAddress->getId() or null === $fromAddress or null === $toAddress) { $errors[] = 'drivingorder.form.error.illegalRoute'; return null; } /** @var Zone $zone */ $zone = $this->zonePlanManagement->getZoneWithHighestPriorityForCities(array($fromAddress->getCity(), $toAddress->getCity())); if (null == $zone) { $errors[] = 'drivingorder.form.error.zone'; return null; } /** @var Route $route */ $route = null; $pickupTime = null; try { if ($direction === self::OUTWARD_DIRECTION) { $pickupTime = $registerDTO->orderTime->outwardTime; $route = $this->routeManagement->getRouteFromAddresses($fromAddress, $toAddress); } elseif ($direction === self::RETURN_DIRECTION) { $pickupTime = $registerDTO->orderTime->returnTime; $route = $this->routeManagement->getRouteFromAddresses($toAddress, $fromAddress); } else { $errors[] = 'drivingorder.form.error.unknown'; } } catch (Exception $e) { $errors[] = 'drivingorder.form.error.routingError'; return null; } if (null === $route or null === $pickupTime) { $errors[] = 'drivingorder.form.error.routingError'; $this->logger->error('Driving order: routing error (' . "Direction => {$direction}, " . "From => " . $fromAddress->getStreet() . ' ' . $fromAddress->getCity() . ', ' . "To => " . $toAddress->getStreet() . ', ' . $toAddress->getCity() . ')'); return null; } else { $drivingOrder = DrivingOrder::registerDrivingOrder($passenger, $registerDTO->anchorDate, $pickupTime, $registerDTO->compagnion, $registerDTO->memo, $status, false, $registerDTO->additionalTime); $drivingOrder->assignRoute($route); $drivingOrder->assignZone($zone); $passenger->assignDrivingOrder($drivingOrder); return $drivingOrder; } return null; }