diff --git a/admin/themes/default/sass/admin-theme.sass b/admin/themes/default/sass/admin-theme.sass index 33b4084b0..1e196b8df 100644 --- a/admin/themes/default/sass/admin-theme.sass +++ b/admin/themes/default/sass/admin-theme.sass @@ -108,6 +108,8 @@ @import "partials/select2" @import "partials/ndv3" +@import "partials/tooltip" + //Backward compatibility @import "partials/backward" diff --git a/admin/themes/default/sass/admin-theme_rtl.sass b/admin/themes/default/sass/admin-theme_rtl.sass index 712d08aa9..63af964be 100644 --- a/admin/themes/default/sass/admin-theme_rtl.sass +++ b/admin/themes/default/sass/admin-theme_rtl.sass @@ -112,6 +112,8 @@ //RTL @import "partials/rtl" +@import "partials/tooltip" + //Backward compatibility @import "partials/backward" diff --git a/admin/themes/default/sass/partials/_tooltip.sass b/admin/themes/default/sass/partials/_tooltip.sass new file mode 100644 index 000000000..986d49667 --- /dev/null +++ b/admin/themes/default/sass/partials/_tooltip.sass @@ -0,0 +1,30 @@ +.tooltip_cont + min-width: 280px + width: 100% + font-size: 14px + font-weight: 600 + .tip_header + margin-bottom: 10px + .tip-body > div + margin-bottom: 6px + +.tip_element_head + font-size: 12px + +.tip_element_value + font-size: 14px + font-weight: 400 + opacity: 0.8 + +.tip-body + display: grid + grid-template-columns: auto auto + &.tip-body-grid + grid-template-columns: 1fr 1fr + gap: 8px 16px + +.ui-tooltip, +.ui-tooltip.ui-widget-content + border: none + padding: 10px + box-shadow: 0px 0px 15px 0px rgba(0, 0, 0, 0.15) diff --git a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl index 300bb29d0..083021418 100644 --- a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl +++ b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl @@ -51,7 +51,12 @@ {assign var=curr_id value=$cart->id_currency|intval} {foreach from=$cart_detail_data item=data} - {$data.room_num|escape:'html':'UTF-8'} {hook h='displayRoomNumAfter' data=$data type='adminOrder'} + {$data.room_num|escape:'html':'UTF-8'} + {if isset($data['connected_rooms'][$data.id_room])} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms=$data['connected_rooms'][$data.id_room]} + {/if} + + {hook h='displayRoomNumAfter' data=$data type='adminOrder'}

{$data.room_type|escape:'html':'UTF-8'}

diff --git a/admin/themes/default/template/controllers/orders/_product_line.tpl b/admin/themes/default/template/controllers/orders/_product_line.tpl index 1e44a648f..205c0c5e8 100644 --- a/admin/themes/default/template/controllers/orders/_product_line.tpl +++ b/admin/themes/default/template/controllers/orders/_product_line.tpl @@ -25,7 +25,11 @@ -

{$data.room_num}

+

{$data.room_num} + {if isset($data['connected_rooms'][$data.id_room])} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms=$data['connected_rooms'][$data.id_room]} + {/if} +

