private function PopulateTemplate() { $this->Set('UserName', $this->reservationOwner->FullName()); $currentInstance = $this->reservationSeries->CurrentInstance(); $this->Set('StartDate', $currentInstance->StartDate()->ToTimezone($this->timezone)); $this->Set('EndDate', $currentInstance->EndDate()->ToTimezone($this->timezone)); $this->Set('ResourceName', $this->resource->GetName()); $this->Set('Title', $this->reservationSeries->Title()); $this->Set('Description', $this->reservationSeries->Description()); $repeatDates = array(); foreach ($this->reservationSeries->Instances() as $repeated) { $repeatDates[] = $repeated->StartDate()->ToTimezone($this->timezone); } $this->Set('RequiresApproval', $this->reservationSeries->RequiresApproval()); $this->Set('RepeatDates', $repeatDates); $this->Set('ReservationUrl', Pages::RESERVATION . "?" . QueryStringKeys::REFERENCE_NUMBER . '=' . $currentInstance->ReferenceNumber()); $resourceNames = array(); foreach ($this->reservationSeries->AllResources() as $resource) { $resourceNames[] = $resource->GetName(); } $this->Set('ResourceNames', $resourceNames); $this->Set('Accessories', $this->reservationSeries->Accessories()); $attributes = $this->attributeRepository->GetByCategory(CustomAttributeCategory::RESERVATION); $attributeValues = array(); foreach ($attributes as $attribute) { $attributeValues[] = new Attribute($attribute, $this->reservationSeries->GetAttributeValue($attribute->Id())); } $this->Set('Attributes', $attributeValues); $bookedBy = $this->reservationSeries->BookedBy(); if ($bookedBy != null && $bookedBy->UserId != $this->reservationOwner->Id()) { $this->Set('CreatedBy', new FullName($bookedBy->FirstName, $bookedBy->LastName)); } }
/** * @param ReservationSeries $reservation * @return ReservationRuleResult */ public function Validate($reservation) { $reservation->UserId(); $permissionService = $this->permissionServiceFactory->GetPermissionService(); $resourceIds = $reservation->AllResourceIds(); foreach ($resourceIds as $resourceId) { if (!$permissionService->CanAccessResource(new ReservationResource($resourceId), $reservation->BookedBy())) { return new ReservationRuleResult(false, Resources::GetInstance()->GetString('NoResourcePermission')); } } return new ReservationRuleResult(true); }
/** * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ function Validate($reservationSeries) { $status = ReservationStatus::Created; /** @var BookableResource $resource */ foreach ($reservationSeries->AllResources() as $resource) { if ($resource->GetRequiresApproval()) { if (!$this->authorizationService->CanApproveForResource($reservationSeries->BookedBy(), $resource)) { $status = ReservationStatus::Pending; break; } } } $reservationSeries->SetStatusId($status); return new ReservationRuleResult(); }
protected function PopulateTemplate() { $currentInstance = $this->reservationSeries->CurrentInstance(); $this->Set('UserName', $this->reservationOwner->FullName()); $this->Set('StartDate', $currentInstance->StartDate()->ToTimezone($this->timezone)); $this->Set('EndDate', $currentInstance->EndDate()->ToTimezone($this->timezone)); $this->Set('ResourceName', $this->reservationSeries->Resource()->GetName()); $img = $this->reservationSeries->Resource()->GetImage(); if (!empty($img)) { $this->Set('ResourceImage', $this->GetFullImagePath($img)); } $this->Set('Title', $this->reservationSeries->Title()); $this->Set('Description', $this->reservationSeries->Description()); $repeatDates = array(); if ($this->reservationSeries->IsRecurring()) { foreach ($this->reservationSeries->Instances() as $repeated) { $repeatDates[] = $repeated->StartDate()->ToTimezone($this->timezone); } } $this->Set('RepeatDates', $repeatDates); $this->Set('RequiresApproval', $this->reservationSeries->RequiresApproval()); $this->Set('ReservationUrl', sprintf("%s?%s=%s", Pages::RESERVATION, QueryStringKeys::REFERENCE_NUMBER, $currentInstance->ReferenceNumber())); $icalUrl = sprintf("export/%s?%s=%s", Pages::CALENDAR_EXPORT, QueryStringKeys::REFERENCE_NUMBER, $currentInstance->ReferenceNumber()); $this->Set('ICalUrl', $icalUrl); $resourceNames = array(); foreach ($this->reservationSeries->AllResources() as $resource) { $resourceNames[] = $resource->GetName(); } $this->Set('ResourceNames', $resourceNames); $this->Set('Accessories', $this->reservationSeries->Accessories()); $attributes = $this->attributeRepository->GetByCategory(CustomAttributeCategory::RESERVATION); $attributeValues = array(); foreach ($attributes as $attribute) { $attributeValues[] = new Attribute($attribute, $this->reservationSeries->GetAttributeValue($attribute->Id())); } $this->Set('Attributes', $attributeValues); $bookedBy = $this->reservationSeries->BookedBy(); if ($bookedBy != null && $bookedBy->UserId != $this->reservationOwner->Id()) { $this->Set('CreatedBy', new FullName($bookedBy->FirstName, $bookedBy->LastName)); } }
/** * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $conflicts = array(); $reservations = $reservationSeries->Instances(); $bufferTime = $reservationSeries->MaxBufferTime(); $keyedResources = array(); foreach ($reservationSeries->AllResources() as $resource) { $keyedResources[$resource->GetId()] = $resource; } /** @var Reservation $reservation */ foreach ($reservations as $reservation) { Log::Debug("Checking for reservation conflicts, reference number %s", $reservation->ReferenceNumber()); $startDate = $reservation->StartDate(); $endDate = $reservation->EndDate(); if ($bufferTime != null && !$reservationSeries->BookedBy()->IsAdmin) { $startDate = $startDate->SubtractInterval($bufferTime); $endDate = $endDate->AddInterval($bufferTime); } $existingItems = $this->strategy->GetItemsBetween($startDate, $endDate); /** @var IReservedItemView $existingItem */ foreach ($existingItems as $existingItem) { if (($bufferTime == null || $reservationSeries->BookedBy()->IsAdmin) && ($existingItem->GetStartDate()->Equals($reservation->EndDate()) || $existingItem->GetEndDate()->Equals($reservation->StartDate()))) { continue; } if ($this->IsInConflict($reservation, $reservationSeries, $existingItem, $keyedResources)) { Log::Debug("Reference number %s conflicts with existing %s with id %s", $reservation->ReferenceNumber(), get_class($existingItem), $existingItem->GetId()); array_push($conflicts, $existingItem); } } } $thereAreConflicts = count($conflicts) > 0; if ($thereAreConflicts) { return new ReservationRuleResult(false, $this->GetErrorString($conflicts)); } return new ReservationRuleResult(); }