From 1674d9eb1afa775feb0a479540b5e3dc83b69207 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Wed, 27 Mar 2024 10:32:17 +0530 Subject: [PATCH 01/30] Updated: Design for the our room block --- .../views/css/WkHotelRoomBlockFront.css | 71 +++++++++----- .../views/js/WkHotelRoomBlockFront.js | 93 +++++++++++++++++++ .../templates/hook/hotelRoomDisplayBlock.tpl | 13 ++- modules/wkhotelroom/wkhotelroom.php | 10 +- 4 files changed, 161 insertions(+), 26 deletions(-) create mode 100644 modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js diff --git a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css index 2dede0a9e..4319dbb72 100644 --- a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css +++ b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css @@ -17,18 +17,50 @@ * @license https://store.webkul.com/license.html */ -.hotelRoomDescContainer{ - position: absolute; - bottom: 0; - left: 0; - right: 0; - background-color: rgba(255, 255, 255, 0.85); - margin-left: 15px; - margin-right: 15px; - padding: 20px; - z-index: 10; +.htlRoomTypeDescTextContainer { + overflow: hidden; + max-height: 65px; } +.read-extra-text{ + cursor: pointer; + font-weight: 400; +} +.htlRoomTypeDescTextContainer p{ + margin: 0px; +} +@media (min-width: 530px) { + .hotelRoomDescContainer{ + position: absolute; + bottom: 0; + left: 0; + right: 0; + background-color: rgba(255, 255, 255, 0.8); + margin-left: 10px; + margin-right: 10px; + padding: 20px; + z-index: 10; + } + .htlRoomTypePriceText{ + float :right; + } +} +@media (max-width: 530px) { + .hotelRoomDescContainer{ + padding: 10px; + } + .wk_roomType_price_type{ + font-size: 16px; + font-weight: 400; + } + .htlRoomTypeNameText { + width: 100%; + } + .room_type_old_price { + width: 100%; + display: block; + } +} .htlRoomTypeNameText, .htlRoomTypePriceText { font-size: 18px; color: #222222; @@ -40,14 +72,15 @@ color: #555555; font-weight: 300; line-height: 21px; + margin-bottom: 9px; } -.htlRoomTypeBookNow { - font-size: 15px!important; - color: #333333!important; - font-weight: 400!important; - background: transparent!important; - border: 1px solid #333333!important; - padding: 10px 30px!important; +a.htlRoomTypeBookNow { + font-size: 15px; + color: #333333; + font-weight: 400; + background: transparent; + border: 1px solid #333333; + padding: 10px 30px; text-transform: capitalize; } @@ -55,10 +88,6 @@ border: 1px solid #333333; } -.htlRoomTypeDescText { - padding-bottom: 9px; -} - .room_type_old_price { text-decoration: line-through; color:#555555; diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js new file mode 100644 index 000000000..4aba4b360 --- /dev/null +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -0,0 +1,93 @@ +/** +* Since 2010 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 +* @copyright Since 2010 Webkul IN +* @license https://store.webkul.com/license.html +*/ + +$(document).ready(function() { + toggleRoomDescriptionExtras(); + $(window).on('resize', function() { + removePreviousChanges(); + toggleRoomDescriptionExtras(); + }); + + $(document).on('click', '.read-extra-text', function(e) { + e.preventDefault(); + $(e.target).closest(".htlRoomTypeDescText").find(".read-extra-text").toggle(); + $(e.target).closest(".htlRoomTypeDescText").find(".truncated").toggle(); + if ($(e.target).closest(".htlRoomTypeDescText").hasClass('htlRoomTypeDescTextContainer')){ + $(e.target).closest(".htlRoomTypeDescText").removeClass('htlRoomTypeDescTextContainer'); + } else { + $(e.target).closest(".htlRoomTypeDescText").addClass('htlRoomTypeDescTextContainer'); + } + }); +}); + +// Function is called to revert the changes made to the description on the window size change. +function removePreviousChanges() +{ + $(document).find('.htlRoomTypeDescText').each(function() { + //Reverting the changes so we can reapply them according the new screen size. + $(this).html($(this).parent().find('.htlRoomTypeDescTextOriginal').html()); + if (!$(this).hasClass('htlRoomTypeDescTextContainer')){ + $(this).addClass('htlRoomTypeDescTextContainer'); + } + }); +} +function addExtraTextToDescription(target) +{ + // Getting the number of displayed characters + var show_char = getChars(target); + var ellipses = "... "; + var content = $(target).html(); + if (content.trim().length > show_char) { + var a = content.trim().substr(0, show_char).replace('

' , ''); // getting the text that we want to show to the user, removed the first

tag. + if (content.trim().substr(content.trim().length - 4, content.trim().length) == '

') { + content = content.trim().substr(0, content.trim().length - 4);// removed the last closing

tag. + } + var b = content.trim().substr(show_char - content.trim().length) // getting the text that will be toggled + // Adding the read more and read less text with the ellipses to the original text. + var html = a + "" + ellipses + ""+ readMoreText +""; + $(target).html('

' + html+ '

'); + } +} +function toggleRoomDescriptionExtras() +{ + $(document).find('.htlRoomTypeDescText').each(function() { + // checking if the display:overFlow has been applied to the description. + if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 15) { + // Only show read more and read less text if the text is wrapped. + addExtraTextToDescription($(this)[0]); + } + }); +} +// Getting the number of characters displayed to the user. +function getChars(target) { + var style = window.getComputedStyle(target, null); + // Getting the size of the container displayed to the user, this will ignore the overflow: hidden text. + var line_height = parseInt(style.getPropertyValue("line-height")); + var font_size = parseInt(style.getPropertyValue("font-size")); + var height = parseInt(style.getPropertyValue("height")); + var width = parseInt(style.getPropertyValue("width")); + + if(isNaN(line_height)) line_height = font_size * 1.2; + // Counting the number of the lines displayed to the user by the display:overFlow property, since this can vary depending the screen size. + var lines = Math.ceil(height / line_height) + 1; + // Counting the number of the characters in the lines + var displayedCharacters = $(target).text().split('').slice(0, lines * (width / parseInt(font_size))).join('').length; + + return displayedCharacters + 20; +} diff --git a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl index d65fb9763..2ad22920a 100644 --- a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl +++ b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl @@ -45,22 +45,27 @@

{$roomDisplay.name|escape:'htmlall':'UTF-8'}

{if $roomDisplay.show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE} -

+

{if $roomDisplay.feature_price_diff >= 0} {convertPrice price = $roomDisplay.price_without_reduction} {/if} {if $roomDisplay.feature_price_diff} {convertPrice price = $roomDisplay.feature_price} {/if} - / {l s='Per Night' mod='wkhotelroom'} + + / {l s='Per Night' mod='wkhotelroom'} +