{if $data.is_back_order} {l s='overbooked'} {/if} diff --git a/admin/themes/default/template/controllers/products/configuration.tpl b/admin/themes/default/template/controllers/products/configuration.tpl index 7f0bc0f60..606a9a2d3 100644 --- a/admin/themes/default/template/controllers/products/configuration.tpl +++ b/admin/themes/default/template/controllers/products/configuration.tpl @@ -67,6 +67,14 @@ + + + {hook h='displayHotelRoomListTableHeaderColumn'} {l s='--'} @@ -108,6 +116,21 @@ {* Since the data can also be used from post incase of errors, which will cause issues with the id index *} + + {if isset($room_info['id'])} + + + + + {if isset($room_info['connected_rooms_count'])}{$room_info['connected_rooms_count']|intval}{else}0{/if} + + + + {/if} + {if isset($room_info['id'])} {hook h='displayHotelRoomListTableRowColumn' index=$key id_room=$room_info['id']} {else} @@ -343,6 +366,7 @@
+ {assign var="connected_room_types" value=[]} + {if isset($htl_connected_rooms[$main_room_id].connected_room_types)} + {assign var="connected_room_types" value=$htl_connected_rooms[$main_room_id].connected_room_types} + {/if} + +
+
+
+
+ + + + + + + + + + {foreach from=$connected_room_types item=typeGroup} + {foreach from=$typeGroup.connected_rooms item=room} + + + + + + {/foreach} + {/foreach} + +
{l s='Room Type'}{l s='Connected Room'} + {l s='Action'} +
{$typeGroup.room_type_name|escape:'html':'UTF-8'}{$room.name|escape:'html':'UTF-8'} + + + +
+
+
+
+ + {l s='No connected rooms.'} +
+
+
+ {if isset($htl_not_connected_rooms) && $htl_not_connected_rooms|count > 0} + + {/if} +
+
+ {if isset($htl_not_connected_rooms) && $htl_not_connected_rooms|count > 0} + + + + + + + + +
+ + + + + + +
+ {/if} +
diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index bdf2d3f74..9166f1750 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -2010,7 +2010,9 @@ class AdminControllerCore extends Controller } if ($conf = Tools::getValue('conf')) { - $this->context->smarty->assign('conf', $this->json ? json_encode($this->_conf[(int)$conf]) : $this->_conf[(int)$conf]); + if (isset($this->_conf[$conf])) { + $this->context->smarty->assign('conf', $this->json ? json_encode($this->_conf[(int)$conf]) : $this->_conf[(int)$conf]); + } } foreach (array('errors', 'warnings', 'informations', 'confirmations') as $type) { diff --git a/config/xml/themes/default.xml b/config/xml/themes/default.xml index 72ce2aae3..b8d22534f 100644 --- a/config/xml/themes/default.xml +++ b/config/xml/themes/default.xml @@ -18,8 +18,8 @@ - - + + @@ -32,8 +32,8 @@ - - + + @@ -45,7 +45,6 @@ - diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 927c44d81..ebab90982 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -1349,6 +1349,8 @@ class AdminOrdersControllerCore extends AdminController parent::setMedia(); $this->addJqueryUI('ui.datepicker'); + $this->addJqueryUI('ui.tooltip', 'base', true); + $this->addJS(_PS_JS_DIR_.'vendor/d3.v3.min.js'); if ($this->display == 'view') { @@ -3218,6 +3220,7 @@ class AdminOrdersControllerCore extends AdminController if (!Validate::isLoadedObject($order = new Order(Tools::getValue('id_order')))) { return; } + if ($this->tabAccess['kpi'] === 1) { $this->content .= $this->renderKpis(); } @@ -3580,6 +3583,7 @@ class AdminOrdersControllerCore extends AdminController $order_detail_data[$key]['amt_with_qty_tax_incl'] = $value['total_price_tax_incl']; $order_detail_data[$key]['room_type_info'] = $objHotelRoomType->getRoomTypeInfoByIdProduct($value['id_product']); $order_detail_data[$key]['total_room_tax'] = $order_detail_data[$key]['total_room_price_ti'] - $order_detail_data[$key]['total_room_price_te']; + $order_detail_data[$key]['connected_rooms'] = HotelConnectedRoom::getConnectedRooms($value['id_room'], null, null, (int) Context::getContext()->language->id); if (isset($value['refund_info']) && $value['refund_info']['refunded'] diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 9b8e1ab48..e6dc66674 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -1602,7 +1602,8 @@ class AdminProductsControllerCore extends AdminController ) { $this->addJqueryUI(array( 'ui.core', - 'ui.widget' + 'ui.widget', + 'ui.tooltip' )); $this->addjQueryPlugin(array( @@ -3159,6 +3160,7 @@ class AdminProductsControllerCore extends AdminController $disableDates = $objRoomDisableDates->getRoomDisableDates($room['id']); $room['disable_dates_json'] = json_encode($disableDates); } + $room['connected_rooms_count'] = HotelConnectedRoom::getTotalConnectedRooms($room['id']); } $data->assign('htl_room_info', $hotelRoomInfo); @@ -3786,6 +3788,7 @@ class AdminProductsControllerCore extends AdminController $this->errors[] = $this->l('This room cannot be deleted as this room contains future booking.'); } if (empty($this->errors)) { + $response['affected_rooms'] = HotelConnectedRoom::getTotalConnectedRooms(null, $idRoom); if ($objRoomInfo->delete()) { $response['success'] = true; } else { @@ -5506,7 +5509,9 @@ class AdminProductsControllerCore extends AdminController if (empty($this->errors)) { foreach ($roomsInfo as $roomInfo) { $objHotelRoomInfo = new HotelRoomInformation($roomInfo['id']); - $objHotelRoomInfo->id_status = $roomInfo['id_status']; + if (!empty($roomInfo['id_status'])) { + $objHotelRoomInfo->id_status = $roomInfo['id_status']; + } if (isset($roomInfo['floor']) && $roomInfo['floor'] != '') { $objHotelRoomInfo->floor = $roomInfo['floor']; } @@ -5707,4 +5712,102 @@ class AdminProductsControllerCore extends AdminController return $tpl->fetch(); } + + public function ajaxProcessGetNotConnectedRooms() + { + $roomId = (int) Tools::getValue('room_id'); + $roomTypeId = (int) Tools::getValue('room_type_id'); + $allGroups = HotelConnectedRoom::getNotConnectedRooms($roomId, $this->context->language->id); + $rooms = isset($allGroups[$roomTypeId]) ? $allGroups[$roomTypeId]['rooms'] : array(); + die(Tools::jsonEncode(['success' => true, 'rooms' => $rooms])); + } + + public function ajaxProcessInitConnectedRoomModal() + { + $response['hasError'] = 1; + $roomId = (int) Tools::getValue('room_id'); + $objRoom = new HotelRoomInformation($roomId); + $idProduct = (int) $objRoom->id_product; + $idHotel = (int) $objRoom->id_hotel; + + $this->context->smarty->assign(array( + 'htl_connected_rooms' => HotelConnectedRoom::getConnectedRooms($roomId, null, null, $this->context->language->id), + 'htl_not_connected_rooms' => HotelConnectedRoom::getNotConnectedRooms($roomId, $this->context->language->id), + 'main_room_id' => $roomId, + 'current_roomtype' => $idProduct, + )); + + $modal = array( + 'modal_id' => 'connectedRoomModal', + 'modal_class' => 'modal-md', + 'modal_title' => '  '.$this->l('Connected Room').' ', + 'modal_content' => $this->context->smarty->fetch('controllers/products/modal-connected-rooms.tpl'), + 'modal_actions' => array(), + ); + + $this->context->smarty->assign($modal); + $response['hasError'] = 0; + $response['modalHtml'] = $this->context->smarty->fetch('modal.tpl'); + + die(Tools::jsonEncode($response)); + } + + public function ajaxProcessManageConnectedRoom() + { + if ($this->tabAccess['edit'] !== 1) { + die(json_encode(['success' => false, 'message' => $this->l('You do not have permission to edit this.')])); + } + + $mode = Tools::getValue('mode'); + $roomId = (int) Tools::getValue('room_id'); + $connectedRoomId = (int) Tools::getValue('connected_room_id'); + $connectedId = (int) Tools::getValue('connected_id'); + $objRoom = new HotelRoomInformation($roomId); + $idProduct = (int) $objRoom->id_product; + $idHotel = (int) $objRoom->id_hotel; + + if ($mode === 'add') { + $connection = new HotelConnectedRoom(); + $connection->id_room = $roomId; + $connection->id_room_connected = $connectedRoomId; + if ($connection->add()) { + $this->context->smarty->assign(array( + 'htl_connected_rooms' => HotelConnectedRoom::getConnectedRooms($roomId, null, null, $this->context->language->id), + 'htl_not_connected_rooms' => HotelConnectedRoom::getNotConnectedRooms($roomId, $this->context->language->id), + 'main_room_id' => $roomId, + 'current_roomtype' => $idProduct, + )); + die(json_encode([ + 'html' => $this->context->smarty->fetch('controllers/products/modal-connected-rooms.tpl'), + 'success' => true, + 'message' => $this->l('Room connected successfully.'), + 'connected_count' => HotelConnectedRoom::getTotalConnectedRooms($roomId), + ])); + } + die(json_encode(['success' => false, 'message' => $this->l('Failed to connect room.')])); + } + + if ($mode === 'delete') { + if (!$connectedId) { + die(json_encode(['success' => false, 'message' => $this->l('Invalid data.')])); + } + $objHotelConnectedRoom = new HotelConnectedRoom($connectedId); + if ($objHotelConnectedRoom->delete()) { + $this->context->smarty->assign(array( + 'htl_connected_rooms' => HotelConnectedRoom::getConnectedRooms($roomId, null, null, $this->context->language->id), + 'htl_not_connected_rooms' => HotelConnectedRoom::getNotConnectedRooms($roomId, $this->context->language->id), + 'main_room_id' => $roomId, + 'current_roomtype' => $idProduct, + )); + die(json_encode([ + 'success' => true, + 'html' => $this->context->smarty->fetch('controllers/products/modal-connected-rooms.tpl'), + 'message' => $this->l('Connected room removed successfully.'), + 'connected_count' => HotelConnectedRoom::getTotalConnectedRooms($roomId), + ])); + } + die(json_encode(['success' => false, 'message' => $this->l('Failed to remove connected room.')])); + } + } + } diff --git a/install/classes/datas.php b/install/classes/datas.php index f002ca12d..a5b3cf59c 100644 --- a/install/classes/datas.php +++ b/install/classes/datas.php @@ -150,7 +150,12 @@ class Datas 'name' => 'newsletter', 'default' => 1, 'help' => 'Get news from QloApps', - ) + ), + 'enable_ssl' => array( + 'name' => 'ssl', + 'default' => 0, + 'help' => 'Enable SSL for QloApps', + ), ); protected $datas = array(); diff --git a/install/controllers/console/process.php b/install/controllers/console/process.php index def56c22b..ffa033860 100644 --- a/install/controllers/console/process.php +++ b/install/controllers/console/process.php @@ -238,6 +238,7 @@ class InstallControllerConsoleProcess extends InstallControllerConsole 'admin_lastname' => $this->datas->admin_lastname, 'admin_password' => $this->datas->admin_password, 'admin_email' => $this->datas->admin_email, + 'enable_ssl' => $this->datas->enable_ssl, 'marketing_consent' => $this->datas->marketing_consent, 'configuration_agrement' => true, 'send_informations' => true, diff --git a/install/data/xml/meta.xml b/install/data/xml/meta.xml index 4c9a0b225..581bd5ca3 100644 --- a/install/data/xml/meta.xml +++ b/install/data/xml/meta.xml @@ -32,14 +32,18 @@ password 1 + + supplier 1 @@ -92,14 +96,18 @@ order 1 + + order-opc 1 @@ -144,10 +152,12 @@ module-cashondelivery-validation 0 + our-properties 1 diff --git a/install/data/xml/theme_meta.xml b/install/data/xml/theme_meta.xml index ce42c1a27..0a23d98fd 100644 --- a/install/data/xml/theme_meta.xml +++ b/install/data/xml/theme_meta.xml @@ -39,9 +39,5 @@ - - - - diff --git a/install/langs/bg/data/meta.xml b/install/langs/bg/data/meta.xml index 2cb836a57..477b6da88 100644 --- a/install/langs/bg/data/meta.xml +++ b/install/langs/bg/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/bn/data/meta.xml b/install/langs/bn/data/meta.xml index 57422b652..712181078 100644 --- a/install/langs/bn/data/meta.xml +++ b/install/langs/bn/data/meta.xml @@ -19,8 +19,8 @@ contact-us - হোটেল প্রাইম - এটি এমন একটি স্থান যেখানে আরাম এবং বিলাসিতা প্রকৃতির সাথে মিলিত হয়েছে! + + @@ -42,18 +42,22 @@ password-recovery + + সরবরাহকারী সরবরাহকারির তালিকা @@ -138,18 +142,22 @@ order + + অর্ডার @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/br/data/meta.xml b/install/langs/br/data/meta.xml index 064e8ab57..ce3e8cbb4 100644 --- a/install/langs/br/data/meta.xml +++ b/install/langs/br/data/meta.xml @@ -19,8 +19,8 @@ entrar-em-contato-conosco - Hotel Prime - Um lugar onde o conforto e o luxo se misturam com a natureza! + + @@ -42,18 +42,22 @@ forgot, password, e-mail, new, reset recuperar-senha + + Fornecedores Lista de fornecedores @@ -138,18 +142,22 @@ pedido + + Pedido @@ -168,10 +176,12 @@ confirmação-do-pedido + diff --git a/install/langs/cs/data/meta.xml b/install/langs/cs/data/meta.xml index c566a1a06..d15d88d00 100644 --- a/install/langs/cs/data/meta.xml +++ b/install/langs/cs/data/meta.xml @@ -19,8 +19,8 @@ napiste-nam - Hotel Prime - Místo, kde se komfort a luxus mísí s přírodou! + + @@ -42,18 +42,22 @@ password-recovery + + Dodavatelé Suppliers list @@ -138,18 +142,22 @@ objednavka + + Rychlá Objednávka @@ -168,10 +176,12 @@ potvrzeni-objednavky + diff --git a/install/langs/de/data/meta.xml b/install/langs/de/data/meta.xml index f79a747c2..b490fa981 100644 --- a/install/langs/de/data/meta.xml +++ b/install/langs/de/data/meta.xml @@ -19,8 +19,8 @@ kontaktieren-sie-uns - Hotel Prime - Ein Ort, an dem Komfort und Luxus mit der Natur verschmelzen! + + @@ -42,18 +42,22 @@ vergessen, Kennwort, E-Mail, neu, Reset kennwort-wiederherstellung + + Zulieferer Zuliefererliste @@ -138,18 +142,22 @@ bestellung + + Bestellung @@ -168,10 +176,12 @@ bestellbestatigung + diff --git a/install/langs/en/data/meta.xml b/install/langs/en/data/meta.xml index 531c61efb..5f4fa253b 100644 --- a/install/langs/en/data/meta.xml +++ b/install/langs/en/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/es/data/meta.xml b/install/langs/es/data/meta.xml index ba7665bca..2f7f8eb60 100644 --- a/install/langs/es/data/meta.xml +++ b/install/langs/es/data/meta.xml @@ -19,8 +19,8 @@ contactanos - Hotel Prime - ¡Un lugar donde el confort y el lujo se mezclan con la naturaleza! + + @@ -42,18 +42,22 @@ contraseña, has olvidado, e-mail, nuevo, regeneración recuperacion-contraseña + + Proveedores Lista de proveedores @@ -138,18 +142,22 @@ pedido + + Pedido @@ -168,10 +176,12 @@ confirmacion-pedido + diff --git a/install/langs/fa/data/meta.xml b/install/langs/fa/data/meta.xml index 6cccce71b..efe792c08 100644 --- a/install/langs/fa/data/meta.xml +++ b/install/langs/fa/data/meta.xml @@ -19,8 +19,8 @@ contact-us - هتل پرایم - مکانی که در آن راحتی و لوکس بودن با طبیعت ترکیب شده‌اند! + + @@ -42,18 +42,22 @@ password-recovery + + تامین کننده ها لیست تامین کننده ها @@ -138,18 +142,22 @@ order + + سفارش @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/fr/data/meta.xml b/install/langs/fr/data/meta.xml index 5939be426..a3f4b6356 100644 --- a/install/langs/fr/data/meta.xml +++ b/install/langs/fr/data/meta.xml @@ -19,8 +19,8 @@ nous-contacter - Hôtel Prime - Un endroit où le confort et le luxe se mélangent avec la nature ! + + @@ -42,18 +42,22 @@ recuperation-mot-de-passe + + Fournisseurs Liste des fournisseurs @@ -138,18 +142,22 @@ commande + + Commande @@ -168,10 +176,12 @@ confirmation-commande + diff --git a/install/langs/he/data/meta.xml b/install/langs/he/data/meta.xml index 758bcf4fb..6e4e74b0c 100644 --- a/install/langs/he/data/meta.xml +++ b/install/langs/he/data/meta.xml @@ -19,8 +19,8 @@ צור-קשר - מלון פריים - מקום שבו נוחות ולוקסוס משתלבים עם הטבע! + + @@ -42,18 +42,22 @@ שחזור-סיסמה + + ספקים רשימת ספקים @@ -138,18 +142,22 @@ הזמנה + + הזמנה @@ -168,10 +176,12 @@ אימות-הזמנה + diff --git a/install/langs/hr/data/meta.xml b/install/langs/hr/data/meta.xml index 7057dfacb..c1b1b4d50 100644 --- a/install/langs/hr/data/meta.xml +++ b/install/langs/hr/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/hu/data/meta.xml b/install/langs/hu/data/meta.xml index 8d36562c3..2eaba831e 100644 --- a/install/langs/hu/data/meta.xml +++ b/install/langs/hu/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/id/data/meta.xml b/install/langs/id/data/meta.xml index 77819f8cd..a2d237d81 100644 --- a/install/langs/id/data/meta.xml +++ b/install/langs/id/data/meta.xml @@ -19,8 +19,8 @@ hubungi-kami - Hotel Prime - Tempat di mana kenyamanan dan kemewahan berpadu dengan alam! + + @@ -42,18 +42,22 @@ forgot, password, e-mail, new, reset lupa-password + + Supplier Daftar supplier @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ konfirmasi-pembelian + diff --git a/install/langs/it/data/meta.xml b/install/langs/it/data/meta.xml index 22485f8c0..d76e76389 100644 --- a/install/langs/it/data/meta.xml +++ b/install/langs/it/data/meta.xml @@ -19,8 +19,8 @@ contattarci - Hotel Prime -Un luogo dove il comfort e il lusso si mescolano con la natura! + + @@ -42,18 +42,22 @@ dimenticato, password, e-mail, nuovo, reset recupero-password + + Fornitori Elenco fornitori @@ -138,18 +142,22 @@ ordine + + Ordine @@ -168,10 +176,12 @@ conferma-ordine + diff --git a/install/langs/lt/data/meta.xml b/install/langs/lt/data/meta.xml index 3a18628ef..9edaf7602 100644 --- a/install/langs/lt/data/meta.xml +++ b/install/langs/lt/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - Vieta, kur komfortas ir prabanga dera su gamta! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/mk/data/meta.xml b/install/langs/mk/data/meta.xml index 541576642..56f0d3810 100644 --- a/install/langs/mk/data/meta.xml +++ b/install/langs/mk/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/nl/data/meta.xml b/install/langs/nl/data/meta.xml index 3a6cfe94d..d2ad17c19 100644 --- a/install/langs/nl/data/meta.xml +++ b/install/langs/nl/data/meta.xml @@ -19,8 +19,8 @@ contact-met-ons-opnemen - Hotel Prime - Een plek waar comfort en luxe samengaan met de natuur! + + @@ -42,18 +42,22 @@ forgot, password, e-mail, new, reset wachtwoord-opvragen + + Leveranciers Lijst met leveranciers @@ -132,18 +136,22 @@ bestelling + + Bestelling @@ -162,10 +170,12 @@ order-bevestiging + diff --git a/install/langs/no/data/meta.xml b/install/langs/no/data/meta.xml index 9fb17959f..442acfa9e 100644 --- a/install/langs/no/data/meta.xml +++ b/install/langs/no/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/pl/data/meta.xml b/install/langs/pl/data/meta.xml index 0934c53e1..61c8f1c8c 100644 --- a/install/langs/pl/data/meta.xml +++ b/install/langs/pl/data/meta.xml @@ -19,8 +19,8 @@ kontakt - Hotel Prime - Miejsce, gdzie komfort i luksus łączą się z naturą! + + @@ -42,18 +42,22 @@ przypomnienie, hasło, e-mail, nowy odzyskiwanie-hasla + + Dostawcy Lista dostawców @@ -138,18 +142,22 @@ zamowienie + + Zamówienie @@ -168,10 +176,12 @@ potwierdzenie-zamowienia + diff --git a/install/langs/pt/data/meta.xml b/install/langs/pt/data/meta.xml index 25504b1e0..f46abbe2d 100644 --- a/install/langs/pt/data/meta.xml +++ b/install/langs/pt/data/meta.xml @@ -19,8 +19,8 @@ contacte-nos - Hotel Prime - Um lugar onde o conforto e o luxo se misturam com a natureza! + + @@ -42,18 +42,22 @@ esqueci-me, recuperar, palavra-passe, e-mail, nova, reset recuperar-palavra-passe + + Fornecedores Lista de Fornecedores @@ -138,18 +142,22 @@ encomenda + + Encomenda Rápida @@ -168,10 +176,12 @@ confirmacao-encomenda + diff --git a/install/langs/qc/data/meta.xml b/install/langs/qc/data/meta.xml index 551c9e9e9..d83c56aa5 100644 --- a/install/langs/qc/data/meta.xml +++ b/install/langs/qc/data/meta.xml @@ -19,8 +19,8 @@ nous-contacter - Hôtel Prime - Un endroit où le confort et le luxe se mêlent à la nature ! + + @@ -42,18 +42,22 @@ recuperation-mot-de-passe + + Fournisseurs Liste des fournisseurs @@ -132,18 +136,22 @@ commande + + Commande @@ -162,10 +170,12 @@ confirmation-commande + diff --git a/install/langs/ro/data/meta.xml b/install/langs/ro/data/meta.xml index 1183e23ba..6b93eee1e 100644 --- a/install/langs/ro/data/meta.xml +++ b/install/langs/ro/data/meta.xml @@ -19,8 +19,8 @@ contact - Hotel Prime - Un loc unde confortul și luxul se îmbină cu natura! + + @@ -42,18 +42,22 @@ recuperare-parola + + Furnizori Lista furnizorilor @@ -138,18 +142,22 @@ comanda + + Comandă @@ -168,10 +176,12 @@ confirmare-comanda + diff --git a/install/langs/ru/data/meta.xml b/install/langs/ru/data/meta.xml index f32b4d38c..908c81c4b 100644 --- a/install/langs/ru/data/meta.xml +++ b/install/langs/ru/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Отель Прайм - Место, где комфорт и роскошь сочетаются с природой! + + @@ -42,18 +42,22 @@ забыли пароль, e-mail, новый пароль,восстановить пароль password-recovery + + Поставщики Список поставщиков @@ -138,18 +142,22 @@ order + + Быстрый заказ @@ -162,10 +170,12 @@ guest-tracking + diff --git a/install/langs/si/data/meta.xml b/install/langs/si/data/meta.xml index 33e1e78b2..a6b3d6a23 100644 --- a/install/langs/si/data/meta.xml +++ b/install/langs/si/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/sr/data/meta.xml b/install/langs/sr/data/meta.xml index 1c68f04c5..7aff1d638 100644 --- a/install/langs/sr/data/meta.xml +++ b/install/langs/sr/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/sv/data/meta.xml b/install/langs/sv/data/meta.xml index 0c8036887..ef818fd95 100644 --- a/install/langs/sv/data/meta.xml +++ b/install/langs/sv/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/tw/data/meta.xml b/install/langs/tw/data/meta.xml index c1a2ca7ed..a73b12ef7 100644 --- a/install/langs/tw/data/meta.xml +++ b/install/langs/tw/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Prime 酒店 - 一個舒適與奢華與自然融合的地方! + + @@ -42,18 +42,22 @@ forgot, password, e-mail, new, reset password-recovery + + 供應商 供應商列表 @@ -138,18 +142,22 @@ order + + 訂單 @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/vn/data/meta.xml b/install/langs/vn/data/meta.xml index 69a0bba3d..1a84b1dc9 100644 --- a/install/langs/vn/data/meta.xml +++ b/install/langs/vn/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Khách sạn Prime - Nơi mà sự thoải mái và sang trọng hòa quyện với thiên nhiên! + + @@ -42,18 +42,22 @@ password-recovery + + Nhà cung cấp Suppliers list @@ -138,18 +142,22 @@ order + + Đơn hàng @@ -168,10 +176,12 @@ order-confirmation + diff --git a/install/langs/zh/data/meta.xml b/install/langs/zh/data/meta.xml index 9fb5a12ce..2c6fe190c 100644 --- a/install/langs/zh/data/meta.xml +++ b/install/langs/zh/data/meta.xml @@ -19,8 +19,8 @@ contact-us - Hotel Prime - A place where comfort and luxury are blended with nature! + + @@ -42,18 +42,22 @@ password-recovery + + Suppliers Suppliers list @@ -138,18 +142,22 @@ order + + Order @@ -168,10 +176,12 @@ order-confirmation + diff --git a/modules/blocknewsletter/blocknewsletter.php b/modules/blocknewsletter/blocknewsletter.php index 39dfb1639..681f0c98f 100644 --- a/modules/blocknewsletter/blocknewsletter.php +++ b/modules/blocknewsletter/blocknewsletter.php @@ -54,8 +54,6 @@ class Blocknewsletter extends Module $this->tab = 'front_office_features'; $this->need_instance = 0; - $this->controllers = array('verification'); - $this->bootstrap = true; parent::__construct(); diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index be3cabc94..a6a0800bf 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -1331,6 +1331,7 @@ class HotelCartBookingData extends ObjectModel ); $cart_detail_data[$key]['amt_with_qty'] = $roomTypeDateRangePrice['total_price_tax_excl']; + $cart_detail_data[$key]['connected_rooms'] = HotelConnectedRoom::getConnectedRooms((int) $obj_htl_room_info->id, null, null, Context::getContext()->language->id); } } if ($cart_detail_data) { diff --git a/modules/hotelreservationsystem/classes/HotelConnectedRoom.php b/modules/hotelreservationsystem/classes/HotelConnectedRoom.php new file mode 100644 index 000000000..f1142d51d --- /dev/null +++ b/modules/hotelreservationsystem/classes/HotelConnectedRoom.php @@ -0,0 +1,180 @@ + 'htl_connected_room', + 'primary' => 'id_connected_room', + 'fields' => array( + 'id_room' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), + 'id_room_connected' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedId', 'required' => true), + 'date_add' => array('type' => self::TYPE_DATE), + 'date_upd' => array('type' => self::TYPE_DATE), + ), + ); + + public static function getConnectedRooms($idRoom = null, $idRoomType = null, $idHotel = null, $idLang = null) + { + $idLang = $idLang ? (int) $idLang : (int) Context::getContext()->language->id; + + $sql = 'SELECT + hcr.id_connected_room, + hcr.id_room, + base_room.room_num AS room_name, + connected_room.id AS id_room_connected, + connected_room.id_product AS id_room_type, + conn_pl.name AS room_type_name, + connected_room.room_num AS connected_room_name + FROM `' . _DB_PREFIX_ . 'htl_connected_room` hcr + INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` connected_room + ON connected_room.id = hcr.id_room_connected + INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` base_room + ON base_room.id = hcr.id_room + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` conn_pl + ON (conn_pl.id_product = connected_room.id_product AND conn_pl.id_lang = ' . $idLang . ') + WHERE 1'; + + if ($idRoom !== null) { + $sql .= ' AND hcr.id_room = ' . $idRoom; + } + if ($idRoomType !== null) { + $sql .= ' AND base_room.id_product = ' . (int) $idRoomType; + } + if ($idHotel !== null) { + $sql .= ' AND base_room.id_hotel = ' . (int) $idHotel; + } + + $sql .= ' ORDER BY hcr.id_room, connected_room.id_product, connected_room.room_num'; + + $results = Db::getInstance()->executeS($sql); + if ($results === false) { + return array(); + } + + $connectedRooms = array(); + foreach ($results as $row) { + $roomId = (int) $row['id_room']; + $roomTypeId = (int) $row['id_room_type']; + + if (!isset($connectedRooms[$roomId])) { + $connectedRooms[$roomId] = array( + 'name' => $row['room_name'], + 'connected_room_types' => array(), + ); + } + + if (!isset($connectedRooms[$roomId]['connected_room_types'][$roomTypeId])) { + $connectedRooms[$roomId]['connected_room_types'][$roomTypeId] = array( + 'room_type_name' => $row['room_type_name'], + 'connected_rooms' => array(), + ); + } + + $connectedRooms[$roomId]['connected_room_types'][$roomTypeId]['connected_rooms'][] = array( + 'id_connected_room' => (int) $row['id_connected_room'], + 'id_room' => (int) $row['id_room_connected'], + 'name' => $row['connected_room_name'], + ); + } + + return $connectedRooms; + } + + public static function getNotConnectedRooms($idRoom, $idLang = null) + { + $idRoom = (int) $idRoom; + if ($idRoom <= 0) { + return array(); + } + $idLang = $idLang ? (int) $idLang : (int) Context::getContext()->language->id; + + $sql = 'SELECT hri.id AS id_room, hri.id_product AS id_room_type, pl.name AS room_type_name, hri.room_num AS room_name + FROM `' . _DB_PREFIX_ . 'htl_room_information` hri + LEFT JOIN `' . _DB_PREFIX_ . 'product_lang` pl + ON (pl.id_product = hri.id_product AND pl.id_lang = ' . $idLang . ') + WHERE hri.id != ' . $idRoom . ' + AND hri.id_hotel = ( + SELECT id_hotel FROM `' . _DB_PREFIX_ . 'htl_room_information` WHERE id = ' . $idRoom . ' + ) + AND NOT EXISTS ( + SELECT 1 FROM `' . _DB_PREFIX_ . 'htl_connected_room` cr + WHERE cr.id_room = ' . $idRoom . ' AND cr.id_room_connected = hri.id + ) + ORDER BY pl.name ASC, hri.room_num ASC'; + + $results = Db::getInstance()->executeS($sql); + + $grouped = array(); + foreach ($results as $row) { + $typeId = (int) $row['id_room_type']; + if (!isset($grouped[$typeId])) { + $grouped[$typeId] = array( + 'id_room_type' => $typeId, + 'name' => $row['room_type_name'], + 'rooms' => array(), + ); + } + $grouped[$typeId]['rooms'][] = array( + 'id_room' => (int) $row['id_room'], + 'name' => $row['room_name'], + ); + } + return $grouped; + } + + public static function getTotalConnectedRooms($idRoom = 0, $idRoomConnected = 0) + { + $idRoom = (int) $idRoom; + $idRoomConnected = (int) $idRoomConnected; + + if ($idRoom <= 0 && $idRoomConnected > 0) { + $sql = 'SELECT DISTINCT id_room + FROM `' . _DB_PREFIX_ . 'htl_connected_room` + WHERE id_room_connected = ' . $idRoomConnected; + + $results = Db::getInstance()->executeS($sql); + if ($results === false) { + return array(); + } + return array_column($results, 'id_room'); + } + + $sql = 'SELECT COUNT(*) FROM `' . _DB_PREFIX_ . 'htl_connected_room` hcr + INNER JOIN `' . _DB_PREFIX_ . 'htl_room_information` hri + ON hri.id = hcr.id_room_connected + WHERE hcr.id_room = ' . $idRoom; + + return (int) Db::getInstance()->getValue($sql); + } + +} diff --git a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php index bc5372a90..5ce9d376d 100644 --- a/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php +++ b/modules/hotelreservationsystem/classes/HotelOrderRefundRules.php @@ -262,7 +262,7 @@ class HotelOrderRefundRules extends ObjectModel ON (horr.`id_refund_rule` = hbrr.`id_refund_rule`) LEFT JOIN `'._DB_PREFIX_.'htl_order_refund_rules_lang` horrl ON (horrl.`id_refund_rule` = horr.`id_refund_rule` AND horrl.`id_lang` = '.(int) $idLang.') - LEFT JOIN `'._DB_PREFIX_.'htl_booking_detail` hbd + INNER JOIN `'._DB_PREFIX_.'htl_booking_detail` hbd ON (hbd.`id_hotel` = hbrr.`id_hotel` AND hbd.`id_order` = '.(int) $idOrder.') WHERE horr.`days` <= '.(int) $days.' GROUP BY hbrr.`id_refund_rule` diff --git a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php index ca44a2826..4dfdabc01 100644 --- a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php +++ b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php @@ -552,6 +552,17 @@ class HotelReservationSystemDb SELECT 5, `id_lang`, 'Hotel Amenities Block', 'Configure Hotels Amenities settings. You can display hotel amenities images using this block. This block will be displayed on home page.' FROM `"._DB_PREFIX_."lang` ORDER BY `id_lang`;", + "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_connected_room` ( + `id_connected_room` int(11) NOT NULL AUTO_INCREMENT, + `id_room` int(11) NOT NULL, + `id_room_connected` int(11) NOT NULL, + `date_add` datetime NOT NULL, + `date_upd` datetime NOT NULL, + PRIMARY KEY (`id_connected_room`), + UNIQUE KEY `uniq_room_connection` (`id_room`, `id_room_connected`), + KEY `idx_id_room` (`id_room`), + KEY `idx_id_room_connected` (`id_room_connected`) + ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;", ); } @@ -615,7 +626,8 @@ class HotelReservationSystemDb `'._DB_PREFIX_.'htl_room_type_bed_type`, `'._DB_PREFIX_.'htl_access`, `'._DB_PREFIX_.'htl_settings_link`, - `'._DB_PREFIX_.'htl_settings_link_lang`' + `'._DB_PREFIX_.'htl_settings_link_lang`, + `'._DB_PREFIX_.'htl_connected_room`' ); } } diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index 390d28e3e..2d180ee1d 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -386,6 +386,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController 'max_child_age' => Configuration::get('WK_GLOBAL_CHILD_MAX_AGE'), 'link' => $this->context->link, 'ALLOTMENT_MANUAL' => HotelBookingDetail::ALLOTMENT_MANUAL, + 'htl_connected_rooms' => HotelConnectedRoom::getConnectedRooms(null, null, $this->id_hotel, $this->context->language->id), )); if (Configuration::get('PS_BACKOFFICE_SEARCH_TYPE') == HotelBookingDetail::SEARCH_TYPE_OWS) { @@ -1037,6 +1038,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController // add fullcalender plugin $this->addJqueryUI('ui.tooltip', 'base', true); $this->removeJS(Media::getJqueryUIPath('effects.core', 'base', false), false); + $this->addCSS(array(_MODULE_DIR_.'hotelreservationsystem/views/css/HotelReservationAdmin.css')); $this->addCSS(_PS_JS_DIR_.'fullcalendar/main.css'); $this->addJs(_PS_JS_DIR_.'fullcalendar/main.js'); diff --git a/modules/hotelreservationsystem/define.php b/modules/hotelreservationsystem/define.php index e8a7cc909..46ac79645 100644 --- a/modules/hotelreservationsystem/define.php +++ b/modules/hotelreservationsystem/define.php @@ -49,6 +49,7 @@ require_once 'classes/HotelRoomDisableDates.php'; require_once 'classes/HotelBranchRefundRules.php'; require_once 'classes/HotelBedType.php'; require_once 'classes/HotelRoomTypeBedType.php'; +require_once 'classes/HotelConnectedRoom.php'; // linked products require_once 'classes/RoomTypeServiceProduct.php'; diff --git a/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css b/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css index a207087a6..e3b6077b2 100644 --- a/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css +++ b/modules/hotelreservationsystem/views/css/HotelReservationAdmin.css @@ -577,36 +577,6 @@ p.room_cat_data .fc-today-button:disabled { display: none; } -/* book now page tooltip */ -.tooltip_cont { - min-width: 280px; - width: 100%; - font-size: 14px; - font-weight: 600; - /* display: grid; */ -} -.tooltip_cont .tip_header { - margin-bottom: 10px; -} -.tooltip_cont .tip-body > div { - margin-bottom: 6px; -} -.tip_element_head { - font-size: 12px; -} -.tip_element_value { - font-size: 16px; - opacity: 0.6; -} -.tip-body { - display: grid; - grid-template-columns: auto auto; -} -body.adminhotelroomsbooking .ui-tooltip { - border: unset; - padding: 10px; - box-shadow: 0px 0px 15px 0px #00000026; -} #room-reallocation-modal .modal-footer { padding: 15px 0px 0px 0px diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl index ccc73a37c..8c9d0fe57 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-rooms.tpl @@ -40,7 +40,12 @@ {foreach from=$book_v['data']['available'] key=avai_k item=avai_v} - {$avai_v['room_num']|escape:'htmlall':'UTF-8'} {hook h='displayRoomNumAfter' data=$avai_v type='available'} + {$avai_v['room_num']|escape:'htmlall':'UTF-8'} + {if isset($htl_connected_rooms[$avai_v['id_room']]) && $htl_connected_rooms[$avai_v['id_room']]|@count > 0} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms=$htl_connected_rooms[$avai_v['id_room']]} + {/if} + + {hook h='displayRoomNumAfter' data=$avai_v type='available'} {assign var="is_full_date" value=($show_full_date && ($date_from|date_format:'%D' == $date_to|date_format:'%D'))} {dateFormat date=$date_from full=$is_full_date} - {dateFormat date=$date_to full=$is_full_date} {$avai_v['room_comment']|escape:'htmlall':'UTF-8'} @@ -132,7 +137,11 @@

{dateFormat date=$part_v['date_from'] full=$is_full_date} - {dateFormat date=$part_v['date_to'] full=$is_full_date}

{/if} - {$sub_part_v['room_num']|escape:'htmlall':'UTF-8'} {hook h='displayRoomNumAfter' data=$sub_part_v type='partially_available'} + {$sub_part_v['room_num']|escape:'htmlall':'UTF-8'} + {if isset($htl_connected_rooms[$sub_part_v['id_room']]) && $htl_connected_rooms[$sub_part_v['id_room']]|@count > 0} + {include file="controllers/products/connected-rooms.tpl" htl_connected_rooms=$htl_connected_rooms[$sub_part_v['id_room']]} + {/if} + {hook h='displayRoomNumAfter' data=$sub_part_v type='partially_available'} {foreach $allotment_types as $allotment_type}