/** * @name GetAvailability * @description Returns resource availability for the requested time. "availableAt" and "availableUntil" will include availability through the next 7 days * Optional query string parameter: dateTime. If no dateTime is requested the current datetime will be used. * @response ResourcesAvailabilityResponse * @return void */ public function GetAvailability($resourceId = null) { $dateQueryString = $this->server->GetQueryString(WebServiceQueryStringKeys::DATE_TIME); if (!empty($dateQueryString)) { $requestedTime = WebServiceDate::GetDate($dateQueryString, $this->server->GetSession()); } else { $requestedTime = Date::Now(); } if (empty($resourceId)) { $resources = $this->resourceRepository->GetResourceList(); } else { $resources[] = $this->resourceRepository->LoadById($resourceId); } $lastDateSearched = $requestedTime->AddDays(30); $reservations = $this->GetReservations($this->reservationRepository->GetReservationList($requestedTime, $lastDateSearched, null, null, null, $resourceId)); $resourceAvailability = array(); foreach ($resources as $resource) { $reservation = $this->GetOngoingReservation($resource, $reservations); if ($reservation != null) { $lastReservationBeforeOpening = $this->GetLastReservationBeforeAnOpening($resource, $reservations); if ($lastReservationBeforeOpening == null) { $lastReservationBeforeOpening = $reservation; } $resourceAvailability[] = new ResourceAvailabilityResponse($this->server, $resource, $lastReservationBeforeOpening, null, $lastReservationBeforeOpening->EndDate, $lastDateSearched); } else { $resourceId = $resource->GetId(); if (array_key_exists($resourceId, $reservations)) { $resourceAvailability[] = new ResourceAvailabilityResponse($this->server, $resource, null, $reservations[$resourceId][0], null, $lastDateSearched); } else { $resourceAvailability[] = new ResourceAvailabilityResponse($this->server, $resource, null, null, null, $lastDateSearched); } } } $this->server->WriteResponse(new ResourcesAvailabilityResponse($this->server, $resourceAvailability)); }
private function GetDate($queryStringKey) { $dateQueryString = $this->server->GetQueryString($queryStringKey); if (empty($dateQueryString)) { return null; } return WebServiceDate::GetDate($dateQueryString, $this->server->GetSession()); }
/** * @return Date */ private function GetModifiedSinceDate() { $dateQueryString = $this->server->GetQueryString(WebServiceQueryStringKeys::MODIFIED_DATE); if (empty($dateQueryString)) { return Date::Min(); } else { return WebServiceDate::GetDate($dateQueryString, $this->server->GetSession()); } }
/** * @param CustomAttribute[] $attributes * @return UserFilter */ private function GetUserFilter($attributes) { $attributeFilters = array(); foreach ($attributes as $attribute) { $attributeValue = $this->server->GetQueryString(WebServiceQueryStringKeys::ATTRIBUTE_PREFIX . $attribute->Id()); if (!empty($attributeValue)) { $attributeFilters[] = new Attribute($attribute, $attributeValue); } } $filter = new UserFilter($this->server->GetQueryString(WebServiceQueryStringKeys::USERNAME), $this->server->GetQueryString(WebServiceQueryStringKeys::EMAIL), $this->server->GetQueryString(WebServiceQueryStringKeys::FIRST_NAME), $this->server->GetQueryString(WebServiceQueryStringKeys::LAST_NAME), $this->server->GetQueryString(WebServiceQueryStringKeys::PHONE), $this->server->GetQueryString(WebServiceQueryStringKeys::ORGANIZATION), $this->server->GetQueryString(WebServiceQueryStringKeys::POSITION), $attributeFilters); return $filter; }
/** * @name DeleteReservation * @description Deletes an existing reservation. * Pass an optional updateScope query string parameter to restrict changes. Possible values for updateScope are this|full|future * @response DeletedResponse * @param string $referenceNumber * @return void */ public function Delete($referenceNumber) { Log::Debug('ReservationWriteWebService.Delete() User=%s, ReferenceNumber=%s', $this->server->GetSession()->UserId, $referenceNumber); $updateScope = $this->server->GetQueryString(WebServiceQueryStringKeys::UPDATE_SCOPE); $result = $this->controller->Delete($this->server->GetSession(), $referenceNumber, $updateScope); if ($result->WasSuccessful()) { Log::Debug('ReservationWriteWebService.Delete() - Reservation Deleted. ReferenceNumber=%s', $result->CreatedReferenceNumber()); $this->server->WriteResponse(new DeletedResponse(), RestResponse::OK_CODE); } else { Log::Debug('ReservationWriteWebService.Delete() - Reservation Failed.'); $this->server->WriteResponse(new FailedResponse($this->server, $result->Errors()), RestResponse::BAD_REQUEST_CODE); } }
/** * @name GetAvailability * @description Returns resource availability for the requested time. "availableAt" and "availableUntil" will include availability through the next 7 days * Optional query string parameter: dateTime. If no dateTime is requested the current datetime will be used. * @response ResourcesAvailabilityResponse * @return void */ public function GetAvailability($resourceId = null) { $dateQueryString = $this->server->GetQueryString(WebServiceQueryStringKeys::DATE_TIME); if (!empty($dateQueryString)) { $requestedTime = WebServiceDate::GetDate($dateQueryString, $this->server->GetSession()); } else { $requestedTime = Date::Now(); } if (empty($resourceId)) { $resources = $this->resourceRepository->GetResourceList(); } else { $resources[] = $this->resourceRepository->LoadById($resourceId); } $startDate = $requestedTime->AddDays(-1); $endDate = $requestedTime->AddDays(7); $reservations = $this->reservationRepository->GetReservationList($startDate, $endDate, null, null, null, $resourceId); $indexedReservations = array(); foreach ($reservations as $reservation) { $key = $reservation->GetResourceId(); if (!array_key_exists($key, $indexedReservations)) { $indexedReservations[$key] = array(); } $indexedReservations[$key][] = $reservation; } $resourceAvailability = array(); foreach ($resources as $resource) { $resourceId = $resource->GetResourceId(); $conflict = null; $nextReservation = null; $opening = null; if (array_key_exists($resourceId, $indexedReservations)) { $resourceReservations = $indexedReservations[$resourceId]; /** @var $reservation ReservationItemView */ foreach ($resourceReservations as $i => $reservation) { if ($conflict == null && $reservation->BufferedTimes()->Contains($requestedTime, false)) { $conflict = $reservation; } if ($nextReservation == null && $reservation->StartDate->GreaterThan($requestedTime)) { $nextReservation = $reservation; } } $opening = $this->GetOpeningAfter($resourceReservations, $requestedTime); if ($opening == null && $conflict != null) { $opening = $conflict->BufferedTimes()->GetEnd(); } } $resourceAvailability[] = new ResourceAvailabilityResponse($this->server, $resource, $conflict, $nextReservation, $opening, $endDate); } $this->server->WriteResponse(new ResourcesAvailabilityResponse($this->server, $resourceAvailability)); }
/** * @return int|null */ private function GetScheduleId() { return $this->server->GetQueryString(WebServiceQueryStringKeys::SCHEDULE_ID); }