{/if}
- diff --git a/modules/wkhotelroom/wkhotelroom.php b/modules/wkhotelroom/wkhotelroom.php index 2df6101fd..2fc1d0ab8 100644 --- a/modules/wkhotelroom/wkhotelroom.php +++ b/modules/wkhotelroom/wkhotelroom.php @@ -97,7 +97,15 @@ class WkHotelRoom extends Module ) ); + Media::addJsDef( + array( + 'readMoreText' => $this->l('Read More.', null, true), + 'readLessText' => $this->l('Read Less.', null, true) + ) + ); + $this->context->controller->addCSS($this->_path.'/views/css/WkHotelRoomBlockFront.css'); + $this->context->controller->addJs($this->_path.'/views/js/WkHotelRoomBlockFront.js'); return $this->display(__FILE__, 'hotelRoomDisplayBlock.tpl'); } @@ -220,7 +228,7 @@ class WkHotelRoom extends Module } return true; } - + public function deleteConfigKeys() { $configVars = array( From d390dd5fdf6c77934f33bfa24c7982cf3dc061f0 Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Mon, 3 Jun 2024 19:52:39 +0530 Subject: [PATCH 02/30] Added: option for modules to manipulate KPI data --- classes/controller/AdminController.php | 20 +++ classes/helper/HelperKpi.php | 5 + controllers/admin/AdminCartsController.php | 16 +-- .../admin/AdminCustomerThreadsController.php | 14 +- .../admin/AdminCustomersController.php | 24 ++-- controllers/admin/AdminModulesController.php | 14 +- controllers/admin/AdminOrdersController.php | 36 +++-- controllers/admin/AdminProductsController.php | 27 ++-- controllers/admin/AdminStatsController.php | 126 +++++++++--------- .../admin/AdminTranslationsController.php | 14 +- .../classes/HotelBranchInformation.php | 14 +- 11 files changed, 151 insertions(+), 159 deletions(-) diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 6d36f953e..470855754 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -320,6 +320,9 @@ class AdminControllerCore extends Controller /** @var string */ protected $display; + /** @var array */ + public $kpis = array(); + /** @var bool */ protected $_includeContainer = true; @@ -2647,6 +2650,23 @@ class AdminControllerCore extends Controller public function renderKpis() { + Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( + 'kpis' => &$this->kpis, + )); + + foreach ($this->kpis as $key => &$kpi) { + $kpi->exclude_id_hotels[] = 3; + if (count($kpi->exclude_id_hotels)) { + if (empty($kpi->id_hotels)) { + $kpi->id_hotels = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1); + } + $kpi->id_hotels = array_diff($kpi->id_hotels, $kpi->exclude_id_hotels); + } + } + + $helper = new HelperKpiRow(); + $helper->kpis = $this->kpis; + return $helper->generate(); } /** diff --git a/classes/helper/HelperKpi.php b/classes/helper/HelperKpi.php index 179ac3045..1cdfff3e0 100644 --- a/classes/helper/HelperKpi.php +++ b/classes/helper/HelperKpi.php @@ -38,6 +38,8 @@ class HelperKpiCore extends Helper public $value; public $data; public $source; + public $id_hotels = false; + public $exclude_id_hotels = array(); public $href; public $target; public $tooltip; @@ -47,6 +49,7 @@ class HelperKpiCore extends Helper { $this->tpl = $this->createTemplate($this->base_tpl); + $this->manageHotelPremissions(); $this->tpl->assign(array( 'id' => $this->id, 'icon' => $this->icon, @@ -57,6 +60,8 @@ class HelperKpiCore extends Helper 'value' => $this->value, 'data' => $this->data, 'source' => $this->source, + 'id_hotels' => $this->id_hotels, + 'exclude_id_hotels' => $this->exclude_id_hotels, 'href' => $this->href, 'target' => $this->target, 'tooltip' => $this->tooltip, diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index 3f3798675..dd8938267 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -197,7 +197,7 @@ class AdminCartsControllerCore extends AdminController $helper->data = ConfigurationKPI::get('CONVERSION_RATE_CHART'); } $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=conversion_rate'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-carts'; @@ -209,7 +209,7 @@ class AdminCartsControllerCore extends AdminController $helper->subtitle = sprintf($this->l('From %s to %s', null, null, false), $date_from, $date_to); $helper->href = $this->context->link->getAdminLink('AdminCarts').'&action=filterOnlyAbandonedCarts&date_from='.$date_from.'&date_to='.$date_to; $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=abandoned_cart'; - $kpis[] = $helper; + $this->kpis[] = $helper; $daysForAvgOrderVal = Configuration::get('PS_ORDER_KPI_AVG_ORDER_VALUE_NB_DAYS'); $helper = new HelperKpi(); @@ -219,7 +219,7 @@ class AdminCartsControllerCore extends AdminController $helper->title = $this->l('Average Order Value', null, null, false); $helper->subtitle = $daysForAvgOrderVal.' '.$this->l('days', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=average_order_value'; - $kpis[] = $helper; + $this->kpis[] = $helper; $daysForProfitPerVisitor = Configuration::get('PS_ORDER_KPI_PER_VISITOR_PROFIT_NB_DAYS'); $helper = new HelperKpi(); @@ -229,15 +229,9 @@ class AdminCartsControllerCore extends AdminController $helper->title = $this->l('Net Profit per Visitor', null, null, false); $helper->subtitle = $daysForProfitPerVisitor.' '.$this->l('days', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=netprofit_visit'; - $kpis[] = $helper; + $this->kpis[] = $helper; - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); - - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - return $helper->generate(); + return parent::renderKpis(); } diff --git a/controllers/admin/AdminCustomerThreadsController.php b/controllers/admin/AdminCustomerThreadsController.php index c7a52fc5e..ac4ad3670 100644 --- a/controllers/admin/AdminCustomerThreadsController.php +++ b/controllers/admin/AdminCustomerThreadsController.php @@ -524,7 +524,7 @@ class AdminCustomerThreadsControllerCore extends AdminController $helper->color = 'color1'; $helper->title = $this->l('Pending Discussion Threads', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=pending_messages'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-age'; @@ -533,7 +533,7 @@ class AdminCustomerThreadsControllerCore extends AdminController $helper->title = $this->l('Average Response Time', null, null, false); $helper->subtitle = $this->l('30 days', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=avg_msg_response_time'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-messages-per-thread'; @@ -542,15 +542,9 @@ class AdminCustomerThreadsControllerCore extends AdminController $helper->title = $this->l('Messages per Thread', null, null, false); $helper->subtitle = $this->l('30 day', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=messages_per_thread'; - $kpis[] = $helper; + $this->kpis[] = $helper; - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); - - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - return $helper->generate(); + return parent::renderKpis(); } public function renderView() diff --git a/controllers/admin/AdminCustomersController.php b/controllers/admin/AdminCustomersController.php index 6c763f10c..310cb23d3 100644 --- a/controllers/admin/AdminCustomersController.php +++ b/controllers/admin/AdminCustomersController.php @@ -689,7 +689,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = $this->l('All Time', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=orders_per_customer'; $helper->tooltip = $this->l('The average number of orders placed per customer in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-total-frequent-customers'; @@ -699,7 +699,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = $this->l('All Time', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_frequent_customers'; $helper->tooltip = $this->l('The total number of frequent customers in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-revenue-per-available-customer'; @@ -710,7 +710,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = sprintf($this->l('%d Days', null, null, false), (int) $nbDaysRevPac); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=revenue_per_available_customer'; $helper->tooltip = $this->l('Revenue per Available Customer (RevPAC) in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-total-newsletter-registrations'; @@ -720,7 +720,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = $this->l('All Time', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_newsletter_registrations'; $helper->tooltip = $this->l('The total number of newsletter registrations in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-conversion-rate'; @@ -731,7 +731,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = sprintf($this->l('%d Days', null, null, false), (int) $nbDaysConversionRate); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=conversion_rate'; $helper->tooltip = $this->l('The percentage of visitors who created a booking in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-total-new-customers'; @@ -742,7 +742,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = sprintf($this->l('%d Days', null, null, false), (int) $nbDaysNewCustomers); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_new_customers'; $helper->tooltip = $this->l('The total number of new customers who registered in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-total-banned-customers'; @@ -752,7 +752,7 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = $this->l('All Time', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_banned_customers'; $helper->tooltip = $this->l('The total number of banned customers.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-gender'; @@ -762,15 +762,9 @@ class AdminCustomersControllerCore extends AdminController $helper->subtitle = $this->l('All Time', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=customer_main_gender'; $helper->tooltip = $this->l('The main gender from all the customers.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); - - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - return $helper->generate(); + return parent::renderKpis(); } public function renderView() diff --git a/controllers/admin/AdminModulesController.php b/controllers/admin/AdminModulesController.php index a71362676..bfba269ae 100644 --- a/controllers/admin/AdminModulesController.php +++ b/controllers/admin/AdminModulesController.php @@ -1333,7 +1333,7 @@ class AdminModulesControllerCore extends AdminController $helper->color = 'color1'; $helper->title = $this->l('Installed Modules', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=installed_modules'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-disabled-modules'; @@ -1341,7 +1341,7 @@ class AdminModulesControllerCore extends AdminController $helper->color = 'color2'; $helper->title = $this->l('Disabled Modules', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=disabled_modules'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-update-modules'; @@ -1349,15 +1349,9 @@ class AdminModulesControllerCore extends AdminController $helper->color = 'color3'; $helper->title = $this->l('Modules to Update', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=update_modules'; - $kpis[] = $helper; + $this->kpis[] = $helper; - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); - - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - return $helper->generate(); + return parent::renderKpis(); } public function initModal() diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 3cfdfdf15..6657e9a7d 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -2312,7 +2312,7 @@ class AdminOrdersControllerCore extends AdminController $helper->color = 'color3'; $helper->title = $this->l('Order Date'); $helper->value = Tools::displayDate($objOrder->date_add); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-order-total'; @@ -2320,7 +2320,7 @@ class AdminOrdersControllerCore extends AdminController $helper->color = 'color4'; $helper->title = $this->l('Total'); $helper->value = Tools::displayPrice($objOrder->total_paid_tax_incl, new Currency($objOrder->id_currency)); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-messages'; @@ -2329,7 +2329,7 @@ class AdminOrdersControllerCore extends AdminController $helper->title = $this->l('Messages'); $helper->href = $this->context->link->getAdminLink('AdminCustomerThreads').'&id_order='.$objOrder->id; $helper->value = count(CustomerThread::getCustomerMessages($objOrder->id_customer, null, $objOrder->id)); - $kpis[] = $helper; + $this->kpis[] = $helper; $objHotelBookingDetail = new HotelBookingDetail(); $numRooms = count($objHotelBookingDetail->getBookingDataByOrderId($objOrder->id)); @@ -2340,11 +2340,7 @@ class AdminOrdersControllerCore extends AdminController $helper->title = $this->l('Total Rooms'); $helper->href = '#start_products'; $helper->value = $numRooms; - $kpis[] = $helper; - - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); + $this->kpis[] = $helper; } else { $time = time(); $kpis = array(); @@ -2356,7 +2352,7 @@ class AdminOrdersControllerCore extends AdminController $helper->title = $this->l('Total Sales', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_sales'; $helper->tooltip = $this->l('Total sales/revenue of all the orders created.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-total-due-amount'; @@ -2366,7 +2362,7 @@ class AdminOrdersControllerCore extends AdminController $helper->href = $this->context->link->getAdminLink('AdminOrders').'&submitResetorder=1&due_amount_orders=1'; $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_due_amount'; $helper->tooltip = $this->l('Total due amount of all the orders created.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $arivalDate = date('Y-m-d'); $helper = new HelperKpi(); @@ -2378,7 +2374,7 @@ class AdminOrdersControllerCore extends AdminController $helper->href = $this->context->link->getAdminLink('AdminOrders').'&orders_arrival_today=1'; $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=today_arrivals'; $helper->tooltip = $this->l('Total number of arrivals for today.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $departureDate = date('Y-m-d'); $helper = new HelperKpi(); @@ -2390,7 +2386,7 @@ class AdminOrdersControllerCore extends AdminController $helper->href = $this->context->link->getAdminLink('AdminOrders').'&orders_departures_today=1'; $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=today_departures'; $helper->tooltip = $this->l('Total number of departures for today.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $dateFrom = date('Y-m-d'); $dateTo = date('Y-m-d', strtotime('+1 day')); @@ -2403,7 +2399,7 @@ class AdminOrdersControllerCore extends AdminController $helper->href = $this->context->link->getAdminLink('AdminOrders').'&orders_stay_over=1'; $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=today_stay_over'; $helper->tooltip = $this->l('Total number of stay overs for today.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-carts'; @@ -2416,7 +2412,7 @@ class AdminOrdersControllerCore extends AdminController $helper->href = $this->context->link->getAdminLink('AdminCarts').'&action=filterOnlyAbandonedCarts&date_from='.$dateFrom.'&date_to='.$dateTo; $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=abandoned_cart'; $helper->tooltip = $this->l('Total number of abandoned carts in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $daysForConversionRate = Configuration::get('PS_KPI_CONVERSION_RATE_NB_DAYS'); $helper = new HelperKpi(); @@ -2427,7 +2423,7 @@ class AdminOrdersControllerCore extends AdminController $helper->subtitle = $daysForConversionRate.' '.$this->l('days', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=conversion_rate'; $helper->tooltip = $this->l('Percentage of visits that resulted in an order/booking in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $daysForAvgOrderVal = Configuration::get('PS_ORDER_KPI_AVG_ORDER_VALUE_NB_DAYS'); $helper = new HelperKpi(); @@ -2438,7 +2434,7 @@ class AdminOrdersControllerCore extends AdminController $helper->subtitle = $daysForAvgOrderVal.' '.$this->l('days', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=average_order_value'; $helper->tooltip = $this->l('Total average order value without tax in given period of time.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-average-lead-time'; @@ -2447,7 +2443,7 @@ class AdminOrdersControllerCore extends AdminController $helper->title = $this->l('Average Lead Time', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=average_lead_time'; $helper->tooltip = $this->l('Average number of days between the time guests book their rooms and the time guest schedule to arrive at the hotel.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-average-guest-in-booking'; @@ -2456,12 +2452,10 @@ class AdminOrdersControllerCore extends AdminController $helper->title = $this->l('Average Guest Per Booking', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=average_guest_in_booking'; $helper->tooltip = $this->l('Average number of guests per booking.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; } - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - return $helper->generate(); + return parent::renderKpis(); } public function renderView() diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 21bba9ce7..c66791ac4 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -2449,7 +2449,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=total_rooms'; $helper->tooltip = $this->l('The total number of rooms in all hotels.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-occupied-rooms'; @@ -2459,7 +2459,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=occupied_rooms'; $helper->tooltip = $this->l('The current count of rooms that are currently occupied by guests.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-vacant-rooms'; @@ -2469,7 +2469,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=vacant_rooms'; $helper->tooltip = $this->l('The count of rooms that are currently unoccupied and available for booking.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-reserved-rooms'; @@ -2479,7 +2479,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=booked_rooms'; $helper->tooltip = $this->l('The number of rooms that are currently booked but not yet occupied.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-disabled-rooms'; @@ -2489,7 +2489,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=disabled_rooms'; $helper->tooltip = $this->l('The number of rooms that are currently disabled.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-online-bookable-rooms'; @@ -2499,7 +2499,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=online_bookable_rooms'; $helper->tooltip = $this->l('The total number of rooms that can be booked only using website.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-offline-bookable-rooms'; @@ -2509,7 +2509,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = $this->l('Today', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=offline_bookable_rooms'; $helper->tooltip = $this->l('The number of rooms that can be booked either through website or offline channels (e.g., phone or in-person).', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-best-selling-room-type'; @@ -2520,7 +2520,7 @@ class AdminProductsControllerCore extends AdminController $helper->subtitle = sprintf($this->l('%d Days', null, null, false), (int) $nbDaysBestSelling); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=best_selling_room_type'; $helper->tooltip = $this->l('Displays the best selling room type based on the last 30 days of sales.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-disbled-room-types'; @@ -2530,16 +2530,9 @@ class AdminProductsControllerCore extends AdminController $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=disabled_room_types'; $helper->href = Context::getContext()->link->getAdminLink('AdminProducts').'&productFilter_sa!active=0&submitFilterproduct=1'; $helper->tooltip = $this->l('The total number of room types that are currently disabled.', null, null, false); - $kpis[] = $helper; + $this->kpis[] = $helper; - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); - - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - - return $helper->generate(); + return parent::renderKpis(); } public function renderList() diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index 782f989f8..ce55508d4 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -262,15 +262,15 @@ class AdminStatsControllerCore extends AdminStatsTabController return $sales; } else { return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue( - 'SELECT SUM(total_paid_tax_excl / o.conversion_rate), - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + 'SELECT SUM(total_paid_tax_excl / o.`conversion_rate`), t.`id_hotel` FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state - WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').' HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel) + LEFT JOIN ( + SELECT hbd.`id_hotel` as id_hotel, hbd.`id_order` as id_order + FROM`'._DB_PREFIX_.'htl_booking_detail` hbd + GROUP BY hbd.`id_order` + ) t ON (t.`id_order` = o.`id_order`) + WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').HotelBranchInformation::addHotelRestriction($id_hotel) ); } } @@ -287,7 +287,7 @@ class AdminStatsControllerCore extends AdminStatsTabController if (!$distinct_products) { return '0%'; } - return round(100 * $distinct_products / AdminStatsController::getTotalRoomTypes()).'%'; + return round(100 * $distinct_products / AdminStatsControllerCore::getTotalRoomTypes()).'%'; } public static function getOrders($date_from, $date_to, $granularity = false, $id_hotel = false) @@ -402,7 +402,7 @@ class AdminStatsControllerCore extends AdminStatsTabController public static function getMainCountry($date_from, $date_to) { - $total_orders = AdminStatsController::getOrders($date_from, $date_to); + $total_orders = AdminStatsControllerCore::getOrders($date_from, $date_to); if (!$total_orders) { return false; } @@ -593,7 +593,8 @@ class AdminStatsControllerCore extends AdminStatsTabController public function displayAjaxGetKpi() { - $value = $this->getLatestKpiValue(Tools::getValue('kpi')); + ddd(Tools::getValue('id_hotels')); + $value = $this->getLatestKpiValue(Tools::getValue('kpi'), Tools::getValue('id_hotels')); if ($value !== false) { $array = array('value' => $value); if (isset($data)) { @@ -604,7 +605,7 @@ class AdminStatsControllerCore extends AdminStatsTabController die(json_encode(array('has_errors' => true))); } - public function getLatestKpiValue($kpi) + public function getLatestKpiValue($kpi, $idHotels) { $currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT')); $value = false; @@ -612,17 +613,18 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'conversion_rate': $nbDaysConversionRate = Validate::isUnsignedInt(Configuration::get('PS_KPI_CONVERSION_RATE_NB_DAYS')) ? Configuration::get('PS_KPI_CONVERSION_RATE_NB_DAYS') : 30; - $visitors = AdminStatsController::getVisits( + $visitors = AdminStatsControllerCore::getVisits( true, date('Y-m-d', strtotime('-'.($nbDaysConversionRate + 1).' day')), date('Y-m-d', strtotime('+1 day')), false /*'day'*/ ); - $orders = AdminStatsController::getOrders( + $orders = AdminStatsControllerCore::getOrders( date('Y-m-d', strtotime('-'.($nbDaysConversionRate + 1).' day')), date('Y-m-d', strtotime('-1 day')), - false /*'day'*/ + false /*'day'*/, + $idHotels ); $visits_sum = $visitors; //array_sum($visitors); @@ -640,7 +642,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'abandoned_cart': - $value = AdminStatsController::getAbandonedCarts( + $value = AdminStatsControllerCore::getAbandonedCarts( date('Y-m-d', strtotime('-2 day')).' 0:0:0', date('Y-m-d', strtotime('-1 day')).' 23:59:59', _TIME_1_DAY_ @@ -648,62 +650,62 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'installed_modules': - $value = AdminStatsController::getInstalledModules(); + $value = AdminStatsControllerCore::getInstalledModules(); break; case 'disabled_modules': - $value = AdminStatsController::getDisabledModules(); + $value = AdminStatsControllerCore::getDisabledModules(); break; case 'update_modules': - $value = AdminStatsController::getModulesToUpdate(); + $value = AdminStatsControllerCore::getModulesToUpdate(); break; case 'percent_product_stock': - $value = AdminStatsController::getPercentProductStock(); + $value = AdminStatsControllerCore::getPercentProductStock(); ConfigurationKPI::updateValue('PERCENT_PRODUCT_STOCK', $value); ConfigurationKPI::updateValue('PERCENT_PRODUCT_STOCK_EXPIRE', strtotime('+4 hour')); break; case 'percent_product_out_of_stock': - $value = AdminStatsController::getPercentProductOutOfStock(); + $value = AdminStatsControllerCore::getPercentProductOutOfStock(); ConfigurationKPI::updateValue('PERCENT_PRODUCT_OUT_OF_STOCK', $value); ConfigurationKPI::updateValue('PERCENT_PRODUCT_OUT_OF_STOCK_EXPIRE', strtotime('+4 hour')); break; case 'product_avg_gross_margin': - $value = AdminStatsController::getProductAverageGrossMargin(); + $value = AdminStatsControllerCore::getProductAverageGrossMargin(); break; case 'disabled_categories': - $value = AdminStatsController::getDisabledCategories(); + $value = AdminStatsControllerCore::getDisabledCategories(); break; case 'disabled_room_types': - $value = AdminStatsController::getDisabledRoomTypes(0); + $value = AdminStatsControllerCore::getDisabledRoomTypes($idHotels); ConfigurationKPI::updateValue('DISABLED_ROOM_TYPES', $value); ConfigurationKPI::updateValue('DISABLED_ROOM_TYPES_EXPIRE', strtotime('+2 hour')); break; case 'disabled_products': - if (AdminStatsController::getTotalProducts()) { - $value = round(100 * AdminStatsController::getDisabledProducts() / AdminStatsController::getTotalProducts(), 2).'%'; + if (AdminStatsControllerCore::getTotalProducts()) { + $value = round(100 * AdminStatsControllerCore::getDisabledProducts() / AdminStatsControllerCore::getTotalProducts(), 2).'%'; } else { $value = '0%'; } break; case '8020_sales_catalog': - $value = AdminStatsController::get8020SalesCatalog(date('Y-m-d', strtotime('-30 days')), date('Y-m-d')); + $value = AdminStatsControllerCore::get8020SalesCatalog(date('Y-m-d', strtotime('-30 days')), date('Y-m-d')); $value = sprintf($this->l('%d%% of your Catalog'), $value); break; case 'empty_categories': - $value = AdminStatsController::getEmptyCategories(); + $value = AdminStatsControllerCore::getEmptyCategories(); break; case 'customer_main_gender': - $value = AdminStatsController::getCustomerMainGender(); + $value = AdminStatsControllerCore::getCustomerMainGender(); if ($value === false) { $value = $this->l('No customers', null, null, false); @@ -718,11 +720,11 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'pending_messages': - $value = (int)AdminStatsController::getPendingMessages(); + $value = (int)AdminStatsControllerCore::getPendingMessages(); break; case 'avg_msg_response_time': - $value = AdminStatsController::getAverageMessageResponseTime(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), true); + $value = AdminStatsControllerCore::getAverageMessageResponseTime(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), true); if ($value <= 0) { $value = '--'; @@ -736,7 +738,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'messages_per_thread': - $value = round(AdminStatsController::getMessagesPerThread(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day'))), 1); + $value = round(AdminStatsControllerCore::getMessagesPerThread(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day'))), 1); break; case 'enabled_languages': @@ -752,7 +754,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'main_country': - if (!($row = AdminStatsController::getMainCountry(date('Y-m-d', strtotime('-30 day')), date('Y-m-d')))) { + if (!($row = AdminStatsControllerCore::getMainCountry(date('Y-m-d', strtotime('-30 day')), date('Y-m-d')))) { $value = $this->l('No orders', null, null, false); } else { $country = new Country($row['id_country'], $this->context->language->id); @@ -803,10 +805,10 @@ class AdminStatsControllerCore extends AdminStatsTabController $date_from = date('Y-m-d', strtotime('-'.($daysForProfitPerVisitor + 1).' day')); $date_to = date('Y-m-d', strtotime('-1 day')); - $total_visitors = AdminStatsController::getVisits(false, $date_from, $date_to); - $net_profits = AdminStatsController::getTotalSales($date_from, $date_to); - $net_profits -= AdminStatsController::getExpenses($date_from, $date_to); - $net_profits -= AdminStatsController::getPurchases($date_from, $date_to); + $total_visitors = AdminStatsControllerCore::getVisits(false, $date_from, $date_to); + $net_profits = AdminStatsControllerCore::getTotalSales($date_from, $date_to, false, $idHotels); + $net_profits -= AdminStatsControllerCore::getExpenses($date_from, $date_to, false, $idHotels); + $net_profits -= AdminStatsControllerCore::getPurchases($date_from, $date_to, false, $idHotels); if ($total_visitors) { $value = Tools::displayPrice($net_profits / $total_visitors, $currency); @@ -819,13 +821,13 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'products_per_category': - $products = AdminStatsController::getTotalProducts(); - $categories = AdminStatsController::getTotalCategories(); + $products = AdminStatsControllerCore::getTotalProducts(); + $categories = AdminStatsControllerCore::getTotalCategories(); $value = round($products / $categories); break; case 'top_category': - if (!($id_category = AdminStatsController::getBestCategory(date('Y-m-d', strtotime('-1 month')), date('Y-m-d', strtotime('+1 month'))))) { + if (!($id_category = AdminStatsControllerCore::getBestCategory(date('Y-m-d', strtotime('-1 month')), date('Y-m-d', strtotime('+1 month'))))) { $value = $this->l('No category', null, null, false); } else { $category = new Category($id_category, $this->context->language->id); @@ -837,10 +839,10 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'best_selling_room_type': $nbDaysBestSelling = Validate::isUnsignedInt(Configuration::get('PS_KPI_BEST_SELLING_ROOM_TYPE_NB_DAYS')) ? Configuration::get('PS_KPI_BEST_SELLING_ROOM_TYPE_NB_DAYS') : 30; - if (!($idProduct = AdminStatsController::getBestSellingRoomType( + if (!($idProduct = AdminStatsControllerCore::getBestSellingRoomType( date('Y-m-d', strtotime('-'.($nbDaysBestSelling + 1).' day')), date('Y-m-d', strtotime('-1 day')), - 0 + $idHotels ))) { $value = $this->l('--', null, null, false); } else { @@ -851,42 +853,42 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'total_rooms': - $value = AdminStatsController::getTotalRooms(0); + $value = AdminStatsControllerCore::getTotalRooms($idHotels); break; case 'occupied_rooms': - $value = AdminStatsController::getOccupiedRooms(0); + $value = AdminStatsControllerCore::getOccupiedRooms($idHotels); break; case 'vacant_rooms': - $totalAvailableRooms = AdminStatsController::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, 0); + $totalAvailableRooms = AdminStatsControllerCore::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); $totalAvailableRooms = $totalAvailableRooms[strtotime(date('Y-m-d'))]; - $totalOccupiedRooms = AdminStatsController::getOccupiedRooms(0); + $totalOccupiedRooms = AdminStatsControllerCore::getOccupiedRooms($idHotels); $value = $totalAvailableRooms - $totalOccupiedRooms; break; case 'booked_rooms': - $value = AdminStatsController::getBookedRooms(0); + $value = AdminStatsControllerCore::getBookedRooms($idHotels); break; case 'disabled_rooms': - $value = AdminStatsController::getDisabledRoomsForDiscreteDates(date('Y-m-d'), null, 0); + $value = AdminStatsControllerCore::getDisabledRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); $value = $value[strtotime(date('Y-m-d'))]; break; case 'online_bookable_rooms': - $value = AdminStatsController::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, 0, 1); + $value = AdminStatsControllerCore::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels, 1); $value = $value[strtotime(date('Y-m-d'))]; break; case 'offline_bookable_rooms': - $value = AdminStatsController::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, 0); + $value = AdminStatsControllerCore::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); $value = $value[strtotime(date('Y-m-d'))]; break; @@ -894,17 +896,17 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'total_frequent_customers': $nbOrdersFrequentCustomers = Configuration::get('PS_KPI_FREQUENT_CUSTOMER_NB_ORDERS'); - $value = AdminStatsController::getTotalFrequentCustomers($nbOrdersFrequentCustomers, 0); + $value = AdminStatsControllerCore::getTotalFrequentCustomers($nbOrdersFrequentCustomers, $idHotels); break; case 'revenue_per_available_customer': $nbDaysRevPac = Configuration::get('PS_KPI_REVPAC_NB_DAYS'); - $value = AdminStatsController::getRevenuePerAvailableCustomer( + $value = AdminStatsControllerCore::getRevenuePerAvailableCustomer( date('Y-m-d', strtotime('-'.($nbDaysRevPac + 1).' day')), date('Y-m-d', strtotime('-1 day')), - 0 + $idHotels ); $value = Tools::displayPrice($value, $currency); @@ -912,23 +914,23 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'total_newsletter_registrations': - $value = AdminStatsController::getTotalNewsletterRegistrations(); + $value = AdminStatsControllerCore::getTotalNewsletterRegistrations(); break; case 'total_new_customers': $nbDaysNewCustomers = Validate::isUnsignedInt(Configuration::get('PS_KPI_NEW_CUSTOMERS_NB_DAYS')) ? Configuration::get('PS_KPI_NEW_CUSTOMERS_NB_DAYS') : 30; - $value = AdminStatsController::getTotalNewCustomers($nbDaysNewCustomers); + $value = AdminStatsControllerCore::getTotalNewCustomers($nbDaysNewCustomers); break; case 'total_banned_customers': - $value = AdminStatsController::getTotalBannedCustomers(); + $value = AdminStatsControllerCore::getTotalBannedCustomers(); break; case 'total_sales': - $totalSales = AdminStatsController::getTotalSales('', '', false, false, 1); + $totalSales = AdminStatsController::getTotalSales('', '', false, $idHotels); if ($totalSales > 0) { $value = Tools::displayPrice($totalSales, $currency); } else { @@ -938,24 +940,24 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'today_arrivals': $dateToday = date('Y-m-d'); $value = 0; - if ($arrivalsData = AdminStatsController::getArrivalsByDate($dateToday)) { + if ($arrivalsData = AdminStatsControllerCore::getArrivalsByDate($dateToday, $idHotels)) { $value = $arrivalsData['total_arrivals']; } break; case 'today_departures': $dateToday = date('Y-m-d'); $value = 0; - if ($departureData = AdminStatsController::getDeparturesByDate($dateToday)) { + if ($departureData = AdminStatsControllerCore::getDeparturesByDate($dateToday, $idHotels)) { $value = $departureData['total_departures']; } break; case 'today_stay_over': $dateToday = date('Y-m-d'); - $value = AdminStatsController::getStayOversByDate($dateToday); + $value = AdminStatsControllerCore::getStayOversByDate($dateToday, $idHotels); break; case 'total_due_amount': $dateToday = date('Y-m-d'); - $dueAmount = AdminStatsController::getTotalDueAmount('', '', false, 1); + $dueAmount = AdminStatsControllerCore::getTotalDueAmount('', '', $idHotels, 1); if ($dueAmount > 0) { $value = Tools::displayPrice($dueAmount, $currency); } else { @@ -964,11 +966,11 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'average_lead_time': $dateToday = date('Y-m-d'); - $value = Tools::ps_round(AdminStatsController::getAverageLeadTime(), 2); + $value = Tools::ps_round(AdminStatsControllerCore::getAverageLeadTime('', '', $idHotels), 2); break; case 'average_guest_in_booking': $dateToday = date('Y-m-d'); - $value = AdminStatsController::getAverageGuestsPerBooking(); + $value = AdminStatsControllerCore::getAverageGuestsPerBooking('', '', $idHotels); $value = Tools::ps_round($value['avg_adults'], 2).''.$this->l('Adults').', '.Tools::ps_round($value['avg_children'], 2).''.$this->l('Children'); break; default: diff --git a/controllers/admin/AdminTranslationsController.php b/controllers/admin/AdminTranslationsController.php index 5f275f62d..b3604821b 100644 --- a/controllers/admin/AdminTranslationsController.php +++ b/controllers/admin/AdminTranslationsController.php @@ -1366,7 +1366,7 @@ class AdminTranslationsControllerCore extends AdminController $helper->href = $this->context->link->getAdminLink('AdminLanguages'); $helper->title = $this->l('Enabled Languages', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=enabled_languages'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-fo-translations'; @@ -1374,7 +1374,7 @@ class AdminTranslationsControllerCore extends AdminController $helper->color = 'color3'; $helper->title = $this->l('Front office Translations', null, null, false); $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=frontoffice_translations'; - $kpis[] = $helper; + $this->kpis[] = $helper; $helper = new HelperKpi(); $helper->id = 'box-bo-translations'; @@ -1386,15 +1386,9 @@ class AdminTranslationsControllerCore extends AdminController } $helper->source = $this->context->link->getAdminLink('AdminStats').'&ajax=1&action=getKpi&kpi=backoffice_translations'; $helper->refresh = (bool)(ConfigurationKPI::get('BACKOFFICE_TRANSLATIONS_EXPIRE') < $time); - $kpis[] = $helper; + $this->kpis[] = $helper; - Hook::exec('action'.$this->controller_name.'KPIListingModifier', array( - 'kpis' => &$kpis, - )); - - $helper = new HelperKpiRow(); - $helper->kpis = $kpis; - return $helper->generate(); + return parent::renderKpis(); } /** diff --git a/modules/hotelreservationsystem/classes/HotelBranchInformation.php b/modules/hotelreservationsystem/classes/HotelBranchInformation.php index 05af3c72b..d950e1566 100644 --- a/modules/hotelreservationsystem/classes/HotelBranchInformation.php +++ b/modules/hotelreservationsystem/classes/HotelBranchInformation.php @@ -852,11 +852,19 @@ class HotelBranchInformation extends ObjectModel $idProfile = Context::getContext()->employee->id_profile; } + $accessedIds = self::getProfileAccessedHotels($idProfile, 1, 1); if (!$idsHotel) { - $idsHotel = self::getProfileAccessedHotels($idProfile, 1, 1); + $idsHotel = $accessedIds; } else { - $idsHotel = array($idsHotel); + if (!is_array($idsHotel)) { + $idsHotel = array($idsHotel); + } + // check if passed hotel id's are available for current employee + $idsHotel = array_filter($idsHotel, function ($idHotel) use($accessedIds) { + return in_array($idHotel, $accessedIds); + }); } + $restriction = ' AND '; if (count($idsHotel)) { if ($alias) { @@ -866,7 +874,7 @@ class HotelBranchInformation extends ObjectModel $identifier = "`$identifier`"; $restriction .= $alias.$identifier.' IN ('.implode(', ', $idsHotel).') '; } else { - $restriction .= 1; + $restriction .= 0; } return $restriction; From 969fa850309fd9eaf4eefe711382113793738ade Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Mon, 1 Jul 2024 16:57:00 +0530 Subject: [PATCH 03/30] Fixed: Partial cart rule not creating when using multiple coupons in a single cart --- classes/PaymentModule.php | 216 +++++++++++++++++++++++--------------- 1 file changed, 132 insertions(+), 84 deletions(-) diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index d7e75b7d2..9d08b3469 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -246,6 +246,8 @@ abstract class PaymentModuleCore extends Module // Make sure CartRule caches are empty CartRule::cleanCache(); $cart_rules = $this->context->cart->getCartRules(); + $appliedCartRules = array(); + $orderTotals = array(); foreach ($cart_rules as $cart_rule) { if (($rule = new CartRule((int)$cart_rule['obj']->id)) && Validate::isLoadedObject($rule)) { if ($error = $rule->checkValidity($this->context, true, true)) { @@ -260,6 +262,24 @@ abstract class PaymentModuleCore extends Module $error = sprintf(Tools::displayError('CartRule ID %1s (%2s) used in this cart is not valid and has been withdrawn from cart'), (int)$rule->id, $rule_name); PrestaShopLogger::addLog($error, 3, '0000002', 'Cart', (int)$this->context->cart->id); } + } else { + $appliedCartRules[$rule->id] = array( + 'obj' => $cart_rule['obj'], + 'tax' => $cart_rule['obj']->reduction_tax, + 'reduction_amount' => $rule->reduction_amount, + 'available_for_use' => array(), + 'used' => array( + 'excl' => 0, + 'incl' => 0 + ) + ); + if ((int) $rule->reduction_currency !== (int) $this->context->cart->id_currency) { + $appliedCartRules[$rule->id]['reduction_amount'] = Tools::convertPriceFull( + $rule->reduction_amount, + new Currency($rule->reduction_currency), + new Currency($this->context->cart->id_currency) + ); + } } } } @@ -496,6 +516,7 @@ abstract class PaymentModuleCore extends Module /** @var OrderDetail $order_detail */ $order = $order_list[$key]; + $orderTotals[$order->id] = array('incl' => $order->total_products_wt, 'excl' => $order->total_products); if (!$order_creation_failed && isset($order->id)) { // first set if_hotel as 0 and get the hotel id from room type info -> below $idHotel = 0; @@ -619,91 +640,10 @@ abstract class PaymentModuleCore extends Module if (!$values['tax_excl']) { continue; } - - // IF - // The value of the voucher is greater than the total of the order - // Partial use is allowed - // This is an "amount" reduction, not a reduction in % or a gift - // THEN - // The voucher is cloned with a new value corresponding to the remainder - $reduction_amount_converted = $cart_rule['obj']->reduction_amount; - if ((int) $cart_rule['obj']->reduction_currency !== (int) $this->context->cart->id_currency) { - $reduction_amount_converted = Tools::convertPriceFull( - $cart_rule['obj']->reduction_amount, - new Currency($cart_rule['obj']->reduction_currency), - new Currency($this->context->cart->id_currency) - ); - } - if ($cart_rule['obj']->reduction_tax) { - $remaining_amount = $values['tax_incl'] - $order->total_products_wt; - } else { - $remaining_amount = $values['tax_excl'] - $order->total_products; - } - if ($remaining_amount > 0 && $cart_rule['obj']->partial_use == 1 && $reduction_amount_converted > 0) { - // Create a new voucher from the original - $voucher = new CartRule((int)$cart_rule['obj']->id); // We need to instantiate the CartRule without lang parameter to allow saving it - unset($voucher->id); - - // Set a new voucher code - // For a customer, applying voucher ABCD will create partial vouchers ABCD-2, ABCD-3 and so on, and - // applying voucher ABCD-2 will create vouchers ABCD-2-2, ABCD-2-3 and so on - $voucher->code = empty($voucher->code) ? substr(md5($order->id.'-'.$order->id_customer.'-'.$cart_rule['obj']->id), 0, 16) : $voucher->code.'-2'; - while (CartRule::cartRuleExists($voucher->code, $order->id_customer)) { - if (preg_match('/\-([0-9]{1,2})$/', $voucher->code, $matches)) { - $voucher->code = preg_replace('/'.$matches[1].'$/', (intval($matches[1]) + 1), $voucher->code); - } - } - - // Set the new voucher value - $voucher->reduction_amount = $remaining_amount; - if ($voucher->reduction_tax) { - // Add total shipping amout only if reduction amount > total shipping - if ($voucher->free_shipping == 1 && $voucher->reduction_amount >= $order->total_shipping_tax_incl) { - $voucher->reduction_amount -= $order->total_shipping_tax_incl; - } - } else { - // Add total shipping amout only if reduction amount > total shipping - if ($voucher->free_shipping == 1 && $voucher->reduction_amount >= $order->total_shipping_tax_excl) { - $voucher->reduction_amount -= $order->total_shipping_tax_excl; - } - } - if ($voucher->reduction_amount <= 0) { - continue; - } - - if ($this->context->customer->isGuest()) { - $voucher->id_customer = 0; - } else { - $voucher->id_customer = $order->id_customer; - } - - $voucher->quantity = 1; - $voucher->reduction_currency = $order->id_currency; - $voucher->quantity_per_user = 1; - $voucher->free_shipping = 0; - if ($voucher->add()) { - // If the voucher has conditions, they are now copied to the new voucher - CartRule::copyConditions($cart_rule['obj']->id, $voucher->id); - - $params = array( - '{voucher_amount}' => Tools::displayPrice($voucher->reduction_amount, $this->context->currency, false), - '{voucher_num}' => $voucher->code, - '{firstname}' => $this->context->customer->firstname, - '{lastname}' => $this->context->customer->lastname, - '{id_order}' => $order->reference, - '{order_name}' => $order->getUniqReference() - ); - Mail::Send( - (int)$order->id_lang, - 'voucher', - sprintf(Mail::l('New voucher for your order %s', (int)$order->id_lang), $order->reference), - $params, - $this->context->customer->email, - $this->context->customer->firstname.' '.$this->context->customer->lastname, - null, null, null, null, _PS_MAIL_DIR_, false, (int)$order->id_shop - ); - } + if (!isset($appliedCartRules[$cart_rule['obj']->id]['available_for_use'][$order->id])) { + $appliedCartRules[$cart_rule['obj']->id]['available_for_use'][$order->id]; } + $appliedCartRules[$cart_rule['obj']->id]['available_for_use'][$order->id] = $values; $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values, 0, $cart_rule['obj']->free_shipping); @@ -1424,6 +1364,114 @@ abstract class PaymentModuleCore extends Module } } // End foreach $order_detail_list + if (count($appliedCartRules)) { + // check if any cart rules have available reduction_amount remaining and are partiall applied + foreach ($appliedCartRules as $idCartRule => $cartRule) { + if (count($cartRule['available_for_use'])) { + foreach ($cartRule['available_for_use'] as $idOrder => $cartValOrders) { + if (isset($orderTotals[$idOrder])) { + if ($orderTotals[$idOrder]['excl'] > $cartRule['available_for_use'][$idOrder]['tax_excl']) { + $appliedCartRules[$idCartRule]['used']['excl'] += $cartRule['available_for_use'][$idOrder]['tax_excl']; + $orderTotals[$idOrder]['excl'] -= $cartRule['available_for_use'][$idOrder]['tax_excl']; + } else { + $appliedCartRules[$idCartRule]['used']['excl'] += $orderTotals[$idOrder]['excl']; + $orderTotals[$idOrder]['excl'] = 0; + } + if ($orderTotals[$idOrder]['incl'] > $cartRule['available_for_use'][$idOrder]['tax_incl']) { + $appliedCartRules[$idCartRule]['used']['incl'] += $cartRule['available_for_use'][$idOrder]['tax_incl']; + $orderTotals[$idOrder]['incl'] -= $cartRule['available_for_use'][$idOrder]['tax_incl']; + } else { + $appliedCartRules[$idCartRule]['used']['incl'] += $orderTotals[$idOrder]['incl']; + $orderTotals[$idOrder]['incl'] = 0; + } + } + } + } + } + + foreach ($appliedCartRules as $idCartRule => $cartRule) { + $remaining_amount = 0; + if (!$cartRule['tax'] && $cartRule['reduction_amount'] > $cartRule['used']['excl']) { + $remaining_amount = $cartRule['reduction_amount'] - $cartRule['used']['excl']; + } elseif ($cartRule['tax'] && $cartRule['reduction_amount'] > $cartRule['used']['incl']) { + $remaining_amount = $cartRule['reduction_amount'] - $cartRule['used']['incl']; + } + + if ($remaining_amount > 0 && $cartRule['obj']->partial_use == 1) { + // IF + // The value of the voucher is greater than the used value + // Partial use is allowed + // This is an "amount" reduction, not a reduction in % or a gift + // THEN + // The voucher is cloned with a new value corresponding to the remainder + + // Create a new voucher from the original + $voucher = new CartRule((int)$cartRule['obj']->id); // We need to instantiate the CartRule without lang parameter to allow saving it + unset($voucher->id); + + // Set a new voucher code + // For a customer, applying voucher ABCD will create partial vouchers ABCD-2, ABCD-3 and so on, and + // applying voucher ABCD-2 will create vouchers ABCD-2-2, ABCD-2-3 and so on + $voucher->code = empty($voucher->code) ? substr(md5($order->id.'-'.$order->id_customer.'-'.$cartRule['obj']->id), 0, 16) : $voucher->code.'-2'; + while (CartRule::cartRuleExists($voucher->code, $order->id_customer)) { + if (preg_match('/\-([0-9]{1,2})$/', $voucher->code, $matches)) { + $voucher->code = preg_replace('/'.$matches[1].'$/', (intval($matches[1]) + 1), $voucher->code); + } + } + + // Set the new voucher value + $voucher->reduction_amount = $remaining_amount; + if ($voucher->reduction_tax) { + // Add total shipping amout only if reduction amount > total shipping + if ($voucher->free_shipping == 1 && $voucher->reduction_amount >= $order->total_shipping_tax_incl) { + $voucher->reduction_amount -= $order->total_shipping_tax_incl; + } + } else { + // Add total shipping amout only if reduction amount > total shipping + if ($voucher->free_shipping == 1 && $voucher->reduction_amount >= $order->total_shipping_tax_excl) { + $voucher->reduction_amount -= $order->total_shipping_tax_excl; + } + } + if ($voucher->reduction_amount <= 0) { + continue; + } + + if ($this->context->customer->isGuest()) { + $voucher->id_customer = 0; + } else { + $voucher->id_customer = $order->id_customer; + } + + $voucher->quantity = 1; + $voucher->reduction_currency = $order->id_currency; + $voucher->quantity_per_user = 1; + $voucher->free_shipping = 0; + if ($voucher->add()) { + // If the voucher has conditions, they are now copied to the new voucher + CartRule::copyConditions($cartRule['obj']->id, $voucher->id); + + $params = array( + '{voucher_amount}' => Tools::displayPrice($voucher->reduction_amount, $this->context->currency, false), + '{voucher_num}' => $voucher->code, + '{firstname}' => $this->context->customer->firstname, + '{lastname}' => $this->context->customer->lastname, + '{id_order}' => $order->reference, + '{order_name}' => $order->getUniqReference() + ); + Mail::Send( + (int)$order->id_lang, + 'voucher', + sprintf(Mail::l('New voucher for your order %s', (int)$order->id_lang), $order->reference), + $params, + $this->context->customer->email, + $this->context->customer->firstname.' '.$this->context->customer->lastname, + null, null, null, null, _PS_MAIL_DIR_, false, (int)$order->id_shop + ); + } + } + } + } + // Use the last order as currentOrder if (isset($order) && $order->id) { $this->currentOrder = (int)$order->id; From 4a8881781e8a9be7cb179ea62561a743e591efad Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Mon, 22 Jul 2024 17:35:18 +0530 Subject: [PATCH 04/30] Fixed: partial cart rules are created for unused cart rules --- classes/Cart.php | 4 ---- classes/PaymentModule.php | 4 ++-- themes/hotel-reservation-theme/order-opc.tpl | 4 ---- 3 files changed, 2 insertions(+), 10 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index 8401a36b9..0979e25a8 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -3816,10 +3816,6 @@ class CartCore extends ObjectModel } } - - if (((float)$cart_rule['value_real'] == 0 && (int)$cart_rule['free_shipping'] == 0)) { - unset($cart_rules[$key]); - } } $objHotelAdvancedPayment = new HotelAdvancedPayment(); diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 8bae3b68b..a4bcf47e4 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -1399,9 +1399,9 @@ abstract class PaymentModuleCore extends Module foreach ($appliedCartRules as $idCartRule => $cartRule) { $remaining_amount = 0; - if (!$cartRule['tax'] && $cartRule['reduction_amount'] > $cartRule['used']['excl']) { + if (!$cartRule['tax'] && $cartRule['used']['excl'] && $cartRule['reduction_amount'] > $cartRule['used']['excl']) { $remaining_amount = $cartRule['reduction_amount'] - $cartRule['used']['excl']; - } elseif ($cartRule['tax'] && $cartRule['reduction_amount'] > $cartRule['used']['incl']) { + } elseif ($cartRule['tax'] && $cartRule['used']['incl'] && $cartRule['reduction_amount'] > $cartRule['used']['incl']) { $remaining_amount = $cartRule['reduction_amount'] - $cartRule['used']['incl']; } diff --git a/themes/hotel-reservation-theme/order-opc.tpl b/themes/hotel-reservation-theme/order-opc.tpl index a288e606a..92109848c 100644 --- a/themes/hotel-reservation-theme/order-opc.tpl +++ b/themes/hotel-reservation-theme/order-opc.tpl @@ -393,10 +393,6 @@ {if sizeof($discounts)}
{foreach $discounts as $discount} - {if ((float)$discount.value_real == 0 && $discount.free_shipping != 1) || ((float)$discount.value_real == 0 && $discount.code == '')} - {continue} - {/if} -
{$discount.name|escape:'html':'UTF-8'} From dc3fee3ece0c716778db27cc905d45dc563eb4d2 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Thu, 25 Jul 2024 15:43:56 +0530 Subject: [PATCH 05/30] removed the tinymce from the room type short description, and updated the read more and read less toggle buttons --- .../controllers/products/informations.tpl | 3 +- classes/Product.php | 2 +- .../views/css/WkHotelRoomBlockFront.css | 5 +- .../views/js/WkHotelRoomBlockFront.js | 46 ++++++------------- .../templates/hook/hotelRoomDisplayBlock.tpl | 7 +-- modules/wkhotelroom/wkhotelroom.php | 2 +- 6 files changed, 19 insertions(+), 46 deletions(-) diff --git a/admin/themes/default/template/controllers/products/informations.tpl b/admin/themes/default/template/controllers/products/informations.tpl index 68a6d2d18..201cbc41d 100644 --- a/admin/themes/default/template/controllers/products/informations.tpl +++ b/admin/themes/default/template/controllers/products/informations.tpl @@ -356,9 +356,8 @@ file="controllers/products/textarea_lang.tpl" languages=$languages input_name='description_short' - class="autoload_rte" input_value=$product->description_short - max=$PS_PRODUCT_SHORT_DESC_LIMIT} + maxlength=$PS_PRODUCT_SHORT_DESC_LIMIT}
diff --git a/classes/Product.php b/classes/Product.php index c47bb1f04..9569df37a 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -357,7 +357,7 @@ class ProductCore extends ObjectModel ), 'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128), 'description' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), - 'description_short' => array('type' => self::TYPE_HTML, 'lang' => true, 'validate' => 'isCleanHtml'), + 'description_short' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCleanHtml'), 'available_now' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'size' => 255), 'available_later' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'IsGenericName', 'size' => 255), ), diff --git a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css index 4319dbb72..4e8590cfa 100644 --- a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css +++ b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css @@ -25,9 +25,6 @@ cursor: pointer; font-weight: 400; } -.htlRoomTypeDescTextContainer p{ - margin: 0px; -} @media (min-width: 530px) { .hotelRoomDescContainer{ position: absolute; @@ -72,7 +69,7 @@ color: #555555; font-weight: 300; line-height: 21px; - margin-bottom: 9px; + margin-bottom: 10px; } a.htlRoomTypeBookNow { font-size: 15px; diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js index 4aba4b360..afd2304b4 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -18,10 +18,12 @@ */ $(document).ready(function() { - toggleRoomDescriptionExtras(); - $(window).on('resize', function() { - removePreviousChanges(); - toggleRoomDescriptionExtras(); + $(document).find('.htlRoomTypeDescText').each(function() { + // checking if the display:overFlow has been applied to the description. + if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 15) { + // Only show read more and read less text if the text is wrapped. + initToogleOtions($(this)[0]); + } }); $(document).on('click', '.read-extra-text', function(e) { @@ -36,44 +38,22 @@ $(document).ready(function() { }); }); -// Function is called to revert the changes made to the description on the window size change. -function removePreviousChanges() -{ - $(document).find('.htlRoomTypeDescText').each(function() { - //Reverting the changes so we can reapply them according the new screen size. - $(this).html($(this).parent().find('.htlRoomTypeDescTextOriginal').html()); - if (!$(this).hasClass('htlRoomTypeDescTextContainer')){ - $(this).addClass('htlRoomTypeDescTextContainer'); - } - }); -} -function addExtraTextToDescription(target) +function initToogleOtions(target) { // Getting the number of displayed characters var show_char = getChars(target); var ellipses = "... "; var content = $(target).html(); if (content.trim().length > show_char) { - var a = content.trim().substr(0, show_char).replace('

' , ''); // getting the text that we want to show to the user, removed the first

tag. - if (content.trim().substr(content.trim().length - 4, content.trim().length) == '

') { - content = content.trim().substr(0, content.trim().length - 4);// removed the last closing

tag. - } - var b = content.trim().substr(show_char - content.trim().length) // getting the text that will be toggled + // Dividing the text into two parts so that we are able to diffrentiate the displayed text from hidden text. + var a = content.trim().substr(0, show_char); + var b = content.trim().substr(show_char - content.trim().length); // Adding the read more and read less text with the ellipses to the original text. var html = a + "" + ellipses + ""+ readMoreText +""; - $(target).html('

' + html+ '

'); + $(target).html(html); } } -function toggleRoomDescriptionExtras() -{ - $(document).find('.htlRoomTypeDescText').each(function() { - // checking if the display:overFlow has been applied to the description. - if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 15) { - // Only show read more and read less text if the text is wrapped. - addExtraTextToDescription($(this)[0]); - } - }); -} + // Getting the number of characters displayed to the user. function getChars(target) { var style = window.getComputedStyle(target, null); @@ -90,4 +70,4 @@ function getChars(target) { var displayedCharacters = $(target).text().split('').slice(0, lines * (width / parseInt(font_size))).join('').length; return displayedCharacters + 20; -} +} \ No newline at end of file diff --git a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl index 2ad22920a..38cdd5f63 100644 --- a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl +++ b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl @@ -59,13 +59,10 @@ {/if}
- {$roomDisplay.description} -
- diff --git a/modules/wkhotelroom/wkhotelroom.php b/modules/wkhotelroom/wkhotelroom.php index 2fc1d0ab8..0ae240929 100644 --- a/modules/wkhotelroom/wkhotelroom.php +++ b/modules/wkhotelroom/wkhotelroom.php @@ -104,8 +104,8 @@ class WkHotelRoom extends Module ) ); - $this->context->controller->addCSS($this->_path.'/views/css/WkHotelRoomBlockFront.css'); $this->context->controller->addJs($this->_path.'/views/js/WkHotelRoomBlockFront.js'); + $this->context->controller->addCSS($this->_path.'/views/css/WkHotelRoomBlockFront.css'); return $this->display(__FILE__, 'hotelRoomDisplayBlock.tpl'); } From d71c631522413f05faa8ad25abfa08988d2874c3 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Mon, 29 Jul 2024 17:51:58 +0530 Subject: [PATCH 06/30] Added function to handle the window resize and optimized the getChars function to count the displayed characters --- .../views/js/WkHotelRoomBlockFront.js | 45 ++++++++++++++----- .../templates/hook/hotelRoomDisplayBlock.tpl | 3 ++ 2 files changed, 38 insertions(+), 10 deletions(-) diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js index afd2304b4..1eebe5a76 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -18,12 +18,10 @@ */ $(document).ready(function() { - $(document).find('.htlRoomTypeDescText').each(function() { - // checking if the display:overFlow has been applied to the description. - if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 15) { - // Only show read more and read less text if the text is wrapped. - initToogleOtions($(this)[0]); - } + applyChangesToDescription(); + $(window).on('resize', function() { + cleanDescriptions(); + applyChangesToDescription(); }); $(document).on('click', '.read-extra-text', function(e) { @@ -37,15 +35,30 @@ $(document).ready(function() { } }); }); +function cleanDescriptions() { + $(document).find('.htlRoomTypeDescText').each(function() { + $(this).addClass('htlRoomTypeDescTextContainer'); + $(this).html($(this).parent().find('.htlRoomTypeDescOriginal').html()); + }); +} -function initToogleOtions(target) -{ +function applyChangesToDescription() { + $(document).find('.htlRoomTypeDescText').each(function() { + // checking if the display:overFlow has been applied to the description. + if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 15) { + // Only show read more and read less text if the text is wrapped. + initToggleOptions($(this)[0]); + } + }); +} + +function initToggleOptions(target) { // Getting the number of displayed characters var show_char = getChars(target); var ellipses = "... "; var content = $(target).html(); if (content.trim().length > show_char) { - // Dividing the text into two parts so that we are able to diffrentiate the displayed text from hidden text. + // Dividing the text into two parts so that we are able to differentiate the displayed text from hidden text. var a = content.trim().substr(0, show_char); var b = content.trim().substr(show_char - content.trim().length); // Adding the read more and read less text with the ellipses to the original text. @@ -69,5 +82,17 @@ function getChars(target) { // Counting the number of the characters in the lines var displayedCharacters = $(target).text().split('').slice(0, lines * (width / parseInt(font_size))).join('').length; - return displayedCharacters + 20; + if ($(document).width() > 991) { + displayedCharacters += 30; + } else if ($(document).width() > 768) { + displayedCharacters += 34; + } else if ($(document).width() > 570) { + displayedCharacters += 25; + } else if ($(document).width() > 444) { + displayedCharacters += 20; + } else { + displayedCharacters += 15; + } + + return displayedCharacters; } \ No newline at end of file diff --git a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl index 38cdd5f63..0daebcc80 100644 --- a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl +++ b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl @@ -61,6 +61,9 @@
{$roomDisplay.description|escape:'html':'UTF-8'}
+ From 61b9fe9c72e7bb23a561a6a7d56a9157e2e60ce7 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Tue, 30 Jul 2024 10:53:01 +0530 Subject: [PATCH 07/30] Add descriptions for the admin about recommended sizes for testimonial, interior, and amenities images --- .../controllers/admin/AdminAboutHotelBlockSettingController.php | 1 + .../controllers/admin/AdminFeaturesModuleSettingController.php | 1 + .../admin/AdminTestimonialsModuleSettingController.php | 1 + 3 files changed, 3 insertions(+) diff --git a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php index 6321141ac..9916a9f14 100644 --- a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php +++ b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php @@ -208,6 +208,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController $this->l('Maximum image size: %1s'), Tools::formatBytes(Tools::getMaxUploadSize()) ), + 'desc' => $this->l('Recommended resolution: 720 x 720 pixels (Ratio 1:1).'), ), array( 'type' => 'switch', diff --git a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php index 12877fc1b..061ef9d80 100644 --- a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php +++ b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php @@ -201,6 +201,7 @@ class AdminFeaturesModuleSettingController extends ModuleAdminController $this->l('Maximum image size: %1s'), Tools::formatBytes(Tools::getMaxUploadSize()) ), + 'desc' => $this->l('Recommended resolution: 720 x 720 pixels (Ratio 1:1).'), ), array( 'type' => 'switch', diff --git a/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php b/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php index 0eec6e98b..622f665e4 100644 --- a/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php +++ b/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php @@ -185,6 +185,7 @@ class AdminTestimonialsModuleSettingController extends ModuleAdminController 'display_image' => true, 'image' => $imgExist ? $image : false, 'hint' => $this->l('Upload an image of the person to whom this testimonial belongs.'), + 'desc' => $this->l('Recommended resolution: 98 x 98 pixels (Ratio 1:1).'), ), array( 'type' => 'switch', From 7e7a4cc409c975a49c52b00e2b4f324a214e66ab Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Fri, 16 Aug 2024 18:56:15 +0530 Subject: [PATCH 08/30] Update process of generating partial cart rules --- classes/PaymentModule.php | 95 ++++++++------------- controllers/admin/AdminCartsController.php | 3 + controllers/front/ParentOrderController.php | 20 +++-- 3 files changed, 51 insertions(+), 67 deletions(-) diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index a4bcf47e4..08e9ba3b6 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -247,8 +247,6 @@ abstract class PaymentModuleCore extends Module // Make sure CartRule caches are empty CartRule::cleanCache(); $cart_rules = $this->context->cart->getCartRules(); - $appliedCartRules = array(); - $orderTotals = array(); foreach ($cart_rules as $cart_rule) { if (($rule = new CartRule((int)$cart_rule['obj']->id)) && Validate::isLoadedObject($rule)) { if ($error = $rule->checkValidity($this->context, true, true)) { @@ -263,28 +261,11 @@ abstract class PaymentModuleCore extends Module $error = sprintf(Tools::displayError('CartRule ID %1s (%2s) used in this cart is not valid and has been withdrawn from cart'), (int)$rule->id, $rule_name); PrestaShopLogger::addLog($error, 3, '0000002', 'Cart', (int)$this->context->cart->id); } - } else { - $appliedCartRules[$rule->id] = array( - 'obj' => $cart_rule['obj'], - 'tax' => $cart_rule['obj']->reduction_tax, - 'reduction_amount' => $rule->reduction_amount, - 'available_for_use' => array(), - 'used' => array( - 'excl' => 0, - 'incl' => 0 - ) - ); - if ((int) $rule->reduction_currency !== (int) $this->context->cart->id_currency) { - $appliedCartRules[$rule->id]['reduction_amount'] = Tools::convertPriceFull( - $rule->reduction_amount, - new Currency($rule->reduction_currency), - new Currency($this->context->cart->id_currency) - ); - } } } } + $orderTotals = array(); Hook::exec('actionPackageListGenerateOrder', array('package_list' => &$package_list)); foreach ($package_list as $id_address => $packageByAddress) { foreach ($packageByAddress as $id_package => $package) { @@ -384,6 +365,7 @@ abstract class PaymentModuleCore extends Module // advance payment information $order->is_advance_payment = $this->context->cart->is_advance_payment; + $order->amount_paid = 0; if ($order->is_advance_payment) { $order->advance_paid_amount = (float)Tools::ps_round( (float)$this->context->cart->getOrderTotal(true, Cart::ADVANCE_PAYMENT, $order->product_list, $id_carrier), @@ -410,6 +392,7 @@ abstract class PaymentModuleCore extends Module // Creating order $result = $order->add(); + $orderTotals[$order->id] = array('incl' => $order->total_products_wt, 'excl' => $order->total_products); if (!$result) { PrestaShopLogger::addLog('PaymentModule::validateOrder - Order cannot be created', 3, null, 'Cart', (int)$id_cart, true); @@ -512,11 +495,11 @@ abstract class PaymentModuleCore extends Module // Make sure CartRule caches are empty CartRule::cleanCache(); $objRoomType = new HotelRoomType(); + $cart_rules = $this->context->cart->getCartRules(); foreach ($order_detail_list as $key => $order_detail) { /** @var OrderDetail $order_detail */ $order = $order_list[$key]; - $orderTotals[$order->id] = array('incl' => $order->total_products_wt, 'excl' => $order->total_products); if (!$order_creation_failed && isset($order->id)) { // first set if_hotel as 0 and get the hotel id from room type info -> below $idHotel = 0; @@ -625,7 +608,7 @@ abstract class PaymentModuleCore extends Module } $cart_rules_list = array(); - foreach ($cart_rules as $cart_rule) { + foreach ($cart_rules as $key => $cart_rule) { if ($cart_rule['obj']->reduction_product > 0 && !$order->orderContainProduct($cart_rule['obj']->reduction_product)) { continue; } @@ -640,10 +623,34 @@ abstract class PaymentModuleCore extends Module if (!$values['tax_excl']) { continue; } - if (!isset($appliedCartRules[$cart_rule['obj']->id]['available_for_use'][$order->id])) { - $appliedCartRules[$cart_rule['obj']->id]['available_for_use'][$order->id]; + + $used = array('incl' => 0, 'excl' => 0); + if (!isset($cart_rules[$key]['remaining'])) { + $cart_rules[$key]['remaining'] = $cart_rule['reduction_amount']; + } + if ($cart_rule['reduction_tax']) { + if ($orderTotals[$order->id]['incl'] > $values['tax_incl']) { + $used['incl'] = $values['tax_incl']; + $used['excl'] = $values['tax_excl']; + } else { + $used['incl'] = $orderTotals[$order->id]['incl']; + $used['excl'] = $orderTotals[$order->id]['excl']; + } + $orderTotals[$order->id]['incl'] -= $used['incl']; + $orderTotals[$order->id]['excl'] -= $used['excl']; + $cart_rules[$key]['remaining'] -= $used['incl']; + } else { + if ($orderTotals[$order->id]['excl'] > $values['tax_excl']) { + $used['incl'] = $values['tax_incl']; + $used['excl'] = $values['tax_excl']; + } else { + $used['incl'] = $orderTotals[$order->id]['incl']; + $used['excl'] = $orderTotals[$order->id]['excl']; + } + $orderTotals[$order->id]['incl'] -= $used['incl']; + $orderTotals[$order->id]['excl'] -= $used['excl']; + $cart_rules[$key]['remaining'] -= $used['excl']; } - $appliedCartRules[$cart_rule['obj']->id]['available_for_use'][$order->id] = $values; $order->addCartRule($cart_rule['obj']->id, $cart_rule['obj']->name, $values, 0, $cart_rule['obj']->free_shipping); @@ -1372,40 +1379,10 @@ abstract class PaymentModuleCore extends Module } } // End foreach $order_detail_list - if (count($appliedCartRules)) { - // check if any cart rules have available reduction_amount remaining and are partiall applied - foreach ($appliedCartRules as $idCartRule => $cartRule) { - if (count($cartRule['available_for_use'])) { - foreach ($cartRule['available_for_use'] as $idOrder => $cartValOrders) { - if (isset($orderTotals[$idOrder])) { - if ($orderTotals[$idOrder]['excl'] > $cartRule['available_for_use'][$idOrder]['tax_excl']) { - $appliedCartRules[$idCartRule]['used']['excl'] += $cartRule['available_for_use'][$idOrder]['tax_excl']; - $orderTotals[$idOrder]['excl'] -= $cartRule['available_for_use'][$idOrder]['tax_excl']; - } else { - $appliedCartRules[$idCartRule]['used']['excl'] += $orderTotals[$idOrder]['excl']; - $orderTotals[$idOrder]['excl'] = 0; - } - if ($orderTotals[$idOrder]['incl'] > $cartRule['available_for_use'][$idOrder]['tax_incl']) { - $appliedCartRules[$idCartRule]['used']['incl'] += $cartRule['available_for_use'][$idOrder]['tax_incl']; - $orderTotals[$idOrder]['incl'] -= $cartRule['available_for_use'][$idOrder]['tax_incl']; - } else { - $appliedCartRules[$idCartRule]['used']['incl'] += $orderTotals[$idOrder]['incl']; - $orderTotals[$idOrder]['incl'] = 0; - } - } - } - } - } + if (count($cart_rules)) { + foreach ($cart_rules as $idCartRule => $cartRule) { - foreach ($appliedCartRules as $idCartRule => $cartRule) { - $remaining_amount = 0; - if (!$cartRule['tax'] && $cartRule['used']['excl'] && $cartRule['reduction_amount'] > $cartRule['used']['excl']) { - $remaining_amount = $cartRule['reduction_amount'] - $cartRule['used']['excl']; - } elseif ($cartRule['tax'] && $cartRule['used']['incl'] && $cartRule['reduction_amount'] > $cartRule['used']['incl']) { - $remaining_amount = $cartRule['reduction_amount'] - $cartRule['used']['incl']; - } - - if ($remaining_amount > 0 && $cartRule['obj']->partial_use == 1) { + if ($cartRule['remaining'] > 0 && $cartRule['obj']->partial_use == 1) { // IF // The value of the voucher is greater than the used value // Partial use is allowed @@ -1428,7 +1405,7 @@ abstract class PaymentModuleCore extends Module } // Set the new voucher value - $voucher->reduction_amount = $remaining_amount; + $voucher->reduction_amount = $cartRule['remaining']; if ($voucher->reduction_tax) { // Add total shipping amout only if reduction amount > total shipping if ($voucher->free_shipping == 1 && $voucher->reduction_amount >= $order->total_shipping_tax_incl) { diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index 3f3798675..286510888 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -713,6 +713,9 @@ class AdminCartsControllerCore extends AdminController } elseif ($err = $cart_rule->checkValidity($this->context)) { $errors[] = $err; } + if ($this->context->cart->getOrderTotal(true, Cart::BOTH) <= 0) { + $errors[] = Tools::displayError('Cannot add any more voucher.'); + } if (!count($errors)) { if (!$this->context->cart->addCartRule((int)$cart_rule->id)) { $errors[] = Tools::displayError('Can\'t add the voucher.'); diff --git a/controllers/front/ParentOrderController.php b/controllers/front/ParentOrderController.php index 7bac1b5d9..52a63c8cd 100644 --- a/controllers/front/ParentOrderController.php +++ b/controllers/front/ParentOrderController.php @@ -106,15 +106,19 @@ class ParentOrderControllerCore extends FrontController $this->errors[] = Tools::displayError('The voucher code is invalid.'); } else { if (($cartRule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cartRule)) { - if ($error = $cartRule->checkValidity($this->context, false, true)) { - $this->errors[] = $error; - } else { - $this->context->cart->addCartRule($cartRule->id); - CartRule::autoAddToCart($this->context); - if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { - Tools::redirect('index.php?controller=order-opc&addingCartRule=1'); + if ($this->context->cart->getOrderTotal(true, Cart::BOTH) > 0) { + if ($error = $cartRule->checkValidity($this->context, false, true)) { + $this->errors[] = $error; + } else { + $this->context->cart->addCartRule($cartRule->id); + CartRule::autoAddToCart($this->context); + if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { + Tools::redirect('index.php?controller=order-opc&addingCartRule=1'); + } + Tools::redirect('index.php?controller=order&addingCartRule=1'); } - Tools::redirect('index.php?controller=order&addingCartRule=1'); + } else { + $this->errors[] = Tools::displayError('You cannot add any more voucher.'); } } else { $this->errors[] = Tools::displayError('This voucher does not exists.'); From 68cbbf866105b865a0033a1fb85958bfc1870155 Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Wed, 21 Aug 2024 17:24:27 +0530 Subject: [PATCH 09/30] added cart amount validation in checkvalidity function --- classes/CartRule.php | 3 +++ controllers/admin/AdminCartsController.php | 3 --- controllers/front/ParentOrderController.php | 20 ++++++++------------ 3 files changed, 11 insertions(+), 15 deletions(-) diff --git a/classes/CartRule.php b/classes/CartRule.php index 634434e53..20b627514 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -515,6 +515,9 @@ class CartRuleCore extends ObjectModel return false; } + if (!$alreadyInCart && $context->cart->getOrderTotal(true, Cart::BOTH) <= 0) { + return (!$display_error) ? false : Tools::displayError('You cannot add any more voucher.'); + } if (!$this->active) { return (!$display_error) ? false : Tools::displayError('This voucher is disabled'); } diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index 286510888..3f3798675 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -713,9 +713,6 @@ class AdminCartsControllerCore extends AdminController } elseif ($err = $cart_rule->checkValidity($this->context)) { $errors[] = $err; } - if ($this->context->cart->getOrderTotal(true, Cart::BOTH) <= 0) { - $errors[] = Tools::displayError('Cannot add any more voucher.'); - } if (!count($errors)) { if (!$this->context->cart->addCartRule((int)$cart_rule->id)) { $errors[] = Tools::displayError('Can\'t add the voucher.'); diff --git a/controllers/front/ParentOrderController.php b/controllers/front/ParentOrderController.php index 52a63c8cd..7bac1b5d9 100644 --- a/controllers/front/ParentOrderController.php +++ b/controllers/front/ParentOrderController.php @@ -106,19 +106,15 @@ class ParentOrderControllerCore extends FrontController $this->errors[] = Tools::displayError('The voucher code is invalid.'); } else { if (($cartRule = new CartRule(CartRule::getIdByCode($code))) && Validate::isLoadedObject($cartRule)) { - if ($this->context->cart->getOrderTotal(true, Cart::BOTH) > 0) { - if ($error = $cartRule->checkValidity($this->context, false, true)) { - $this->errors[] = $error; - } else { - $this->context->cart->addCartRule($cartRule->id); - CartRule::autoAddToCart($this->context); - if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { - Tools::redirect('index.php?controller=order-opc&addingCartRule=1'); - } - Tools::redirect('index.php?controller=order&addingCartRule=1'); - } + if ($error = $cartRule->checkValidity($this->context, false, true)) { + $this->errors[] = $error; } else { - $this->errors[] = Tools::displayError('You cannot add any more voucher.'); + $this->context->cart->addCartRule($cartRule->id); + CartRule::autoAddToCart($this->context); + if (Configuration::get('PS_ORDER_PROCESS_TYPE') == 1) { + Tools::redirect('index.php?controller=order-opc&addingCartRule=1'); + } + Tools::redirect('index.php?controller=order&addingCartRule=1'); } } else { $this->errors[] = Tools::displayError('This voucher does not exists.'); From 6b8da7e2afed7de6cb67a4140fe366f2100ec430 Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Thu, 22 Aug 2024 15:45:40 +0530 Subject: [PATCH 10/30] removed undefined function --- classes/controller/AdminController.php | 1 - classes/helper/HelperKpi.php | 1 - controllers/admin/AdminStatsController.php | 1 - 3 files changed, 3 deletions(-) diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index 2b66db47f..d37d04a51 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -2690,7 +2690,6 @@ class AdminControllerCore extends Controller )); foreach ($this->kpis as $key => &$kpi) { - $kpi->exclude_id_hotels[] = 3; if (count($kpi->exclude_id_hotels)) { if (empty($kpi->id_hotels)) { $kpi->id_hotels = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1); diff --git a/classes/helper/HelperKpi.php b/classes/helper/HelperKpi.php index 1cdfff3e0..927c19b37 100644 --- a/classes/helper/HelperKpi.php +++ b/classes/helper/HelperKpi.php @@ -49,7 +49,6 @@ class HelperKpiCore extends Helper { $this->tpl = $this->createTemplate($this->base_tpl); - $this->manageHotelPremissions(); $this->tpl->assign(array( 'id' => $this->id, 'icon' => $this->icon, diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index f2218032d..23565d6df 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -593,7 +593,6 @@ class AdminStatsControllerCore extends AdminStatsTabController public function displayAjaxGetKpi() { - ddd(Tools::getValue('id_hotels')); $value = $this->getLatestKpiValue(Tools::getValue('kpi'), Tools::getValue('id_hotels')); if ($value !== false) { $array = array('value' => $value); From a3120fac1b6155373380426a4a83b56b7bc30847 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Fri, 23 Aug 2024 12:02:40 +0530 Subject: [PATCH 11/30] Updated: Hotel features assigning process for the admin --- .../admin/AdminAddHotelController.php | 36 +++ .../admin/AdminAssignHotelFeatures.php | 229 ------------------ .../admin/AdminHotelfeaturesController.php | 5 - .../hotelreservationsystem.php | 1 - .../admin/add_hotel/helpers/form/form.tpl | 25 ++ 5 files changed, 61 insertions(+), 235 deletions(-) delete mode 100644 modules/hotelreservationsystem/controllers/admin/AdminAssignHotelFeatures.php diff --git a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php index ded152095..ac90c2cd2 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php @@ -171,6 +171,35 @@ class AdminAddHotelController extends ModuleAdminController } } $smartyVars['order_restrict_date_info'] = $restrictDateInfo; + $objHotelFeatures = new HotelFeatures(); + $hotelFeatures = $this->object->getFeaturesOfHotelByHotelId($this->object->id); + if ($features = $objHotelFeatures->HotelBranchSelectedFeaturesArray($hotelFeatures)) { + foreach ($features as $idFeature => $feature) { + $features[$idFeature]['value'] = $idFeature; + $features[$idFeature]['input_name'] = 'id_feature_parents'; + if (isset($feature['children']) && $feature['children']) { + $selectedChildFeatures = 0; + foreach ($feature['children'] as $childKey => $childFeature) { + $features[$idFeature]['children'][$childKey]['value'] = $childFeature['id']; + $features[$idFeature]['children'][$childKey]['input_name'] = 'id_features'; + if (isset($childFeature['selected']) && $childFeature['selected']) { + $selectedChildFeatures++; + } + } + + if ($selectedChildFeatures == count($feature['children'])) { + $features[$idFeature]['selected'] = true; + } + } + } + } + + $tree = new HelperTree('hotel-features-tree', $features); + $tree->setShowCollapseExpandButton(true) + ->setUseCheckBox(true) + ->setUseBulkActions(true); + $treeContent = $tree->render(); + $smartyVars['hotel_feature_tree'] = $treeContent; } else { $idCountry = Tools::getValue('hotel_country'); } @@ -226,6 +255,7 @@ class AdminAddHotelController extends ModuleAdminController $longitude = Tools::getValue('loclongitude'); $map_formated_address = Tools::getValue('locformatedAddr'); $map_input_text = Tools::getValue('googleInputField'); + $hotelFeatures = Tools::getValue('id_features', array()); // check if field is atleast in default language. Not available in default prestashop $defaultLangId = Configuration::get('PS_LANG_DEFAULT'); @@ -640,6 +670,12 @@ class AdminAddHotelController extends ModuleAdminController $objHotelOrderRestrictDate->preparation_time = $preparationTime; } $objHotelOrderRestrictDate->save(); + + $objHotelFeatures = new HotelBranchFeatures(); + $objHotelFeatures->deleteBranchFeaturesByHotelId($idHotel); + if (!$objHotelFeatures->assignFeaturesToHotel($idHotel, $hotelFeatures)) { + $this->errors[] = $this->l('Some problem occurred while assigning features to the hotel.'); + } } if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) { diff --git a/modules/hotelreservationsystem/controllers/admin/AdminAssignHotelFeatures.php b/modules/hotelreservationsystem/controllers/admin/AdminAssignHotelFeatures.php deleted file mode 100644 index 171dd1a08..000000000 --- a/modules/hotelreservationsystem/controllers/admin/AdminAssignHotelFeatures.php +++ /dev/null @@ -1,229 +0,0 @@ - -* @copyright 2010-2020 Webkul IN -* @license https://store.webkul.com/license.html -*/ - -class AdminAssignHotelFeaturesController extends ModuleAdminController -{ - public function __construct() - { - $this->bootstrap = true; - $this->table = 'htl_branch_features'; - $this->className = 'HotelBranchFeatures'; - $this->identifier = 'id'; - $this->context = Context::getContext(); - - // START send access query information to the admin controller - $this->access_select = ' SELECT a.`id` FROM '._DB_PREFIX_.'htl_branch_features a'; - $this->access_join = ' INNER JOIN '._DB_PREFIX_.'htl_branch_info hbi ON (hbi.id = a.id_hotel)'; - if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) { - $this->access_where = ' WHERE hbi.id IN ('.implode(',', $acsHtls).')'; - } - - parent::__construct(); - - $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'htl_branch_info` hi ON (hi.`id` = a.`id_hotel`)'; - $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'htl_branch_info_lang` hil - ON (hi.`id` = hil.`id` AND hil.id_lang = '.(int)$this->context->language->id.')'; - $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'address` addr ON (addr.`id_hotel` = hi.`id`)'; - $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = addr.`id_state`)'; - $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (cl.`id_country` = addr.`id_country` - AND cl.`id_lang` = '.(int)$this->context->language->id.')'; - - $this->_select .= 'addr.`city` as htl_city, hi.`id` as htl_id, hil.`hotel_name` as htl_name, - s.`name` as `state_name`, cl.`name`'; - $this->_group = 'GROUP BY a.`id_hotel`'; - - $this->fields_list = array( - 'htl_id' => array( - 'title' => $this->l('Hotel ID'), - 'align' => 'center', - 'filter_key' => 'hi!id', - ), - 'htl_name' => array( - 'title' => $this->l('Hotel Name'), - 'align' => 'center', - 'filter_key' => 'hil!hotel_name', - ), - 'htl_city' => array( - 'title' => $this->l('City'), - 'align' => 'center', - 'filter_key' => 'addr!city', - ), - - 'state_name' => array( - 'title' => $this->l('State'), - 'align' => 'center', - 'filter_key' => 's!name', - ), - 'name' => array( - 'title' => $this->l('Country'), - 'align' => 'center', - 'filter_key' => 'cl!name', - ), - 'date_add' => array( - 'title' => $this->l('Date Added'), - 'align' => 'center', - 'type' => 'datetime', - 'filter_key' => 'a!date_add', - ) - ); - - $this->bulk_actions = array( - 'delete' => array( - 'text' => $this->l('Delete selected'), - 'icon' => 'icon-trash', - 'confirm' => $this->l('Delete selected items?') - ) - ); - } - - public function initToolbar() - { - parent::initToolbar(); - - $this->page_header_toolbar_btn['new_feature'] = array( - 'href' => $this->context->link->getAdminLink('AdminHotelFeatures'), - 'desc' => $this->l('Hotel Features'), - 'imgclass' => 'back' - ); - - $this->page_header_toolbar_btn['assignfeatures'] = array( - 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, - 'desc' => $this->l('Assign Features'), - 'imgclass' => 'new' - ); - } - - public function renderList() - { - $this->addRowAction('edit'); - $this->addRowAction('delete'); - - return parent::renderList(); - } - - public function renderForm() - { - $smartyVars = array(); - if ($this->display == 'add') { - $objHotelFeatures = new HotelFeatures(); - $featuresList = $objHotelFeatures->HotelAllCommonFeaturesArray(); - $objBranchInfo = new HotelBranchInformation(); - $unassignedFtrsHotels = $objBranchInfo->getUnassignedFeaturesHotelIds(); - // filter hotels as per accessed hotels - $unassignedFtrsHotels = HotelBranchInformation::filterDataByHotelAccess( - $unassignedFtrsHotels, - $this->context->employee->id_profile, - 1 - ); - - $smartyVars['hotels'] = $unassignedFtrsHotels; - $smartyVars['features_list'] = $featuresList; - } elseif ($this->display == 'edit') { - $id = Tools::getValue('id'); - $objBranchFeatures = new HotelBranchFeatures($id); - $smartyVars['edit'] = 1; - $objHotelFeatures = new HotelFeatures(); - $objBranchInfo = new HotelBranchInformation(); - - $features_hotel = $objBranchInfo->getFeaturesOfHotelByHotelId($objBranchFeatures->id_hotel); - $featuresList = $objHotelFeatures->HotelBranchSelectedFeaturesArray($features_hotel); - - $hotels = $objBranchInfo->hotelsNameAndId(); - $smartyVars['hotel_id'] = $objBranchFeatures->id_hotel; - $smartyVars['hotels'] = $hotels; - $smartyVars['features_list'] = $featuresList; - } - - $this->context->smarty->assign($smartyVars); - - $this->fields_form = array( - 'submit' => array( - 'title' => $this->l('Save') - ) - ); - return parent::renderForm(); - } - - public function processSave() - { - if ($editId = Tools::getValue('edit_hotel_id')) { - $objBranchFeatures = new HotelBranchFeatures(); - $objBranchFeatures->deleteBranchFeaturesByHotelId($editId); - } - if (!$hotelFeatures = Tools::getValue('hotel_fac')) { - $this->errors[] = $this->l('Please select at least one feature to assign to a hotel.'); - } - if (!$idHotel = Tools::getValue('id_hotel')) { - $this->errors[] = $this->l('Please select a hotel first.'); - } - if (!count($this->errors)) { - $objHotelFeatures = new HotelBranchFeatures(); - if (!$objHotelFeatures->assignFeaturesToHotel($idHotel, $hotelFeatures)) { - $this->errors[] = $this->l('Some problem occure while assigning Features to the hotel.'); - } - if (empty($this->errors)) { - if (Tools::isSubmit('submitAdd'.$this->table.'AndStay')) { - Tools::redirectAdmin( - self::$currentIndex.'&id='.(int)$idHotel.'&update'.$this->table.'&conf=3&token='.$this->token - ); - } else { - Tools::redirectAdmin(self::$currentIndex.'&conf=4&token='.$this->token); - } - } - } else { - $this->display = 'add'; - } - } - - public function processDelete() - { - if (Validate::isLoadedObject($object = $this->loadObject())) { - $object = $this->loadObject(); - if ($object->id) { - $objBranchFeatures = new HotelBranchFeatures(); - $objBranchFeatures->deleteBranchFeaturesByHotelId($object->id_hotel); - } - } else { - $this->errors[] = $this->l('An error occurred while deleting the object.').''.$this->table.' '. - $this->l('(cannot load object)'); - } - parent::processDelete(); - } - - protected function processBulkDelete() - { - if (is_array($this->boxes) && !empty($this->boxes)) { - foreach ($this->boxes as $key => $value) { - $objBranchFeatures = new HotelBranchFeatures($value); - $objBranchFeatures->deleteBranchFeaturesByHotelId($objBranchFeatures->id_hotel); - } - parent::processBulkDelete(); - } else { - $this->errors[] = $this->l('You must select at least one element to delete.'); - } - } - - public function setMedia() - { - parent::setMedia(); - $this->addJs(_MODULE_DIR_.'hotelreservationsystem/views/js/HotelReservationAdmin.js'); - $this->addCSS(_MODULE_DIR_.'hotelreservationsystem/views/css/HotelReservationAdmin.css'); - } -} \ No newline at end of file diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelfeaturesController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelfeaturesController.php index 77d352ac0..8d7611c62 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelfeaturesController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelfeaturesController.php @@ -41,11 +41,6 @@ class AdminHotelFeaturesController extends ModuleAdminController 'desc' => $this->l('Add new Features'), 'imgclass' => 'new' ); - - $this->page_header_toolbar_btn['new'] = array( - 'href' => $this->context->link->getAdminLink('AdminAssignHotelFeatures'), - 'desc' => $this->l('Assign Features To Hotel'), - ); } public function renderView() diff --git a/modules/hotelreservationsystem/hotelreservationsystem.php b/modules/hotelreservationsystem/hotelreservationsystem.php index 757825c77..873bae98e 100644 --- a/modules/hotelreservationsystem/hotelreservationsystem.php +++ b/modules/hotelreservationsystem/hotelreservationsystem.php @@ -576,7 +576,6 @@ class HotelReservationSystem extends Module $this->installTab('AdminHotelGeneralSettings', 'Hotel General Configuration', 'AdminHotelConfigurationSetting', false); $this->installTab('AdminHotelFeaturePricesSettings', 'Advanced Price Rules', 'AdminHotelConfigurationSetting', false); $this->installTab('AdminRoomTypeGlobalDemand', 'Additional Demand Configuration', 'AdminHotelConfigurationSetting', false); - $this->installTab('AdminAssignHotelFeatures', 'Assign Hotel Features', false, false); $this->installTab('AdminBookingDocument', 'Booking Documents', false, false); return true; diff --git a/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl b/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl index d35e517cf..b1ed02008 100644 --- a/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl @@ -83,6 +83,12 @@ {l s='Refund Policies' mod='hotelreservationsystem'} +
  • + + + {l s='Features' mod='hotelreservationsystem'} + +
  • {hook h='displayAdminAddHotelFormTab' id_hotel=$hook_arg_id_hotel}
    @@ -488,6 +494,25 @@ {hook h='displayAdminAddHotelFormRefundPoliciesTabAfter' id_hotel=$hook_arg_id_hotel}
    +
    + {hook h='displayAdminAddHotelFormFeaturesTabBefore' id_hotel=$hook_arg_id_hotel} + {if isset($hotel_info.id) && $hotel_info.id} +
    + +
    + {$hotel_feature_tree} +
    +
    + {else} +
    + {l s='Please save hotel information before assigning hotel features.' mod='hotelreservationsystem'} +
    + {/if} + + {hook h='displayAdminAddHotelFormFeaturesTabAfter' id_hotel=$hook_arg_id_hotel} +
    {hook h='displayAdminAddHotelFormTabContent' id_hotel=$hook_arg_id_hotel} From e3dcd91c4fff7c5a9ebffc9afdc85a5f517f6284 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Fri, 23 Aug 2024 15:26:16 +0530 Subject: [PATCH 12/30] optimized the room block to get the charcters to display --- .../wkhotelroom/views/js/WkHotelRoomBlockFront.js | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js index 1eebe5a76..4d314099f 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -83,15 +83,15 @@ function getChars(target) { var displayedCharacters = $(target).text().split('').slice(0, lines * (width / parseInt(font_size))).join('').length; if ($(document).width() > 991) { - displayedCharacters += 30; - } else if ($(document).width() > 768) { - displayedCharacters += 34; - } else if ($(document).width() > 570) { displayedCharacters += 25; - } else if ($(document).width() > 444) { + } else if ($(document).width() > 768) { + displayedCharacters += 35; + } else if ($(document).width() > 570) { displayedCharacters += 20; + } else if ($(document).width() > 444) { + displayedCharacters += 10; } else { - displayedCharacters += 15; + displayedCharacters += 5; } return displayedCharacters; From b3dfa98e6c3a059422edb024d81b862a41eca622 Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Fri, 23 Aug 2024 15:48:57 +0530 Subject: [PATCH 13/30] fixed kip panel visible on all admin pages --- classes/controller/AdminController.php | 20 ++--- controllers/admin/AdminStatsController.php | 86 +++++++++++----------- 2 files changed, 54 insertions(+), 52 deletions(-) diff --git a/classes/controller/AdminController.php b/classes/controller/AdminController.php index d37d04a51..0ddbf4894 100644 --- a/classes/controller/AdminController.php +++ b/classes/controller/AdminController.php @@ -2689,18 +2689,20 @@ class AdminControllerCore extends Controller 'kpis' => &$this->kpis, )); - foreach ($this->kpis as $key => &$kpi) { - if (count($kpi->exclude_id_hotels)) { - if (empty($kpi->id_hotels)) { - $kpi->id_hotels = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1); + if (count($this->kpis)) { + foreach ($this->kpis as $key => &$kpi) { + if (count($kpi->exclude_id_hotels)) { + if (empty($kpi->id_hotels)) { + $kpi->id_hotels = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1); + } + $kpi->id_hotels = array_diff($kpi->id_hotels, $kpi->exclude_id_hotels); } - $kpi->id_hotels = array_diff($kpi->id_hotels, $kpi->exclude_id_hotels); } - } - $helper = new HelperKpiRow(); - $helper->kpis = $this->kpis; - return $helper->generate(); + $helper = new HelperKpiRow(); + $helper->kpis = $this->kpis; + return $helper->generate(); + } } /** diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index 6511077ab..cf8418c40 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -287,7 +287,7 @@ class AdminStatsControllerCore extends AdminStatsTabController if (!$distinct_products) { return '0%'; } - return round(100 * $distinct_products / AdminStatsControllerCore::getTotalRoomTypes()).'%'; + return round(100 * $distinct_products / AdminStatsController::getTotalRoomTypes()).'%'; } public static function getOrders($date_from, $date_to, $granularity = false, $id_hotel = false) @@ -402,7 +402,7 @@ class AdminStatsControllerCore extends AdminStatsTabController public static function getMainCountry($date_from, $date_to) { - $total_orders = AdminStatsControllerCore::getOrders($date_from, $date_to); + $total_orders = AdminStatsController::getOrders($date_from, $date_to); if (!$total_orders) { return false; } @@ -652,14 +652,14 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'conversion_rate': $nbDaysConversionRate = Validate::isUnsignedInt(Configuration::get('PS_KPI_CONVERSION_RATE_NB_DAYS')) ? Configuration::get('PS_KPI_CONVERSION_RATE_NB_DAYS') : 30; - $visitors = AdminStatsControllerCore::getVisits( + $visitors = AdminStatsController::getVisits( true, date('Y-m-d', strtotime('-'.($nbDaysConversionRate + 1).' day')), date('Y-m-d', strtotime('+1 day')), false /*'day'*/ ); - $orders = AdminStatsControllerCore::getOrders( + $orders = AdminStatsController::getOrders( date('Y-m-d', strtotime('-'.($nbDaysConversionRate + 1).' day')), date('Y-m-d', strtotime('-1 day')), false /*'day'*/, @@ -681,7 +681,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'abandoned_cart': - $value = AdminStatsControllerCore::getAbandonedCarts( + $value = AdminStatsController::getAbandonedCarts( date('Y-m-d', strtotime('-2 day')).' 0:0:0', date('Y-m-d', strtotime('-1 day')).' 23:59:59', _TIME_1_DAY_ @@ -689,62 +689,62 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'installed_modules': - $value = AdminStatsControllerCore::getInstalledModules(); + $value = AdminStatsController::getInstalledModules(); break; case 'disabled_modules': - $value = AdminStatsControllerCore::getDisabledModules(); + $value = AdminStatsController::getDisabledModules(); break; case 'update_modules': - $value = AdminStatsControllerCore::getModulesToUpdate(); + $value = AdminStatsController::getModulesToUpdate(); break; case 'percent_product_stock': - $value = AdminStatsControllerCore::getPercentProductStock(); + $value = AdminStatsController::getPercentProductStock(); ConfigurationKPI::updateValue('PERCENT_PRODUCT_STOCK', $value); ConfigurationKPI::updateValue('PERCENT_PRODUCT_STOCK_EXPIRE', strtotime('+4 hour')); break; case 'percent_product_out_of_stock': - $value = AdminStatsControllerCore::getPercentProductOutOfStock(); + $value = AdminStatsController::getPercentProductOutOfStock(); ConfigurationKPI::updateValue('PERCENT_PRODUCT_OUT_OF_STOCK', $value); ConfigurationKPI::updateValue('PERCENT_PRODUCT_OUT_OF_STOCK_EXPIRE', strtotime('+4 hour')); break; case 'product_avg_gross_margin': - $value = AdminStatsControllerCore::getProductAverageGrossMargin(); + $value = AdminStatsController::getProductAverageGrossMargin(); break; case 'disabled_categories': - $value = AdminStatsControllerCore::getDisabledCategories(); + $value = AdminStatsController::getDisabledCategories(); break; case 'disabled_room_types': - $value = AdminStatsControllerCore::getDisabledRoomTypes($idHotels); + $value = AdminStatsController::getDisabledRoomTypes($idHotels); ConfigurationKPI::updateValue('DISABLED_ROOM_TYPES', $value); ConfigurationKPI::updateValue('DISABLED_ROOM_TYPES_EXPIRE', strtotime('+2 hour')); break; case 'disabled_products': - if (AdminStatsControllerCore::getTotalProducts()) { - $value = round(100 * AdminStatsControllerCore::getDisabledProducts() / AdminStatsControllerCore::getTotalProducts(), 2).'%'; + if (AdminStatsController::getTotalProducts()) { + $value = round(100 * AdminStatsController::getDisabledProducts() / AdminStatsController::getTotalProducts(), 2).'%'; } else { $value = '0%'; } break; case '8020_sales_catalog': - $value = AdminStatsControllerCore::get8020SalesCatalog(date('Y-m-d', strtotime('-30 days')), date('Y-m-d')); + $value = AdminStatsController::get8020SalesCatalog(date('Y-m-d', strtotime('-30 days')), date('Y-m-d')); $value = sprintf($this->l('%d%% of your Catalog'), $value); break; case 'empty_categories': - $value = AdminStatsControllerCore::getEmptyCategories(); + $value = AdminStatsController::getEmptyCategories(); break; case 'customer_main_gender': - $value = AdminStatsControllerCore::getCustomerMainGender(); + $value = AdminStatsController::getCustomerMainGender(); if ($value === false) { $value = $this->l('No customers', null, null, false); @@ -759,11 +759,11 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'pending_messages': - $value = (int)AdminStatsControllerCore::getPendingMessages(); + $value = (int)AdminStatsController::getPendingMessages(); break; case 'avg_msg_response_time': - $value = AdminStatsControllerCore::getAverageMessageResponseTime(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), true); + $value = AdminStatsController::getAverageMessageResponseTime(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day')), true); if ($value <= 0) { $value = '--'; @@ -777,7 +777,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'messages_per_thread': - $value = round(AdminStatsControllerCore::getMessagesPerThread(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day'))), 1); + $value = round(AdminStatsController::getMessagesPerThread(date('Y-m-d', strtotime('-31 day')), date('Y-m-d', strtotime('-1 day'))), 1); break; case 'enabled_languages': @@ -793,7 +793,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'main_country': - if (!($row = AdminStatsControllerCore::getMainCountry(date('Y-m-d', strtotime('-30 day')), date('Y-m-d')))) { + if (!($row = AdminStatsController::getMainCountry(date('Y-m-d', strtotime('-30 day')), date('Y-m-d')))) { $value = $this->l('No orders', null, null, false); } else { $country = new Country($row['id_country'], $this->context->language->id); @@ -844,10 +844,10 @@ class AdminStatsControllerCore extends AdminStatsTabController $date_from = date('Y-m-d', strtotime('-'.($daysForProfitPerVisitor + 1).' day')); $date_to = date('Y-m-d', strtotime('-1 day')); - $total_visitors = AdminStatsControllerCore::getVisits(false, $date_from, $date_to); - $net_profits = AdminStatsControllerCore::getTotalSales($date_from, $date_to, false, $idHotels); - $net_profits -= AdminStatsControllerCore::getExpenses($date_from, $date_to, false, $idHotels); - $net_profits -= AdminStatsControllerCore::getPurchases($date_from, $date_to, false, $idHotels); + $total_visitors = AdminStatsController::getVisits(false, $date_from, $date_to); + $net_profits = AdminStatsController::getTotalSales($date_from, $date_to, false, $idHotels); + $net_profits -= AdminStatsController::getExpenses($date_from, $date_to, false, $idHotels); + $net_profits -= AdminStatsController::getPurchases($date_from, $date_to, false, $idHotels); if ($total_visitors) { $value = Tools::displayPrice($net_profits / $total_visitors, $currency); @@ -860,13 +860,13 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'products_per_category': - $products = AdminStatsControllerCore::getTotalProducts(); - $categories = AdminStatsControllerCore::getTotalCategories(); + $products = AdminStatsController::getTotalProducts(); + $categories = AdminStatsController::getTotalCategories(); $value = round($products / $categories); break; case 'top_category': - if (!($id_category = AdminStatsControllerCore::getBestCategory(date('Y-m-d', strtotime('-1 month')), date('Y-m-d', strtotime('+1 month'))))) { + if (!($id_category = AdminStatsController::getBestCategory(date('Y-m-d', strtotime('-1 month')), date('Y-m-d', strtotime('+1 month'))))) { $value = $this->l('No category', null, null, false); } else { $category = new Category($id_category, $this->context->language->id); @@ -878,7 +878,7 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'best_selling_room_type': $nbDaysBestSelling = Validate::isUnsignedInt(Configuration::get('PS_KPI_BEST_SELLING_ROOM_TYPE_NB_DAYS')) ? Configuration::get('PS_KPI_BEST_SELLING_ROOM_TYPE_NB_DAYS') : 30; - if (!($idProduct = AdminStatsControllerCore::getBestSellingRoomType( + if (!($idProduct = AdminStatsController::getBestSellingRoomType( date('Y-m-d', strtotime('-'.($nbDaysBestSelling + 1).' day')), date('Y-m-d', strtotime('-1 day')), $idHotels @@ -892,7 +892,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'total_rooms': - $value = AdminStatsControllerCore::getTotalRooms($idHotels); + $value = AdminStatsController::getTotalRooms($idHotels); break; @@ -931,19 +931,19 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'disabled_rooms': - $value = AdminStatsControllerCore::getDisabledRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); + $value = AdminStatsController::getDisabledRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); $value = $value[strtotime(date('Y-m-d'))]; break; case 'online_bookable_rooms': - $value = AdminStatsControllerCore::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels, 1); + $value = AdminStatsController::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels, 1); $value = $value[strtotime(date('Y-m-d'))]; break; case 'offline_bookable_rooms': - $value = AdminStatsControllerCore::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); + $value = AdminStatsController::getAvailableRoomsForDiscreteDates(date('Y-m-d'), null, $idHotels); $value = $value[strtotime(date('Y-m-d'))]; break; @@ -963,7 +963,7 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'revenue_per_available_customer': $nbDaysRevPac = Configuration::get('PS_KPI_REVPAC_NB_DAYS'); - $value = AdminStatsControllerCore::getRevenuePerAvailableCustomer( + $value = AdminStatsController::getRevenuePerAvailableCustomer( date('Y-m-d', strtotime('-'.($nbDaysRevPac + 1).' day')), date('Y-m-d', strtotime('-1 day')), $idHotels @@ -974,19 +974,19 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'total_newsletter_registrations': - $value = AdminStatsControllerCore::getTotalNewsletterRegistrations(); + $value = AdminStatsController::getTotalNewsletterRegistrations(); break; case 'total_new_customers': $nbDaysNewCustomers = Validate::isUnsignedInt(Configuration::get('PS_KPI_NEW_CUSTOMERS_NB_DAYS')) ? Configuration::get('PS_KPI_NEW_CUSTOMERS_NB_DAYS') : 30; - $value = AdminStatsControllerCore::getTotalNewCustomers($nbDaysNewCustomers); + $value = AdminStatsController::getTotalNewCustomers($nbDaysNewCustomers); break; case 'total_banned_customers': - $value = AdminStatsControllerCore::getTotalBannedCustomers(); + $value = AdminStatsController::getTotalBannedCustomers(); break; case 'total_sales': @@ -1000,24 +1000,24 @@ class AdminStatsControllerCore extends AdminStatsTabController case 'today_arrivals': $dateToday = date('Y-m-d'); $value = 0; - if ($arrivalsData = AdminStatsControllerCore::getArrivalsByDate($dateToday, $idHotels)) { + if ($arrivalsData = AdminStatsController::getArrivalsByDate($dateToday, $idHotels)) { $value = $arrivalsData['total_arrivals']; } break; case 'today_departures': $dateToday = date('Y-m-d'); $value = 0; - if ($departureData = AdminStatsControllerCore::getDeparturesByDate($dateToday, $idHotels)) { + if ($departureData = AdminStatsController::getDeparturesByDate($dateToday, $idHotels)) { $value = $departureData['total_departures']; } break; case 'today_stay_over': $dateToday = date('Y-m-d'); - $value = AdminStatsControllerCore::getStayOversByDate($dateToday, $idHotels); + $value = AdminStatsController::getStayOversByDate($dateToday, $idHotels); break; case 'total_due_amount': $dateToday = date('Y-m-d'); - $dueAmount = AdminStatsControllerCore::getTotalDueAmount('', '', $idHotels, 1); + $dueAmount = AdminStatsController::getTotalDueAmount('', '', $idHotels, 1); if ($dueAmount > 0) { $value = Tools::displayPrice($dueAmount, $currency); } else { @@ -1036,7 +1036,7 @@ class AdminStatsControllerCore extends AdminStatsTabController break; case 'average_guest_in_booking': $dateToday = date('Y-m-d'); - $value = AdminStatsControllerCore::getAverageGuestsPerBooking('', '', $idHotels); + $value = AdminStatsController::getAverageGuestsPerBooking('', '', $idHotels); $value = Tools::ps_round($value['avg_adults'], 2).''.$this->l('Adults').', '.Tools::ps_round($value['avg_children'], 2).''.$this->l('Children'); break; default: From a85dc2513b3bf7dd05ca76b4b8bdc193ee9ff61b Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Fri, 23 Aug 2024 19:02:59 +0530 Subject: [PATCH 14/30] updated the hints for the recommended sizes of the images for about hotel block and hotel interior block --- .../controllers/admin/AdminAboutHotelBlockSettingController.php | 2 +- .../controllers/admin/AdminFeaturesModuleSettingController.php | 2 +- .../admin/AdminTestimonialsModuleSettingController.php | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php index 9916a9f14..44f459f18 100644 --- a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php +++ b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php @@ -208,7 +208,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController $this->l('Maximum image size: %1s'), Tools::formatBytes(Tools::getMaxUploadSize()) ), - 'desc' => $this->l('Recommended resolution: 720 x 720 pixels (Ratio 1:1).'), + 'desc' => $this->l('Recommended resolution: 720 x 360 pixels.'), ), array( 'type' => 'switch', diff --git a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php index 061ef9d80..c07cab495 100644 --- a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php +++ b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php @@ -201,7 +201,7 @@ class AdminFeaturesModuleSettingController extends ModuleAdminController $this->l('Maximum image size: %1s'), Tools::formatBytes(Tools::getMaxUploadSize()) ), - 'desc' => $this->l('Recommended resolution: 720 x 720 pixels (Ratio 1:1).'), + 'desc' => $this->l('Recommended resolution: 720 x 540 pixels.'), ), array( 'type' => 'switch', diff --git a/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php b/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php index 622f665e4..94930b146 100644 --- a/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php +++ b/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php @@ -185,7 +185,7 @@ class AdminTestimonialsModuleSettingController extends ModuleAdminController 'display_image' => true, 'image' => $imgExist ? $image : false, 'hint' => $this->l('Upload an image of the person to whom this testimonial belongs.'), - 'desc' => $this->l('Recommended resolution: 98 x 98 pixels (Ratio 1:1).'), + 'desc' => $this->l('Recommended resolution: 98 x 98 pixels.'), ), array( 'type' => 'switch', From 1e911d9d30409ebc520f41d9d5c37244b87205ab Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Mon, 26 Aug 2024 15:39:41 +0530 Subject: [PATCH 15/30] added feature to remove extra cart rule that are not used during booking --- classes/Cart.php | 28 ++++++++++----- classes/CartRule.php | 36 ++++++++++++++----- .../classes/HotelCartBookingData.php | 12 +++++++ 3 files changed, 59 insertions(+), 17 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index 0979e25a8..ad5f350d2 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -186,6 +186,8 @@ class CartCore extends ObjectModel const ONLY_ROOM_SERVICES_WITH_AUTO_ADD_WITHOUT_CONVENIENCE_FEE = 17; const ONLY_CONVENIENCE_FEE = 18; + const ONLY_PRODUCTS_WITH_DEMANDS = 19; + public function __construct($id = null, $id_lang = null) { parent::__construct($id); @@ -366,8 +368,8 @@ class CartCore extends ObjectModel */ public function getAverageProductsTaxRate(&$cart_amount_te = null, &$cart_amount_ti = null) { - $cart_amount_ti = $this->getOrderTotal(true, Cart::ONLY_PRODUCTS); - $cart_amount_te = $this->getOrderTotal(false, Cart::ONLY_PRODUCTS); + $cart_amount_ti = $this->getOrderTotal(true, Cart::ONLY_PRODUCTS_WITH_DEMANDS); + $cart_amount_te = $this->getOrderTotal(false, Cart::ONLY_PRODUCTS_WITH_DEMANDS); $cart_vat_amount = $cart_amount_ti - $cart_amount_te; @@ -1029,6 +1031,8 @@ class CartCore extends ObjectModel if ((int)$cartRule->gift_product) { $this->updateQty(1, $cartRule->gift_product, $cartRule->gift_product_attribute, false, 'up', 0, null, false); } + // after adding new cart rule, check if any of the appled cart rules are not being used + CartRule::removeUnusedCartRules(Context::getContext()); return true; } @@ -1233,6 +1237,8 @@ class CartCore extends ObjectModel if ($auto_add_cart_rule) { CartRule::autoAddToCart($context); } + // after cart qty is updated, check if any of the appled cart rules are not being used + CartRule::removeUnusedCartRules($context); if ($product->customizable) { return $this->_updateCustomizationQuantity((int)$quantity, (int)$id_customization, (int)$id_product, (int)$id_product_attribute, (int)$id_address_delivery, $operator); @@ -1481,6 +1487,8 @@ class CartCore extends ObjectModel if ($auto_add_cart_rule) { CartRule::autoAddToCart(); } + // after cart qty is updated, check if any of the appled cart rules are not being used + CartRule::removeUnusedCartRules(); return $return; } @@ -1614,6 +1622,7 @@ class CartCore extends ObjectModel Cart::ONLY_PHYSICAL_PRODUCTS_WITHOUT_SHIPPING, Cart::ADVANCE_PAYMENT, Cart::ADVANCE_PAYMENT_ONLY_PRODUCTS, + Cart::ONLY_PRODUCTS_WITH_DEMANDS, ); // Define virtual context to prevent case where the cart is not the in the global context @@ -1877,16 +1886,14 @@ class CartCore extends ObjectModel // price of extra demands on room type in the cart - if ($type == Cart::BOTH || $type == Cart::BOTH_WITHOUT_SHIPPING || $type == Cart::ADVANCE_PAYMENT) { - $totalDemandsPrice += $objCartBookingData->getCartExtraDemands($this->id, $product['id_product'], 0, 0, 0, 1, 0, (int)$with_taxes); - } + $totalDemandsPrice += $objCartBookingData->getCartExtraDemands($this->id, $product['id_product'], 0, 0, 0, 1, 0, (int)$with_taxes); } foreach ($products_total as $key => $price) { $order_total += $price; } - $order_total_products = $order_total; + $order_total_products = $order_total + $totalDemandsPrice; if ($type == Cart::ONLY_DISCOUNTS) { $order_total = 0; @@ -1906,7 +1913,11 @@ class CartCore extends ObjectModel } // price of extra demands on room type in the cart - if ($type == Cart::BOTH || $type == Cart::BOTH_WITHOUT_SHIPPING || $type == Cart::ADVANCE_PAYMENT) { + if ($type == Cart::BOTH + || $type == Cart::BOTH_WITHOUT_SHIPPING + || $type == Cart::ADVANCE_PAYMENT + || $type == Cart::ONLY_PRODUCTS_WITH_DEMANDS + ) { $order_total += $totalDemandsPrice; } @@ -1923,7 +1934,8 @@ class CartCore extends ObjectModel Cart::ONLY_CONVENIENCE_FEE, Cart::ONLY_ROOM_SERVICES_WITHOUT_AUTO_ADD, Cart::ONLY_ROOM_SERVICES_WITHOUT_CONVENIENCE_FEE, - Cart::ONLY_ROOM_SERVICES_WITH_AUTO_ADD_WITHOUT_CONVENIENCE_FEE) + Cart::ONLY_ROOM_SERVICES_WITH_AUTO_ADD_WITHOUT_CONVENIENCE_FEE, + Cart::ONLY_PRODUCTS_WITH_DEMANDS) ) && CartRule::isFeatureActive() ) { // First, retrieve the cart rules associated to this "getOrderTotal" diff --git a/classes/CartRule.php b/classes/CartRule.php index 20b627514..c1e140e7a 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -515,9 +515,6 @@ class CartRuleCore extends ObjectModel return false; } - if (!$alreadyInCart && $context->cart->getOrderTotal(true, Cart::BOTH) <= 0) { - return (!$display_error) ? false : Tools::displayError('You cannot add any more voucher.'); - } if (!$this->active) { return (!$display_error) ? false : Tools::displayError('This voucher is disabled'); } @@ -530,6 +527,9 @@ class CartRuleCore extends ObjectModel if (strtotime($this->date_to) < time()) { return (!$display_error) ? false : Tools::displayError('This voucher has expired'); } + if (!$alreadyInCart && $context->cart->getOrderTotal(true, Cart::BOTH) <= 0) { + return (!$display_error) ? false : Tools::displayError('You cannot add more vouchers. Please remove an existing voucher before applying a new one.'); + } if ($context->cart->id_customer) { $quantityUsed = Db::getInstance()->getValue(' @@ -936,8 +936,8 @@ class CartRuleCore extends ObjectModel $all_cart_rules_ids = $context->cart->getOrderedCartRulesIds(); - $cart_amount_ti = $context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS); - $cart_amount_te = $context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS); + $cart_amount_ti = $context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS_WITH_DEMANDS); + $cart_amount_te = $context->cart->getOrderTotal(false, Cart::ONLY_PRODUCTS_WITH_DEMANDS); // Free shipping on selected carriers if ($this->free_shipping && in_array($filter, array(CartRule::FILTER_ACTION_ALL, CartRule::FILTER_ACTION_ALL_NOCAP, CartRule::FILTER_ACTION_SHIPPING))) { @@ -963,7 +963,7 @@ class CartRuleCore extends ObjectModel // Discount (%) on the whole order if ($this->reduction_percent && $this->reduction_product == 0) { // Do not give a reduction on free products! - $order_total = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS, $package_products); + $order_total = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS_WITH_DEMANDS, $package_products); foreach ($context->cart->getCartRules(CartRule::FILTER_ACTION_GIFT) as $cart_rule) { $order_total -= Tools::ps_round($cart_rule['obj']->getContextualValue($use_tax, $context, CartRule::FILTER_ACTION_GIFT, $package), _PS_PRICE_COMPUTE_PRECISION_); } @@ -1036,9 +1036,9 @@ class CartRuleCore extends ObjectModel if ((float)$this->reduction_amount > 0) { $prorata = 1; if (!is_null($package) && count($all_products)) { - $total_products = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS); + $total_products = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS_WITH_DEMANDS); if ($total_products) { - $prorata = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS, $package['products']) / $total_products; + $prorata = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS_WITH_DEMANDS, $package['products']) / $total_products; } } @@ -1087,7 +1087,7 @@ class CartRuleCore extends ObjectModel if ($this->reduction_tax == $use_tax) { // The reduction cannot exceed the products total, except when we do not want it to be limited (for the partial use calculation) if ($filter != CartRule::FILTER_ACTION_ALL_NOCAP) { - $cart_amount = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS); + $cart_amount = $context->cart->getOrderTotal($use_tax, Cart::ONLY_PRODUCTS_WITH_DEMANDS); $reduction_amount = min($reduction_amount, $cart_amount); } $reduction_value += $prorata * $reduction_amount; @@ -1354,6 +1354,24 @@ class CartRuleCore extends ObjectModel return $errors; } + public static function removeUnusedCartRules($context = null) + { + if (!$context) { + $context = Context::getContext(); + } + $cartRules = $context->cart->getCartRules(); + $orderTotal = $context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS_WITH_DEMANDS, null, null, false); + // ppp([$cartRules, $orderTotal]); + foreach ($cartRules as $cartRule) { + if ($orderTotal <= 0) { + // remove cart rule if cart amount is already reached 0 + $context->cart->removeCartRule($cartRule['id_cart_rule']); + } else { + $orderTotal = $orderTotal - $cartRule['value_real']; + } + } + } + /** * @param Context|null $context * @return mixed diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index df5c6c616..b723e18cb 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -430,6 +430,8 @@ class HotelCartBookingData extends ObjectModel } } } + // after room is removed from cart, check if any of the appled cart rules are not being used + CartRule::removeUnusedCartRules(Context::getContext()); // return number of rooms deleted return true; @@ -524,6 +526,8 @@ class HotelCartBookingData extends ObjectModel } } if ($res && $objCart->updateQty((int)($roomsRequired * $num_days), $id_product)) { + // after room is added in cart, check if any of the appled cart rules are not being used + CartRule::removeUnusedCartRules(Context::getContext()); if ($id_room) { return $obj_htl_cart_booking_data->id; } else { @@ -1875,6 +1879,14 @@ class HotelCartBookingData extends ObjectModel } } + public function save($null_values = false, $auto_date = true) + { + $return = parent::save($null_values = false, $auto_date = true); + // after updating cart data, check if any of the appled cart rules are not being used + CartRule::removeUnusedCartRules(Context::getContext()); + return $return; + } + // Webservice :: get extra demands for the cart booking public function getWsExtraDemands() { From 6785b6ff392d547e68042d20556cfc52cceb4bad Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Mon, 26 Aug 2024 16:19:14 +0530 Subject: [PATCH 16/30] Fixed: Invalid price update in order table product_price column on editing service price --- controllers/admin/AdminOrdersController.php | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index cfa0d9b10..aa68d3961 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -5039,11 +5039,15 @@ class AdminOrdersControllerCore extends AdminController $newTotalPriceTaxExcl = $newNumDays * $objRoomTypeServiceProductOrderDetail->quantity * $unitPriceTaxExcl; $unitPriceTaxIncl = $objRoomTypeServiceProductOrderDetail->unit_price_tax_incl; $newTotalPriceTaxIncl = $newNumDays * $objRoomTypeServiceProductOrderDetail->quantity * $unitPriceTaxIncl; + $objOrder->total_products -= $objRoomTypeServiceProductOrderDetail->total_price_tax_excl; + $objOrder->total_products_wt -= $objRoomTypeServiceProductOrderDetail->total_price_tax_incl; $objOrder->total_paid_tax_excl -= $objRoomTypeServiceProductOrderDetail->total_price_tax_excl; $objOrder->total_paid_tax_incl -= $objRoomTypeServiceProductOrderDetail->total_price_tax_incl; $objOrder->total_paid -= $objRoomTypeServiceProductOrderDetail->total_price_tax_incl; // change order total + $objOrder->total_products += $newTotalPriceTaxExcl; + $objOrder->total_products_wt += $newTotalPriceTaxIncl; $objOrder->total_paid_tax_excl += $newTotalPriceTaxExcl; $objOrder->total_paid_tax_incl += $newTotalPriceTaxIncl; $objOrder->total_paid += $newTotalPriceTaxIncl; @@ -6309,6 +6313,8 @@ class AdminOrdersControllerCore extends AdminController $res &= $order_invoice->update(); } + $order->total_products += $priceDiffTaxExcl; + $order->total_products_wt += $priceDiffTaxIncl; $order->total_paid_tax_excl += $priceDiffTaxExcl; $order->total_paid_tax_incl += $priceDiffTaxIncl; $order->total_paid += $priceDiffTaxIncl; @@ -6374,6 +6380,8 @@ class AdminOrdersControllerCore extends AdminController $res &= $objOrderInvoice->update(); } + $order->total_products -= $priceTaxExcl; + $order->total_products_wt -= $priceTaxIncl; $order->total_paid_tax_excl -= $priceTaxExcl; $order->total_paid_tax_incl -= $priceTaxIncl; $order->total_paid -= $priceTaxIncl; From 809530008db324de32874a0d7df72e2425f43152 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Mon, 26 Aug 2024 19:47:10 +0530 Subject: [PATCH 17/30] updated the code to count the words accoirding to their sizes for the number of character displayed for the room block description --- .../views/css/WkHotelRoomBlockFront.css | 4 +- .../views/js/WkHotelRoomBlockFront.js | 67 ++++++++++--------- .../templates/hook/hotelRoomDisplayBlock.tpl | 8 +-- 3 files changed, 42 insertions(+), 37 deletions(-) diff --git a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css index 4e8590cfa..a0da52873 100644 --- a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css +++ b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css @@ -19,7 +19,9 @@ .htlRoomTypeDescTextContainer { overflow: hidden; - max-height: 65px; + display: -webkit-box; + -webkit-line-clamp: 3; + -webkit-box-orient: vertical; } .read-extra-text{ cursor: pointer; diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js index 4d314099f..b021a40e4 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -20,7 +20,7 @@ $(document).ready(function() { applyChangesToDescription(); $(window).on('resize', function() { - cleanDescriptions(); + resetDescriptions(); applyChangesToDescription(); }); @@ -35,7 +35,8 @@ $(document).ready(function() { } }); }); -function cleanDescriptions() { + +function resetDescriptions() { $(document).find('.htlRoomTypeDescText').each(function() { $(this).addClass('htlRoomTypeDescTextContainer'); $(this).html($(this).parent().find('.htlRoomTypeDescOriginal').html()); @@ -45,7 +46,7 @@ function cleanDescriptions() { function applyChangesToDescription() { $(document).find('.htlRoomTypeDescText').each(function() { // checking if the display:overFlow has been applied to the description. - if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 15) { + if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 14) { // Only show read more and read less text if the text is wrapped. initToggleOptions($(this)[0]); } @@ -54,45 +55,51 @@ function applyChangesToDescription() { function initToggleOptions(target) { // Getting the number of displayed characters - var show_char = getChars(target); + var show_char = getVisibleWords(target); var ellipses = "... "; var content = $(target).html(); + show_char = show_char - (readMoreText.length + ellipses.length + 5); // adding extra 5 chars of space if (content.trim().length > show_char) { // Dividing the text into two parts so that we are able to differentiate the displayed text from hidden text. - var a = content.trim().substr(0, show_char); - var b = content.trim().substr(show_char - content.trim().length); + var visibleText = content.trim().substr(0, show_char); + var hiddenText = content.trim().substr(show_char - content.trim().length); // Adding the read more and read less text with the ellipses to the original text. - var html = a + "" + ellipses + ""+ readMoreText +""; + var html = visibleText + "" + ellipses + ""+ readMoreText +""; $(target).html(html); } } -// Getting the number of characters displayed to the user. -function getChars(target) { +function getVisibleWords(target) { var style = window.getComputedStyle(target, null); - // Getting the size of the container displayed to the user, this will ignore the overflow: hidden text. - var line_height = parseInt(style.getPropertyValue("line-height")); - var font_size = parseInt(style.getPropertyValue("font-size")); - var height = parseInt(style.getPropertyValue("height")); var width = parseInt(style.getPropertyValue("width")); + var lines = 3; // since we are using line clamp to display only three lines. + var text = $(target).text(); + var words = text.split(/\s+/); // Split text into words based on whitespace + var visibleWords = []; + var currentLineWidth = 0; - if(isNaN(line_height)) line_height = font_size * 1.2; - // Counting the number of the lines displayed to the user by the display:overFlow property, since this can vary depending the screen size. - var lines = Math.ceil(height / line_height) + 1; - // Counting the number of the characters in the lines - var displayedCharacters = $(target).text().split('').slice(0, lines * (width / parseInt(font_size))).join('').length; + for (var i = 0; i < words.length; i++) { + var word = words[i]; + var wordWidth = getTextWidth(word, style); - if ($(document).width() > 991) { - displayedCharacters += 25; - } else if ($(document).width() > 768) { - displayedCharacters += 35; - } else if ($(document).width() > 570) { - displayedCharacters += 20; - } else if ($(document).width() > 444) { - displayedCharacters += 10; - } else { - displayedCharacters += 5; + if (currentLineWidth + wordWidth <= width) { + visibleWords.push(word); + currentLineWidth += wordWidth + getTextWidth(' ', style); // Add space width + } else { + lines--; + if (lines <= 0) break; + + visibleWords.push(word); + currentLineWidth = wordWidth + getTextWidth(' ', style); // Start a new line with the current word + } } - return displayedCharacters; -} \ No newline at end of file + return visibleWords.join(' ').length; +} + +function getTextWidth(text, style) { + var canvas = document.createElement('canvas'); + var context = canvas.getContext('2d'); + context.font = `${style.getPropertyValue("font-weight")} ${style.getPropertyValue("font-size")} ${style.getPropertyValue("font-family")}`; + return context.measureText(text).width; +} diff --git a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl index 0daebcc80..7911888c8 100644 --- a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl +++ b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl @@ -58,12 +58,8 @@

    {/if} -
    - {$roomDisplay.description|escape:'html':'UTF-8'} -
    - +
    {$roomDisplay.description|escape:'html':'UTF-8'}
    + From 3ac4e8622fc1c54570f90ed6602f6a896aa6243c Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Mon, 26 Aug 2024 19:55:52 +0530 Subject: [PATCH 18/30] updated the hotel interior and hotel amenitites image upload sizes --- .../admin/AdminAboutHotelBlockSettingController.php | 5 ++--- .../admin/AdminFeaturesModuleSettingController.php | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php index 44f459f18..10bc7ec01 100644 --- a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php +++ b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php @@ -273,12 +273,11 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController } while ((bool)Tools::file_get_contents( $this->context->link->getMediaLink(_MODULE_DIR_.$this->module->name.'/views/img/hotel_interior/'.$tmp_name.'.jpg') )); - $imageSize = ImageType::getByName(ImageType::getFormatedName('large')); ImageManager::resize( $file['tmp_name'], _PS_MODULE_DIR_.$this->module->name.'/views/img/hotel_interior/'.$tmp_name.'.jpg', - $imageSize['width'], - $imageSize['height'] + 720, + 360 ); $objHtlInteriorImg->name = $tmp_name; diff --git a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php index c07cab495..7ee8505e2 100644 --- a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php +++ b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php @@ -320,12 +320,11 @@ class AdminFeaturesModuleSettingController extends ModuleAdminController if (file_exists($imgPath)) { unlink($imgPath); } - $imageSize = ImageType::getByName(ImageType::getFormatedName('large')); ImageManager::resize( $file['tmp_name'], $imgPath, - $imageSize['width'], - $imageSize['height'] + 720, + 540 ); } From 09a9660739d49b96b945530f566b8e8fe62bf6d1 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Tue, 27 Aug 2024 10:15:22 +0530 Subject: [PATCH 19/30] optmizied hotel features assinging process, handled the case when no features are created --- .../controllers/admin/AdminAddHotelController.php | 14 +++++++------- .../admin/add_hotel/helpers/form/form.tpl | 6 +++++- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php index ac90c2cd2..86804666a 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php @@ -192,14 +192,14 @@ class AdminAddHotelController extends ModuleAdminController } } } - } - $tree = new HelperTree('hotel-features-tree', $features); - $tree->setShowCollapseExpandButton(true) - ->setUseCheckBox(true) - ->setUseBulkActions(true); - $treeContent = $tree->render(); - $smartyVars['hotel_feature_tree'] = $treeContent; + $tree = new HelperTree('hotel-features-tree', $features); + $tree->setShowCollapseExpandButton(true) + ->setUseCheckBox(true) + ->setUseBulkActions(true); + $treeContent = $tree->render(); + $smartyVars['hotel_feature_tree'] = $treeContent; + } } else { $idCountry = Tools::getValue('hotel_country'); } diff --git a/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl b/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl index b1ed02008..c53fb31bb 100644 --- a/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/add_hotel/helpers/form/form.tpl @@ -496,7 +496,7 @@
    {hook h='displayAdminAddHotelFormFeaturesTabBefore' id_hotel=$hook_arg_id_hotel} - {if isset($hotel_info.id) && $hotel_info.id} + {if isset($hotel_feature_tree)}
    + {elseif isset($hotel_info.id) && $hotel_info.id} +
    + {l s='No features created yet.' mod='hotelreservationsystem'} {l s='You can create features by visiting ' mod='hotelreservationsystem'} {l s='manage hotel features.' mod='hotelreservationsystem'} +
    {else}
    {l s='Please save hotel information before assigning hotel features.' mod='hotelreservationsystem'} From 40e086da2e730b7de2849f8adb5bdc1e78e9abbd Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Tue, 27 Aug 2024 16:52:56 +0530 Subject: [PATCH 20/30] use CartRule::autoRemoveFromCart function to remove extra cart rules --- classes/Cart.php | 7 ++--- classes/CartRule.php | 26 ++++++------------- .../classes/HotelCartBookingData.php | 8 +++--- 3 files changed, 14 insertions(+), 27 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index 7b36bf303..dc03b79b3 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1032,7 +1032,8 @@ class CartCore extends ObjectModel $this->updateQty(1, $cartRule->gift_product, $cartRule->gift_product_attribute, false, 'up', 0, null, false); } // after adding new cart rule, check if any of the appled cart rules are not being used - CartRule::removeUnusedCartRules(Context::getContext()); + CartRule::autoRemoveFromCart(Context::getContext()); + CartRule::autoAddToCart(Context::getContext()); return true; } @@ -1235,8 +1236,6 @@ class CartCore extends ObjectModel if ($auto_add_cart_rule) { CartRule::autoAddToCart($context); } - // after cart qty is updated, check if any of the appled cart rules are not being used - CartRule::removeUnusedCartRules($context); if ($product->customizable) { return $this->_updateCustomizationQuantity((int)$quantity, (int)$id_customization, (int)$id_product, (int)$id_product_attribute, (int)$id_address_delivery, $operator); @@ -1485,8 +1484,6 @@ class CartCore extends ObjectModel if ($auto_add_cart_rule) { CartRule::autoAddToCart(); } - // after cart qty is updated, check if any of the appled cart rules are not being used - CartRule::removeUnusedCartRules(); return $return; } diff --git a/classes/CartRule.php b/classes/CartRule.php index 946276eb7..17c6bd8ca 100644 --- a/classes/CartRule.php +++ b/classes/CartRule.php @@ -1380,35 +1380,25 @@ class CartRuleCore extends ObjectModel return array(); } + $order_total = $context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS_WITH_DEMANDS, null, null, false); static $errors = array(); foreach ($context->cart->getCartRules() as $cart_rule) { if ($error = $cart_rule['obj']->checkValidity($context, true)) { $context->cart->removeCartRule($cart_rule['obj']->id); $context->cart->update(); $errors[] = $error; + } else { + if ($order_total <= 0) { + // remove cart rule if cart amount is already reached 0 + $context->cart->removeCartRule($cart_rule['obj']->id); + } else { + $order_total = $order_total - $cart_rule['value_real']; + } } } return $errors; } - public static function removeUnusedCartRules($context = null) - { - if (!$context) { - $context = Context::getContext(); - } - $cartRules = $context->cart->getCartRules(); - $orderTotal = $context->cart->getOrderTotal(true, Cart::ONLY_PRODUCTS_WITH_DEMANDS, null, null, false); - // ppp([$cartRules, $orderTotal]); - foreach ($cartRules as $cartRule) { - if ($orderTotal <= 0) { - // remove cart rule if cart amount is already reached 0 - $context->cart->removeCartRule($cartRule['id_cart_rule']); - } else { - $orderTotal = $orderTotal - $cartRule['value_real']; - } - } - } - /** * @param Context|null $context * @return mixed diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index f03785f0f..29d5ddfa0 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -431,7 +431,8 @@ class HotelCartBookingData extends ObjectModel } } // after room is removed from cart, check if any of the appled cart rules are not being used - CartRule::removeUnusedCartRules(Context::getContext()); + CartRule::autoRemoveFromCart(Context::getContext()); + CartRule::autoAddToCart(Context::getContext()); // return number of rooms deleted return true; @@ -526,8 +527,6 @@ class HotelCartBookingData extends ObjectModel } } if ($res && $objCart->updateQty((int)($roomsRequired * $num_days), $id_product)) { - // after room is added in cart, check if any of the appled cart rules are not being used - CartRule::removeUnusedCartRules(Context::getContext()); if ($id_room) { return $obj_htl_cart_booking_data->id; } else { @@ -1913,7 +1912,8 @@ class HotelCartBookingData extends ObjectModel { $return = parent::save($null_values = false, $auto_date = true); // after updating cart data, check if any of the appled cart rules are not being used - CartRule::removeUnusedCartRules(Context::getContext()); + CartRule::autoRemoveFromCart(Context::getContext()); + CartRule::autoAddToCart(Context::getContext()); return $return; } From e4895fc18b82749bc48a9bbfa07115e6b7ded4df Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Tue, 27 Aug 2024 16:59:36 +0530 Subject: [PATCH 21/30] Added: auto select childrens for the features tree --- .../controllers/admin/AdminAddHotelController.php | 1 + 1 file changed, 1 insertion(+) diff --git a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php index 86804666a..526701c08 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php @@ -196,6 +196,7 @@ class AdminAddHotelController extends ModuleAdminController $tree = new HelperTree('hotel-features-tree', $features); $tree->setShowCollapseExpandButton(true) ->setUseCheckBox(true) + ->setAutoSelectChildren(true) ->setUseBulkActions(true); $treeContent = $tree->render(); $smartyVars['hotel_feature_tree'] = $treeContent; From c84cee59f29953a2f8e52035db11f628c2030a1e Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Tue, 27 Aug 2024 19:00:32 +0530 Subject: [PATCH 22/30] Added: Auto select child nodes for the helper tree and auto unselect parent nodes for helper tree --- .../default/template/helpers/tree/tree.tpl | 31 +++++++++++++------ 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/admin/themes/default/template/helpers/tree/tree.tpl b/admin/themes/default/template/helpers/tree/tree.tpl index 30c4283c6..1eab06591 100644 --- a/admin/themes/default/template/helpers/tree/tree.tpl +++ b/admin/themes/default/template/helpers/tree/tree.tpl @@ -86,16 +86,27 @@ {if isset($auto_select_children) && $auto_select_children == true} $('#{$id|escape:'html':'UTF-8'}').find(':input[type=checkbox]').on('click', function(){ - if ($(this).is(":checked")) { - $(this).closest('.tree-folder').find(':input[type=checkbox]').each(function(){ - $(this).prop('checked', true); - $(this).parent().addClass('tree-selected'); - }); - } else { - $(this).closest('.tree-folder').find(':input[type=checkbox]').each(function(){ - $(this).prop('checked', false); - $(this).parent().removeClass('tree-selected'); - }); + if ($(this).closest('.tree-item').length ==0) { + if ($(this).is(":checked")) { + $(this).closest('.tree-folder').find(':input[type=checkbox]').each(function(){ + $(this).prop('checked', true); + $(this).parent().addClass('tree-selected'); + }); + } else { + $(this).closest('.tree-folder').find(':input[type=checkbox]').each(function(){ + $(this).prop('checked', false); + $(this).parent().removeClass('tree-selected'); + }); + } + } + + if ($(this).closest('.tree-item').length) { + if (!$(this).is(":checked")) { + $(this).parents('.tree-folder').find(':input[type=checkbox]:first').each(function(){ + $(this).prop('checked', false); + $(this).parent().removeClass('tree-selected'); + }); + } } }); {/if} From 8121519a1fc2af2e89ef3fa895b187e6ba4d4d50 Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Wed, 28 Aug 2024 14:41:30 +0530 Subject: [PATCH 23/30] Fixed partial cart rule creating with wrong currency --- classes/PaymentModule.php | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index affec5bcf..13fbaf1db 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -626,8 +626,16 @@ abstract class PaymentModuleCore extends Module $used = array('incl' => 0, 'excl' => 0); if (!isset($cart_rules[$key]['remaining'])) { - $cart_rules[$key]['remaining'] = $cart_rule['reduction_amount']; + $cart_rules[$key]['remaining'] = $cart_rule['obj']->reduction_amount; + if ((int) $cart_rule['obj']->reduction_currency !== (int) $cart->id_currency) { + $cart_rules[$key]['remaining'] = Tools::convertPriceFull( + $cart_rule['obj']->reduction_amount, + new Currency($cart_rule['obj']->reduction_currency), + new Currency($cart->id_currency) + ); + } } + if ($cart_rule['reduction_tax']) { if ($orderTotals[$order->id]['incl'] > $values['tax_incl']) { $used['incl'] = $values['tax_incl']; From 54f857dede1bd88f8d2fc75ce980fe3847996ddc Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Fri, 30 Aug 2024 15:32:32 +0530 Subject: [PATCH 24/30] Fixed stats not working according to hotel permissions --- controllers/admin/AdminStatsController.php | 129 ++++++++++++--------- 1 file changed, 71 insertions(+), 58 deletions(-) diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index cf8418c40..140574201 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -226,17 +226,17 @@ class AdminStatsControllerCore extends AdminStatsTabController if ($granularity == 'day') { $sales = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( - 'SELECT LEFT(`invoice_date`, 10) AS date, SUM(total_paid_tax_excl / o.conversion_rate) AS sales, - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + 'SELECT LEFT(`invoice_date`, 10) AS date, SUM(total_paid_tax_excl / o.conversion_rate) AS sales FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state - WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').' GROUP BY LEFT(`invoice_date`, 10) HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel) + WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').' + AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + ) + GROUP BY LEFT(`invoice_date`, 10)' ); - foreach ($result as $row) { $sales[strtotime($row['date'])] = $row['sales']; } @@ -244,15 +244,16 @@ class AdminStatsControllerCore extends AdminStatsTabController } elseif ($granularity == 'month') { $sales = array(); $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS( - 'SELECT LEFT(`invoice_date`, 7) AS date, SUM(total_paid_tax_excl / o.conversion_rate) AS sales, - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + 'SELECT LEFT(`invoice_date`, 7) AS date, SUM(total_paid_tax_excl / o.conversion_rate) AS sales FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state - WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').' GROUP BY LEFT(`invoice_date`, 7) HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel) + WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').' + AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + ) + GROUP BY LEFT(`invoice_date`, 7)' ); foreach ($result as $row) { @@ -270,7 +271,8 @@ class AdminStatsControllerCore extends AdminStatsTabController FROM`'._DB_PREFIX_.'htl_booking_detail` hbd GROUP BY hbd.`id_order` ) t ON (t.`id_order` = o.`id_order`) - WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : '').HotelBranchInformation::addHotelRestriction($id_hotel) + WHERE os.logable = 1'. (($date_from && $date_to) ? ' AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59"' : ''). + HotelBranchInformation::addHotelRestriction($id_hotel) ); } } @@ -472,7 +474,7 @@ class AdminStatsControllerCore extends AdminStatsTabController { if ($granularity == 'day') { $purchases = array(); - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT LEFT(`invoice_date`, 10) as date, SUM(od.`product_quantity` * IF( @@ -488,8 +490,13 @@ class AdminStatsControllerCore extends AdminStatsTabController FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state - WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1'.' - GROUP BY LEFT(`invoice_date`, 10) HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel)); + WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" + AND os.logable = 1 AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + ) + GROUP BY LEFT(`invoice_date`, 10)'); foreach ($result as $row) { $purchases[strtotime($row['date'])] = $row['total_purchase_price']; @@ -502,16 +509,16 @@ class AdminStatsControllerCore extends AdminStatsTabController od.`purchase_supplier_price` > 0, od.`purchase_supplier_price`, (od.`original_product_price` / `conversion_rate`) * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100 - )), - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + )) FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON o.id_order = od.id_order LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state - WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel) + WHERE `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" + AND os.logable = 1 AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + )' ); } } @@ -520,20 +527,20 @@ class AdminStatsControllerCore extends AdminStatsTabController { if ($granularity == 'day') { $refunds = array(); - $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS(' + $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS(' SELECT LEFT(`invoice_date`, 10) as date, - SUM(orr.`refunded_amount`) as total_refund_amount, - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + SUM(orr.`refunded_amount`) as total_refund_amount FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_return` orr ON (o.id_order = orr.id_order) LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (o.current_state = os.id_order_state) - WHERE orr.`payment_mode` != "" AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1'.' - GROUP BY LEFT(`invoice_date`, 10) HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel)); + WHERE orr.`payment_mode` != "" AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" + AND "'.pSQL($date_to).' 23:59:59" AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + ) + GROUP BY LEFT(`invoice_date`, 10)'); foreach ($result as $row) { $refunds[strtotime($row['date'])] = $row['total_refund_amount']; @@ -551,7 +558,13 @@ class AdminStatsControllerCore extends AdminStatsTabController FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_return` orr ON (o.id_order = orr.id_order) LEFT JOIN `'._DB_PREFIX_.'order_state` os ON (o.current_state = os.id_order_state) - WHERE orr.`payment_mode` != "" AND orr.`id_transaction` != "" AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" AND os.logable = 1 HAVING 1 '.HotelBranchInformation::addHotelRestriction($id_hotel) + WHERE orr.`payment_mode` != "" AND orr.`id_transaction` != "" + AND `invoice_date` BETWEEN "'.pSQL($date_from).' 00:00:00" AND "'.pSQL($date_to).' 23:59:59" + AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + )' ); } } @@ -825,15 +838,15 @@ class AdminStatsControllerCore extends AdminStatsTabController $row = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(' SELECT COUNT(o.`id_order`) as orders, - SUM(o.`total_paid_tax_excl` / o.`conversion_rate`) as total_paid_tax_excl, - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + SUM(o.`total_paid_tax_excl` / o.`conversion_rate`) as total_paid_tax_excl FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON os.`id_order_state` = o.`current_state` - WHERE o.`invoice_date` BETWEEN "'.pSQL(date('Y-m-d', strtotime('-'.($daysForAvgOrderVal + 1).' day'))).' 00:00:00" AND "'.pSQL(date('Y-m-d', strtotime('-1 day'))).' 23:59:59" AND os.`logable` = 1 HAVING 1 '.HotelBranchInformation::addHotelRestriction(false)); + WHERE o.`invoice_date` BETWEEN "'.pSQL(date('Y-m-d', strtotime('-'.($daysForAvgOrderVal + 1).' day'))).' 00:00:00" + AND "'.pSQL(date('Y-m-d')).' 23:59:59" AND os.`logable` = 1 AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + )'); $value = Tools::displayPrice($row['orders'] ? $row['total_paid_tax_excl'] / $row['orders'] : 0, $currency).' ('.$this->l('tax excl.').')'; break; @@ -1894,16 +1907,15 @@ class AdminStatsControllerCore extends AdminStatsTabController { $sql = 'SELECT COUNT(t.`id_customer`) FROM ( - SELECT o.`id_customer`, COUNT(o.`id_order`) AS nb_orders, - ( - SELECT hbd.`id_hotel` - FROM `'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + SELECT o.`id_customer`, COUNT(o.`id_order`) AS nb_orders FROM `'._DB_PREFIX_.'orders` o WHERE o.`valid` = 1 AND o.`date_add` BETWEEN "'.pSQL($dateFrom).' 00:00:00" AND "'.pSQL($dateTo).' 23:59:59" + AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + ) GROUP BY o.`id_customer` - HAVING 1 '.(!is_null($idHotel) ? HotelBranchInformation::addHotelRestriction($idHotel) : '').' ) AS t WHERE t.`nb_orders` >= '.(int) $nbOrders; $result = Db::getInstance()->getValue($sql); @@ -2408,16 +2420,17 @@ class AdminStatsControllerCore extends AdminStatsTabController $objHotelBooking = new HotelBookingDetail(); $invalidOrderStates = $objHotelBooking->getOrderStatusToFreeBookedRoom(); - $sql = 'SELECT (' . ($useTax ? 'SUM(o.`total_paid_tax_incl` / o.`conversion_rate`)' : 'SUM(o.`total_paid_tax_excl` / o.`conversion_rate`)') . ' - SUM(o.`total_paid_real` / o.`conversion_rate`)), - ( - SELECT hbd.`id_hotel` - FROM`'._DB_PREFIX_.'htl_booking_detail` hbd - WHERE hbd.`id_order` = o.`id_order` LIMIT 1 - ) AS id_hotel + $sql = 'SELECT ' . ($useTax ? 'SUM(o.`total_paid_tax_incl` / o.`conversion_rate`)' : 'SUM(o.`total_paid_tax_excl` / o.`conversion_rate`)') . ' - SUM(o.`total_paid_real` / o.`conversion_rate`) FROM `'._DB_PREFIX_.'orders` o LEFT JOIN `'._DB_PREFIX_.'order_state` os ON o.current_state = os.id_order_state - WHERE 1 ' . ($invalidOrderStates ? ' AND o.`current_state` NOT IN ('.implode(',', $invalidOrderStates).')' : '') . (($dateFrom && $dateTo) ? ' AND o.`date_add` BETWEEN "'.pSQL($dateFrom).' 00:00:00" AND "'.pSQL($dateTo).' 23:59:59"' : '').' HAVING 1 '.HotelBranchInformation::addHotelRestriction($idHotel); - + WHERE 1 ' . + ($invalidOrderStates ? ' AND o.`current_state` NOT IN ('.implode(',', $invalidOrderStates).')' : '') . + (($dateFrom && $dateTo) ? ' AND o.`date_add` BETWEEN "'.pSQL($dateFrom).' 00:00:00" AND "'.pSQL($dateTo).' 23:59:59"' : ''). + ' AND EXISTS ( + SELECT 1 + FROM `qlo_htl_booking_detail` hbd + WHERE hbd.`id_order` = o.`id_order`' . HotelBranchInformation::addHotelRestriction($idHotel).' + )'; return Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql); } From 9e791160c8c3b510e9c607f782c53869d4fbd2ca Mon Sep 17 00:00:00 2001 From: Sumit Panwar Date: Sat, 31 Aug 2024 10:18:06 +0530 Subject: [PATCH 25/30] Fixed: Allotment info not showing in the reallocation/swap modal box in back-office --- js/admin/reallocation.js | 7 +++++++ .../helpers/view/_partials/booking-rooms.tpl | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/js/admin/reallocation.js b/js/admin/reallocation.js index 8306a3b3d..21846b804 100644 --- a/js/admin/reallocation.js +++ b/js/admin/reallocation.js @@ -72,6 +72,13 @@ const RoomReallocationModal = { $("span.modal_curr_room_num").text(roomObj.data('room_num') + ', ' + roomObj.data('room_type_name')); $(".cust_name").text(roomObj.data('cust_name')); $(".cust_email").text(roomObj.data('cust_email')); + $(".modal_curr_allotent_type").text(roomObj.data('allotment_type_label')); + + if ((roomObj.data('comment') == '') || (roomObj.data('comment') == null)) { + $(".allotment_comment_block").hide(); + } else { + $(".modal_curr_allotment_comment").text(roomObj.data('comment')); + } // reset price difference fields $("#reallocation_price_diff").val(0); 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 5783f4798..308be4ba8 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 @@ -224,7 +224,7 @@ {if $rm_dtl_v['booking_type'] == HotelBookingDetail::ALLOTMENT_AUTO} - {else} From 98a76f83733b75a099829c54f1cd50ff445aba5b Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Mon, 2 Sep 2024 11:06:53 +0530 Subject: [PATCH 26/30] Added new hook in room type page after image thumbnail --- themes/hotel-reservation-theme/product.tpl | 1 + 1 file changed, 1 insertion(+) diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index 9d0b245c6..9d14e2559 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -148,6 +148,7 @@ {/foreach} {/if} + {hook h='displayProductExtraThumbnail'}
    {if isset($images) && count($images) > 2} From 494d00c9de4f90f394673858d08c4b3b523178d6 Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Tue, 3 Sep 2024 16:32:06 +0530 Subject: [PATCH 27/30] Updated room type page thumbnail hooks name --- themes/hotel-reservation-theme/product.tpl | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index 9d14e2559..5ee98cfb8 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -148,7 +148,7 @@ {/foreach} {/if} - {hook h='displayProductExtraThumbnail'} + {hook h='displayRoomTypeThumbnailsBottom'} {if isset($images) && count($images) > 2} @@ -156,6 +156,8 @@ {l s='Next'} {/if} + dasdas + {hook h="displayRoomTypeThumbnailsAfter"} {/if} From c34aa887976028497fabc3f1f09e2a58e813e23c Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Wed, 4 Sep 2024 13:04:35 +0530 Subject: [PATCH 28/30] Added word wrap to the description, and optimzed the code --- .../views/css/WkHotelRoomBlockFront.css | 7 +- .../views/js/WkHotelRoomBlockFront.js | 83 +++++++------------ .../templates/hook/hotelRoomDisplayBlock.tpl | 1 + modules/wkhotelroom/wkhotelroom.php | 7 -- 4 files changed, 35 insertions(+), 63 deletions(-) diff --git a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css index a0da52873..794085365 100644 --- a/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css +++ b/modules/wkhotelroom/views/css/WkHotelRoomBlockFront.css @@ -23,9 +23,13 @@ -webkit-line-clamp: 3; -webkit-box-orient: vertical; } -.read-extra-text{ +.htlRoomTypeDescReadmore, .htlRoomTypeDescReadless{ cursor: pointer; font-weight: 400; + display: none; +} +.htlRoomTypeDescExtras { + display: none; } @media (min-width: 530px) { .hotelRoomDescContainer{ @@ -68,6 +72,7 @@ } .htlRoomTypeDescText{ font-size: 16px; + word-break: break-word; color: #555555; font-weight: 300; line-height: 21px; diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js index b021a40e4..d239d45b9 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -20,23 +20,28 @@ $(document).ready(function() { applyChangesToDescription(); $(window).on('resize', function() { - resetDescriptions(); + resetDescriptionChanges(); applyChangesToDescription(); }); - $(document).on('click', '.read-extra-text', function(e) { + $(document).on('click', '.htlRoomTypeDescReadmore', function(e) { e.preventDefault(); - $(e.target).closest(".htlRoomTypeDescText").find(".read-extra-text").toggle(); - $(e.target).closest(".htlRoomTypeDescText").find(".truncated").toggle(); - if ($(e.target).closest(".htlRoomTypeDescText").hasClass('htlRoomTypeDescTextContainer')){ - $(e.target).closest(".htlRoomTypeDescText").removeClass('htlRoomTypeDescTextContainer'); - } else { - $(e.target).closest(".htlRoomTypeDescText").addClass('htlRoomTypeDescTextContainer'); - } + var target = (e.target).closest(".htlRoomTypeDescText"); + $(target).removeClass('htlRoomTypeDescTextContainer'); + $(target).html($(e.target).closest(".hotelRoomDescContainer").find('.htlRoomTypeDescOriginal').html()); + $(target).append($('.htlRoomTypeDescExtras').html()); + $(target).find('.htlRoomTypeDescReadless').show().css('display', 'inline-block'); + }); + + $(document).on('click', '.htlRoomTypeDescReadless', function(e) { + e.preventDefault(); + var target = (e.target).closest(".htlRoomTypeDescText"); + $(target).addClass('htlRoomTypeDescTextContainer'); + initToggleOptions($(target)); }); }); -function resetDescriptions() { +function resetDescriptionChanges() { $(document).find('.htlRoomTypeDescText').each(function() { $(this).addClass('htlRoomTypeDescTextContainer'); $(this).html($(this).parent().find('.htlRoomTypeDescOriginal').html()); @@ -45,61 +50,29 @@ function resetDescriptions() { function applyChangesToDescription() { $(document).find('.htlRoomTypeDescText').each(function() { - // checking if the display:overFlow has been applied to the description. + // checking if the display:overFlow has been applied to the description. using 14px since font size is 14px. if ($(this).prop('scrollHeight') - $(this).prop('clientHeight') > 14) { - // Only show read more and read less text if the text is wrapped. initToggleOptions($(this)[0]); } }); } function initToggleOptions(target) { - // Getting the number of displayed characters - var show_char = getVisibleWords(target); - var ellipses = "... "; - var content = $(target).html(); - show_char = show_char - (readMoreText.length + ellipses.length + 5); // adding extra 5 chars of space - if (content.trim().length > show_char) { - // Dividing the text into two parts so that we are able to differentiate the displayed text from hidden text. - var visibleText = content.trim().substr(0, show_char); - var hiddenText = content.trim().substr(show_char - content.trim().length); - // Adding the read more and read less text with the ellipses to the original text. - var html = visibleText + "" + ellipses + ""+ readMoreText +""; - $(target).html(html); - } + truncatedText = truncateText(target); + $(target).text(truncatedText); + $(target).append($('.htlRoomTypeDescExtras').html()); + $(target).find('.htlRoomTypeDescReadmore').first().show(); } -function getVisibleWords(target) { - var style = window.getComputedStyle(target, null); - var width = parseInt(style.getPropertyValue("width")); - var lines = 3; // since we are using line clamp to display only three lines. - var text = $(target).text(); - var words = text.split(/\s+/); // Split text into words based on whitespace - var visibleWords = []; - var currentLineWidth = 0; +function truncateText(target) { + var lineHeight = parseInt($(target).css('line-height'), 10); + var containerHeight = lineHeight * 3; - for (var i = 0; i < words.length; i++) { - var word = words[i]; - var wordWidth = getTextWidth(word, style); - - if (currentLineWidth + wordWidth <= width) { - visibleWords.push(word); - currentLineWidth += wordWidth + getTextWidth(' ', style); // Add space width - } else { - lines--; - if (lines <= 0) break; - - visibleWords.push(word); - currentLineWidth = wordWidth + getTextWidth(' ', style); // Start a new line with the current word - } + text = $(target).text(); + while ($(target).prop('scrollHeight') > containerHeight) { + text = text.slice(0, -10); + $(target).text(text + ' ... ' + $('.htlRoomTypeDescReadmore').first().text()); } - return visibleWords.join(' ').length; -} - -function getTextWidth(text, style) { - var canvas = document.createElement('canvas'); - var context = canvas.getContext('2d'); - context.font = `${style.getPropertyValue("font-weight")} ${style.getPropertyValue("font-size")} ${style.getPropertyValue("font-family")}`; - return context.measureText(text).width; + return text; } diff --git a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl index 7911888c8..872d0030b 100644 --- a/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl +++ b/modules/wkhotelroom/views/templates/hook/hotelRoomDisplayBlock.tpl @@ -60,6 +60,7 @@
    {$roomDisplay.description|escape:'html':'UTF-8'}
    +
    ...{l s='Read More.' mod='wkhotelroom'}...{l s='Read Less.' mod='wkhotelroom'}
    diff --git a/modules/wkhotelroom/wkhotelroom.php b/modules/wkhotelroom/wkhotelroom.php index 95e37e5d9..9318a0c08 100644 --- a/modules/wkhotelroom/wkhotelroom.php +++ b/modules/wkhotelroom/wkhotelroom.php @@ -115,13 +115,6 @@ class WkHotelRoom extends Module ) ); - Media::addJsDef( - array( - 'readMoreText' => $this->l('Read More.', null, true), - 'readLessText' => $this->l('Read Less.', null, true) - ) - ); - $this->context->controller->addJs($this->_path.'/views/js/WkHotelRoomBlockFront.js'); $this->context->controller->addCSS($this->_path.'/views/css/WkHotelRoomBlockFront.css'); From 5b1f1c845245bebadd58b268bcea4d2146b17b11 Mon Sep 17 00:00:00 2001 From: "vishalsingh.qlo325" Date: Wed, 4 Sep 2024 13:09:21 +0530 Subject: [PATCH 29/30] Fixed: The toggle room description for rtl languages --- modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js index d239d45b9..f3b905a69 100644 --- a/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js +++ b/modules/wkhotelroom/views/js/WkHotelRoomBlockFront.js @@ -61,7 +61,7 @@ function initToggleOptions(target) { truncatedText = truncateText(target); $(target).text(truncatedText); $(target).append($('.htlRoomTypeDescExtras').html()); - $(target).find('.htlRoomTypeDescReadmore').first().show(); + $(target).find('.htlRoomTypeDescReadmore').first().show().css('display', 'inline-block'); } function truncateText(target) { From 566a45ccfd05e6c08ad66535c15c52625367cb7b Mon Sep 17 00:00:00 2001 From: Shreesh Arora Date: Thu, 5 Sep 2024 15:03:34 +0530 Subject: [PATCH 30/30] remove dump text --- themes/hotel-reservation-theme/product.tpl | 1 - 1 file changed, 1 deletion(-) diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index 5ee98cfb8..13c09e16a 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -156,7 +156,6 @@ {l s='Next'} {/if} - dasdas {hook h="displayRoomTypeThumbnailsAfter"}