
Add bookable room to summit POST /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms payload time_slot_cost: required|numeric currency:required|iso_currency_code(USD,EUR) capacity:required|integer floor_id:sometimes|integer name:sometimes|string|max:255 description:sometimes|string order:sometimes|integer|min:1 update bookable room per summit PUT /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id} payload time_slot_cost: required|numeric currency:required|iso_currency_code(USD,EUR) capacity:required|integer floor_id:sometimes|integer name:sometimes|string|max:255 description:sometimes|string order:sometimes|integer|min:1 delete bookable room DELETE /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id} add attribute value to bookable room PUT /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}/attributes/{attribute_id} delete attribute value from bookable room DELETE /api/v1/summits/{id}/locations/venues/{venue_id}/bookable-rooms/{room_id}/attributes/{attribute_id} Added missing endpoints to CRUD bookable rooms attributes per summit Get all bookable rooms attribute types GET /api/v1/summits/{id}/bookable-room-attribute-types Get bookable room attribute type by id GET /api/v1/summits/{id}/bookable-room-attribute-types/{type_id} Add bookable room attribute type POST /api/v1/summits/{id}/bookable-room-attribute-types payload type [required|string] Update bookable room attribute type PUT /api/v1/summits/{id}/bookable-room-attribute-types/{type_id} payload type [required|string] delete attribute type by id DELETE /api/v1/summits/{id}/bookable-room-attribute-types/{type_id} get all attribute values by attribute type GET /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values add attribute value to attribute type POST /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values payload value [required|string] update attribute value PUT /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values/{value_id} payload value [required|string] delete attribute value by id DELETE /api/v1/summits/{id}/bookable-room-attribute-types/{type_id}/values/{value_id} refund endpoint (admin only) DELETE /api/v1/summits/{id}/bookable-rooms/{room_id}/reservations/{reservation_id}/refund payload amount [numeric|required] get all reservations by summit (admin) GET /api/v1/summits/{id}/locations/bookable-rooms/all/reservations query params page:integer|min:1 per_page:required_with:page|integer|min:1|max:100 filter: allowed filters summit_id: ['=='] room_name: ['==', '=@'] room_id: ['=='] owner_id: ['=='] status: ['=='] start_datetime: ['>', '<', '<=', '>=', '=='] end_datetime: ['>', '<', '<=', '>=', '=='] order allowed ordering id,start_datetime,end_datetime Change-Id: Ic7f6ed7defaf20b8799a7d94beb0a82103b206f0
278 lines
8.7 KiB
PHP
278 lines
8.7 KiB
PHP
<?php namespace App\Models\Foundation\Summit\Factories;
|
|
/**
|
|
* Copyright 2018 OpenStack Foundation
|
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
|
* you may not use this file except in compliance with the License.
|
|
* You may obtain a copy of the License at
|
|
* http://www.apache.org/licenses/LICENSE-2.0
|
|
* Unless required by applicable law or agreed to in writing, software
|
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
* See the License for the specific language governing permissions and
|
|
* limitations under the License.
|
|
**/
|
|
use models\exceptions\ValidationException;
|
|
use models\summit\SummitAbstractLocation;
|
|
use models\summit\SummitAirport;
|
|
use models\summit\SummitBookableVenueRoom;
|
|
use models\summit\SummitExternalLocation;
|
|
use models\summit\SummitGeoLocatedLocation;
|
|
use models\summit\SummitHotel;
|
|
use models\summit\SummitVenue;
|
|
use models\summit\SummitVenueRoom;
|
|
/**
|
|
* Class SummitLocationFactory
|
|
* @package App\Models\Foundation\Summit\Factories
|
|
*/
|
|
final class SummitLocationFactory
|
|
{
|
|
/**
|
|
* @param array $data
|
|
* @return SummitAbstractLocation|null
|
|
* @throws ValidationException
|
|
*/
|
|
public static function build(array $data){
|
|
if(!isset($data['class_name'])) throw new ValidationException("missing class_name param");
|
|
$location = null;
|
|
switch($data['class_name']){
|
|
case SummitVenue::ClassName :{
|
|
$location = self::populateSummitVenue(new SummitVenue, $data);
|
|
}
|
|
break;
|
|
case SummitExternalLocation::ClassName :{
|
|
$location = self::populateSummitExternalLocation(new SummitExternalLocation, $data);
|
|
}
|
|
break;
|
|
case SummitHotel::ClassName :{
|
|
$location = self::populateSummitHotel(new SummitHotel, $data);
|
|
}
|
|
break;
|
|
case SummitAirport::ClassName :{
|
|
$location = self::populateSummitAirport(new SummitAirport, $data);
|
|
}
|
|
break;
|
|
case SummitBookableVenueRoom::ClassName :{
|
|
$location = self::populateSummitVenueBookableRoom(new SummitBookableVenueRoom, $data);
|
|
}
|
|
break;
|
|
case SummitVenueRoom::ClassName :{
|
|
$location = self::populateSummitVenueRoom(new SummitVenueRoom, $data);
|
|
}
|
|
break;
|
|
}
|
|
return $location;
|
|
}
|
|
|
|
/**
|
|
* @param SummitAbstractLocation $location
|
|
* @param array $data
|
|
* @return SummitAbstractLocation
|
|
*/
|
|
private static function populateSummitAbstractLocation(SummitAbstractLocation $location, array $data){
|
|
if(isset($data['name']))
|
|
$location->setName(trim($data['name']));
|
|
|
|
if(isset($data['description']))
|
|
$location->setDescription(trim($data['description']));
|
|
|
|
return $location;
|
|
}
|
|
|
|
/**
|
|
* @param SummitGeoLocatedLocation $location
|
|
* @param array $data
|
|
* @return SummitGeoLocatedLocation
|
|
*/
|
|
private static function populateSummitGeoLocatedLocation(SummitGeoLocatedLocation $location, array $data){
|
|
if(isset($data['address_1']))
|
|
$location->setAddress1(trim($data['address_1']));
|
|
|
|
if(isset($data['address_2']))
|
|
$location->setAddress2(trim($data['address_2']));
|
|
|
|
if(isset($data['zip_code']))
|
|
$location->setZipCode(trim($data['zip_code']));
|
|
|
|
if(isset($data['city']))
|
|
$location->setCity(trim($data['city']));
|
|
|
|
if(isset($data['state']))
|
|
$location->setState(trim($data['state']));
|
|
|
|
if(isset($data['country']))
|
|
$location->setCountry(trim($data['country']));
|
|
|
|
if(isset($data['website_url']))
|
|
$location->setWebsiteUrl(trim($data['website_url']));
|
|
|
|
if(isset($data['lng']))
|
|
$location->setLng(trim($data['lng']));
|
|
|
|
if(isset($data['lat']))
|
|
$location->setLat(trim($data['lat']));
|
|
|
|
if(isset($data['display_on_site']))
|
|
$location->setDisplayOnSite(boolval($data['display_on_site']));
|
|
|
|
if(isset($data['details_page']))
|
|
$location->setDetailsPage(boolval($data['details_page']));
|
|
|
|
if(isset($data['location_message']))
|
|
$location->setLocationMessage(trim($data['location_message']));
|
|
|
|
return $location;
|
|
}
|
|
|
|
/**
|
|
* @param SummitVenue $venue
|
|
* @param array $data
|
|
* @return SummitVenue
|
|
*/
|
|
public static function populateSummitVenue(SummitVenue $venue, array $data){
|
|
self::populateSummitGeoLocatedLocation
|
|
(
|
|
self::populateSummitAbstractLocation($venue, $data),
|
|
$data
|
|
);
|
|
|
|
if(isset($data['is_main']))
|
|
$venue->setIsMain(boolval($data['is_main']));
|
|
|
|
return $venue;
|
|
}
|
|
|
|
/**
|
|
* @param SummitExternalLocation $external_location
|
|
* @param array $data
|
|
* @return SummitExternalLocation
|
|
*/
|
|
public static function populateSummitExternalLocation(SummitExternalLocation $external_location, array $data){
|
|
|
|
self::populateSummitGeoLocatedLocation
|
|
(
|
|
self::populateSummitAbstractLocation($external_location, $data),
|
|
$data
|
|
);
|
|
|
|
if(isset($data['capacity']))
|
|
$external_location->setCapacity(intval($data['capacity']));
|
|
|
|
return $external_location;
|
|
}
|
|
|
|
/**
|
|
* @param SummitHotel $hotel
|
|
* @param array $data
|
|
* @return SummitHotel
|
|
*/
|
|
public static function populateSummitHotel(SummitHotel $hotel, array $data){
|
|
|
|
self::populateSummitExternalLocation
|
|
(
|
|
self::populateSummitGeoLocatedLocation
|
|
(
|
|
self::populateSummitAbstractLocation($hotel, $data),
|
|
$data
|
|
),
|
|
$data
|
|
);
|
|
|
|
if(isset($data['hotel_type']))
|
|
$hotel->setHotelType(trim($data['hotel_type']));
|
|
|
|
if(isset($data['sold_out']))
|
|
$hotel->setSoldOut(boolval($data['sold_out']));
|
|
|
|
if(isset($data['booking_link']))
|
|
$hotel->setBookingLink(trim($data['booking_link']));
|
|
|
|
return $hotel;
|
|
}
|
|
|
|
/**
|
|
* @param SummitAirport $airport
|
|
* @param array $data
|
|
* @return SummitAirport
|
|
*/
|
|
public static function populateSummitAirport(SummitAirport $airport, array $data){
|
|
|
|
self::populateSummitExternalLocation
|
|
(
|
|
self::populateSummitGeoLocatedLocation
|
|
(
|
|
self::populateSummitAbstractLocation($airport, $data),
|
|
$data
|
|
),
|
|
$data
|
|
);
|
|
|
|
if(isset($data['airport_type']))
|
|
$airport->setAirportType(trim($data['airport_type']));
|
|
|
|
return $airport;
|
|
}
|
|
|
|
/**
|
|
* @param SummitVenueRoom $room
|
|
* @param array $data
|
|
* @return SummitVenueRoom
|
|
*/
|
|
public static function populateSummitVenueRoom(SummitVenueRoom $room, array $data){
|
|
|
|
self::populateSummitAbstractLocation($room, $data);
|
|
|
|
if(isset($data['capacity']))
|
|
$room->setCapacity(intval($data['capacity']));
|
|
|
|
if(isset($data['override_blackouts']))
|
|
$room->setOverrideBlackouts(boolval($data['override_blackouts']));
|
|
|
|
return $room;
|
|
}
|
|
|
|
/**
|
|
* @param SummitBookableVenueRoom $room
|
|
* @param array $data
|
|
* @return SummitBookableVenueRoom
|
|
*/
|
|
public static function populateSummitVenueBookableRoom(SummitBookableVenueRoom $room, array $data){
|
|
|
|
self::populateSummitVenueRoom($room, $data);
|
|
|
|
if(isset($data['time_slot_cost']))
|
|
$room->setTimeSlotCost(floatval($data['time_slot_cost']));
|
|
|
|
if(isset($data['currency']))
|
|
$room->setCurrency(trim($data['currency']));
|
|
|
|
return $room;
|
|
}
|
|
|
|
|
|
/**
|
|
* @param SummitAbstractLocation $location
|
|
* @param array $data
|
|
* @return SummitAbstractLocation
|
|
*/
|
|
public static function populate(SummitAbstractLocation $location, array $data){
|
|
if($location instanceof SummitVenue){
|
|
return self::populateSummitVenue($location, $data);
|
|
}
|
|
if($location instanceof SummitHotel){
|
|
return self::populateSummitHotel($location, $data);
|
|
}
|
|
if($location instanceof SummitAirport){
|
|
return self::populateSummitAirport($location, $data);
|
|
}
|
|
if($location instanceof SummitExternalLocation){
|
|
return self::populateSummitExternalLocation($location, $data);
|
|
}
|
|
if($location instanceof SummitBookableVenueRoom){
|
|
return self::populateSummitVenueBookableRoom($location, $data);
|
|
}
|
|
if($location instanceof SummitVenueRoom){
|
|
return self::populateSummitVenueRoom($location, $data);
|
|
}
|
|
return $location;
|
|
}
|
|
} |