Пример #1
0
 /**
  * @name GetAccessory
  * @description Loads a specific accessory by id
  * @param int $accessoryId
  * @response AccessoryResponse
  * @return void
  */
 public function GetAccessory($accessoryId)
 {
     $accessory = $this->accessoryRepository->LoadById($accessoryId);
     if (empty($accessory)) {
         $this->server->WriteResponse(RestResponse::NotFound(), RestResponse::NOT_FOUND_CODE);
     } else {
         $this->server->WriteResponse(new AccessoryResponse($this->server, $accessory));
     }
 }
Пример #2
0
 public function ChangeAccessory()
 {
     $id = $this->page->GetAccessoryId();
     $name = $this->page->GetAccessoryName();
     $quantity = $this->page->GetQuantityAvailable();
     Log::Debug('Changing accessory with id %s to name %s and quantity %s', $id, $name, $quantity);
     $accessory = $this->accessoryRepository->LoadById($id);
     $accessory->SetName($name);
     $accessory->SetQuantityAvailable($quantity);
     $this->accessoryRepository->Update($accessory);
 }
Пример #3
0
 /**
  * @param ReservationSeries $reservationSeries
  * @return ReservationRuleResult
  */
 public function Validate($reservationSeries)
 {
     $conflicts = array();
     $reservationAccessories = $reservationSeries->Accessories();
     if (count($reservationAccessories) == 0) {
         // no accessories to be reserved, no need to proceed
         return new ReservationRuleResult();
     }
     /** @var AccessoryToCheck[] $accessories  */
     $accessories = array();
     foreach ($reservationAccessories as $accessory) {
         $a = $this->accessoryRepository->LoadById($accessory->AccessoryId);
         if (!$a->HasUnlimitedQuantity()) {
             $accessories[$a->GetId()] = new AccessoryToCheck($a, $accessory);
         }
     }
     if (count($accessories) == 0) {
         // no accessories with limited quantity to be reserved, no need to proceed
         return new ReservationRuleResult();
     }
     $reservations = $reservationSeries->Instances();
     /** @var Reservation $reservation */
     foreach ($reservations as $reservation) {
         Log::Debug("Checking for accessory conflicts, reference number %s", $reservation->ReferenceNumber());
         $accessoryReservations = $this->reservationRepository->GetAccessoriesWithin($reservation->Duration());
         $aggregation = new AccessoryAggregation($accessories, $reservation->Duration());
         foreach ($accessoryReservations as $accessoryReservation) {
             if ($reservation->ReferenceNumber() != $accessoryReservation->GetReferenceNumber()) {
                 $aggregation->Add($accessoryReservation);
             }
         }
         foreach ($accessories as $accessory) {
             $alreadyReserved = $aggregation->GetQuantity($accessory->GetId());
             $requested = $accessory->QuantityReserved();
             if ($requested + $alreadyReserved > $accessory->QuantityAvailable()) {
                 Log::Debug("Accessory over limit. Reference Number %s, Date %s, Quantity already reserved %s, Quantity requested: %s", $reservation->ReferenceNumber(), $reservation->Duration(), $alreadyReserved, $requested);
                 array_push($conflicts, array('name' => $accessory->GetName(), 'date' => $reservation->StartDate()));
             }
         }
     }
     $thereAreConflicts = count($conflicts) > 0;
     if ($thereAreConflicts) {
         return new ReservationRuleResult(false, $this->GetErrorString($conflicts));
     }
     return new ReservationRuleResult();
 }