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));
     }
 }
예제 #2
0
 /**
  * @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);
 }
예제 #3
0
 /**
  * @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));
     }
 }
예제 #5
0
 /**
  * @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();
 }