/** ------------------------- * Build new driving orders derived from repeated driving order plan, * for a new driving order plan. * * @param RepeatedDrivingOrderPlan $drivingOrderPlan * @param mixed $status * @return mixed|void */ public function handleNewRepeatedDrivingOrder(RepeatedDrivingOrderPlan $drivingOrderPlan, $status) { /** @var RepeatedDrivingOrder $repeatedDrivingOrder */ $repeatedDrivingOrder = $drivingOrderPlan->getRepeatedDrivingOrdersAsArray()[0]; /** @var WorkingMonthRepository $workingMonthRepository */ $workingMonthRepository = $this->container->get('workingmonth_repository'); $prospectiveWorkingMonths = $workingMonthRepository->findProspectiveWorkingMonths(); /** @var WorkingMonth $workingMonth */ foreach ($prospectiveWorkingMonths as $workingMonth) { $workingDays = $workingMonth->getWorkingDays(); /** @var WorkingDay $workingDay */ foreach ($workingDays as $workingDay) { if ($drivingOrderPlan->matching($workingDay->getDate())) { /* plan range conditions satisfied */ if ($repeatedDrivingOrder->matching($workingDay->getDate())) { /* weekday condition satisfied */ $this->handleNewRepeatedDrivingOrdersForDate($drivingOrderPlan, $workingDay->getDate(), $status); } } } } }
/** * @param RepeatedDrivingOrderPlan $repeatedDrivingOrderPlan * @return DrivingOrderRegisterDTO */ public function drivingOrderPlanToRegisterDTO(RepeatedDrivingOrderPlan $repeatedDrivingOrderPlan) { $registerDTO = new DrivingOrderRegisterDTO(); /* read repeated driving order plan */ $registerDTO->id = $repeatedDrivingOrderPlan->getId(); $registerDTO->anchorDate = $repeatedDrivingOrderPlan->getAnchorDate(); $registerDTO->lookaheadaddressFrom = $this->addressAssembler->addressToAddressLookaheadDTO($repeatedDrivingOrderPlan->getRoute()->getStartAddress()); $registerDTO->lookaheadaddressTo = $this->addressAssembler->addressToAddressLookaheadDTO($repeatedDrivingOrderPlan->getRoute()->getTargetAddress()); $registerDTO->zoneName = $repeatedDrivingOrderPlan->getZone()->getName(); $registerDTO->isRepeated = true; $registerDTO->withHolidays = $repeatedDrivingOrderPlan->getWithHolidays(); $registerDTO->compagnion = $repeatedDrivingOrderPlan->getCompanion(); $registerDTO->memo = $repeatedDrivingOrderPlan->getMemo(); $registerDTO->additionalTime = $repeatedDrivingOrderPlan->getAdditionalTime(); $registerDTO->endDate = $repeatedDrivingOrderPlan->getEndingDate() != DateTimeService::getMaxDateTime() ? $repeatedDrivingOrderPlan->getEndingDate() : null; /* read repeated driving orders */ $outwardTime = null; $returnTime = null; $repeatedOrders = $repeatedDrivingOrderPlan->getRepeatedDrivingOrdersAsArray(); /** @var RepeatedDrivingOrder $repeatedOrder*/ foreach ($repeatedOrders as $repeatedOrder) { /* normally there should be one or two rows in this array */ $registerDTO->weekday = $repeatedOrder->getWeekday(); $direction = $repeatedOrder->getDirection(); if ($direction === RepeatedDrivingOrder::OUTWARD_DIRECTION) { $outwardTime = $repeatedOrder->getPickUpTime(); } elseif ($direction === RepeatedDrivingOrder::RETURN_DIRECTION) { $returnTime = $repeatedOrder->getPickUpTime(); } $registerDTO->repeatedOrderTime = $this->createOrUpdateOrderTimeDTO($outwardTime, $returnTime, $registerDTO->orderTime); } return $registerDTO; }