/**
  * @param $weekday
  * @param \DateTime $pickUpTime
  * @param null $direction
  * @return RepeatedDrivingOrder
  */
 public static function registerRepeatedDrivingOrder($weekday, \DateTime $pickUpTime, $direction = null)
 {
     $correctedDirection = null !== $direction ? $direction : self::OUTWARD_DIRECTION;
     $rdOrder = new RepeatedDrivingOrder();
     $rdOrder->setWeekday($weekday);
     $rdOrder->setPickUpTime($pickUpTime);
     $rdOrder->setDirection($correctedDirection);
     return $rdOrder;
 }
 /**
  * Create repeating driving orders from the DTO,
  * if applicable set validation errors.
  *
  * @param DrivingOrderRegisterDTO $registerDTO
  * @param array $errors
  * @return array|ArrayCollection
  */
 public function registerDTOtoRepeatedDrivingOrders(DrivingOrderRegisterDTO $registerDTO, &$errors)
 {
     $repeatedDrivingOrders = new ArrayCollection();
     if (!empty($registerDTO->repeatedOrderTime->outwardTime)) {
         $outwardTime = $registerDTO->repeatedOrderTime->outwardTime;
         $repeatedDrivingOrders[] = RepeatedDrivingOrder::registerRepeatedDrivingOrder($registerDTO->weekday, $outwardTime, RepeatedDrivingOrder::OUTWARD_DIRECTION);
     }
     if (!empty($registerDTO->repeatedOrderTime->returnTime)) {
         $returnTime = $registerDTO->repeatedOrderTime->returnTime;
         $repeatedDrivingOrders[] = RepeatedDrivingOrder::registerRepeatedDrivingOrder($registerDTO->weekday, $returnTime, RepeatedDrivingOrder::RETURN_DIRECTION);
     }
     if (count($repeatedDrivingOrders) < 1) {
         $errors[] = 'drivingorder.form.error.empty';
     } elseif (isset($outwardTime) and isset($returnTime)) {
         if ($outwardTime >= $returnTime) {
             $errors[] = 'drivingorder.form.error.ascending';
         }
     }
     $now = new \DateTime();
     $now->setTime(0, 0, 0);
     if ($registerDTO->anchorDate < $now) {
         $errors[] = 'drivingorder.form.error.anchorDate';
     }
     if ($registerDTO->additionalTime < 0) {
         $errors[] = 'drivingorder.form.error.extraMinutes';
     }
     if ($registerDTO->compagnion < 0) {
         $errors[] = 'drivingorder.form.error.companions';
     }
     return $repeatedDrivingOrders;
 }
 /** -------------------------
  * Build one driving order for one working day.
  *
  * @param RepeatedDrivingOrderPlan $drivingOrderPlan
  * @param RepeatedDrivingOrder $repeatedDrivingOrder
  * @param \DateTime $day
  * @param mixed $status
  * @return DrivingOrder
  */
 protected function handleNewDrivingOrderForDate(RepeatedDrivingOrderPlan &$drivingOrderPlan, $repeatedDrivingOrder, \DateTime $day, $status)
 {
     $drivingOrder = DrivingOrder::registerDrivingOrder($drivingOrderPlan->getPassenger(), $day, $repeatedDrivingOrder->getPickUpTime(), $drivingOrderPlan->getCompanion(), $drivingOrderPlan->getMemo(), $status, false, $drivingOrderPlan->getAdditionalTime());
     $drivingOrder->assignZone($drivingOrderPlan->getZone());
     $drivingOrder->assignRepeatedDrivingOrderPlan($drivingOrderPlan);
     $drivingOrder->assignRepeatedDrivingOrder($repeatedDrivingOrder);
     $drivingOrderPlan->assignDrivingOrder($drivingOrder);
     return $drivingOrder;
 }