public function Bind(IReservationComponentInitializer $initializer)
 {
     $timezone = $initializer->GetTimezone();
     $reservationDate = $initializer->GetReservationDate();
     $requestedEndDate = $initializer->GetEndDate();
     $requestedStartDate = $initializer->GetStartDate();
     $requestedScheduleId = $initializer->GetScheduleId();
     $requestedDate = $reservationDate == null ? Date::Now()->ToTimezone($timezone) : $reservationDate->ToTimezone($timezone);
     $startDate = $requestedStartDate == null ? $requestedDate : $requestedStartDate->ToTimezone($timezone);
     $endDate = $requestedEndDate == null ? $requestedDate : $requestedEndDate->ToTimezone($timezone);
     if ($initializer->IsNew()) {
         $resource = $initializer->PrimaryResource();
         if ($resource->GetMinimumLength() != null && !$resource->GetMinimumLength()->Interval()->IsNull()) {
             $endDate = $startDate->ApplyDifference($resource->GetMinimumLength()->Interval());
         }
     }
     $layout = $this->scheduleRepository->GetLayout($requestedScheduleId, new ReservationLayoutFactory($timezone));
     $startPeriods = $layout->GetLayout($startDate);
     if (count($startPeriods) > 1 && $startPeriods[0]->Begin()->Compare($startPeriods[1]->Begin()) > 0) {
         $period = array_shift($startPeriods);
         $startPeriods[] = $period;
     }
     $endPeriods = $layout->GetLayout($endDate);
     $initializer->SetDates($startDate, $endDate, $startPeriods, $endPeriods);
     $hideRecurrence = !$initializer->CurrentUser()->IsAdmin && Configuration::Instance()->GetSectionKey(ConfigSection::RESERVATION, ConfigKeys::RESERVATION_PREVENT_RECURRENCE, new BooleanConverter());
     $initializer->HideRecurrence($hideRecurrence);
 }