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); }
/** * @name GetSchedule * @description Loads a specific schedule by id * @response ScheduleResponse * @param $scheduleId * @return void */ public function GetSchedule($scheduleId) { $schedule = $this->scheduleRepository->LoadById($scheduleId); if ($schedule != null) { $layout = $this->scheduleRepository->GetLayout($schedule->GetId(), new ScheduleLayoutFactory($this->server->GetSession()->Timezone)); $this->server->WriteResponse(new ScheduleResponse($this->server, $schedule, $layout)); } else { $this->server->WriteResponse(RestResponse::NotFound(), RestResponse::NOT_FOUND_CODE); } }
/** * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $layout = $this->repository->GetLayout($reservationSeries->Resource()->GetScheduleId(), new ScheduleLayoutFactory($this->session->Timezone)); $startDate = $reservationSeries->CurrentInstance()->StartDate(); $startPeriod = $layout->GetPeriod($startDate); $endDate = $reservationSeries->CurrentInstance()->EndDate(); $endPeriod = $layout->GetPeriod($endDate); $errors = new StringBuilder(); if ($startPeriod == null || !$startPeriod->IsReservable() || !$startPeriod->BeginDate()->Equals($startDate)) { $errors->AppendLine(Resources::GetInstance()->GetString('InvalidStartSlot')); } if ($endPeriod == null || !$endPeriod->BeginDate()->Equals($endDate)) { $errors->AppendLine(Resources::GetInstance()->GetString('InvalidEndSlot')); } $errorMessage = $errors->ToString(); return new ReservationRuleResult(strlen($errorMessage) == 0, $errorMessage); }
public function GetLayout($scheduleId, ILayoutFactory $layoutFactory) { return $this->scheduleRepository->GetLayout($scheduleId, $layoutFactory); }
/** * @param Schedule $schedule * @return IScheduleLayout */ public function GetLayout($schedule) { return $this->scheduleRepository->GetLayout($schedule->GetId(), new ScheduleLayoutFactory($schedule->GetTimezone())); }