Beispiel #1
0
 /**
  * @param Rate $rate
  * @param null $datePaxData
  * @return null|DatePaxData
  */
 public function setupDatePaxData(Rate $rate, $datePaxData = null)
 {
     $newDatePax = false;
     if ($datePaxData === null) {
         $newDatePax = true;
     }
     if (!$datePaxData) {
         $datePaxData = new DatePaxData();
     } else {
         $datePaxData = clone $datePaxData;
     }
     $initialLength = $datePaxData->getNbNights();
     $minLength = max(1, $rate->getNbNightsMin());
     $newStartdate = new \DateTime(sprintf('+ %s days', $rate->getRestriction()));
     if ($rate->isEarlyBooking() && $rate->getRestriction() && ($newDatePax || $datePaxData->minDate < $newStartdate)) {
         $datePaxData->minDate = $newStartdate;
     }
     $startingDate = clone $datePaxData->startingDate;
     $minDate = clone $datePaxData->minDate;
     if (($excludedDays = $rate->getExcludedArrivalDays()) && in_array($minDate->format('w'), $excludedDays)) {
         do {
             $minDate->add(new \DateInterval('P1D'));
         } while (in_array($minDate->format('w'), $excludedDays));
     }
     $datePaxData->minDate = $minDate;
     if (!$minDate) {
         $datePaxData->minDate = $minDate = new \DateTime();
     }
     if ($datePaxData->startingDate < $datePaxData->minDate) {
         $datePaxData->startingDate = $datePaxData->minDate;
     }
     /** @var \DateTime $endDate */
     if ($startingDate < $minDate) {
         $endDate = clone $minDate;
     } else {
         $endDate = clone $startingDate;
     }
     $datePaxData->endingDate = $endDate->add(new \DateInterval(sprintf('P%sD', max($initialLength, $minLength))));
     return $datePaxData;
 }