コード例 #1
0
 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
 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);
 }
コード例 #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();
 }
コード例 #4
0
 /**
  * @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();
 }
コード例 #5
0
 /**
  * @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();
 }
コード例 #6
0
 /**
  * @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();
 }
コード例 #7
0
 /**
  * @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();
 }
コード例 #8
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();
 }
コード例 #9
0
ファイル: Quota.php プロジェクト: utn-frm-si/booked
 /**
  * @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);
         }
     }
 }