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)); } }
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()); $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())); $this->Set('ICalUrl', sprintf("export/%s?%s=%s", Pages::CALENDAR_EXPORT, 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); }
/** * @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(); }
/** * @see IReservationValidationRule::Validate() * * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $r = Resources::GetInstance(); $resources = $reservationSeries->AllResources(); foreach ($resources as $resource) { if ($resource->HasMaxNotice()) { $maxStartDate = Date::Now()->ApplyDifference($resource->GetMaxNotice()->Interval()); /* @var $instance Reservation */ foreach ($this->GetInstances($reservationSeries) as $instance) { if ($instance->StartDate()->GreaterThan($maxStartDate)) { return new ReservationRuleResult(false, $r->GetString("MaxNoticeError", $maxStartDate->ToTimezone(ServiceLocator::GetServer()->GetUserSession()->Timezone)->Format($r->GeneralDateTimeFormat()))); } } } } return new ReservationRuleResult(); }
/** * @see IReservationValidationRule::Validate() * * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $r = Resources::GetInstance(); $resources = $reservationSeries->AllResources(); foreach ($resources as $resource) { if ($resource->HasMinLength()) { $minDuration = $resource->GetMinLength()->Interval(); $start = $reservationSeries->CurrentInstance()->StartDate(); $end = $reservationSeries->CurrentInstance()->EndDate(); $minEnd = $start->ApplyDifference($minDuration); if ($end->LessThan($minEnd)) { return new ReservationRuleResult(false, $r->GetString("MinDurationError", $minDuration)); } } } return new ReservationRuleResult(); }
/** * @see IReservationValidationRule::Validate() * * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $r = Resources::GetInstance(); $resources = $reservationSeries->AllResources(); foreach ($resources as $resource) { if ($resource->HasMinNotice()) { $minStartDate = Date::Now()->ApplyDifference($resource->GetMinNotice()->Interval()); /* @var $instance Reservation */ foreach ($reservationSeries->Instances() as $instance) { if ($instance->StartDate()->LessThan($minStartDate)) { return new ReservationRuleResult(false, $r->GetString("MinNoticeError", $minStartDate->Format($r->GeneralDateTimeFormat()))); } } } } return new ReservationRuleResult(); }
/** * @param ReservationSeries $reservationSeries * @return ReservationRuleResult */ public function Validate($reservationSeries) { $errorMessage = new StringBuilder(); foreach ($reservationSeries->AllResources() as $resource) { if (!$resource->HasMaxParticipants()) { continue; } foreach ($reservationSeries->Instances() as $instance) { $numberOfParticipants = count($instance->Participants()); Log::Debug('ResourceParticipationRule Resource=%s,InstanceId=%s,MaxParticipants=%s,CurrentParticipants=%s', $resource->GetName(), $instance->ReservationId(), $resource->GetMaxParticipants(), $numberOfParticipants); if ($numberOfParticipants > $resource->GetMaxParticipants()) { $errorMessage->AppendLine(Resources::GetInstance()->GetString('MaxParticipantsError', array($resource->GetName(), $resource->GetMaxParticipants()))); continue; } } } $message = $errorMessage->ToString(); if (strlen($message) > 0) { return new ReservationRuleResult(false, $message); } return new ReservationRuleResult(); }
/** * @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(); }
/** * @param array|ReservationItemView[] $reservationsWithinRange * @param ReservationSeries $series * @param string $timezone * @throws QuotaExceededException */ private function CheckAll($reservationsWithinRange, $series, $timezone) { $toBeSkipped = array(); /** @var $instance Reservation */ foreach ($series->Instances() as $instance) { $toBeSkipped[$instance->ReferenceNumber()] = true; if (!is_null($this->scheduleId)) { foreach ($series->AllResources() as $resource) { // add each resource instance if ($this->AppliesToResource($resource->GetResourceId())) { $this->AddInstance($instance, $timezone); } } } else { $this->AddInstance($instance, $timezone); } } /** @var $reservation ReservationItemView */ foreach ($reservationsWithinRange as $reservation) { if (!empty($this->resourceId)) { $applies = $this->AppliesToResource($reservation->ResourceId) && $series->ContainsResource($reservation->ResourceId); } else { $applies = $series->ContainsResource($reservation->ResourceId) || $series->ScheduleId() == $reservation->ScheduleId; } if ($applies && !array_key_exists($reservation->ReferenceNumber, $toBeSkipped) && !$this->willBeDeleted($series, $reservation->ReservationId)) { $this->AddExisting($reservation, $timezone); } } }