/** * Get pick up date time from a driving mission, which may or may not be * assigned to a working day or shift. * * @param DrivingMission $drivingMission * @return \DateTime local time */ private function getPickUpDateTime(DrivingMission $drivingMission) { /** @var DateTimeService $timeService */ $timeService = $this->container->get('tixi_api.datetimeservice'); /** @var DrivingOrder $drivingOrder */ $drivingOrder = $drivingMission->getDrivingOrders()[0]; $pickUpDate = $timeService->convertToLocalDateTime($drivingOrder->getPickUpDate()); $localMinutes = $drivingMission->getServiceMinuteOfDay(); $localHours = intval($localMinutes / 60); $localMinutes = $localMinutes - $localHours * 60; $pickUpDate->setTime($localHours, $localMinutes); return $pickUpDate; }
/** * passenger ride, represents necessary details of a ordered ride * @param DrivingMission $drivingMission * @param Address $startAddress * @param Address $endAddress * @return RideNode */ public static function registerPassengerRide(DrivingMission $drivingMission, Address $startAddress, Address $endAddress) { $ride = new RideNode(self::RIDE_PASSENGER); $ride->drivingMission = $drivingMission; $ride->duration = $drivingMission->getServiceDuration(); // todo check if passenger.extraMinutes are included here $ride->distance = $drivingMission->getServiceDistance(); $ride->startMinute = $drivingMission->getServiceMinuteOfDay(); $ride->endMinute = $drivingMission->getServiceMinuteOfDay() + $drivingMission->getServiceDuration(); //fill amount of passenger with or without wheelchair foreach ($drivingMission->getDrivingOrders() as $order) { /**@var $order DrivingOrder */ $passenger = $order->getPassenger(); if ($passenger->getIsInWheelChair()) { $ride->wheelChairs++; } else { $ride->passengers++; } //add additional companion passenger $ride->passengers += $order->getCompanion(); foreach ($passenger->getContradictVehicleCategories() as $contradict) { $ride->contradictingVehicleCategories[$contradict->getId()] = $contradict; } } $ride->startAddress = $startAddress; $ride->targetAddress = $endAddress; return $ride; }
/** * Set DTO for one single driving mission (shared ride) * * @param DailyPlanEditMissionDTO $missionDTO * @param DrivingMission $drivingMission * @param Vehicle $vehicle */ private function setSharedRideDTO(DailyPlanEditMissionDTO $missionDTO, DrivingMission $drivingMission, Vehicle $vehicle = null) { $missionDTO->isSharedRide = self::YES; /** @var DrivingOrder $drivingOrder */ $drivingOrder = $drivingMission->getDrivingOrders()[0]; /** @var Route $route */ $route = $drivingOrder->getRoute(); // todo: upgrade the following shared ride placeholders ... $missionDTO->missionName = substr($route->getStartAddress()->getCity(), 0, 3) . '+++'; $missionDTO->serviceTitle = 'Shared ride (work in progress)...'; $missionDTO->isLongDistance = self::NO; $missionDTO->hasWheelChair = self::NO; $missionDTO->hasErrorMessage = self::NO; }
/** * 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); }