/** * creates an array with RideNodes according to a drivingMission * with missionId as arrayKey * * @param DrivingMission $drivingMission * @return RideNode */ public function createRideNodeFromDrivingMission(DrivingMission $drivingMission) { /** * if DrivingMission got no elements in ServiceOrder => singleOrder * if elements exist => multiOrder */ if (empty($drivingMission->getServiceOrder())) { /**@var $order DrivingOrder */ $order = $drivingMission->getDrivingOrders()->first(); $startAddress = $order->getRoute()->getStartAddress(); $targetAddress = $order->getRoute()->getTargetAddress(); } else { $sort = $drivingMission->getServiceOrder(); $first = reset($sort); $last = count($sort); /**@var $firstOrder DrivingOrder */ $firstOrder = $drivingMission->getDrivingOrders()->get($sort[$first]); /**@var $lastOrder DrivingOrder */ $lastOrder = $drivingMission->getDrivingOrders()->get($sort[$last]); if ($drivingMission->getDirection() === DrivingMission::SAME_START) { $startAddress = $firstOrder->getRoute()->getStartAddress(); $targetAddress = $lastOrder->getRoute()->getTargetAddress(); } else { $startAddress = $firstOrder->getRoute()->getStartAddress(); $targetAddress = $firstOrder->getRoute()->getTargetAddress(); } } return RideNode::registerPassengerRide($drivingMission, $startAddress, $targetAddress); }