hotel_commerce/modules/hotelreservationsystem/classes/HotelRoomInformation.php
2023-06-26 13:09:26 +05:30

283 lines
11 KiB
PHP

<?php
/**
* 2010-2020 Webkul.
*
* NOTICE OF LICENSE
*
* All right is reserved,
* Please go through this link for complete license : https://store.webkul.com/license.html
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade this module to newer
* versions in the future. If you wish to customize this module for your
* needs please refer to https://store.webkul.com/customisation-guidelines/ for more information.
*
* @author Webkul IN <support@webkul.com>
* @copyright 2010-2020 Webkul IN
* @license https://store.webkul.com/license.html
*/
class HotelRoomInformation extends ObjectModel
{
public $id;
public $id_product;
public $id_hotel;
public $room_num;
public $id_status;
public $floor;
public $comment;
public $date_add;
public $date_upd;
const STATUS_ACTIVE = 1;
const STATUS_INACTIVE = 2;
const STATUS_TEMPORARY_INACTIVE = 3;
public static $definition = array(
'table' => 'htl_room_information',
'primary' => 'id',
'fields' => array(
'id_product' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'id_hotel' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId'),
'room_num' => array('type' => self::TYPE_STRING),
'id_status' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt'),
'floor' => array('type' => self::TYPE_STRING),
'comment' => array('type' => self::TYPE_STRING),
'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate'),
'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate')
),
);
protected $webserviceParameters = array(
'objectMethods' => array(
'add' => 'addWs',
'update' => 'updateWs',
'delete' => 'deleteWs',
),
'objectsNodeName' => 'rooms',
'objectNodeName' => 'room',
'fields' => array(
'id_product' => array(
'xlink_resource' => array(
'resourceName' => 'products',
)
),
'id_hotel' => array(
'setter' => false,
'xlink_resource' => array(
'resourceName' => 'hotels',
)
),
),
);
public function update($null_values = false)
{
if ($idRoom = $this->id) {
// delete rooms from cart which are set inactive
if ($this->id_status == self::STATUS_INACTIVE) {
$objCartBookingData = new HotelCartBookingData();
if (!$objCartBookingData->deleteCartBookingData(0, 0, $idRoom)) {
return false;
}
}
}
return parent::update();
}
//Overrided ObjectModel::delete()
public function delete()
{
if ($idRoom = $this->id) {
$objCartBookingData = new HotelCartBookingData();
if (!$this->deleteRoomDisableDates()
|| !$objCartBookingData->deleteCartBookingData(0, 0, $idRoom)
|| !parent::delete()
) {
return false;
}
}
return true;
}
public function deleteRoomDisableDates($idRoom = false)
{
if (!$idRoom) {
$idRoom = $this->id;
if (!$idRoom) {
return false;
}
}
$objRoomDisableDates = new HotelRoomDisableDates();
$objRoomDisableDates->deleteRoomDisableDates((int)$idRoom);
return true;
}
/**
* [deleteByProductId :: To delete all rooms information which belongs to a room type(which is a product in real) By product id]
* @param [int] $id_product [Id of the product form which all rooms information to be deleted]
* @return [Boolean] [Returns true if deleted successfully else returns false]
*/
public function deleteByProductId($idProduct)
{
if ($rooms = Db::getInstance()->executeS(
'SELECT * FROM `'._DB_PREFIX_.'htl_room_information` WHERE `id_product`='.(int) $idProduct
)) {
foreach ($rooms as $room) {
$objRoomInfo = new HotelRoomInformation($room['id']);
if (!$objRoomInfo->delete()) {
return false;
}
}
}
return true;
}
public function getAllRoomStatus()
{
$moduleInstance = Module::getInstanceByName('hotelreservationsystem');
$status = array(
'STATUS_ACTIVE' => array(
'id' => self::STATUS_ACTIVE,
'status' => $moduleInstance->l('Active', 'hotelreservationsystem')
),
'STATUS_INACTIVE' => array(
'id' => self::STATUS_INACTIVE,
'status' => $moduleInstance->l('Inactive', 'hotelreservationsystem')
),
'STATUS_TEMPORARY_INACTIVE' => array(
'id' => self::STATUS_TEMPORARY_INACTIVE,
'status' => $moduleInstance->l('Temporarily Inactive', 'hotelreservationsystem')
),
);
return $status;
}
/**
* [getHotelRoomInfoByProductId :: To get all rooms information belong to a room type(product) by product id]
* @param [int] $id_product [Id of the product]
* @return [array|false] [If data found returns array containing all rooms information belongs to a room type(product) which product id is passed else returns false]
*/
public function getHotelRoomInfoByProductId($id_product)
{
$result = Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'htl_room_information` WHERE `id_product`='.$id_product);
if ($result) {
return $result;
}
return false;
}
/**
* [getHotelRoomInfo :: To get all rooms information belong to a room type(product) and belongss to a hotel wwhich hotel id is passed]
* @param [type] $id_product [Id of the room type(product)]
* @param [type] $id_hotel [Id of the hotel]
* @param [int] $is_getNum [
* If $is_getNum is passed
* then returns number of rooms belong to a room type(product) and belongss to a hotel wwhich hotel id is passed
* else
* Returns array containing all rooms information belong to a room type(product) and belongss to a hotel wwhich hotel id is passed
* ]
* @return [array|int|boolean] [If $is_getNum is passed
* then returns number of rooms belong to a room type(product) and belongss to a hotel wwhich hotel id is passed
* else
* if data found
* Returns array containing all rooms information belong to a room type(product) and belongss to a hotel wwhich hotel id is passed
* else
* returns false; ]
*/
public function getHotelRoomInfo($id_product, $id_hotel, $is_getNum = 0)
{
$sql = "SELECT * FROM `"._DB_PREFIX_."htl_room_information` WHERE `id_product` = ".$id_product." AND `id_hotel` = ".$id_hotel;
$rm_info = Db::getInstance()->executeS($sql);
if ($is_getNum) {
$no_row = Db::getInstance()->NumRows();
return $no_row;
} else {
if ($rm_info) {
return $rm_info;
} else {
return false;
}
}
}
/**
* [getHotelRoomInfoById :: To get Information of a room by its id(primary key)]
* @param [int] $id [id of the room in the table(primary key)]
* @return [array|false] [If data found returns array containing information of the room which id is passed else returns false]
*/
public function getHotelRoomInfoById($id)
{
$sql = "SELECT `room_num` FROM `"._DB_PREFIX_."htl_room_information` WHERE `id` = ".$id;
$rm_num = Db::getInstance()->getValue($sql);
if ($rm_num) {
return $rm_num;
} else {
return false;
}
}
/**
* Deprecated
* [deleteHotelRoomInfoById :: To delete room information which id is passed]
* @param [int] $id_room_info [Id of the room which information(row in the table) to be deleted]
* @return [Boolean] [Returns true if deleted successfully else returns false]
*/
public function deleteHotelRoomInfoById($id_room_info)
{
$result = Db::getInstance()->delete('htl_room_information', '`id` = '.(int)$id_room_info, 1);
return $result;
}
public function getRoomTypeAvailableRoomsForDateRange($id_hotel, $id_product, $date_from, $date_to)
{
return Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'htl_room_information` where `id_hotel`='.$id_hotel.' AND `id_product`='.$id_product.' AND `id` NOT IN (SELECT `id_room` from `'._DB_PREFIX_.'htl_booking_detail` where `date_from`< \''.pSQL($date_to).'\' AND `date_to`>\''.$date_from.'\' AND `id_product`='.(int) $id_product.' AND `id_hotel`='.(int) $id_hotel.')');
}
public function getRoomTypeDisabledRoomsForDateRange($id_hotel, $id_product, $date_from, $date_to)
{
return Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'htl_room_information` where `id_hotel`='.$id_hotel.' AND `id_product`='.$id_product.' AND `id_status`=3 AND `id` NOT IN (SELECT `id_room` from `'._DB_PREFIX_.'htl_booking_detail` where `date_from`< \''.pSQL($date_to).'\' AND `date_to`>\''.$date_from.'\' AND `id_product`='.(int) $id_product.' AND `id_hotel`='.(int) $id_hotel.')');
}
public function getRoomTypeBookedRoomsForDateRange($id_hotel, $id_product, $date_from, $date_to)
{
return Db::getInstance()->executeS('SELECT * FROM `'._DB_PREFIX_.'htl_booking_detail` where `date_from`< \''.pSQL($date_to).'\' AND `date_to`>\''.$date_from.'\' AND `id_product`='.(int) $id_product.' AND `id_hotel`='.(int) $id_hotel);
}
// Webservice :: webservice add function
public function addWs($autodate = true, $null_values = false)
{
$objRoomType = new HotelRoomType();
if ($roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($this->id_product)) {
$this->id_hotel = $roomTypeInfo['id_hotel'];
return $this->add($autodate, $null_values);
}
return false;
}
// Webservice :: webservice update function
public function updateWs($null_values = false)
{
$objRoomType = new HotelRoomType();
if ($roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($this->id_product)) {
$this->id_hotel = $roomTypeInfo['id_hotel'];
return $this->update($null_values);
}
return false;
}
// Webservice :: webservice delete function
public function deleteWs()
{
return $this->delete();
}
}