From 4199e40098c33c37326376986817d171128ee4bd Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Thu, 26 Feb 2026 12:13:20 +0530 Subject: [PATCH 01/93] Added functionality for selecting the selling type in a single product with multiple types. --- .../normal_products/informations.tpl | 82 ++++++- .../controllers/orders/helpers/view/view.tpl | 36 ++- classes/Cart.php | 133 +++++++---- classes/PaymentModule.php | 212 ++++++++++++++++-- classes/Product.php | 77 ++++++- classes/order/Order.php | 81 ++++++- classes/order/OrderDetail.php | 2 +- classes/order/OrderInvoice.php | 23 +- classes/pdf/HTMLTemplateInvoice.php | 59 ++++- controllers/admin/AdminCartsController.php | 32 ++- .../admin/AdminNormalProductsController.php | 158 +++++-------- controllers/admin/AdminOrdersController.php | 198 ++++++++++++---- controllers/front/CartController.php | 122 +++++----- .../front/OrderConfirmationController.php | 92 ++++---- controllers/front/OrderDetailController.php | 87 ++++--- controllers/front/ParentOrderController.php | 35 ++- controllers/front/ProductController.php | 14 +- modules/blockcart/blockcart.php | 55 ++--- .../classes/HotelCartBookingData.php | 84 +++---- .../js/modules/blockcart/ajax-cart.js | 157 ++++++++----- .../modules/blockcart/blockcart.tpl | 20 +- .../modules/blockcart/cartrow.tpl | 16 +- .../hotel-reservation-theme/order-detail.tpl | 49 +++- 23 files changed, 1256 insertions(+), 568 deletions(-) diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index 2000a8f8c..ad77a39b0 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -230,7 +230,7 @@ {* Code For Standard product working *} - {*
+
-
*} -
selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE)}style="display:none;"{/if}> +
+
selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE)}style="display:none;"{/if}>
{include file="controllers/products/multishop/checkbox.tpl" field="category_box" type="category_box"}
-
selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != 0)}style="display:none;"{/if}> +
selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0)}style="display:none;"{/if}>
{include file="controllers/products/multishop/checkbox.tpl" field="category_box" type="category_box"}
-
selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != 0}style="display:none;"{/if}> +
selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0}style="display:none;"{/if}>
{/block} {block name='blockcart_shopping_cart_hotel_name'} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if isset($hotel_wise_data.id_hotel) && $hotel_wise_data.id_hotel}
{$hotel_wise_data.hotel_name|escape:'html':'UTF-8'}
@@ -29,7 +29,7 @@ {if !isset($product.is_gift) || !$product.is_gift} {if $product.booking_product} {displayWtPrice p="`$product.bookingData.total_room_type_amount`"} - {else if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {else if isset($hotel_wise_data.id_hotel) && $hotel_wise_data.id_hotel} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$hotel_wise_data.total_price_tax_excl`"}{else}{displayWtPrice p="`$hotel_wise_data.total_price_tax_incl`"}{/if} {else} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$product.total_price_tax_excl`"}{else}{displayWtPrice p="`$product.total_price_tax_incl`"}{/if} @@ -53,10 +53,10 @@ {if $product.booking_product} {$product.bookingData['total_num_rooms']} {elseif $product.allow_multiple_quantity} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if isset($hotel_wise_data.id_hotel) && $hotel_wise_data.id_hotel} {$hotel_wise_data.total_qty} - {elseif $product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE} - {$product.cart_quantity} + {elseif Product::isSellableAsStandalone($product.selling_preference_type)} + {$product.standalone_total_qty|intval} {/if} {/if} @@ -99,9 +99,9 @@ {/block} {else if $product.hasOptions} {block name='blockcart_shopping_cart_options'} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if isset($hotel_wise_data.id_hotel) && $hotel_wise_data.id_hotel} {assign var='options' value=$hotel_wise_data.options} - {else if $product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE} + {else} {assign var='options' value=$product.options} {/if}
@@ -155,4 +155,4 @@ {if !isset($product.attributes_small)}{/if} {/if} -{if isset($product.attributes_small)}{/if} \ No newline at end of file +{if isset($product.attributes_small)}{/if} diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl index 9402a240d..81fa7f340 100644 --- a/themes/hotel-reservation-theme/order-detail.tpl +++ b/themes/hotel-reservation-theme/order-detail.tpl @@ -317,14 +317,27 @@ {assign var=room_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, true)} {assign var=room_price_tax_incl value=$order->getTotalProductsWithTaxes(false, true)} - - {assign var=room_services_price_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_te)} - {assign var=room_services_price_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_ti)} + {assign var=room_services_price_tax_excl value=( + $order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) + + $total_demands_price_te + )} + {assign var=room_services_price_tax_incl value=( + $order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) + + $total_demands_price_ti + )} + {assign var=all_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false)} + {assign var=all_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false)} + {assign var=room_linked_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} + {assign var=room_linked_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} {assign var=total_tax_without_discount value=(($room_price_tax_incl - $room_price_tax_excl) + ($room_services_price_tax_incl - $room_services_price_tax_excl ))} - {assign var=total_standard_products_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} - {assign var=total_standard_products_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} + {assign var=total_standard_products_tax_incl value=( + $all_services_price_tax_incl - $room_linked_services_price_tax_incl + )} + {assign var=total_standard_products_tax_excl value=( + $all_services_price_tax_excl - $room_linked_services_price_tax_excl + )} {if isset($cart_htl_data) && $cart_htl_data} {l s='Total rooms cost'} {if $use_taxes && $display_tax_label == 1}{if $priceDisplay == 1}{l s='(tax excl.)'}{elseif $priceDisplay == 0}{l s='(tax incl.)'}{/if} {/if} @@ -350,7 +363,7 @@ {/if} - {if $total_convenience_fee_te || $total_convenience_fee_te} + {if $total_convenience_fee_te || $total_convenience_fee_ti} {l s='Total Convenience Fees'} {if $use_taxes && $display_tax_label == 1}{if $priceDisplay == 1}{l s='(tax excl.)'}{elseif $priceDisplay == 0}{l s='(tax incl.)'}{/if}{/if} @@ -726,11 +739,25 @@ {assign var=room_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, true)} {assign var=room_price_tax_incl value=$order->getTotalProductsWithTaxes(false, true)} - {assign var=room_services_price_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_te)} - {assign var=room_services_price_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_ti)} + {assign var=room_services_price_tax_excl value=( + $order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) + + $total_demands_price_te + )} + {assign var=room_services_price_tax_incl value=( + $order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) + + $total_demands_price_ti + )} + {assign var=all_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false)} + {assign var=all_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false)} + {assign var=room_linked_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} + {assign var=room_linked_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} - {assign var=total_standard_products_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} - {assign var=total_standard_products_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} + {assign var=total_standard_products_tax_incl value=( + $all_services_price_tax_incl - $room_linked_services_price_tax_incl + )} + {assign var=total_standard_products_tax_excl value=( + $all_services_price_tax_excl - $room_linked_services_price_tax_excl + )} {assign var=total_tax_without_discount value=(($room_price_tax_incl - $room_price_tax_excl) + ($room_services_price_tax_incl - $room_services_price_tax_excl) + ($total_standard_products_tax_incl - $total_standard_products_tax_excl))} @@ -759,7 +786,7 @@ {/if} - {if $total_convenience_fee_te || $total_convenience_fee_te} + {if $total_convenience_fee_te || $total_convenience_fee_ti} {l s='Total Convenience Fees'} {if $use_taxes && $display_tax_label == 1}{if $priceDisplay == 1}{l s='(tax excl.)'}{elseif $priceDisplay == 0}{l s='(tax incl.)'}{/if}{/if} From 2a86378bae57b62b39aff58d532fc178989f8479 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 27 Feb 2026 10:14:09 +0530 Subject: [PATCH 02/93] Fix price calculation in order confirmation email --- classes/Cart.php | 81 +++++---- classes/PaymentModule.php | 60 +++++-- classes/pdf/HTMLTemplateInvoice.php | 80 ++++++++- classes/pdf/HTMLTemplateOrderSlip.php | 14 +- .../WebserviceSpecificManagementBookings.php | 10 +- controllers/admin/AdminImportController.php | 6 +- controllers/front/GuestTrackingController.php | 35 ++-- modules/blockcart/ajax-cart.js | 157 +++++++++++------- modules/blockcart/blockcart.tpl | 21 ++- modules/blockcart/cartrow.tpl | 12 +- .../AdminHotelRoomsBookingController.php | 4 +- 11 files changed, 321 insertions(+), 159 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index cc5d94173..e936c663c 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1791,42 +1791,59 @@ class CartCore extends ObjectModel } } else if ($canSellWithHotel) { - if ($type == Cart::ONLY_ROOM_SERVICES - || $type == Cart::ONLY_CONVENIENCE_FEE - || $type == Cart::ONLY_ROOM_SERVICES_WITHOUT_AUTO_ADD - || $type == Cart::ONLY_ROOM_SERVICES_WITHOUT_CONVENIENCE_FEE - || $type == Cart::ONLY_ROOM_SERVICES_WITH_AUTO_ADD_WITHOUT_CONVENIENCE_FEE - ) { - $servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( - $this->id, - [], - 0, - null, - null, - (int)$product['id_product'] - ); - } elseif ($type == Cart::ONLY_STANDALONE_PRODUCTS) { - $servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( - $this->id, - [], - null, - 0, - null, - (int)$product['id_product'] - ); - } else { - $servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( - $this->id, - [], - 0, - null, - null, - (int)$product['id_product'] - ); + $isRoomServiceTotalType = in_array($type, array( + Cart::ONLY_ROOM_SERVICES, + 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, + )); + $id_hotel = null; + $id_hotel_cart_booking = null; + if ($param_product) { + if (isset($product['id_hotel']) && (int)$product['id_hotel']) { + $id_hotel = (int)$product['id_hotel']; + } + if (isset($product['id_hotel_cart_booking']) && (int)$product['id_hotel_cart_booking']) { + $id_hotel_cart_booking = (int)$product['id_hotel_cart_booking']; + } } + $servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( + $this->id, + [], + null, + null, + null, + (int)$product['id_product'] + ); + if ($servicePorducts) { foreach ($servicePorducts as $servicePorduct) { + if ($param_product) { + if ($id_hotel_cart_booking !== null + && (int)$servicePorduct['id_hotel_cart_booking'] !== $id_hotel_cart_booking + ) { + continue; + } + if ($id_hotel_cart_booking === null + && $id_hotel !== null + && ( + !empty($servicePorduct['id_hotel_cart_booking']) + || (int)$servicePorduct['id_hotel'] !== $id_hotel + ) + ) { + continue; + } + } + if ($isRoomServiceTotalType && empty($servicePorduct['id_hotel_cart_booking'])) { + continue; + } + if ($type == Cart::ONLY_STANDALONE_PRODUCTS + && !empty($servicePorduct['id_hotel_cart_booking']) + ) { + continue; + } if ($with_taxes) { $priceAdd = $servicePorduct['total_price_tax_incl']; } else { diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 3af3b70dc..e39aa34b6 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -541,6 +541,7 @@ abstract class PaymentModuleCore extends Module $product_var_tpl_list = array(); $orderServiceProducts = array(); + $processedServiceProductCartIds = array(); $objProduct = new Product(); foreach ($order->product_list as $product) { @@ -591,11 +592,11 @@ abstract class PaymentModuleCore extends Module } if ( - !$product['booking_product'] + !$product['booking_product'] && !$product['id_hotel_cart_booking'] && ( Product::isSellableAsStandalone($product['selling_preference_type']) || Product::isSellableWithHotel($product['selling_preference_type']) - ) + ) ) { $cover_image_arr = $objProduct->getCover($product['id_product']); @@ -613,7 +614,8 @@ abstract class PaymentModuleCore extends Module null, $product['id_product'] ); - + $standaloneServiceProducts = array(); + $hotelServiceProducts = array(); foreach ($serviceProducts as $serviceProduct) { $orderServiceProducts[] = array_merge($product_var_tpl, $serviceProduct); } @@ -1402,28 +1404,52 @@ abstract class PaymentModuleCore extends Module $normal_products_data_txt = $this->getEmailTemplateContent('service_product_data_text.tpl', Mail::TYPE_TEXT, $orderServiceProducts); // get order total information html/txt files + // room-related selling types: + // 1: with room type, 3: hotel+room, 6: standalone+room, 7: hotel+room+standalone + $roomRelatedSellingTypes = array( + Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + ); + // total room price - $room_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, true) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); - $room_price_tax_incl = $order->getTotalProductsWithTaxes(false, true) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); + $room_auto_with_room_tax_excl = 0; + $room_auto_with_room_tax_incl = 0; + foreach ($roomRelatedSellingTypes as $sellingType) { + $room_auto_with_room_tax_excl += $order->getTotalProductsWithoutTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); + $room_auto_with_room_tax_incl += $order->getTotalProductsWithTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); + } + $room_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, true) + $room_auto_with_room_tax_excl; + $room_price_tax_incl = $order->getTotalProductsWithTaxes(false, true) + $room_auto_with_room_tax_incl; $room_tax = ($room_price_tax_incl - $room_price_tax_excl); // extra services - $additional_service_price_tax_excl = ($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0) + $cart_booking_data['total_extra_demands_te']); - $additional_service_price_tax_incl = ($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0) + $cart_booking_data['total_extra_demands_ti']); + $additional_service_price_tax_excl = (float) $cart_booking_data['total_extra_demands_te']; + $additional_service_price_tax_incl = (float) $cart_booking_data['total_extra_demands_ti']; + foreach ($roomRelatedSellingTypes as $sellingType) { + $additional_service_price_tax_excl += $order->getTotalProductsWithoutTaxes(false, false, $sellingType, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + $additional_service_price_tax_incl += $order->getTotalProductsWithTaxes(false, false, $sellingType, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + } $additional_service_tax = ($additional_service_price_tax_incl - $additional_service_price_tax_excl); // convenience fee price - $total_convenience_fee_ti = $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); - $total_convenience_fee_te = $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + $total_convenience_fee_ti = 0; + $total_convenience_fee_te = 0; + foreach ($roomRelatedSellingTypes as $sellingType) { + $total_convenience_fee_ti += $order->getTotalProductsWithTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + $total_convenience_fee_te += $order->getTotalProductsWithoutTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + } $total_convenience_fee_tax = $total_convenience_fee_ti - $total_convenience_fee_te; // service products - $standalone_products_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE); - $standalone_products_price_tax_incl = $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE); - $hotel_standalone_products_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); - $hotel_standalone_products_price_tax_incl = $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); - - $service_products_tax = ($standalone_products_price_tax_incl + $hotel_standalone_products_price_tax_incl) - ($standalone_products_price_tax_excl + $hotel_standalone_products_price_tax_excl); + $all_services_price_tax_incl = $order->getTotalProductsWithTaxes(false, false); + $all_services_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false); + $room_linked_services_price_tax_incl = $order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); + $room_linked_services_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); + $total_standard_products_tax_incl = $all_services_price_tax_incl - $room_linked_services_price_tax_incl; + $total_standard_products_tax_excl = $all_services_price_tax_excl - $room_linked_services_price_tax_excl; + $service_products_tax = $total_standard_products_tax_incl - $total_standard_products_tax_excl; $total_order_tax = $room_tax + $additional_service_tax + $total_convenience_fee_tax + $service_products_tax; @@ -1440,12 +1466,12 @@ abstract class PaymentModuleCore extends Module 'total_convenience_fee_te' => Tools::displayPrice($total_convenience_fee_te, $this->context->currency, false), 'total_convenience_fee_tax' => Tools::displayPrice($total_convenience_fee_tax, $this->context->currency, false), 'service_products_price_tax_excl' => Tools::displayPrice( - ($standalone_products_price_tax_excl + $hotel_standalone_products_price_tax_excl), + $total_standard_products_tax_excl, $this->context->currency, false ), 'service_products_price_tax_incl' => Tools::displayPrice( - ($standalone_products_price_tax_incl + $hotel_standalone_products_price_tax_incl), + $total_standard_products_tax_incl, $this->context->currency, false ), diff --git a/classes/pdf/HTMLTemplateInvoice.php b/classes/pdf/HTMLTemplateInvoice.php index 4b4754ca8..23839e4e8 100644 --- a/classes/pdf/HTMLTemplateInvoice.php +++ b/classes/pdf/HTMLTemplateInvoice.php @@ -679,17 +679,81 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate $footer['room_price_tax_incl'] = $this->order->getTotalProductsWithTaxes(false, true, null, null, null, $idsOrderDetail); foreach ($roomTypeSellingPreferenceTypes as $sellingPreferenceType) { - $footer['room_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes(false, false, $sellingPreferenceType, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM, $idsOrderDetail); - $footer['room_price_tax_incl'] += $this->order->getTotalProductsWithTaxes(false, false, $sellingPreferenceType, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM, $idsOrderDetail); - $footer['additional_service_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes(false, false, $sellingPreferenceType, 0, null, $idsOrderDetail); - $footer['additional_service_price_tax_incl'] += $this->order->getTotalProductsWithTaxes(false, false, $sellingPreferenceType, 0, null, $idsOrderDetail); - $footer['total_convenience_fee_te'] += $this->order->getTotalProductsWithoutTaxes(false, false, $sellingPreferenceType, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT, $idsOrderDetail); - $footer['total_convenience_fee_ti'] += $this->order->getTotalProductsWithTaxes(false, false, $sellingPreferenceType, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT, $idsOrderDetail); + $footer['room_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes( + false, + false, + $sellingPreferenceType, + 1, + Product::PRICE_ADDITION_TYPE_WITH_ROOM, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); + $footer['room_price_tax_incl'] += $this->order->getTotalProductsWithTaxes( + false, + false, + $sellingPreferenceType, + 1, + Product::PRICE_ADDITION_TYPE_WITH_ROOM, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); + $footer['additional_service_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes( + false, + false, + $sellingPreferenceType, + 0, + null, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); + $footer['additional_service_price_tax_incl'] += $this->order->getTotalProductsWithTaxes( + false, + false, + $sellingPreferenceType, + 0, + null, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); + $footer['total_convenience_fee_te'] += $this->order->getTotalProductsWithoutTaxes( + false, + false, + $sellingPreferenceType, + 1, + Product::PRICE_ADDITION_TYPE_INDEPENDENT, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); + $footer['total_convenience_fee_ti'] += $this->order->getTotalProductsWithTaxes( + false, + false, + $sellingPreferenceType, + 1, + Product::PRICE_ADDITION_TYPE_INDEPENDENT, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); } foreach ($serviceSellingPreferenceTypes as $sellingPreferenceType) { - $footer['service_products_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes(false, false, $sellingPreferenceType, false, false, $idsOrderDetail); - $footer['service_products_price_tax_incl'] += $this->order->getTotalProductsWithTaxes(false, false, $sellingPreferenceType, false, false, $idsOrderDetail); + $footer['service_products_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes( + false, + false, + $sellingPreferenceType, + false, + false, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_NON_ROOM + ); + $footer['service_products_price_tax_incl'] += $this->order->getTotalProductsWithTaxes( + false, + false, + $sellingPreferenceType, + false, + false, + $idsOrderDetail, + Order::SERVICE_PRODUCT_CONTEXT_NON_ROOM + ); } $footer['additional_service_price_tax_excl'] += $totalDemandsPriceTE; diff --git a/classes/pdf/HTMLTemplateOrderSlip.php b/classes/pdf/HTMLTemplateOrderSlip.php index 16396243f..0c2a50c86 100644 --- a/classes/pdf/HTMLTemplateOrderSlip.php +++ b/classes/pdf/HTMLTemplateOrderSlip.php @@ -286,7 +286,7 @@ class HTMLTemplateOrderSlipCore extends HTMLTemplateInvoice $order_detail = array_filter($this->order->products, function($v) { return ((isset($v['is_booking_product']) && $v['is_booking_product']) || ((isset($v['product_auto_add']) && $v['product_auto_add']) - && $v['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE + && Product::isSellableWithRoomType($v['selling_preference_type']) && $v['product_price_addition_type'] == ProductCore::PRICE_ADDITION_TYPE_WITH_ROOM) ); }); @@ -347,10 +347,14 @@ class HTMLTemplateOrderSlipCore extends HTMLTemplateInvoice // - 'total_amount' $breakdown = array(); $order_detail = array_filter($this->order->products, function($v) { - return (!$v['is_booking_product'] && ( - $v['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE - || $v['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE - )); + return ( + !$v['is_booking_product'] + && empty($v['id_htl_booking']) + && ( + Product::isSellableAsStandalone($v['selling_preference_type']) + || Product::isSellableWithHotel($v['selling_preference_type']) + ) + ); }); $details = $this->order->getProductTaxesDetails($order_detail, false); diff --git a/classes/webservice/WebserviceSpecificManagementBookings.php b/classes/webservice/WebserviceSpecificManagementBookings.php index 10e52dab0..bb9e3be7d 100644 --- a/classes/webservice/WebserviceSpecificManagementBookings.php +++ b/classes/webservice/WebserviceSpecificManagementBookings.php @@ -1015,7 +1015,15 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We } } - $serviceProductPrice = $objOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); + $serviceProductPrice = $objOrder->getTotalProductsWithTaxes( + false, + false, + null, + null, + null, + [], + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ); if ($demands = $objHotelBookingDemands->getExtraDemandsTaxesDetails($objOrder->id)) { $demandsPrice = array_sum(array_column($demands, 'total_price_tax_excl')); // Adding the tax diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index d2819efca..cf130c6e3 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -1901,7 +1901,7 @@ class AdminImportControllerCore extends AdminController } $objServiceProduct = new Product($idServiceProduct); - if (Product::SELLING_PREFERENCE_WITH_ROOM_TYPE == $objServiceProduct->selling_preference_type) { + if (Product::isSellableWithRoomType($objServiceProduct->selling_preference_type)) { $objRoomTypeServiceProduct->addRoomProductLink( $objServiceProduct->id, $product->id, @@ -2329,12 +2329,12 @@ class AdminImportControllerCore extends AdminController $info['shop'] = explode($this->multiple_value_separator, $info['shop']); RoomTypeServiceProduct::deleteRoomProductLink($product->id); - if (Product::SELLING_PREFERENCE_WITH_ROOM_TYPE == $product->selling_preference_type) { + if (Product::isSellableWithRoomType($product->selling_preference_type)) { $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); if (isset($info['id_room_types']) && $info['id_room_types']) { $objRoomTypeServiceProduct->addRoomProductLink( $product->id, - $product->id_room_types, + $info['id_room_types'], RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE ); } diff --git a/controllers/front/GuestTrackingController.php b/controllers/front/GuestTrackingController.php index 596d54185..fd684953b 100644 --- a/controllers/front/GuestTrackingController.php +++ b/controllers/front/GuestTrackingController.php @@ -497,7 +497,7 @@ class GuestTrackingControllerCore extends FrontController $value['avg_price_diff_tax_excl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_excl'] - $value['product_price_tax_excl'], 6)); $value['avg_price_diff_tax_incl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_incl'] - $value['product_price_tax_incl'], 6)); } - } elseif ($type_value['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) { + } elseif (Product::isSellableWithRoomType($type_value['selling_preference_type'])) { if ($type_value['product_auto_add'] && $type_value['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT) { $total_convenience_fee_ti += $objServiceProductOrderDetail->getRoomTypeServiceProducts( $idOrder, @@ -524,7 +524,10 @@ class GuestTrackingControllerCore extends FrontController 1 ); } - } else if ($type_value['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE) { + } else if ( + Product::isSellableWithHotel($type_value['selling_preference_type']) + || Product::isSellableAsStandalone($type_value['selling_preference_type']) + ) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { @@ -532,21 +535,21 @@ class GuestTrackingControllerCore extends FrontController } else { $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); } - $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($idOrder, $type_value['id_order_detail'], $type_value['product_id']); - foreach ($hotelProducts as $hotelProduct) { - $hotelServiceProducts[] = array_merge($type_value, $hotelProduct); - } - } else if ($type_value['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE) { - $cover_image_arr = $product->getCover($type_value['product_id']); - if (!empty($cover_image_arr)) { - $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $product->id.'-'.$cover_image_arr['id_image'], 'small_default'); - } else { - $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); - } - $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($idOrder, $type_value['id_order_detail'], $type_value['product_id']); - foreach ($standaloneProducts as $standaloneProduct) { - $standaloneServiceProducts[] = array_merge($type_value, $standaloneProduct); + $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder( + $idOrder, + $type_value['id_order_detail'], + $type_value['product_id'] + ); + foreach ($serviceProducts as $serviceProduct) { + $isStandaloneRow = empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_htl_booking_detail']); + $isHotelRow = !empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_htl_booking_detail']); + + if ($isHotelRow && Product::isSellableWithHotel($type_value['selling_preference_type'])) { + $hotelServiceProducts[] = array_merge($type_value, $serviceProduct); + } elseif ($isStandaloneRow && Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + $standaloneServiceProducts[] = array_merge($type_value, $serviceProduct); + } } } } diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index ca2ad2695..85c34b47e 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -127,6 +127,51 @@ var ajaxCart = { dateFormat: 'DD-MM-YYYY', dateFormatFull: 'DD-MM-YYYY HH:mm:ss', nb_total_products: 0, + getSellingPreferenceChannels: function(sellingPreferenceType) { + var channels = { + with_room_type: false, + with_hotel: false, + standalone: false + }; + switch (parseInt(sellingPreferenceType)) { + case SELLING_PREFERENCE_WITH_ROOM_TYPE: + channels.with_room_type = true; + break; + case SELLING_PREFERENCE_HOTEL_STANDALONE: + channels.with_hotel = true; + break; + case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE: + channels.with_room_type = true; + channels.with_hotel = true; + break; + case SELLING_PREFERENCE_STANDALONE: + channels.standalone = true; + break; + case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE: + channels.with_hotel = true; + channels.standalone = true; + break; + case SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE: + channels.with_room_type = true; + channels.standalone = true; + break; + case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE: + channels.with_room_type = true; + channels.with_hotel = true; + channels.standalone = true; + break; + } + return channels; + }, + isSellableWithRoomType: function(sellingPreferenceType) { + return this.getSellingPreferenceChannels(sellingPreferenceType).with_room_type; + }, + isSellableWithHotel: function(sellingPreferenceType) { + return this.getSellingPreferenceChannels(sellingPreferenceType).with_hotel; + }, + isSellableAsStandalone: function(sellingPreferenceType) { + return this.getSellingPreferenceChannels(sellingPreferenceType).standalone; + }, _overrideButtonsInThePage: function () { //for every 'add' buttons... $(document).off('click', '.ajax_add_to_cart_button').on('click', '.ajax_add_to_cart_button', function (e) { @@ -703,15 +748,13 @@ var ajaxCart = { //try to know if the current product is still in the new list var stayInTheCart = false; + var isHotelRow = (typeof ids[3] != 'undefined' && parseInt(ids[3], 10) > 0); for (aProduct in jsonData.products) { //we've called the variable aProduct because IE6 bug if this variable is called product //if product has attributes - if ((parseInt(jsonData.products[aProduct]['selling_preference_type']) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(jsonData.products[aProduct]['selling_preference_type']) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) - && (typeof jsonData.products[aProduct]['hotel_wise_data'] != 'undefined' && jsonData.products[aProduct]['hotel_wise_data'].length) - ) { + if (isHotelRow && (typeof jsonData.products[aProduct]['hotel_wise_data'] != 'undefined' && jsonData.products[aProduct]['hotel_wise_data'].length)) { $.each(jsonData.products[aProduct]['hotel_wise_data'], function() { - if (!ids[3] || (ids[3] == this.id_hotel)) { + if (ids[3] == this.id_hotel) { stayInTheCart = true; } }); @@ -835,25 +878,37 @@ var ajaxCart = { $(jsonData.products).each(function(key, value) { //fix ie6 bug (one more item 'undefined' in IE6) if (this.id != undefined) { - if (!this.booking_product && parseInt(this.selling_preference_type) == SELLING_PREFERENCE_WITH_ROOM_TYPE) { - return; - } - //create a container for listing the products and hide the 'no product in the cart' message (only if the cart was empty) - if ($('.cart_block:first dl.products').length == 0) { - $('.cart_block_no_products').before('
'); - $('.cart_block_no_products').hide(); - } - - if (parseInt(this.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(this.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE + if ( + this.booking_product + || ajaxCart.isSellableWithHotel(parseInt(this.selling_preference_type)) + || ajaxCart.isSellableAsStandalone(parseInt(this.selling_preference_type)) ) { - if (typeof value.hotel_wise_data != 'undefined') { - $(value.hotel_wise_data).each(function(i, val) { - ajaxCart.addProductRow(value, val); - }); + if ($('.cart_block:first dl.products').length == 0) { + $('.cart_block_no_products').before('
'); + $('.cart_block_no_products').hide(); + } + + var hasHotelRows = (typeof value.hotel_wise_data != 'undefined' && value.hotel_wise_data.length); + if (hasHotelRows) { + if (typeof value.hotel_wise_data != 'undefined') { + $(value.hotel_wise_data).each(function(i, val) { + ajaxCart.addProductRow(value, val); + }); + } + } + + var shouldShowStandaloneRow = this.booking_product + || ( + !ajaxCart.isSellableWithHotel(parseInt(this.selling_preference_type)) + && !ajaxCart.isSellableWithRoomType(parseInt(this.selling_preference_type)) + ) + || ( + ajaxCart.isSellableAsStandalone(parseInt(this.selling_preference_type)) + && parseInt(value.standalone_total_qty || 0, 10) > 0 + ); + if (shouldShowStandaloneRow) { + ajaxCart.addProductRow(value); } - } else { - ajaxCart.addProductRow(value); } } }); @@ -876,10 +931,7 @@ var ajaxCart = { content += '
'; content += '' + name + ''; content += '
'; - if ((parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) - && (typeof(hotel_wise_data) != 'undefined' && typeof(hotel_wise_data.hotel_name) != 'undefined') - ) { + if ((typeof(hotel_wise_data) != 'undefined' && typeof(hotel_wise_data.hotel_name) != 'undefined')) { content += '
' + hotel_wise_data.hotel_name + '
'; } @@ -893,10 +945,7 @@ var ajaxCart = { if (product.booking_product) { content += formatCurrency(parseFloat(product.bookingData.total_room_type_amount), currency_format, currency_sign, currency_blank); - }else if ((parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) - && (typeof(hotel_wise_data) != 'undefined') - ) { + } else if (typeof(hotel_wise_data) != 'undefined') { content += formatCurrency(parseFloat(hotel_wise_data.amount), currency_format, currency_sign, currency_blank); } else { content += formatCurrency(parseFloat(product.amount), currency_format, currency_sign, currency_blank); @@ -916,7 +965,7 @@ var ajaxCart = { if (typeof(hotel_wise_data) != 'undefined' && hotel_wise_data.total_qty) { content += hotel_wise_data.total_qty; } else { - content += product.cart_quantity; + content += (typeof product.standalone_total_qty != 'undefined' ? product.standalone_total_qty : product.cart_quantity); } } content += ''; @@ -976,16 +1025,11 @@ var ajaxCart = { content += '' + price_txt + ''; content += ' '; content += ''; - if (parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE - ) { - if (hotel_wise_data.options !== 'undefined') { - var options = hotel_wise_data.options; - } - } else if (parseInt(product.selling_preference_type) == SELLING_PREFERENCE_STANDALONE) { - if (product.options !== 'undefined') { - var options = product.options; - } + var options = []; + if (typeof(hotel_wise_data) != 'undefined' && typeof(hotel_wise_data.options) != 'undefined') { + options = hotel_wise_data.options; + } else if (typeof(product.options) != 'undefined') { + options = product.options; } if (options !== 'undefined') { $.each(options, function(data_k, data_v) { @@ -1043,16 +1087,11 @@ var ajaxCart = { } else if (product.hasOptions) { $('dt[data-id="cart_block_product_' + productDomId + '"] .cart_prod_cont tr.product_option_row').remove(); var product_options_content = ''; - if (parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE - ) { - if (hotel_wise_data.options !== 'undefined') { - var options = hotel_wise_data.options; - } - } else if (parseInt(product.selling_preference_type) == SELLING_PREFERENCE_STANDALONE) { - if (product.options !== 'undefined') { - var options = product.options; - } + var options = []; + if (typeof(hotel_wise_data) != 'undefined' && typeof(hotel_wise_data.options) != 'undefined') { + options = hotel_wise_data.options; + } else if (typeof(product.options) != 'undefined') { + options = product.options; } if (options !== 'undefined') { $.each(options, function(data_k, data_v) { @@ -1077,10 +1116,7 @@ var ajaxCart = { if (!product.is_gift) { if (product.booking_product) { $('dt[data-id="cart_block_product_' + productDomId + '"] .price').text(formatCurrency(parseFloat(product.bookingData.total_room_type_amount), currency_format, currency_sign, currency_blank)); - } else if ((parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) - && typeof(hotel_wise_data) != 'undefined' - ) { + } else if (typeof(hotel_wise_data) != 'undefined') { $('dt[data-id="cart_block_product_' + productDomId + '"] .price').text(formatCurrency(parseFloat(hotel_wise_data.amount), currency_format, currency_sign, currency_blank)); } else { $('dt[data-id="cart_block_product_' + productDomId + '"] .price').text(formatCurrency(parseFloat(product.amount), currency_format, currency_sign, currency_blank)); @@ -1091,15 +1127,16 @@ var ajaxCart = { //cart_booking_data[key].total_num_rooms argument sent to update num of rooms instead of quantity if (product.booking_product) { ajaxCart.updateProductQuantity(jsonProduct, product.bookingData.total_num_rooms); - } else if ((parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE - || parseInt(product.selling_preference_type) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE - ) - && typeof(hotel_wise_data) != 'undefined' + } else if ( + typeof(hotel_wise_data) != 'undefined' && hotel_wise_data.total_qty ) { ajaxCart.updateProductQuantity(jsonProduct, hotel_wise_data.total_qty, hotel_wise_data); } else { - ajaxCart.updateProductQuantity(jsonProduct, jsonProduct.cart_quantity); + ajaxCart.updateProductQuantity( + jsonProduct, + (typeof jsonProduct.standalone_total_qty != 'undefined' ? jsonProduct.standalone_total_qty : jsonProduct.cart_quantity) + ); } // Customized product diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index af73ec530..ec29d14f4 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -63,14 +63,15 @@
{foreach from=$products key=data_k item='product' name='myLoop'} {* only show products that are booking or global without room *} - {if $product.booking_product || ($product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE)|| ($product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE) || ($product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE)} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} - {if isset($product.hotel_wise_data) && $product.hotel_wise_data} - {foreach $product.hotel_wise_data as $hotel_wise_data} - {include file="./cartrow.tpl" hotel_wise_data=$hotel_wise_data} - {/foreach} - {/if} - {else} + {if $product.booking_product || Product::isSellableAsStandalone($product.selling_preference_type) || Product::isSellableWithHotel($product.selling_preference_type)} + {if isset($product.hotel_wise_data) && $product.hotel_wise_data} + {foreach $product.hotel_wise_data as $hotel_wise_data} + {include file="./cartrow.tpl" hotel_wise_data=$hotel_wise_data} + {/foreach} + {/if} + {if $product.booking_product + || (!Product::isSellableWithHotel($product.selling_preference_type) && !Product::isSellableWithRoomType($product.selling_preference_type)) + || (Product::isSellableAsStandalone($product.selling_preference_type) && $product.standalone_total_qty > 0)} {include file="./cartrow.tpl" hotel_wise_data=false} {/if} {/if} @@ -401,11 +402,13 @@ {addJsDef img_dir=$img_dir|escape:'quotes':'UTF-8'} {addJsDef generated_date=$smarty.now|intval} {addJsDef ajax_allowed=$ajax_allowed|boolval} - {addJsDef hasDeliveryAddress=(isset($cart->id_address_delivery) && $cart->id_address_delivery)} {addJsDef SELLING_PREFERENCE_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_ROOM_TYPE} {addJsDef SELLING_PREFERENCE_STANDALONE=Product::SELLING_PREFERENCE_STANDALONE} {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE} {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE} + {addJsDef SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE} + {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE} {addJsDefL name=customizationIdMessage}{l s='Customization #' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=removingLinkText}{l s='remove this product from my cart' mod='blockcart' js=1}{/addJsDefL} diff --git a/modules/blockcart/cartrow.tpl b/modules/blockcart/cartrow.tpl index e909aaacf..68d0cbc96 100644 --- a/modules/blockcart/cartrow.tpl +++ b/modules/blockcart/cartrow.tpl @@ -11,7 +11,7 @@
{/block} {block name='blockcart_shopping_cart_hotel_name'} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if Product::isSellableWithHotel($product.selling_preference_type)}
{$hotel_wise_data.hotel_name|escape:'html':'UTF-8'}
@@ -29,7 +29,7 @@ {if !isset($product.is_gift) || !$product.is_gift} {if $product.booking_product} {displayWtPrice p="`$product.bookingData.total_room_type_amount`"} - {else if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {else if Product::isSellableWithHotel($product.selling_preference_type)} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$hotel_wise_data.total_price_tax_excl`"}{else}{displayWtPrice p="`$hotel_wise_data.total_price_tax_incl`"}{/if} {else} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$product.total_price_tax_excl`"}{else}{displayWtPrice p="`$product.total_price_tax_incl`"}{/if} @@ -53,9 +53,9 @@ {if $product.booking_product} {$product.bookingData['total_num_rooms']} {elseif $product.allow_multiple_quantity} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if Product::isSellableWithHotel($product.selling_preference_type)} {$hotel_wise_data.total_qty} - {elseif $product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE} + {elseif Product::isSellableAsStandalone($product.selling_preference_type)} {$product.cart_quantity} {/if} {/if} @@ -99,9 +99,9 @@ {/block} {else if $product.hasOptions} {block name='blockcart_shopping_cart_options'} - {if $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE || $product.selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} + {if Product::isSellableWithHotel($product.selling_preference_type)} {assign var='options' value=$hotel_wise_data.options} - {else if $product.selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE} + {else if Product::isSellableAsStandalone($product.selling_preference_type)} {assign var='options' value=$product.options} {/if}
diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index fac60d468..b86558c85 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -625,9 +625,9 @@ class AdminHotelRoomsBookingController extends ModuleAdminController if (!$product->id || !$product->active) { $this->errors[] = $this->l('This product is no longer available.'); } - if ($product->booking_product || ($product->selling_preference_type != Product::SELLING_PREFERENCE_STANDALONE)) { + if ($product->booking_product || !Product::isSellableAsStandalone($product->selling_preference_type)) { // cannot be added without room type or is a booking product. - $this->errors[] = $this->l('This product is either a room type or additional service and cannot be added thorugh this method.'); + $this->errors[] = $this->l('This product is either a room type or additional service and cannot be added through this method.'); } elseif (!$product->allow_multiple_quantity) { // check if product already exists in cart. if ($id_cart) { From 3dc7b7b1880cffe9fb62087376fd95a0f531ce52 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 27 Feb 2026 13:23:16 +0530 Subject: [PATCH 03/93] Fix update price calculation method --- .../controllers/normal_products/prices.tpl | 29 +++++---- .../_add_order_extra_services_tab_content.tpl | 15 ++++- ..._services_service_products_tab_content.tpl | 35 ++++++++--- classes/Product.php | 63 ++++++++++++++++--- .../WebserviceSpecificManagementBookings.php | 55 +++++++++------- controllers/admin/AdminCartsController.php | 10 +-- .../admin/AdminNormalProductsController.php | 11 +++- controllers/admin/AdminOrdersController.php | 36 ++++++----- .../classes/HotelHelper.php | 10 +-- .../classes/ServiceProductCartDetail.php | 39 ++++++------ .../_partials/cart_booking_demands.tpl | 17 +++-- .../_partials/service-products-list-row.tpl | 9 ++- 12 files changed, 222 insertions(+), 107 deletions(-) diff --git a/admin/themes/default/template/controllers/normal_products/prices.tpl b/admin/themes/default/template/controllers/normal_products/prices.tpl index bae5d1211..6d315a307 100644 --- a/admin/themes/default/template/controllers/normal_products/prices.tpl +++ b/admin/themes/default/template/controllers/normal_products/prices.tpl @@ -206,19 +206,24 @@ $(document).ready(function () {
{if isset($pack) && $pack->isPack($product->id)}

{l s='The sum of prices of the products in the pack is %s%s%s' sprintf=[$currency->prefix,{toolsConvertPrice price=$pack->noPackPrice($product->id)|string_format:$priceDisplayPrecisionFormat},$currency->suffix]}

{/if}
*} -
- -
- +
+ +
+ +
-
{* As no use in QloApps currently so commented *} {*
{include file="controllers/products/multishop/checkbox.tpl" field="unit_price" type="unit_price"}
diff --git a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl index 048757a04..3dc6241f0 100644 --- a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl @@ -91,7 +91,11 @@ {$cartCurrency->sign} - {if Product::PRICE_CALCULATION_METHOD_PER_DAY == $product['price_calculation_method']} + {if Product::getPriceCalculationApplicableDays( + $product['price_calculation_method'], + $selectedRoomServiceProduct['date_from'], + $selectedRoomServiceProduct['date_to'] + ) > 1} {l s='/ night'} {/if}
@@ -132,8 +136,13 @@
diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl index 8fb331302..4f6ce1c58 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl @@ -82,7 +82,11 @@
{$currencySign} - {if Product::PRICE_CALCULATION_METHOD_PER_DAY == $service.price_calculation_method} + {if Product::getPriceCalculationApplicableDays( + $service.price_calculation_method, + $additionalServices['date_from'], + $additionalServices['date_to'] + ) > 1} {l s='/ night'} {/if}
@@ -152,9 +156,13 @@
{$currencySign} - {if Product::PRICE_CALCULATION_METHOD_PER_DAY == $product['price_calculation_method']} - {l s='/ night'} - {/if} + {if Product::getPriceCalculationApplicableDays( + $product['price_calculation_method'], + $additionalServices['date_from'], + $additionalServices['date_to'] + ) > 1} + {l s='/ night'} + {/if}
@@ -191,8 +199,13 @@
@@ -286,9 +299,13 @@ {displayPrice price=$service['unit_price_tax_excl'] currency=$orderCurrency} - {if $service['price_calculation_method'] == Product::PRICE_CALCULATION_METHOD_PER_DAY} - {l s='/ night'} - {/if} + {if Product::getPriceCalculationApplicableDays( + $service['price_calculation_method'], + $additionalServices['date_from'], + $additionalServices['date_to'] + ) > 1} + {l s='/ night'} + {/if} {displayPrice price=$service['total_price_tax_excl'] currency=$orderCurrency} diff --git a/classes/Product.php b/classes/Product.php index fc962d3c0..cfb27c0ad 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -566,8 +566,15 @@ class ProductCore extends ObjectModel const PRICE_ADDITION_TYPE_WITH_ROOM = 1; const PRICE_ADDITION_TYPE_INDEPENDENT = 2; - const PRICE_CALCULATION_METHOD_PER_BOOKING = 1; - const PRICE_CALCULATION_METHOD_PER_DAY = 2; + const PRICE_CALCULATION_METHOD_PER_DAY = 1; + + const PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY = 1; + const PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY = 2; + const PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY = 3; + const PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY = 4; + const PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY = 5; + const PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY = 6; + const PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY = 7; const STANDARD_PRODUCT_ADDRESS_PREFERENCE_CUSTOMER = 1; const STANDARD_PRODUCT_ADDRESS_PREFERENCE_HOTEL = 2; @@ -6865,12 +6872,54 @@ class ProductCore extends ObjectModel ) ); - if (Product::getProductPriceCalculation($idProduct) == Product::PRICE_CALCULATION_METHOD_PER_DAY - && $dateFrom && $dateTo - ) { - $price = $price * HotelHelper::getNumberOfDays($dateFrom, $dateTo); - } + $numdays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($idProduct), + $dateFrom, + $dateTo + ); + $price = $price * $numdays; return $price * (int)$quantity; } + + + public static function getPriceCalculationApplicableDays( + $priceCalculationMethod, + $dateFrom, + $dateTo, + $defaultDays = 1 + ) { + if (empty($dateFrom) || empty($dateTo)) { + return (int) $defaultDays; + } + + $numNights = (int) HotelHelper::getNumberOfDays($dateFrom, $dateTo); + if ($numNights <= 0) { + return (int) $defaultDays; + } + + switch ((int) $priceCalculationMethod) { + case self::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY: + case self::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY: + return 1; + + case self::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY: + return max($numNights - 1, 1); + + case self::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY: + return 2; + + case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY: + case self::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY: + return $numNights; + + case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY: + return $numNights + 1; + + default: + return $numNights; + } + } + } + diff --git a/classes/webservice/WebserviceSpecificManagementBookings.php b/classes/webservice/WebserviceSpecificManagementBookings.php index 10e52dab0..cc67e3351 100644 --- a/classes/webservice/WebserviceSpecificManagementBookings.php +++ b/classes/webservice/WebserviceSpecificManagementBookings.php @@ -2297,10 +2297,13 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We ))) { foreach ($services as $service) { $insertedServiceProductIdOrderDetail = $objBookingDetail->getLastInsertedServiceIdOrderDetail($objOrder->id, $service['id_product']); - $numDays = 1; - if (Product::getProductPriceCalculation($service['id_product']) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays($objBookingDetail->date_from, $objBookingDetail->date_to); - } + + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($service['id_product']), + $objBookingDetail->date_from, + $objBookingDetail->date_to + ); + $totalPriceTaxExcl = Product::getServiceProductPrice( $service['id_product'], 0, @@ -2653,9 +2656,12 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We foreach ($selectedAdditonalServices[$idHotelBooking]['additional_services'] as $service) { $serviceOrderDetail = new OrderDetail($service['id_order_detail']); $cart_quantity = $service['quantity']; - if ($service['price_calculation_method'] == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $cart_quantity = $cart_quantity * $quantity; - } + $serviceApplicableDays = Product::getPriceCalculationApplicableDays( + $service['price_calculation_method'], + $dateFrom, + $dateTo + ); + $cart_quantity = $cart_quantity * $serviceApplicableDays; if ($cart_quantity >= $serviceOrderDetail->product_quantity) { $serviceOrderDetail->delete(); @@ -3169,10 +3175,11 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $priceTaxExcl = $objServiceProductOrderDetail->total_price_tax_excl; $priceTaxIncl = $objServiceProductOrderDetail->total_price_tax_incl; $objHotelBookingDetail = new HotelBookingDetail($objServiceProductOrderDetail->id_htl_booking_detail); - $numDays = 1; - if (Product::getProductPriceCalculation($service['id_product']) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays($objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to); - } + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($service['id_product']), + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); $quantity = $objOrderDetail->product_quantity * $numDays; if ($objServiceProductOrderDetail->delete()) { @@ -3264,10 +3271,11 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $insertedServiceProductIdOrderDetail = $objHotelBookingDetail->getLastInsertedServiceIdOrderDetail($objOrder->id, $service['id_product']); $objOrderDetail = new OrderDetail($insertedServiceProductIdOrderDetail); - $numDays = 1; - if (Product::getProductPriceCalculation($product['id_product']) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays($objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to); - } + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($product['id_product']), + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); $quantity = $objServiceProductCartDetail->quantity * $numDays; @@ -3687,17 +3695,18 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $services['id_service'] = (int) $service['id_product']; $services['name'] = $service['name']; $services['quantity'] = (int) $service['quantity']; - $services['unit_price_without_tax'] = Tools::ps_round(($service['total_price_tax_excl'] / $services['quantity']), _PS_PRICE_COMPUTE_PRECISION_); + $applicableDays = Product::getPriceCalculationApplicableDays( + $service['price_calculation_method'], + $additionalService['date_from'], + $additionalService['date_to'] + ); + $unitDivisor = max(1, ((int) $services['quantity'] * (int) $applicableDays)); + $services['unit_price_without_tax'] = Tools::ps_round(($service['total_price_tax_excl'] / $unitDivisor), _PS_PRICE_COMPUTE_PRECISION_); $services['total_price_without_tax'] = Tools::ps_round(($service['total_price_tax_excl']), _PS_PRICE_COMPUTE_PRECISION_); $services['total_tax'] = Tools::ps_round(($service['total_price_tax_incl'] - $service['total_price_tax_excl']), _PS_PRICE_COMPUTE_PRECISION_); - $objProduct = new Product($service['id_product']); - $services['per_night'] = 0; - if ($objProduct->price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $services['per_night'] = 1; - } - - $services['price_mode'] = (int) $objProduct->price_calculation_method; + $services['per_night'] = ((int) $applicableDays > 1) ? 1 : 0; + $services['price_mode'] = (int) $service['price_calculation_method']; $roomInfo['services'][] = $services; } } diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index f76331422..626185f1f 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -1205,10 +1205,12 @@ class AdminCartsControllerCore extends AdminController if ($serviceProducts) { foreach ($serviceProducts as $key => $servProduct) { - $numDays = 1; - if (Product::PRICE_CALCULATION_METHOD_PER_DAY == $servProduct['price_calculation_method']) { - $numDays = HotelHelper::getNumberOfDays($dateFrom, $dateTo); - } + $numDays = Product::getPriceCalculationApplicableDays( + $servProduct['price_calculation_method'], + $dateFrom, + $dateTo + ); + $serviceProducts[$key]['price_tax_exc'] = Product::getServiceProductPrice( $servProduct['id_product'], 0, diff --git a/controllers/admin/AdminNormalProductsController.php b/controllers/admin/AdminNormalProductsController.php index 43838ccc8..6827d5811 100644 --- a/controllers/admin/AdminNormalProductsController.php +++ b/controllers/admin/AdminNormalProductsController.php @@ -200,8 +200,13 @@ class AdminNormalProductsControllerCore extends AdminController Product::PRICE_ADDITION_TYPE_INDEPENDENT => $this->l('Convenience Fee') ); $priceCalculationMethod = array( - Product::PRICE_CALCULATION_METHOD_PER_BOOKING => $this->l('Add price once for the booking range'), - Product::PRICE_CALCULATION_METHOD_PER_DAY => $this->l('Add price for each day of booking') + Product::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY => $this->l('Only check-in day'), + Product::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY => $this->l('Only check-out day'), + Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY => $this->l('Only during-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY => $this->l('Check-in and check-out days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY => $this->l('Check-in | during-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY => $this->l('Check-out | during-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY => $this->l('Check-in | check-out | during-stay days'), ); $this->_join .= ' @@ -222,7 +227,7 @@ class AdminNormalProductsControllerCore extends AdminController LEFT JOIN `'._DB_PREFIX_.'htl_room_type` hrt ON (rsp.`id_element` = hrt.`id_product` AND rsp.`element_type` = '.(int)RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE.') '.HotelBranchInformation::addHotelRestriction(false, 'hrt'); - $this->_select .= ' IF(a.`auto_add_to_cart`, "'.$this->l('Yes').'", "'.$this->l('No').'") as auto_added, IF(a.`auto_add_to_cart`, 1, 0) as badge_success, IF(a.`show_at_front`, "'.$this->l('Yes').'", "'.$this->l('No').'") as show_at_front_txt, IF(a.`price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_PER_DAY.', "'.$this->l('Per Day').'", "'.$this->l('Per Booking').'") as price_calculation_method_txt, (SELECT COUNT(hri.`id`) FROM `'._DB_PREFIX_.'htl_room_information` hri WHERE hri.`id_product` = a.`id_product`) as num_rooms, '; + $this->_select .= ' IF(a.`auto_add_to_cart`, "'.$this->l('Yes').'", "'.$this->l('No').'") as auto_added, IF(a.`auto_add_to_cart`, 1, 0) as badge_success, IF(a.`show_at_front`, "'.$this->l('Yes').'", "'.$this->l('No').'") as show_at_front_txt, CASE a.`price_calculation_method` WHEN '.Product::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY.' THEN "'.$this->l('Only check-in day').'" WHEN '.Product::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY.' THEN "'.$this->l('Only check-out day').'" WHEN '.Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY.' THEN "'.$this->l('Only during-stay days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY.' THEN "'.$this->l('Check-in and check-out days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY.' THEN "'.$this->l('Check-in | during-stay days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY.' THEN "'.$this->l('Check-out | during-stay days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.' THEN "'.$this->l('Check-in | check-out | during-stay days').'" ELSE "'.$this->l('Only check-in day').'" END as price_calculation_method_txt, (SELECT COUNT(hri.`id`) FROM `'._DB_PREFIX_.'htl_room_information` hri WHERE hri.`id_product` = a.`id_product`) as num_rooms, '; $this->_select .= ' COUNT(hrt.`id_product`) as products_associated, '; $this->_select .= 'shop.`name` AS `shopname`, a.`id_shop_default`, '; $this->_select .= $alias_image.'.`id_image` AS `id_image`, cl.`name` AS `name_category`, '.$alias.'.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, '.$alias.'.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`'; diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 30026bcca..e9f5be74f 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -5342,10 +5342,11 @@ class AdminOrdersControllerCore extends AdminController )) { foreach ($services as $service) { $insertedServiceProductIdOrderDetail = $objBookingDetail->getLastInsertedServiceIdOrderDetail($order->id, $service['id_product']); - $numDays = 1; - if (Product::getProductPriceCalculation($service['id_product']) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays($objBookingDetail->date_from, $objBookingDetail->date_to); - } + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($service['id_product']), + $objBookingDetail->date_from, + $objBookingDetail->date_to + ); $totalPriceTaxExcl = Product::getServiceProductPrice( (int) $service['id_product'], @@ -6519,9 +6520,12 @@ class AdminOrdersControllerCore extends AdminController $serviceOrderDetail = new OrderDetail($service['id_order_detail']); $cart_quantity = $service['quantity']; - if ($service['price_calculation_method'] == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $cart_quantity = $cart_quantity * $product_quantity; - } + $serviceApplicableDays = Product::getPriceCalculationApplicableDays( + $service['price_calculation_method'], + $selectedAdditonalServices[$idHotelBooking]['date_from'], + $selectedAdditonalServices[$idHotelBooking]['date_to'] + ); + $cart_quantity = $cart_quantity * $serviceApplicableDays; if ($cart_quantity >= $serviceOrderDetail->product_quantity) { $serviceOrderDetail->delete(); } else { @@ -7702,10 +7706,11 @@ class AdminOrdersControllerCore extends AdminController $this->context->cart = $cart; $this->context->customer = new Customer($order->id_customer); - $numDays = 1; - if (Product::getProductPriceCalculation($service['id']) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays($objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to); - } + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($service['id']), + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); $objRoomTypeServiceProductPrice = new RoomTypeServiceProductPrice(); $initialServicePrice = Product::getServiceProductPrice( @@ -8013,10 +8018,11 @@ class AdminOrdersControllerCore extends AdminController $objRoomTypeServiceProductPrice = new RoomTypeServiceProductPrice(); $cartProductProcessed = 1; - $numDays = 1; - if (Product::getProductPriceCalculation($objServiceProduct->id) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays($objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to); - } + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($objServiceProduct->id), + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); foreach ($productList as &$product) { // This is used to get the actual quanity of the service as it is calculated incorrectly if the service is per night if ($idRoomTypeServProductCart = $objServiceProductCartDetail->alreadyExists( diff --git a/modules/hotelreservationsystem/classes/HotelHelper.php b/modules/hotelreservationsystem/classes/HotelHelper.php index a196694f5..709a9b23a 100644 --- a/modules/hotelreservationsystem/classes/HotelHelper.php +++ b/modules/hotelreservationsystem/classes/HotelHelper.php @@ -2155,7 +2155,7 @@ class HotelHelper 'price' => '250', 'auto_add_to_cart' => 1, 'show_at_front' => 0, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_PER_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Room Maintenance Fees', @@ -2220,7 +2220,7 @@ class HotelHelper 'price' => '50', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_PER_BOOKING, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Airport Shuttle', @@ -2252,7 +2252,7 @@ class HotelHelper 'price' => '200', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_PER_BOOKING, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Cab on Demand', @@ -2284,7 +2284,7 @@ class HotelHelper 'price' => '350', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_PER_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Breakfast', @@ -2316,7 +2316,7 @@ class HotelHelper 'price' => '450', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_PER_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Dinner', diff --git a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php index 25a1edfcb..1c93321d9 100644 --- a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php +++ b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php @@ -89,11 +89,13 @@ class ServiceProductCartDetail extends ObjectModel $objServiceProductCartDetail = new ServiceProductCartDetail($product['id_service_product_cart_detail']) )) { $updateQty = $product['quantity']; - if (Product::getProductPriceCalculation($product['id_product']) == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $objHotelCartBookingData = new HotelCartBookingData($htlCartBookingId); - $numdays = HotelHelper::getNumberOfDays($objHotelCartBookingData->date_from, $objHotelCartBookingData->date_to); - $updateQty *= $numdays; - } + $objHotelCartBookingData = new HotelCartBookingData($htlCartBookingId); + $numdays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($product['id_product']), + $objHotelCartBookingData->date_from, + $objHotelCartBookingData->date_to + ); + $updateQty *= $numdays; if ($objServiceProductCartDetail->delete()) { $objCart = new Cart($product['id_cart']); if (isset(Context::getContext()->controller->controller_type)) { @@ -247,13 +249,11 @@ class ServiceProductCartDetail extends ObjectModel $product['htl_cart_booking_id'] ); } else { - $numDays = 1; - // If price type is per day but the dates are not valid. - if (($objProduct->price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) - && (!$numDays = HotelHelper::getNumberOfDays($product['date_from'], $product['date_to'])) - ) { - $numDays = 1; - } + $numDays = Product::getPriceCalculationApplicableDays( + $objProduct->price_calculation_method, + $product['date_from'], + $product['date_to'] + ); $priceTaxIncl = Product::getServiceProductPrice( $objProduct->id, @@ -455,14 +455,13 @@ class ServiceProductCartDetail extends ObjectModel } if ($objServiceProductCartDetail->save()) { - if ($objProduct->price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - if (Validate::isLoadedObject($objHotelCartBooking = new HotelCartBookingData($idHtlCartData))) { - $numDays = HotelHelper::getNumberOfDays( - $objHotelCartBooking->date_from, - $objHotelCartBooking->date_to - ); - $quantity = $objServiceProductCartDetail->quantity * $numDays; - } + if (Validate::isLoadedObject($objHotelCartBooking = new HotelCartBookingData($idHtlCartData))) { + $numDays = Product::getPriceCalculationApplicableDays( + $objProduct->price_calculation_method, + $objHotelCartBooking->date_from, + $objHotelCartBooking->date_to + ); + $quantity = $objServiceProductCartDetail->quantity * $numDays; } $objCart = new Cart($idCart); diff --git a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl index f74c3b628..5a3db8aaa 100644 --- a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl +++ b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl @@ -148,12 +148,19 @@
-
- {if ($product.show_price && !isset($restricted_country_mode)) || isset($groups)} - {if !$priceDisplay}{convertPrice price=$product.price_tax_incl}{else}{convertPrice price=$product.price_tax_exc}{/if}{if $product.price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY}{l s='/Night'}{/if} +
+ {if ($product.show_price && !isset($restricted_country_mode)) || isset($groups)} + + {if !$priceDisplay}{convertPrice price=$product.price_tax_incl}{else}{convertPrice price=$product.price_tax_exc}{/if} + {if Product::getPriceCalculationApplicableDays( + $product.price_calculation_method, + $cartRoom.date_from|default:'', + $cartRoom.date_to|default:'' + ) > 1}{l s='/Night'}{/if} + - {/if} -
+ {/if} +
{/foreach} {/if} diff --git a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl index 19ac25070..5a8896426 100644 --- a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl +++ b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl @@ -53,7 +53,14 @@ {if !$PS_CATALOG_MODE && !$order_date_restrict && ($service_product.show_price && !isset($restricted_country_mode))}
{block name='service_product_price'} - {if !$priceDisplay}{convertPrice price=$service_product.price_tax_incl}{else}{convertPrice price=$service_product.price_tax_exc}{/if}{if $service_product.price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY}{l s='/Night'}{/if} + {if !$priceDisplay}{convertPrice price=$service_product.price_tax_incl}{else}{convertPrice price=$service_product.price_tax_exc}{/if} + {if Product::getPriceCalculationApplicableDays( + $service_product.price_calculation_method, + $service_product.date_from|default:$date_from|default:'', + $service_product.date_to|default:$date_to|default:'' + ) > 1} + {l s='/Night'} + {/if} {/block} {if $service_product.allow_multiple_quantity && $service_product.available_for_order && $service_product.max_quantity > 0}
From 37ff12c22aa0f63732753b0221da8b9b4c1ad73d Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Mon, 2 Mar 2026 12:40:00 +0530 Subject: [PATCH 04/93] Fix the issue related to price calculation on the invoice. --- .../controllers/orders/helpers/view/view.tpl | 3 ++- classes/PaymentModule.php | 6 ++---- classes/order/Order.php | 15 ++------------- 3 files changed, 6 insertions(+), 18 deletions(-) diff --git a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl index 9d83f4482..0053d2631 100644 --- a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl @@ -902,7 +902,8 @@
- {* Assign order price *} + + {* Assign order price *} {if ($order->getTaxCalculationMethod() == $smarty.const.PS_TAX_EXC)} {assign var=order_product_price value=($order->total_products)} {assign var=order_discount_price value=$order->total_discounts_tax_excl} diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index e39aa34b6..6745a0e2d 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -1427,10 +1427,8 @@ abstract class PaymentModuleCore extends Module // extra services $additional_service_price_tax_excl = (float) $cart_booking_data['total_extra_demands_te']; $additional_service_price_tax_incl = (float) $cart_booking_data['total_extra_demands_ti']; - foreach ($roomRelatedSellingTypes as $sellingType) { - $additional_service_price_tax_excl += $order->getTotalProductsWithoutTaxes(false, false, $sellingType, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT); - $additional_service_price_tax_incl += $order->getTotalProductsWithTaxes(false, false, $sellingType, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT); - } + $additional_service_price_tax_excl += $order->getTotalProductsWithoutTaxes(false, false, null, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); + $additional_service_price_tax_incl += $order->getTotalProductsWithTaxes(false, false, null, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT,null,Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); $additional_service_tax = ($additional_service_price_tax_incl - $additional_service_price_tax_excl); // convenience fee price diff --git a/classes/order/Order.php b/classes/order/Order.php index 5ccfe9cba..ca9ef9327 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -635,21 +635,10 @@ class OrderCore extends ObjectModel if (!$is_booking && $selling_preference_type !== null) { $sql .= ' AND od.`selling_preference_type` = '. (int)$selling_preference_type; } - if ( - !$is_booking - && $selling_preference_type !== null - && Product::isSellableWithRoomType($selling_preference_type) - && $product_auto_add !== null - ) { + if (!$is_booking && $product_auto_add !== null) { $sql .= ' AND od.`product_auto_add` = '. (int)$product_auto_add; } - if ( - !$is_booking - && $selling_preference_type !== null - && Product::isSellableWithRoomType($selling_preference_type) - && $product_auto_add == 1 - && $product_price_addition_type !== null - ) { + if (!$is_booking && $product_auto_add == 1 && $product_price_addition_type !== null) { $sql .= ' AND od.`product_price_addition_type` = '. (int)$product_price_addition_type; } From cd047d34d3a1f3780937f4b51ac0ca120fdeda18 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Mon, 2 Mar 2026 18:44:24 +0530 Subject: [PATCH 05/93] Fix service product option display based on selling type. --- .../normal_products/informations.tpl | 62 ---------- classes/Cart.php | 38 +++--- js/admin/normal_products.js | 113 ++++++++++-------- 3 files changed, 88 insertions(+), 125 deletions(-) diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index ad77a39b0..3bf54bd1b 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -614,66 +614,4 @@ var SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE = {Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE|intval}; var SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE|intval}; var SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE = {Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE|intval}; - - function toggleAssociationFieldNames(containerSelector, shouldShow) - { - var $container = $(containerSelector); - if (shouldShow) { - $container.show('fast').find('input').each(function() { - $(this).attr('name', $(this).attr('data-name')); - $(this).removeAttr('data-name'); - }); - } else { - $container.hide('fast').find('input').each(function() { - $(this).attr('data-name', $(this).attr('name')); - $(this).removeAttr('name'); - }); - } - } - - function applySellingPreferenceUIState() - { - var sellingPreference = parseInt($('#selling_preference_type').val(), 10); - var showHotelTree = $.inArray(sellingPreference, [ - SELLING_PREFERENCE_HOTEL_STANDALONE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ]) !== -1; - var showRoomTypeTree = $.inArray(sellingPreference, [ - 0, - SELLING_PREFERENCE_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ]) !== -1; - var showAutoAddToCart = $.inArray(sellingPreference, [ - 0, - SELLING_PREFERENCE_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ]) !== -1; - - toggleAssociationFieldNames('#associated_hotel_tree', showHotelTree); - toggleAssociationFieldNames('#associated_hotel_rooms_tree', showRoomTypeTree); - if (showAutoAddToCart) { - $('#auto_add_to_cart_container').show('fast'); - } else { - $('#auto_add_to_cart_container').hide('fast'); - $('input[name="auto_add_to_cart"]').trigger('change'); - } - $('#show_at_front_container').show('fast'); - $('#product_options').show('fast'); - } - - $(document).on('change.sellingPreferenceExtended', '#selling_preference_type', function() { - applySellingPreferenceUIState(); - }); - - $(function() { - setTimeout(function() { - applySellingPreferenceUIState(); - }, 0); - }); diff --git a/classes/Cart.php b/classes/Cart.php index e936c663c..0b2d86500 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -2483,6 +2483,9 @@ class CartCore extends ObjectModel )) { $array = array(); foreach($selectedServiceProducts as $selectedProduct) { + if (empty($selectedProduct['id_hotel_cart_booking'])) { + continue; + } if (isset($array[$selectedProduct['id_room_type_hotel']])) { $array[$selectedProduct['id_room_type_hotel']]['total_price_tax_excl'] += $selectedProduct['total_price_tax_excl']; $array[$selectedProduct['id_room_type_hotel']]['total_price_tax_incl'] += $selectedProduct['total_price_tax_incl']; @@ -2507,7 +2510,7 @@ class CartCore extends ObjectModel } } - + if ($array) { foreach($array as $selectedProduct) { $product['cart_quantity'] = $selectedProduct['quantity']; @@ -2544,19 +2547,27 @@ class CartCore extends ObjectModel } } } - if (Product::isSellableAsStandalone($product['selling_preference_type']) && !Product::isSellableWithRoomType($product['selling_preference_type'])) { - if (!isset($standaloneProduct[$id_address])) { - $standaloneProduct[$id_address] = array( - 'product_list' => array(), - 'warehouse_list' => $package['warehouse_list'], - 'carrier_list' => $product['carrier_list'], - 'id_warehouse' => $package['id_warehouse'], - 'id_carrier' => isset($package['id_carrier']) ? $package['id_carrier'] : 0 - ); + if (Product::isSellableAsStandalone($product['selling_preference_type'])) { + if ($selectedServiceProducts = $objServiceProductCartDetail->getServiceProductsInCart( + $this->id, + [], + 0, + 0, + null, + (int)$product['id_product'] + )) { + if (!isset($standaloneProduct[$id_address])) { + $standaloneProduct[$id_address] = array( + 'product_list' => array(), + 'warehouse_list' => $package['warehouse_list'], + 'carrier_list' => $product['carrier_list'], + 'id_warehouse' => $package['id_warehouse'], + 'id_carrier' => isset($package['id_carrier']) ? $package['id_carrier'] : 0 + ); + } + $productinfo = $product; + $standaloneProduct[$id_address]['product_list'][] = $product; } - $productinfo = $product; - // $productinfo['selling_preference_type'] = Product::SELLING_PREFERENCE_STANDALONE; - $standaloneProduct[$id_address]['product_list'][] = $product; } if (Product::isSellableWithHotel($product['selling_preference_type'])) { @@ -2600,7 +2611,6 @@ class CartCore extends ObjectModel // if (!empty($hotelProducts['products'])) { // foreach($hotelProducts['products'] as $hotelProduct) { $productinfo = $serviceProduct; - // $productinfo['selling_preference_type'] = Product::SELLING_PREFERENCE_HOTEL_STANDALONE; $orderPackage[$id_address][$hotelProduct['id_hotel']]['product_list'][] = $productinfo; if (!isset($orderPackage[$id_address][$hotelProduct['id_hotel']]['id_hotel'])) { $orderPackage[$id_address][$hotelProduct['id_hotel']]['id_hotel'] = $hotelProduct['id_hotel']; diff --git a/js/admin/normal_products.js b/js/admin/normal_products.js index 2e1bf00a6..9826b146f 100644 --- a/js/admin/normal_products.js +++ b/js/admin/normal_products.js @@ -547,57 +547,72 @@ product_tabs['Informations'] = new function(){ }; this.switchProductType = function(){ + function toggleAssociationFieldNames(containerSelector, shouldShow) + { + var $container = $(containerSelector); + if (shouldShow) { + $container.show('fast').find('input').each(function() { + $(this).attr('name', $(this).attr('data-name')); + $(this).removeAttr('data-name'); + }); + } else { + $container.hide('fast').find('input').each(function() { + $(this).attr('data-name', $(this).attr('name')); + $(this).removeAttr('name'); + }); + } + } + + function applySellingPreferenceUIState() + { + var sellingPreference = parseInt($('#selling_preference_type').val(), 10); + var showHotelTree = $.inArray(sellingPreference, [ + SELLING_PREFERENCE_HOTEL_STANDALONE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE + ]) !== -1; + var showRoomTypeTree = $.inArray(sellingPreference, [ + 0, + SELLING_PREFERENCE_WITH_ROOM_TYPE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, + SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE + ]) !== -1; + var showAutoAddToCart = $.inArray(sellingPreference, [ + 0, + SELLING_PREFERENCE_WITH_ROOM_TYPE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, + SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, + SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE + ]) !== -1; + var $autoAddOff = $('#auto_add_to_cart_off'); + var $autoAddCheckedInput; + + toggleAssociationFieldNames('#associated_hotel_tree', showHotelTree); + toggleAssociationFieldNames('#associated_hotel_rooms_tree', showRoomTypeTree); + + if (showAutoAddToCart) { + $('#auto_add_to_cart_container').show('fast'); + $autoAddCheckedInput = $('input[name="auto_add_to_cart"]:checked'); + if (!$autoAddCheckedInput.length) { + $autoAddOff.prop('checked', true); + $autoAddCheckedInput = $autoAddOff; + } + } else { + $autoAddOff.prop('checked', true); + $('#auto_add_to_cart_container').hide('fast'); + $autoAddCheckedInput = $autoAddOff; + } + + $autoAddCheckedInput.trigger('change'); + $('#product_options').show('fast'); + } $('#selling_preference_type').on('change',function(){ - if (parseInt($(this).val()) == SELLING_PREFERENCE_WITH_ROOM_TYPE) { - $('#associated_hotel_tree').hide('fast').find('input').each(function() { - $(this).attr('data-name', $(this).attr('name')); - $(this).removeAttr('name'); - }); - $('#associated_hotel_rooms_tree').show('fast').find('input').each(function() { - $(this).attr('name', $(this).attr('data-name')); - $(this).removeAttr('data-name'); - }); - $('#auto_add_to_cart_container').show('fast'); - $('#show_at_front_container').show('fast'); - $('#product_options').show('fast'); - } else if (parseInt($(this).val()) == SELLING_PREFERENCE_HOTEL_STANDALONE) { - $('#associated_hotel_rooms_tree').hide('fast').find('input').each(function() { - $(this).attr('data-name', $(this).attr('name')); - $(this).removeAttr('name'); - }); - $('#associated_hotel_tree').show('fast').find('input').each(function() { - $(this).attr('name', $(this).attr('data-name')); - $(this).removeAttr('data-name'); - }); - $('#auto_add_to_cart_container').hide('fast'); - $('#show_at_front_container').show('fast'); - $('#product_options').show('fast'); - } else if (parseInt($(this).val()) == SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) { - $('#associated_hotel_rooms_tree').show('fast').find('input').each(function() { - $(this).attr('name', $(this).attr('data-name')); - $(this).removeAttr('data-name'); - }); - $('#associated_hotel_tree').show('fast').find('input').each(function() { - $(this).attr('name', $(this).attr('data-name')); - $(this).removeAttr('data-name'); - }); - $('#auto_add_to_cart_container').hide('fast'); - $('#show_at_front_container').show('fast'); - $('#product_options').show('fast'); - } else if (parseInt($(this).val()) == SELLING_PREFERENCE_STANDALONE) { - $('#associated_hotel_rooms_tree').hide('fast').find('input').each(function() { - $(this).attr('data-name', $(this).attr('name')); - $(this).removeAttr('name'); - }); - $('#associated_hotel_tree').hide('fast').find('input').each(function() { - $(this).attr('data-name', $(this).attr('name')); - $(this).removeAttr('name'); - }); - $('#auto_add_to_cart_container').hide('fast'); - $('#show_at_front_container').show('fast'); - $('#product_options').show('fast'); - } + setTimeout(function() { + applySellingPreferenceUIState(); + }, 0); }); $('#selling_preference_type').trigger('change'); $('#simple_product').attr('checked', true); From e5dd7e67a5bc53fb43407074e9cefb394fc6dc45 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 3 Mar 2026 10:27:45 +0530 Subject: [PATCH 06/93] Fix display service product total and unit price using quantity --- modules/blockcart/blockcart.php | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/modules/blockcart/blockcart.php b/modules/blockcart/blockcart.php index eb364c6e6..2c2ea59ac 100644 --- a/modules/blockcart/blockcart.php +++ b/modules/blockcart/blockcart.php @@ -358,8 +358,11 @@ class Blockcart extends Module $addedProduct['option_name'] = $productOption->name; } } - $addedProduct['price'] = Tools::displayPrice($addedProduct['unit_price'] * $addedProduct['qty']); - $addedProduct['unit_price'] = Tools::displayPrice($addedProduct['unit_price']); + $quantity = $addedProduct['qty']; + $totalPrice = (float) $addedProduct['unit_price']; + $unitPrice = $totalPrice / $quantity; + $addedProduct['price'] = Tools::displayPrice($totalPrice); + $addedProduct['unit_price'] = Tools::displayPrice($unitPrice); } unset($this->context->cookie->currentAddedProduct); } From 7aaa29e07bec662eea479ca44beb28fcbcbb2bd5 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 3 Mar 2026 16:20:58 +0530 Subject: [PATCH 07/93] Fix: correct invoice price calculation and fix standalone service product not being added when another product exists --- classes/Cart.php | 35 ++++-- classes/PaymentModule.php | 104 ------------------ classes/order/OrderInvoice.php | 18 +-- controllers/admin/AdminCartsController.php | 2 +- controllers/admin/AdminOrdersController.php | 2 +- controllers/front/CartController.php | 4 +- .../classes/ServiceProductCartDetail.php | 4 +- 7 files changed, 41 insertions(+), 128 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index 0b2d86500..4f7d24e46 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -2556,17 +2556,32 @@ class CartCore extends ObjectModel null, (int)$product['id_product'] )) { - if (!isset($standaloneProduct[$id_address])) { - $standaloneProduct[$id_address] = array( - 'product_list' => array(), - 'warehouse_list' => $package['warehouse_list'], - 'carrier_list' => $product['carrier_list'], - 'id_warehouse' => $package['id_warehouse'], - 'id_carrier' => isset($package['id_carrier']) ? $package['id_carrier'] : 0 - ); + $hasStandaloneService = false; + foreach ($selectedServiceProducts as $selectedServiceProduct) { + if ((int) $selectedServiceProduct['id_hotel'] === 0 + && (int) $selectedServiceProduct['id_hotel_cart_booking'] === 0 + ) { + $hasStandaloneService = true; + break; + } + } + + if ($hasStandaloneService) { + if (!isset($standaloneProduct[$id_address])) { + $standaloneProduct[$id_address] = array( + 'product_list' => array(), + 'warehouse_list' => $package['warehouse_list'], + 'carrier_list' => $product['carrier_list'], + 'id_warehouse' => $package['id_warehouse'], + 'id_carrier' => isset($package['id_carrier']) ? $package['id_carrier'] : 0 + ); + } + $productinfo = $product; + $productinfo['id_hotel'] = 0; + $productinfo['id_hotel_cart_booking'] = 0; + $productinfo['id_room_type'] = 0; + $standaloneProduct[$id_address]['product_list'][] = $productinfo; } - $productinfo = $product; - $standaloneProduct[$id_address]['product_list'][] = $product; } } diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 6745a0e2d..4a38a14c7 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -974,110 +974,6 @@ abstract class PaymentModuleCore extends Module $canSellWithHotel = Product::isSellableWithHotel($product['selling_preference_type']); $canSellAsStandalone = Product::isSellableAsStandalone($product['selling_preference_type']); - if ($canSellWithRoomType || $canSellWithHotel || $canSellAsStandalone) { - $idProductRoomType = null; - $idProductHotel = null; - if (isset($product['id_room_type']) && $product['id_room_type']) { - $idProductRoomType = $product['id_room_type']; - } elseif (isset($product['id_hotel']) && $product['id_hotel']) { - $idProductHotel = $product['id_hotel']; - } - - if ($serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( - $this->context->cart->id, - [], - $idProductHotel, - null, - $idProductRoomType, - $product['id_product'] - )) { - foreach ($serviceProducts as $serviceProduct) { - $isRoomTypeService = !empty($serviceProduct['id_hotel_cart_booking']); - $isHotelService = !$isRoomTypeService && !empty($serviceProduct['id_hotel']); - - if ($isRoomTypeService) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - Product::SELLING_PREFERENCE_WITH_ROOM_TYPE - ); - } elseif ($isHotelService) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE - ); - } else { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - Product::SELLING_PREFERENCE_STANDALONE - ); - } - - if (!$idOrderDetail) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - $product['selling_preference_type'] - ); - } - if (!$idOrderDetail) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id - ); - } - if (!$idOrderDetail) { - continue; - } - - $objServiceProductOrderDetail = new ServiceProductOrderDetail(); - $objServiceProductOrderDetail->id_product = $idProduct; - $objServiceProductOrderDetail->id_order = $order->id; - $objServiceProductOrderDetail->id_order_detail = $idOrderDetail; - $objServiceProductOrderDetail->id_cart = $this->context->cart->id; - $objServiceProductOrderDetail->unit_price_tax_excl = $serviceProduct['unit_price_tax_excl']; - $objServiceProductOrderDetail->unit_price_tax_incl = $serviceProduct['unit_price_tax_incl']; - $objServiceProductOrderDetail->total_price_tax_excl = $serviceProduct['total_price_tax_excl']; - $objServiceProductOrderDetail->total_price_tax_incl = $serviceProduct['total_price_tax_incl']; - $objServiceProductOrderDetail->name = $product['name']; - $objServiceProductOrderDetail->quantity = $serviceProduct['quantity']; - $objServiceProductOrderDetail->id_product_option = $serviceProduct['id_product_option']; - $objServiceProductOrderDetail->option_name = $serviceProduct['option_name']; - if ($isHotelService) { - $objServiceProductOrderDetail->id_hotel = $serviceProduct['id_hotel']; - if (Validate::isLoadedObject( - $objHotelBranch = new HotelBranchInformation($serviceProduct['id_hotel'], $this->context->cart->id_lang) - )) { - $objServiceProductOrderDetail->hotel_name = $objHotelBranch->hotel_name; - } - } elseif ($isRoomTypeService) { - if (!Validate::isDate($serviceProduct['date_from']) - || !Validate::isDate($serviceProduct['date_to']) - || !(int) $serviceProduct['id_room_type'] - ) { - continue; - } - $roomBookingDetail = $objBookingDetail->getRowByIdOrderIdProductInDateRange( - $order->id, - $serviceProduct['id_room_type'], - $serviceProduct['date_from'], - $serviceProduct['date_to'], - $serviceProduct['id_room'] - ); - if (empty($roomBookingDetail['id'])) { - continue; - } - $objServiceProductOrderDetail->id_htl_booking_detail = $roomBookingDetail['id']; - $objServiceProductOrderDetail->auto_added = $product['auto_add_to_cart']; - } - $objServiceProductOrderDetail->save(); - } - } - continue; - } - if ($canSellWithRoomType && !$canSellWithHotel && !$canSellAsStandalone) { if ($roomTypeServices = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, diff --git a/classes/order/OrderInvoice.php b/classes/order/OrderInvoice.php index dc74a2105..911951c59 100644 --- a/classes/order/OrderInvoice.php +++ b/classes/order/OrderInvoice.php @@ -478,14 +478,16 @@ class OrderInvoiceCore extends ObjectModel // - 'total_price_tax_excl' // - 'total_amount' $breakdown = array(); - $order_detail = $this->getProducts(); - $order_detail = array_filter($order_detail, function($v) { - return ( - !$v['is_booking_product'] - && !$v['product_auto_add'] - && Product::isSellableWithRoomType($v['selling_preference_type']) - ); - }); + $order_detail = $this->getProducts( + $order->getProductsDetail( + false, + null, + 0, + Product::PRICE_ADDITION_TYPE_INDEPENDENT, + array(), + Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED + ) + ); $details = $order->getProductTaxesDetails($order_detail, false); if ($sum_composite_taxes) { diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index d7bda66aa..03b07ba0e 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -1670,7 +1670,7 @@ class AdminCartsControllerCore extends AdminController $idServiceProduct, $operator, $quantity, - 0, + false, $idCartBooking ))) { $originalPrice = Product::getPriceStatic($idServiceProduct, false); diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 7be742582..9cafbb2be 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -5644,7 +5644,7 @@ class AdminOrdersControllerCore extends AdminController $idProduct, 'up', $productInformations['product_quantity'], - isset($addressTax->id_hotel) ? $addressTax->id_hotel : 0, + isset($addressTax->id_hotel) ? $addressTax->id_hotel : false, false, isset($productInformations['product_option']) ? $productInformations['product_option'] : null )) { diff --git a/controllers/front/CartController.php b/controllers/front/CartController.php index c22b5f0b5..98fb6eaac 100644 --- a/controllers/front/CartController.php +++ b/controllers/front/CartController.php @@ -665,8 +665,8 @@ class CartControllerCore extends FrontController $this->id_product, $operator, $this->qty, - false, - false, + 0, + 0, isset($idProductOption) ? $idProductOption : null ); if ($operator == 'up') { diff --git a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php index 25a1edfcb..8f9a908ec 100644 --- a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php +++ b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php @@ -58,10 +58,10 @@ class ServiceProductCartDetail extends ObjectModel if ($idProduct) { $sql .= ' AND `id_product` = '.(int)$idProduct; } - if ($idHotel) { + if ($idHotel !== false && $idHotel !== null) { $sql .= ' AND `id_hotel` = '.(int)$idHotel; } - if ($idHtlCartData) { + if ($idHtlCartData !== false && $idHtlCartData !== null) { $sql .= ' AND `htl_cart_booking_id` = '.(int)$idHtlCartData; } if ($idProductOption) { From 14aa332f3ee81b55deb4a15c1ef93b1280aa0c40 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 3 Mar 2026 18:50:39 +0530 Subject: [PATCH 08/93] fix: resolve tax breakdown for multi selling-type products --- classes/order/OrderInvoice.php | 68 +++++++++++++++++++++++++--------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/classes/order/OrderInvoice.php b/classes/order/OrderInvoice.php index 911951c59..cc9e95339 100644 --- a/classes/order/OrderInvoice.php +++ b/classes/order/OrderInvoice.php @@ -478,16 +478,32 @@ class OrderInvoiceCore extends ObjectModel // - 'total_price_tax_excl' // - 'total_amount' $breakdown = array(); - $order_detail = $this->getProducts( - $order->getProductsDetail( - false, - null, - 0, - Product::PRICE_ADDITION_TYPE_INDEPENDENT, - array(), - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ) - ); + $order_detail = array(); + $products = $this->getProducts(); + $objServiceProductOrderDetail = new ServiceProductOrderDetail(); + foreach ($products as $product) { + if ($product['is_booking_product'] + || $product['product_auto_add'] + || !Product::isSellableWithRoomType($product['selling_preference_type']) + ) { + continue; + } + + $serviceProductDetail = $objServiceProductOrderDetail->getServiceProductsInOrder( + $product['id_order'], + $product['id_order_detail'] + ); + if (!is_array($serviceProductDetail) || empty($serviceProductDetail)) { + continue; + } + + foreach ($serviceProductDetail as $serviceProduct) { + if (!empty($serviceProduct['id_htl_booking_detail'])) { + $order_detail[] = $product; + break; + } + } + } $details = $order->getProductTaxesDetails($order_detail, false); if ($sum_composite_taxes) { @@ -614,14 +630,32 @@ class OrderInvoiceCore extends ObjectModel // - 'total_price_tax_excl' // - 'total_amount' $breakdown = array(); - $order_detail = $this->getProducts(); - $order_detail = array_filter($order_detail, function($v) { - return ( - !$v['is_booking_product'] - && (Product::isSellableAsStandalone($v['selling_preference_type']) - || Product::isSellableWithHotel($v['selling_preference_type'])) + $order_detail = array(); + $products = $this->getProducts(); + $objServiceProductOrderDetail = new ServiceProductOrderDetail(); + foreach ($products as $product) { + if ($product['is_booking_product'] + || !Product::isSellableAsStandalone($product['selling_preference_type']) + || !Product::isSellableWithHotel($product['selling_preference_type']) + ) { + continue; + } + + $serviceProductDetail = $objServiceProductOrderDetail->getServiceProductsInOrder( + $product['id_order'], + $product['id_order_detail'] ); - }); + if (!is_array($serviceProductDetail) || empty($serviceProductDetail)) { + continue; + } + + foreach ($serviceProductDetail as $serviceProduct) { + if (empty($serviceProduct['id_htl_booking_detail'])) { + $order_detail[] = $product; + break; + } + } + } $details = $order->getProductTaxesDetails($order_detail, false); From 4a644cb4521646d6f68607e896e7e1d1c0ddd9a0 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 10 Mar 2026 19:18:36 +0530 Subject: [PATCH 09/93] Fixed:Fix incorrect mapping between order detail and service product order detail when product selling type hotel + room type --- .../controllers/orders/helpers/view/view.tpl | 36 +--- classes/Cart.php | 71 +++++--- classes/PaymentModule.php | 165 +++--------------- classes/order/Order.php | 38 +--- classes/order/OrderInvoice.php | 61 ++----- classes/pdf/HTMLTemplateInvoice.php | 106 +---------- .../classes/ServiceProductCartDetail.php | 2 +- .../hotel-reservation-theme/order-detail.tpl | 45 +---- 8 files changed, 108 insertions(+), 416 deletions(-) diff --git a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl index 0053d2631..13e3fcb22 100644 --- a/admin/themes/default/template/controllers/orders/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/orders/helpers/view/view.tpl @@ -923,42 +923,18 @@ {* Get total rooms prices *} {assign var=total_rooms_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, true)} {assign var=total_rooms_price_tax_incl value=$order->getTotalProductsWithTaxes(false, true)} - {assign var=all_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false)} - {assign var=all_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false)} - {assign var=room_linked_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} - {assign var=room_linked_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} {* Get total extra services including convenience fees prices *} - {assign var=total_products_price_tax_excl value=( - $all_services_price_tax_excl - $room_linked_services_price_tax_excl - )} - {assign var=total_products_price_tax_incl value=( - $all_services_price_tax_incl - $room_linked_services_price_tax_incl - )} + {assign var=total_products_price_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE))} + {assign var=total_products_price_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE))} {* Get total of extra services and extra demands prices(excluding convenience fee) *} - {assign var=total_room_services_and_demands_tax_excl value=( - $room_linked_services_price_tax_excl - + $totalDemandsPriceTE - )} - {assign var=total_room_services_and_demands_tax_incl value=( - $room_linked_services_price_tax_incl - + $totalDemandsPriceTI - )} + {assign var=total_room_services_and_demands_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $totalDemandsPriceTE)} + {assign var=total_room_services_and_demands_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $totalDemandsPriceTI)} {* Get total of only convenience fees prices *} - {assign var=total_convenience_fee_tax_excl value=( - $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - )} - {assign var=total_convenience_fee_tax_incl value=( - $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT) - )} + {assign var=total_convenience_fee_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT)} + {assign var=total_convenience_fee_tax_incl value=$order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT)} {assign var=order_total_price_tax_excl value=($total_rooms_price_tax_excl + $total_room_services_and_demands_tax_excl + $total_products_price_tax_excl)} {assign var=order_total_price_tax_incl value=($total_rooms_price_tax_incl + $total_room_services_and_demands_tax_incl + $total_products_price_tax_incl)} diff --git a/classes/Cart.php b/classes/Cart.php index 4f7d24e46..ced44ff2d 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1761,13 +1761,9 @@ class CartCore extends ObjectModel && (!$canSellWithHotel && !$canSellWithRoomType || ($type == Cart::ONLY_STANDALONE_PRODUCTS && !$canSellWithHotel)) ) { - $idHotelCartBooking = null; - $idHotel = null; - if ($type == Cart::ONLY_STANDALONE_PRODUCTS && $canSellWithRoomType) { - // For room+standalone products, standalone totals must exclude room-linked rows. - $idHotelCartBooking = 0; - $idHotel = 0; - } + $idHotelCartBooking = isset($product['id_hotel_cart_booking']) ? (int)$product['id_hotel_cart_booking'] : 0; + $idHotel = isset($product['id_hotel']) ? (int)$product['id_hotel'] : 0; + if ($servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, [], @@ -2522,7 +2518,7 @@ class CartCore extends ObjectModel $product['id_room_type'] = $selectedProduct['id_room_type']; $product['id_hotel_cart_booking'] = $selectedProduct['id_hotel_cart_booking']; $productinfo = $product; - // $productinfo['selling_preference_type'] = Product::SELLING_PREFERENCE_WITH_ROOM_TYPE; + $productinfo['selling_preference_type'] = Product::SELLING_PREFERENCE_WITH_ROOM_TYPE; $orderPackage[$id_address][$selectedProduct['id_hotel']]['product_list'][] = $productinfo; if (!isset($orderPackage[$id_address][$selectedProduct['id_hotel']]['id_hotel'])) { $orderPackage[$id_address][$selectedProduct['id_hotel']]['id_hotel'] = $selectedProduct['id_hotel']; @@ -2556,31 +2552,51 @@ class CartCore extends ObjectModel null, (int)$product['id_product'] )) { - $hasStandaloneService = false; + $array = array(); foreach ($selectedServiceProducts as $selectedServiceProduct) { if ((int) $selectedServiceProduct['id_hotel'] === 0 && (int) $selectedServiceProduct['id_hotel_cart_booking'] === 0 ) { - $hasStandaloneService = true; - break; + if (isset($array[$selectedServiceProduct['id_product']])) { + $array[$selectedServiceProduct['id_product']]['total_price_tax_excl'] += $selectedServiceProduct['total_price_tax_excl']; + $array[$selectedServiceProduct['id_product']]['total_price_tax_incl'] += $selectedServiceProduct['total_price_tax_incl']; + $array[$selectedServiceProduct['id_product']]['quantity'] += $selectedServiceProduct['quantity']; + } else { + $array[$selectedServiceProduct['id_product']] = array( + 'quantity' => $selectedServiceProduct['quantity'], + 'total_price_tax_excl' => $selectedServiceProduct['total_price_tax_excl'], + 'total_price_tax_incl' => $selectedServiceProduct['total_price_tax_incl'], + ); + } + } } - if ($hasStandaloneService) { - if (!isset($standaloneProduct[$id_address])) { - $standaloneProduct[$id_address] = array( - 'product_list' => array(), - 'warehouse_list' => $package['warehouse_list'], - 'carrier_list' => $product['carrier_list'], - 'id_warehouse' => $package['id_warehouse'], - 'id_carrier' => isset($package['id_carrier']) ? $package['id_carrier'] : 0 - ); + if ($array) { + foreach ($array as $standaloneProductData) { + $serviceProduct = $product; + $serviceProduct['cart_quantity'] = $standaloneProductData['quantity']; + $serviceProduct['total'] = $standaloneProductData['total_price_tax_excl']; + $serviceProduct['total_wt'] = $standaloneProductData['total_price_tax_incl']; + $serviceProduct['price'] = $standaloneProductData['total_price_tax_excl'] / $standaloneProductData['quantity']; + $serviceProduct['price_wt'] = $standaloneProductData['total_price_tax_incl'] / $standaloneProductData['quantity']; + $serviceProduct['selling_preference_type'] = Product::SELLING_PREFERENCE_STANDALONE; + $serviceProduct['id_hotel'] = 0; + $serviceProduct['id_hotel_cart_booking'] = 0; + $serviceProduct['id_room_type'] = 0; + if (!isset($standaloneProduct[$id_address])) { + $standaloneProduct[$id_address] = array( + 'product_list' => array(), + 'warehouse_list' => $package['warehouse_list'], + 'carrier_list' => $product['carrier_list'], + 'id_warehouse' => $package['id_warehouse'], + 'id_carrier' => isset($package['id_carrier']) ? $package['id_carrier'] : 0 + ); + } + $productinfo = $serviceProduct; + + $standaloneProduct[$id_address]['product_list'][] = $productinfo; } - $productinfo = $product; - $productinfo['id_hotel'] = 0; - $productinfo['id_hotel_cart_booking'] = 0; - $productinfo['id_room_type'] = 0; - $standaloneProduct[$id_address]['product_list'][] = $productinfo; } } } @@ -2596,6 +2612,9 @@ class CartCore extends ObjectModel )) { $array = array(); foreach($selectedServiceProducts as $hotelProduct) { + if (!isset($hotelProduct['id_hotel']) || !$hotelProduct['id_hotel']) { + continue; + } if (isset($array[$hotelProduct['id_hotel']])) { $array[$hotelProduct['id_hotel']]['total_price_tax_excl'] += $hotelProduct['total_price_tax_excl']; $array[$hotelProduct['id_hotel']]['total_price_tax_incl'] += $hotelProduct['total_price_tax_incl']; @@ -2626,6 +2645,8 @@ class CartCore extends ObjectModel // if (!empty($hotelProducts['products'])) { // foreach($hotelProducts['products'] as $hotelProduct) { $productinfo = $serviceProduct; + $productinfo['selling_preference_type'] = Product::SELLING_PREFERENCE_HOTEL_STANDALONE; + $orderPackage[$id_address][$hotelProduct['id_hotel']]['product_list'][] = $productinfo; if (!isset($orderPackage[$id_address][$hotelProduct['id_hotel']]['id_hotel'])) { $orderPackage[$id_address][$hotelProduct['id_hotel']]['id_hotel'] = $hotelProduct['id_hotel']; diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 4a38a14c7..a022f3484 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -606,16 +606,16 @@ abstract class PaymentModuleCore extends Module $cover_img = $this->context->link->getImageLink($product['link_rewrite'], $this->context->language->iso_code."-default", 'small_default'); } $product_var_tpl['cover_img'] = $cover_img; + $idHotel = isset($product['id_hotel']) ? $product['id_hotel'] : 0; $serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $order->id_cart, [], - null, + $idHotel, 0, null, $product['id_product'] ); - $standaloneServiceProducts = array(); - $hotelServiceProducts = array(); + foreach ($serviceProducts as $serviceProduct) { $orderServiceProducts[] = array_merge($product_var_tpl, $serviceProduct); } @@ -1061,9 +1061,9 @@ abstract class PaymentModuleCore extends Module } elseif ($canSellAsStandalone && !$canSellWithRoomType && !$canSellWithHotel) { if ($standaloneProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, - [Product::SELLING_PREFERENCE_STANDALONE], - null, - null, + [], + 0, + 0, null, $product['id_product'] )) { @@ -1089,108 +1089,7 @@ abstract class PaymentModuleCore extends Module $objServiceProductOrderDetail->save(); } } - } elseif ($canSellWithRoomType || $canSellWithHotel || $canSellAsStandalone) { - $idProductRoomType = null; - $idProductHotel = null; - if (isset($product['id_room_type']) && $product['id_room_type']) { - $idProductRoomType = $product['id_room_type']; - } elseif (isset($product['id_hotel']) && $product['id_hotel']) { - $idProductHotel = $product['id_hotel']; - } - - if ($serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( - $this->context->cart->id, - [], - $idProductHotel, - null, - $idProductRoomType, - $product['id_product'] - )) { - foreach ($serviceProducts as $serviceProduct) { - $isRoomTypeService = !empty($serviceProduct['id_hotel_cart_booking']); - $isHotelService = !$isRoomTypeService && !empty($serviceProduct['id_hotel']); - - if ($isRoomTypeService) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - Product::SELLING_PREFERENCE_WITH_ROOM_TYPE - ); - } elseif ($isHotelService) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE - ); - } else { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - Product::SELLING_PREFERENCE_STANDALONE - ); - } - - if (!$idOrderDetail) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - $product['selling_preference_type'] - ); - } - if (!$idOrderDetail) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id - ); - } - if (!$idOrderDetail) { - continue; - } - - $objServiceProductOrderDetail = new ServiceProductOrderDetail(); - $objServiceProductOrderDetail->id_product = $idProduct; - $objServiceProductOrderDetail->id_order = $order->id; - $objServiceProductOrderDetail->id_order_detail = $idOrderDetail; - $objServiceProductOrderDetail->id_cart = $this->context->cart->id; - $objServiceProductOrderDetail->unit_price_tax_excl = $serviceProduct['unit_price_tax_excl']; - $objServiceProductOrderDetail->unit_price_tax_incl = $serviceProduct['unit_price_tax_incl']; - $objServiceProductOrderDetail->total_price_tax_excl = $serviceProduct['total_price_tax_excl']; - $objServiceProductOrderDetail->total_price_tax_incl = $serviceProduct['total_price_tax_incl']; - $objServiceProductOrderDetail->name = $product['name']; - $objServiceProductOrderDetail->quantity = $serviceProduct['quantity']; - $objServiceProductOrderDetail->id_product_option = $serviceProduct['id_product_option']; - $objServiceProductOrderDetail->option_name = $serviceProduct['option_name']; - if ($isHotelService) { - $objServiceProductOrderDetail->id_hotel = $serviceProduct['id_hotel']; - if (Validate::isLoadedObject( - $objHotelBranch = new HotelBranchInformation($serviceProduct['id_hotel'], $this->context->cart->id_lang) - )) { - $objServiceProductOrderDetail->hotel_name = $objHotelBranch->hotel_name; - } - } elseif ($isRoomTypeService) { - if (!Validate::isDate($serviceProduct['date_from']) - || !Validate::isDate($serviceProduct['date_to']) - || !(int) $serviceProduct['id_room_type'] - ) { - continue; - } - $roomBookingDetail = $objBookingDetail->getRowByIdOrderIdProductInDateRange( - $order->id, - $serviceProduct['id_room_type'], - $serviceProduct['date_from'], - $serviceProduct['date_to'], - $serviceProduct['id_room'] - ); - if (empty($roomBookingDetail['id'])) { - continue; - } - $objServiceProductOrderDetail->id_htl_booking_detail = $roomBookingDetail['id']; - $objServiceProductOrderDetail->auto_added = $product['auto_add_to_cart']; - } - $objServiceProductOrderDetail->save(); - } - } - } + } } } @@ -1300,50 +1199,28 @@ abstract class PaymentModuleCore extends Module $normal_products_data_txt = $this->getEmailTemplateContent('service_product_data_text.tpl', Mail::TYPE_TEXT, $orderServiceProducts); // get order total information html/txt files - // room-related selling types: - // 1: with room type, 3: hotel+room, 6: standalone+room, 7: hotel+room+standalone - $roomRelatedSellingTypes = array( - Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - // total room price - $room_auto_with_room_tax_excl = 0; - $room_auto_with_room_tax_incl = 0; - foreach ($roomRelatedSellingTypes as $sellingType) { - $room_auto_with_room_tax_excl += $order->getTotalProductsWithoutTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); - $room_auto_with_room_tax_incl += $order->getTotalProductsWithTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); - } - $room_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, true) + $room_auto_with_room_tax_excl; - $room_price_tax_incl = $order->getTotalProductsWithTaxes(false, true) + $room_auto_with_room_tax_incl; + $room_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, true) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); + $room_price_tax_incl = $order->getTotalProductsWithTaxes(false, true) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); $room_tax = ($room_price_tax_incl - $room_price_tax_excl); // extra services - $additional_service_price_tax_excl = (float) $cart_booking_data['total_extra_demands_te']; - $additional_service_price_tax_incl = (float) $cart_booking_data['total_extra_demands_ti']; - $additional_service_price_tax_excl += $order->getTotalProductsWithoutTaxes(false, false, null, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); - $additional_service_price_tax_incl += $order->getTotalProductsWithTaxes(false, false, null, 0, Product::PRICE_ADDITION_TYPE_INDEPENDENT,null,Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); + $additional_service_price_tax_excl = ($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0) + $cart_booking_data['total_extra_demands_te']); + $additional_service_price_tax_incl = ($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0) + $cart_booking_data['total_extra_demands_ti']); $additional_service_tax = ($additional_service_price_tax_incl - $additional_service_price_tax_excl); // convenience fee price - $total_convenience_fee_ti = 0; - $total_convenience_fee_te = 0; - foreach ($roomRelatedSellingTypes as $sellingType) { - $total_convenience_fee_ti += $order->getTotalProductsWithTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); - $total_convenience_fee_te += $order->getTotalProductsWithoutTaxes(false, false, $sellingType, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); - } + $total_convenience_fee_ti = $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + $total_convenience_fee_te = $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); $total_convenience_fee_tax = $total_convenience_fee_ti - $total_convenience_fee_te; // service products - $all_services_price_tax_incl = $order->getTotalProductsWithTaxes(false, false); - $all_services_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false); - $room_linked_services_price_tax_incl = $order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); - $room_linked_services_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED); - $total_standard_products_tax_incl = $all_services_price_tax_incl - $room_linked_services_price_tax_incl; - $total_standard_products_tax_excl = $all_services_price_tax_excl - $room_linked_services_price_tax_excl; - $service_products_tax = $total_standard_products_tax_incl - $total_standard_products_tax_excl; + $standalone_products_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE); + $standalone_products_price_tax_incl = $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE); + $hotel_standalone_products_price_tax_excl = $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + $hotel_standalone_products_price_tax_incl = $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + + $service_products_tax = ($standalone_products_price_tax_incl + $hotel_standalone_products_price_tax_incl) - ($standalone_products_price_tax_excl + $hotel_standalone_products_price_tax_excl); $total_order_tax = $room_tax + $additional_service_tax + $total_convenience_fee_tax + $service_products_tax; @@ -1360,12 +1237,12 @@ abstract class PaymentModuleCore extends Module 'total_convenience_fee_te' => Tools::displayPrice($total_convenience_fee_te, $this->context->currency, false), 'total_convenience_fee_tax' => Tools::displayPrice($total_convenience_fee_tax, $this->context->currency, false), 'service_products_price_tax_excl' => Tools::displayPrice( - $total_standard_products_tax_excl, + ($standalone_products_price_tax_excl + $hotel_standalone_products_price_tax_excl), $this->context->currency, false ), 'service_products_price_tax_incl' => Tools::displayPrice( - $total_standard_products_tax_incl, + ($standalone_products_price_tax_incl + $hotel_standalone_products_price_tax_incl), $this->context->currency, false ), diff --git a/classes/order/Order.php b/classes/order/Order.php index ca9ef9327..0ed9581a3 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -617,8 +617,7 @@ class OrderCore extends ObjectModel $selling_preference_type = null, $product_auto_add = null, $product_price_addition_type = null, - $ids_order_detail = [], - $service_product_context = null + $ids_order_detail = [] ) { $sql = 'SELECT *, od.`selling_preference_type` as selling_preference_type FROM `'._DB_PREFIX_.'order_detail` od @@ -635,37 +634,12 @@ class OrderCore extends ObjectModel if (!$is_booking && $selling_preference_type !== null) { $sql .= ' AND od.`selling_preference_type` = '. (int)$selling_preference_type; } - if (!$is_booking && $product_auto_add !== null) { + if (!$is_booking && $selling_preference_type == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product_auto_add !== null) { $sql .= ' AND od.`product_auto_add` = '. (int)$product_auto_add; } - if (!$is_booking && $product_auto_add == 1 && $product_price_addition_type !== null) { + if (!$is_booking && $selling_preference_type == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product_auto_add == 1 && $product_price_addition_type !== null) { $sql .= ' AND od.`product_price_addition_type` = '. (int)$product_price_addition_type; } - - if (!$is_booking && $service_product_context !== null) { - if ((int) $service_product_context === self::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) { - - $sql .= ' - AND EXISTS ( - SELECT 1 - FROM ' . _DB_PREFIX_ . 'service_product_order_detail spod - WHERE spod.id_order = od.id_order - AND spod.id_order_detail = od.id_order_detail - AND spod.id_htl_booking_detail > 0 - )'; - - } elseif ((int) $service_product_context === self::SERVICE_PRODUCT_CONTEXT_NON_ROOM) { - - $sql .= ' - AND EXISTS ( - SELECT 1 - FROM ' . _DB_PREFIX_ . 'service_product_order_detail spod - WHERE spod.id_order = od.id_order - AND spod.id_order_detail = od.id_order_detail - AND spod.id_htl_booking_detail = 0 - )'; - } - } } return Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql); } @@ -1154,11 +1128,10 @@ class OrderCore extends ObjectModel $product_auto_add = null, $product_price_addition_type = null, $ids_order_detail = [], - $service_product_context = null ) { // update if (!$products) { - $products = $this->getProductsDetail($bookingProducts, $selling_preference_type, $product_auto_add, $product_price_addition_type, $ids_order_detail, $service_product_context); + $products = $this->getProductsDetail($bookingProducts, $selling_preference_type, $product_auto_add, $product_price_addition_type, $ids_order_detail); } $return = 0; @@ -1181,11 +1154,10 @@ class OrderCore extends ObjectModel $product_auto_add = null, $product_price_addition_type = null, $ids_order_detail = [], - $service_product_context = null ) { /* Retro-compatibility (now set directly on the validateOrder() method) */ if (!$products) { - $products = $this->getProductsDetail($bookingProducts, $selling_preference_type, $product_auto_add, $product_price_addition_type, $ids_order_detail, $service_product_context); + $products = $this->getProductsDetail($bookingProducts, $selling_preference_type, $product_auto_add, $product_price_addition_type, $ids_order_detail); } $return = 0; diff --git a/classes/order/OrderInvoice.php b/classes/order/OrderInvoice.php index cc9e95339..f97c589fc 100644 --- a/classes/order/OrderInvoice.php +++ b/classes/order/OrderInvoice.php @@ -478,32 +478,11 @@ class OrderInvoiceCore extends ObjectModel // - 'total_price_tax_excl' // - 'total_amount' $breakdown = array(); - $order_detail = array(); - $products = $this->getProducts(); - $objServiceProductOrderDetail = new ServiceProductOrderDetail(); - foreach ($products as $product) { - if ($product['is_booking_product'] - || $product['product_auto_add'] - || !Product::isSellableWithRoomType($product['selling_preference_type']) - ) { - continue; - } + $order_detail = $this->getProducts(); + $order_detail = array_filter($order_detail, function($v) { + return (!$v['is_booking_product'] && !$v['product_auto_add'] && Product::isSellableWithRoomType($v['selling_preference_type'])); + }); - $serviceProductDetail = $objServiceProductOrderDetail->getServiceProductsInOrder( - $product['id_order'], - $product['id_order_detail'] - ); - if (!is_array($serviceProductDetail) || empty($serviceProductDetail)) { - continue; - } - - foreach ($serviceProductDetail as $serviceProduct) { - if (!empty($serviceProduct['id_htl_booking_detail'])) { - $order_detail[] = $product; - break; - } - } - } $details = $order->getProductTaxesDetails($order_detail, false); if ($sum_composite_taxes) { @@ -632,30 +611,14 @@ class OrderInvoiceCore extends ObjectModel $breakdown = array(); $order_detail = array(); $products = $this->getProducts(); - $objServiceProductOrderDetail = new ServiceProductOrderDetail(); - foreach ($products as $product) { - if ($product['is_booking_product'] - || !Product::isSellableAsStandalone($product['selling_preference_type']) - || !Product::isSellableWithHotel($product['selling_preference_type']) - ) { - continue; - } - - $serviceProductDetail = $objServiceProductOrderDetail->getServiceProductsInOrder( - $product['id_order'], - $product['id_order_detail'] - ); - if (!is_array($serviceProductDetail) || empty($serviceProductDetail)) { - continue; - } - - foreach ($serviceProductDetail as $serviceProduct) { - if (empty($serviceProduct['id_htl_booking_detail'])) { - $order_detail[] = $product; - break; - } - } - } + $order_detail = $this->getProducts(); + $order_detail = array_filter($order_detail, function($v) { + return (!$v['is_booking_product'] && ( + Product::isSellableAsStandalone($v['selling_preference_type']) + || Product::isSellableWithHotel($v['selling_preference_type']) + )); + }); + $details = $order->getProductTaxesDetails($order_detail, false); diff --git a/classes/pdf/HTMLTemplateInvoice.php b/classes/pdf/HTMLTemplateInvoice.php index 23839e4e8..37b895353 100644 --- a/classes/pdf/HTMLTemplateInvoice.php +++ b/classes/pdf/HTMLTemplateInvoice.php @@ -660,104 +660,14 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate $footer['service_products_price_tax_excl'] = 0; $footer['service_products_price_tax_incl'] = 0; if ($idsOrderDetail = array_column($order_details, 'id_order_detail')) { - $roomTypeSellingPreferenceTypes = array( - Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - $serviceSellingPreferenceTypes = array( - Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - - $footer['room_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, true, null, null, null, $idsOrderDetail); - $footer['room_price_tax_incl'] = $this->order->getTotalProductsWithTaxes(false, true, null, null, null, $idsOrderDetail); - - foreach ($roomTypeSellingPreferenceTypes as $sellingPreferenceType) { - $footer['room_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes( - false, - false, - $sellingPreferenceType, - 1, - Product::PRICE_ADDITION_TYPE_WITH_ROOM, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); - $footer['room_price_tax_incl'] += $this->order->getTotalProductsWithTaxes( - false, - false, - $sellingPreferenceType, - 1, - Product::PRICE_ADDITION_TYPE_WITH_ROOM, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); - $footer['additional_service_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes( - false, - false, - $sellingPreferenceType, - 0, - null, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); - $footer['additional_service_price_tax_incl'] += $this->order->getTotalProductsWithTaxes( - false, - false, - $sellingPreferenceType, - 0, - null, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); - $footer['total_convenience_fee_te'] += $this->order->getTotalProductsWithoutTaxes( - false, - false, - $sellingPreferenceType, - 1, - Product::PRICE_ADDITION_TYPE_INDEPENDENT, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); - $footer['total_convenience_fee_ti'] += $this->order->getTotalProductsWithTaxes( - false, - false, - $sellingPreferenceType, - 1, - Product::PRICE_ADDITION_TYPE_INDEPENDENT, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); - } - - foreach ($serviceSellingPreferenceTypes as $sellingPreferenceType) { - $footer['service_products_price_tax_excl'] += $this->order->getTotalProductsWithoutTaxes( - false, - false, - $sellingPreferenceType, - false, - false, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_NON_ROOM - ); - $footer['service_products_price_tax_incl'] += $this->order->getTotalProductsWithTaxes( - false, - false, - $sellingPreferenceType, - false, - false, - $idsOrderDetail, - Order::SERVICE_PRODUCT_CONTEXT_NON_ROOM - ); - } - - $footer['additional_service_price_tax_excl'] += $totalDemandsPriceTE; - $footer['additional_service_price_tax_incl'] += $totalDemandsPriceTI; + $footer['room_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, true, null, null, null, $idsOrderDetail) + $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM, $idsOrderDetail); + $footer['room_price_tax_incl'] = $this->order->getTotalProductsWithTaxes(false, true, null, null, null, $idsOrderDetail) + $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM, $idsOrderDetail); + $footer['service_products_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE, false, false, $idsOrderDetail) + $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE, false, false, $idsOrderDetail); + $footer['service_products_price_tax_incl'] = $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE, false, false, $idsOrderDetail) + $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE, false, false, $idsOrderDetail); + $footer['additional_service_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0, null, $idsOrderDetail) + $totalDemandsPriceTE; + $footer['additional_service_price_tax_incl'] = $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0, null, $idsOrderDetail) + $totalDemandsPriceTI; + $footer['total_convenience_fee_te'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT, $idsOrderDetail); + $footer['total_convenience_fee_ti'] = $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT, $idsOrderDetail); } $footer['total_paid_real'] = $this->order_invoice->getTotalPaid(); diff --git a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php index 8f9a908ec..cbb03bf63 100644 --- a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php +++ b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php @@ -348,7 +348,7 @@ class ServiceProductCartDetail extends ObjectModel $productInfo['id_room'] = 0; } - if ($detailedInfo) { + if ($detailedInfo && $product['id_hotel']) { $objHotelBranchInformation = new HotelBranchInformation(); $hotelInfo = $objHotelBranchInformation->hotelBranchesInfo($language->id, 2, 1, $product['id_hotel']); $hotelInfo['location'] = $hotelInfo['hotel_name'].', '.$hotelInfo['city']. diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl index 81fa7f340..d1682db6a 100644 --- a/themes/hotel-reservation-theme/order-detail.tpl +++ b/themes/hotel-reservation-theme/order-detail.tpl @@ -317,27 +317,14 @@ {assign var=room_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, true)} {assign var=room_price_tax_incl value=$order->getTotalProductsWithTaxes(false, true)} - {assign var=room_services_price_tax_excl value=( - $order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) - + $total_demands_price_te - )} - {assign var=room_services_price_tax_incl value=( - $order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) - + $total_demands_price_ti - )} - {assign var=all_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false)} - {assign var=all_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false)} - {assign var=room_linked_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} - {assign var=room_linked_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} + + {assign var=room_services_price_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_te)} + {assign var=room_services_price_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_ti)} {assign var=total_tax_without_discount value=(($room_price_tax_incl - $room_price_tax_excl) + ($room_services_price_tax_incl - $room_services_price_tax_excl ))} - {assign var=total_standard_products_tax_incl value=( - $all_services_price_tax_incl - $room_linked_services_price_tax_incl - )} - {assign var=total_standard_products_tax_excl value=( - $all_services_price_tax_excl - $room_linked_services_price_tax_excl - )} + {assign var=total_standard_products_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} + {assign var=total_standard_products_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} {if isset($cart_htl_data) && $cart_htl_data} @@ -739,25 +726,11 @@ {assign var=room_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, true)} {assign var=room_price_tax_incl value=$order->getTotalProductsWithTaxes(false, true)} - {assign var=room_services_price_tax_excl value=( - $order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) - + $total_demands_price_te - )} - {assign var=room_services_price_tax_incl value=( - $order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED) - + $total_demands_price_ti - )} - {assign var=all_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false)} - {assign var=all_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false)} - {assign var=room_linked_services_price_tax_incl value=$order->getTotalProductsWithTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} - {assign var=room_linked_services_price_tax_excl value=$order->getTotalProductsWithoutTaxes(false, false, null, null, null, null, Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED)} + {assign var=room_services_price_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_te)} + {assign var=room_services_price_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_ti)} - {assign var=total_standard_products_tax_incl value=( - $all_services_price_tax_incl - $room_linked_services_price_tax_incl - )} - {assign var=total_standard_products_tax_excl value=( - $all_services_price_tax_excl - $room_linked_services_price_tax_excl - )} + {assign var=total_standard_products_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} + {assign var=total_standard_products_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} {assign var=total_tax_without_discount value=(($room_price_tax_incl - $room_price_tax_excl) + ($room_services_price_tax_incl - $room_services_price_tax_excl) + ($total_standard_products_tax_incl - $total_standard_products_tax_excl))} From 0da72aefc9d4cbaec53c27558a6bb2741b90a99d Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 20 Mar 2026 18:59:04 +0530 Subject: [PATCH 10/93] Fixed: support per-room booking methods, update selling object type across order pages, and add default property & room type values --- .../orders/_current_cart_details_data.tpl | 14 +- .../controllers/products/configuration.tpl | 37 ++-- .../controllers/products/informations.tpl | 39 +++- classes/Product.php | 26 +++ classes/module/ModuleGraph.php | 3 + controllers/admin/AdminCartsController.php | 5 - controllers/admin/AdminOrdersController.php | 10 +- .../admin/AdminPPreferencesController.php | 8 - controllers/admin/AdminProductsController.php | 31 +++- controllers/front/CartController.php | 3 +- controllers/front/CategoryController.php | 8 + .../front/OrderConfirmationController.php | 1 + controllers/front/OrderDetailController.php | 5 + controllers/front/ProductController.php | 23 ++- install/data/db_structure.sql | 2 + js/admin/ppreferences.js | 6 +- modules/blockcart/ajax-cart.js | 49 ++++- modules/blockcart/blockcart.php | 6 + modules/blockcart/blockcart.tpl | 10 +- .../classes/HotelBookingDetail.php | 1 + .../classes/HotelBranchInformation.php | 32 ++++ .../classes/HotelCartBookingData.php | 15 +- .../classes/HotelHelper.php | 41 +++++ .../classes/HotelReservationSystemDb.php | 19 ++ .../classes/HotelRoomType.php | 13 +- .../classes/HotelRoomTypeSellingType.php | 102 +++++++++++ .../admin/AdminAddHotelController.php | 13 ++ ...minHotelRoomTypeSellingTypesController.php | 168 ++++++++++++++++++ .../AdminHotelRoomsBookingController.php | 21 ++- .../AdminOrderRefundRequestsController.php | 2 +- modules/hotelreservationsystem/define.php | 1 + .../hotelreservationsystem.php | 2 + .../views/js/admin/hotel_rooms_booking.js | 23 ++- .../admin/add_hotel/helpers/form/form.tpl | 37 ++-- .../helpers/view/_partials/booking-rooms.tpl | 36 ++-- .../helpers/view/view.tpl | 2 +- .../views/templates/hook/searchForm.tpl | 4 +- .../_partials/booking-form.tpl | 26 +-- .../_partials/occupancy_field.tpl | 18 +- .../_partials/order-room-detail.tpl | 30 ++-- .../_partials/room_type_list.tpl | 8 +- .../cart-total-block.tpl | 2 +- .../js/modules/blockcart/ajax-cart.js | 53 +++++- .../hotel-reservation-theme/js/occupancy.js | 42 ++++- themes/hotel-reservation-theme/js/product.js | 17 +- .../modules/blockcart/blockcart.tpl | 10 +- .../order-confirmation.tpl | 11 +- .../hotel-reservation-theme/order-detail.tpl | 33 ++-- .../hotel-reservation-theme/order-return.tpl | 2 +- themes/hotel-reservation-theme/product.tpl | 16 +- .../shopping-cart-detail.tpl | 11 +- 51 files changed, 895 insertions(+), 202 deletions(-) create mode 100644 modules/hotelreservationsystem/classes/HotelRoomTypeSellingType.php create mode 100644 modules/hotelreservationsystem/controllers/admin/AdminHotelRoomTypeSellingTypesController.php diff --git a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl index e3405fa99..9566bbfe1 100644 --- a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl +++ b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl @@ -37,9 +37,7 @@ - {if $occupancy_required_for_booking} - - {/if} + {* *} @@ -58,7 +56,11 @@ {assign var="is_full_date" value=($show_full_date && ($data['date_from']|date_format:'%D' == $data['date_to']|date_format:'%D'))} - {if $occupancy_required_for_booking} + {assign var=room_occ_required value=false} + {if isset($data.occupancy_required_for_booking)} + {assign var=room_occ_required value=$data.occupancy_required_for_booking} + {/if} + {if $room_occ_required} + {else} + {/if} @@ -55,14 +62,14 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
{l s='Total rooms cost'} {if $use_taxes && $display_tax_label == 1}{if $priceDisplay == 1}{l s='(tax excl.)'}{elseif $priceDisplay == 0}{l s='(tax incl.)'}{/if} {/if}{l s='Room Image'} {l s='Room Type'} {l s='Duration'}{l s='Occupancy'}{l s='Occupancy / Quantity'} {l s='Unit Price (tax excl)'} {l s='Extra Services / Fees (tax excl)'}{l s='Total Rooms Price (tax excl)'}{dateFormat date=$data.date_from full=$is_full_date} - {dateFormat date=$data.date_to full=$is_full_date} + 1 + {assign var=shown_room_type_price value=$data.feature_price_tax_excl} diff --git a/admin/themes/default/template/controllers/products/configuration.tpl b/admin/themes/default/template/controllers/products/configuration.tpl index 7f0bc0f60..5e78cb1dc 100644 --- a/admin/themes/default/template/controllers/products/configuration.tpl +++ b/admin/themes/default/template/controllers/products/configuration.tpl @@ -21,9 +21,16 @@ *} {if isset($product->id)} + {if isset($htl_room_type['room_type_selling_type_name']) && $htl_room_type['room_type_selling_type_name']} + {assign var=attribute_type value=$htl_room_type['room_type_selling_type_name']} + {assign var=attribute_types value=$htl_room_type['room_type_selling_type_name']|cat:'s'} + {else} + {assign var=attribute_type value={l s='Room'}} + {assign var=attribute_types value={l s='Rooms'}} + {/if}
-

{l s='Rooms'}

+

{$attribute_types}

@@ -35,7 +42,7 @@
@@ -201,14 +208,14 @@
  • -  {l s='Create Rooms'} +  {l s='Create %s' sprintf=$attribute_types}
  • @@ -253,7 +260,7 @@
      -
    • {l s='Please save this room first to add dates.'}
    • +
    • {l s='Please save this %s first to add dates.' sprintf=$attribute_types}
    @@ -325,7 +332,7 @@ - +
    diff --git a/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl b/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl index fded1812c..6977cff00 100644 --- a/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl +++ b/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl @@ -14,7 +14,7 @@
    - +
    @@ -26,7 +26,7 @@
    {if isset($product_rules) && $product_rules|@count} {foreach from=$product_rules item='product_rule'} diff --git a/admin/themes/default/template/controllers/carts/helpers/view/view.tpl b/admin/themes/default/template/controllers/carts/helpers/view/view.tpl index a57ed0a63..381e81bec 100644 --- a/admin/themes/default/template/controllers/carts/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/carts/helpers/view/view.tpl @@ -81,11 +81,11 @@ - + - + @@ -104,7 +104,7 @@ @@ -134,10 +134,10 @@
    diff --git a/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl b/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl index d11710c85..32d0bc9a0 100644 --- a/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl +++ b/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl @@ -55,7 +55,7 @@   - {dateFormat date=$message.date_add full=0} - {$message.date_add|substr:11:5} {if $message.private}{l s='Private'}{/if} {if isset($message.file_name)}   {l s="Attachment"}{/if} - {if isset($message.product_name)}   {if isset($message.booking_product) && $message.booking_product}{l s="Room type:"}{else}{l s="Product:"}{/if} {$message.product_name|escape:'html':'UTF-8'} {/if} + {if isset($message.product_name)}   {if isset($message.booking_product) && $message.booking_product}{l s="Stay type:"}{else}{l s="Product:"}{/if} {$message.product_name|escape:'html':'UTF-8'} {/if}

    {$message.message|escape:'html':'UTF-8'|nl2br}

    diff --git a/admin/themes/default/template/controllers/customers/helpers/view/view.tpl b/admin/themes/default/template/controllers/customers/helpers/view/view.tpl index 4f52451c7..1ecd5b9f5 100644 --- a/admin/themes/default/template/controllers/customers/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/customers/helpers/view/view.tpl @@ -358,7 +358,7 @@ {if $products AND count($products)}
    - {l s='Room types and services'} {count($products)} + {l s='Stay types and services'} {count($products)}
    {l s='Image'}{l s='Room Type'}{l s='Stay Type'} {l s='Hotel'} {l s='Duration'} {l s='occupancy'}{l s='Room price'}{l s='Stay price'} {l s='Extra services'} {l s='Total'}
    {dateFormat date=$room['date_from'] full=$is_full_date} - {dateFormat date=$room['date_to'] full=$is_full_date} - {if $room['adults']}{$room['adults']}{/if} {if $room['adults'] > 1}{l s='Adults'}{else}{l s='Adult'}{/if}{if {$room['children']}}, {$room['children']} {if $room['children'] > 1}{l s='Children'}{else}{l s='Child'}{/if}{/if} + {if $stay['adults']}{$stay['adults']}{/if} {if $stay['adults'] > 1}{l s='Adults'}{else}{l s='Adult'}{/if}{if {$stay['children']}}, {$stay['children']} {if $stay['children'] > 1}{l s='Children'}{else}{l s='Child'}{/if}{/if} {displayWtPriceWithCurrency price=$room['feature_price_tax_excl'] currency=$currency}
    diff --git a/admin/themes/default/template/controllers/import/helpers/form/form.tpl b/admin/themes/default/template/controllers/import/helpers/form/form.tpl index 5d74f7313..a077ec3a2 100644 --- a/admin/themes/default/template/controllers/import/helpers/form/form.tpl +++ b/admin/themes/default/template/controllers/import/helpers/form/form.tpl @@ -315,10 +315,10 @@ {l s='Sample Hotels file'} - {l s='Sample Room Types file'} + {l s='Sample Stay Types file'} - {l s='Sample Rooms file'} + {l s='Sample Stays file'} {l s='Sample Service Products file'} diff --git a/admin/themes/default/template/controllers/normal_products/associations.tpl b/admin/themes/default/template/controllers/normal_products/associations.tpl index 52708b6f8..ddbaff453 100644 --- a/admin/themes/default/template/controllers/normal_products/associations.tpl +++ b/admin/themes/default/template/controllers/normal_products/associations.tpl @@ -46,13 +46,13 @@
    - {l s='Associations are used to display service product category wise on room type page when'} {l s='Category filter'} {l s='is enabled'} + {l s='Associations are used to display service product category wise on stay type page when'} {l s='Category filter'} {l s='is enabled'}
    {include file="controllers/products/multishop/checkbox.tpl" field="id_category_default" type="default"}
    diff --git a/admin/themes/default/template/controllers/normal_products/features.tpl b/admin/themes/default/template/controllers/normal_products/features.tpl index dc02a8aa8..04baf3c36 100644 --- a/admin/themes/default/template/controllers/normal_products/features.tpl +++ b/admin/themes/default/template/controllers/normal_products/features.tpl @@ -23,10 +23,10 @@ {if isset($product->id)}
    -

    {l s='Assign features to this room type'}

    +

    {l s='Assign features to this stay type'}

    - {l s='You can specify a value for each relevant feature regarding this room type. Empty fields will not be displayed.'}
    + {l s='You can specify a value for each relevant feature regarding this stay type. Empty fields will not be displayed.'}
    {l s='You can either create a specific value, or select among the existing pre-defined values you\'ve previously added.'}
    @@ -50,7 +50,7 @@
    {/foreach} + + AdminRoomTypeSellingObjects + diff --git a/install/langs/en/data/tab.xml b/install/langs/en/data/tab.xml index ab5391a0f..403df2844 100644 --- a/install/langs/en/data/tab.xml +++ b/install/langs/en/data/tab.xml @@ -22,6 +22,7 @@ + diff --git a/js/admin.js b/js/admin.js index 48507c79a..55ec83c73 100644 --- a/js/admin.js +++ b/js/admin.js @@ -576,6 +576,18 @@ function redirectSelectChange() showRedirectProductSelectOptions(true); } +function showBookingMehtodOption(show) +{ + if (show) { + $('.booking_method_product_options').fadeIn(); + $('#booking_method_select').show(); + $('#booking_method').prop('disabled', false); + } else { + $('.booking_method_product_options').fadeOut(); + $('#booking_method').prop('disabled', true); + } +} + function addRelatedProduct(id_product_to_add, product_name) { if (!id_product_to_add || id_product == id_product_to_add) diff --git a/mails/en/booking_extra_demands.tpl b/mails/en/booking_extra_demands.tpl index b43ac4bed..cc89a656e 100644 --- a/mails/en/booking_extra_demands.tpl +++ b/mails/en/booking_extra_demands.tpl @@ -2,10 +2,10 @@
    {$available_feature.name} - +
    - + - + @@ -26,7 +26,7 @@ {$data_v['name']}
    {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
    - {l s='Room'} - {$roomCount} + {l s='Stay'} - {$roomCount}
    {/if} @@ -50,7 +50,7 @@ {if !isset($room_demand_exists)} - + {/if} @@ -59,10 +59,10 @@
    {l s='Room Extra Demands Detail'}{l s='Stay Extra Demands Detail'}
    {l s='Room Type'}{l s='Stay Type'} {l s='Name'} {l s='Total'}
    {l s='(Tax excl.)'}
    {l s='No room extra demands added.'}{l s='No stay extra demands added.'}
    - + - + @@ -84,7 +84,7 @@ {$data_v['name']}
    {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
    - {l s='Room'} - {$roomCount} + {l s='Stay'} - {$roomCount}
    {/if} @@ -117,7 +117,7 @@ {if !isset($room_additinal_services_exists)} - + {/if} diff --git a/mails/en/booking_extra_demands.txt b/mails/en/booking_extra_demands.txt index 3139f8ce3..b81fc7bc4 100644 --- a/mails/en/booking_extra_demands.txt +++ b/mails/en/booking_extra_demands.txt @@ -1,6 +1,6 @@ {if isset($list)} {l s='Extra Demands Details'} - {l s='Room Type'} + {l s='Stay Type'} {l s='Extra demand name'} {l s='Total'} {l s='(Tax excl.)'} @@ -16,7 +16,7 @@ {$data_v['name']}
    {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}
    - {l s='Room'} - {$roomCount} + {l s='Stay'} - {$roomCount}
    {/if} diff --git a/mails/en/booking_extra_demands_text.tpl b/mails/en/booking_extra_demands_text.tpl index 38d5b7320..e8ee4b5dc 100644 --- a/mails/en/booking_extra_demands_text.tpl +++ b/mails/en/booking_extra_demands_text.tpl @@ -1,8 +1,8 @@ {if isset($list) && $list} -{l s='Room Extra Demands Detail'} +{l s='Stay Extra Demands Detail'} -{l s='Room Type'} +{l s='Stay Type'} {l s='Name'} {l s='Total'} {l s='(Tax excl.)'} @@ -23,7 +23,7 @@ {$data_v['name']} {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"} -{l s='Room'} - {$roomCount} +{l s='Stay'} - {$roomCount} {/if} @@ -39,13 +39,13 @@ {/foreach} {if !isset($room_demand_exists)} -{l s='No room extra demands added.'} +{l s='No stay extra demands added.'} {/if} -{l s='Rooms Services Detail'} +{l s='Stays Services Detail'} -{l s='Room Type'} +{l s='Stay Type'} {l s='Name'} {l s='Qty'} {l s='Total'} @@ -66,7 +66,7 @@ {if $smarty.foreach.serviceRow.first} {$data_v['name']} {$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"} -{l s='Room'} - {$roomCount} +{l s='Stay'} - {$roomCount} {/if} {$service['name']} @@ -87,6 +87,6 @@ {/foreach} {if !isset($room_additinal_services_exists)} -{l s='No room services added.'} +{l s='No stay services added.'} {/if} {/if} diff --git a/mails/en/bookings_refund_request_detail_admin.tpl b/mails/en/bookings_refund_request_detail_admin.tpl index 657124172..bdd382c89 100644 --- a/mails/en/bookings_refund_request_detail_admin.tpl +++ b/mails/en/bookings_refund_request_detail_admin.tpl @@ -2,11 +2,11 @@
    {l s='Rooms Services Detail'}{l s='Stays Services Detail'}
    {l s='Room Type'}{l s='Stay Type'} {l s='Name'} {l s='Qty'} {l s='Total'}
    {l s='No room services added.'}{l s='No stay services added.'}
    - + - - + + diff --git a/mails/en/bookings_refund_request_detail_admin_text.tpl b/mails/en/bookings_refund_request_detail_admin_text.tpl index 236cfacad..e5d75108f 100644 --- a/mails/en/bookings_refund_request_detail_admin_text.tpl +++ b/mails/en/bookings_refund_request_detail_admin_text.tpl @@ -1,8 +1,8 @@ {if isset($list) && $list} -{l s="Room Num"} +{l s="Stay Num"} -{l s="Room Type"} +{l s="Stay Type"} {l s="Hotel"} diff --git a/mails/en/bookings_refund_request_detail_customer.tpl b/mails/en/bookings_refund_request_detail_customer.tpl index 07be275d5..52d33a0f8 100644 --- a/mails/en/bookings_refund_request_detail_customer.tpl +++ b/mails/en/bookings_refund_request_detail_customer.tpl @@ -2,12 +2,12 @@
    {l s='Rooms Bookings Detail'}{l s='Stays Bookings Detail'}
    {l s="Room Num"}{l s="Room Type"}{l s="Stay Num"}{l s="Stay Type"} {l s="Hotel"} {l s="Duration"}
    - + - + - + diff --git a/mails/en/bookings_refund_request_detail_customer_text.tpl b/mails/en/bookings_refund_request_detail_customer_text.tpl index 51d0d3ea7..536982d28 100644 --- a/mails/en/bookings_refund_request_detail_customer_text.tpl +++ b/mails/en/bookings_refund_request_detail_customer_text.tpl @@ -1,13 +1,13 @@ {if isset($list) && $list} -{l s='Rooms Bookings Detail'} +{l s='Stays Bookings Detail'} -{l s="Room Type"} +{l s="Stay Type"} {l s="Hotel"} -{l s="Rooms Qty"} +{l s="Stays Qty"} {l s="Duration"} diff --git a/mails/en/hotel_booking_cart_data.tpl b/mails/en/hotel_booking_cart_data.tpl index 7f1d3eb67..f4e533aab 100644 --- a/mails/en/hotel_booking_cart_data.tpl +++ b/mails/en/hotel_booking_cart_data.tpl @@ -2,14 +2,14 @@
    {l s='Rooms Bookings Detail'}{l s='Stays Bookings Detail'}
    {l s="Room Type"}{l s="Stay Type"} {l s="Hotel"}{l s="Rooms Qty"}{l s="Stays Qty"} {l s="Duration"}
    - + - - - + + + - + diff --git a/mails/en/order_canceled.txt b/mails/en/order_canceled.txt index ac4074023..2cb8c69a7 100644 --- a/mails/en/order_canceled.txt +++ b/mails/en/order_canceled.txt @@ -9,7 +9,7 @@ been canceled. Here are your order details: Order reference: {order_name} Order total: {total_paid} -Total Rooms: {num_rooms} +Total Stays: {num_rooms} Hotel details: Hotel Name: {hotel_hotel_name} diff --git a/mails/en/order_conf_total_info.tpl b/mails/en/order_conf_total_info.tpl index 7c094a1aa..b25e22d69 100644 --- a/mails/en/order_conf_total_info.tpl +++ b/mails/en/order_conf_total_info.tpl @@ -2,7 +2,7 @@ {if isset($list['has_room_bookings']) && $list['has_room_bookings']} - + {/foreach} diff --git a/modules/dashguestcycle/dashguestcycle.php b/modules/dashguestcycle/dashguestcycle.php index d630c926a..243b6db3e 100644 --- a/modules/dashguestcycle/dashguestcycle.php +++ b/modules/dashguestcycle/dashguestcycle.php @@ -327,7 +327,7 @@ class DashGuestCycle extends Module 'order_id' => array('title' => $this->l('Order ID'), 'class' => 'text-center'), 'name' => array('title' => $this->l('Customer Name'), 'class' => 'text-left'), 'hotel' => array('title' => $this->l('Hotel'), 'class' => 'text-left'), - 'total' => array('title' => $this->l('Total Rooms'), 'class' => 'text-center'), + 'total' => array('title' => $this->l('Total Stays'), 'class' => 'text-center'), 'guests' => array('title' => $this->l('Guests'), 'class' => 'text-center'), 'order_total' => array('title' => $this->l('Order Total'), 'class' => 'text-right'), 'order_status' => array('title' => $this->l('Order Status'), 'class' => 'text-left'), diff --git a/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl b/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl index 5d0ab4dfa..cf2f74964 100644 --- a/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl +++ b/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl @@ -73,7 +73,7 @@
    -
    +

    {l s='Revenue Per Available Room' mod='dashperformance'}

    diff --git a/modules/dashproducts/dashproducts.php b/modules/dashproducts/dashproducts.php index 3603141b8..d26b71a68 100644 --- a/modules/dashproducts/dashproducts.php +++ b/modules/dashproducts/dashproducts.php @@ -144,7 +144,7 @@ class DashProducts extends Module { $header = array( array('title' => $this->l('Customer Name'), 'class' => 'text-left'), - array('title' => $this->l('Total Rooms'), 'class' => 'text-left'), + array('title' => $this->l('Total Stays'), 'class' => 'text-left'), array('title' => $this->l('Order'), 'class' => 'text-left'), array('title' => $this->l('Hotel'), 'class' => 'text-left'), array('title' => $this->l('Total').' '.$this->l('Tax excl.'), 'class' => 'text-left'), diff --git a/modules/hotelreservationsystem/classes/HotelBranchInformation.php b/modules/hotelreservationsystem/classes/HotelBranchInformation.php index ba300e3da..ba0046321 100644 --- a/modules/hotelreservationsystem/classes/HotelBranchInformation.php +++ b/modules/hotelreservationsystem/classes/HotelBranchInformation.php @@ -579,36 +579,6 @@ class HotelBranchInformation extends ObjectModel return Db::getInstance()->getRow($sql); } - public function getHotelPropertyTypeName($id_hotel = null, $idLang = null) - { - if (!$idLang) { - $idLang = Context::getContext()->language->id; - } - - if (!$id_hotel) { - $id_hotel = (int) $this->id; - } - - if (!$id_hotel) { - return false; - } - - $cache_key = 'HotelBranchInformation::getHotelPropertyTypeName'.(int)$id_hotel; - if(!Cache::isStored($cache_key)){ - $sql = 'SELECT hrtstl.`name` - FROM `'._DB_PREFIX_.'htl_branch_info` hbi - LEFT JOIN `'._DB_PREFIX_.'htl_room_type_selling_type_lang` hrtstl - ON (hbi.`id_property_type` = hrtstl.`id_htl_room_type_selling_type` - AND hrtstl.`id_lang` = '.(int) $idLang.') - WHERE hbi.`id` = '.(int) $id_hotel; - - $res = Db::getInstance()->getValue($sql); - }else{ - $res = Cache::retrieve($cache_key); - } - return $res; - } - /** * [getHotelCategoryTree : Select category info by name of the category] * @param [string] $searchData [description] diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index 3d896d0cf..0088d69eb 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -459,8 +459,8 @@ class HotelCartBookingData extends ObjectModel $chkQty = 0; $num_days = HotelHelper::getNumberOfDays($date_from, $date_to); $objServiceProductCartDetail = new ServiceProductCartDetail(); - $PS_ROOM_UNIT_SELECTION_TYPE = Product::getRoomTypeBookingMethod($id_product); - if ($PS_ROOM_UNIT_SELECTION_TYPE == HotelBookingDetail::PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY) { + $isOccupancyBooking = Product::isOccupancyBookingMethod($id_product); + if ($isOccupancyBooking) { $roomsRequired = count($occupancy); } else { $objRoomType = new HotelRoomType(); @@ -486,7 +486,7 @@ class HotelCartBookingData extends ObjectModel $obj_htl_cart_booking_data->date_to = $date_to; $obj_htl_cart_booking_data->booking_type = $booking_type; $obj_htl_cart_booking_data->comment = $comment; - if ($PS_ROOM_UNIT_SELECTION_TYPE == HotelBookingDetail::PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY) { + if ($isOccupancyBooking) { $room_occupancy = array_shift($occupancy); $obj_htl_cart_booking_data->adults = $room_occupancy['adults']; $obj_htl_cart_booking_data->children = $room_occupancy['children']; @@ -590,8 +590,8 @@ class HotelCartBookingData extends ObjectModel 'id_cart' => $id_cart, 'id_guest' => $id_guest, ); - $PS_ROOM_UNIT_SELECTION_TYPE = Product::getRoomTypeBookingMethod($id_product); - if ($PS_ROOM_UNIT_SELECTION_TYPE == HotelBookingDetail::PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY) { + $isOccupancyBooking = Product::isOccupancyBookingMethod($id_product); + if ($isOccupancyBooking) { $roomsRequired = count($occupancy); } else { $roomsRequired = $occupancy; @@ -1171,7 +1171,7 @@ class HotelCartBookingData extends ObjectModel $cart_detail_data[$key]['date_from'] = $value['date_from']; $cart_detail_data[$key]['date_to'] = $value['date_to']; $cart_detail_data[$key]['occupancy_required_for_booking'] = - (Product::getRoomTypeBookingMethod($value['id_product']) == HotelBookingDetail::PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY); + Product::isOccupancyBookingMethod($value['id_product']); $cart_detail_data[$key]['child_ages'] = json_decode($value['child_ages']); $occupancy = array( @@ -1557,7 +1557,9 @@ class HotelCartBookingData extends ObjectModel $cartHotelData[$prodKey]['total_num_rooms'] = 0; $cartHotelData[$prodKey]['id_product'] = $product['id_product']; $cartHotelData[$prodKey]['name'] = $objProduct->name; - $cartHotelData[$prodKey]['room_type_selling_type_name'] = $roomDetail['room_type_selling_type_name']; + $cartHotelData[$prodKey]['room_type_selling_object'] = $roomDetail['room_type_selling_object']; + $cartHotelData[$prodKey]['multiple_room_type_selling_object'] = $roomDetail['multiple_room_type_selling_object']; + $cartHotelData[$prodKey]['isOccupancyType'] = Product::isOccupancyBookingMethod($product['id_product']);; $cartHotelData[$prodKey]['unit_price'] = $unitPrice; $cartHotelData[$prodKey]['unit_price_without_reduction'] = $unitPriceWithoutReduction; $cartHotelData[$prodKey]['total_room_type_amount'] = 0; diff --git a/modules/hotelreservationsystem/classes/HotelHelper.php b/modules/hotelreservationsystem/classes/HotelHelper.php index 6bdded18c..8d50d7086 100644 --- a/modules/hotelreservationsystem/classes/HotelHelper.php +++ b/modules/hotelreservationsystem/classes/HotelHelper.php @@ -1368,25 +1368,26 @@ class HotelHelper return true; } - public function createHotelDefaultRoomTypeSellingTypes() + public function createHotelDefaultPropertyTypes() { $propertyTypes = array( 'Hotel', 'Motel', - ); - - $sellingTypes = array( - 'Room', + 'Resort', + 'Hostel', + 'Guest House', + 'Lodge', 'Apartment', - 'Villa', - 'Cottage', - 'Bungalow', + 'Vacation Rental', + 'Homestay', + 'Co-Living', + 'Camping', + 'Bed & Breakfast', ); $languages = Language::getLanguages(true); foreach ($propertyTypes as $typeName) { - $objType = new HotelRoomTypeSellingType(); - $objType->type = HotelRoomTypeSellingType::HOTEL_PROPERTY_TYPE; + $objType = new HotelPropertyType(); $objType->active = 1; foreach ($languages as $lang) { $objType->name[$lang['id_lang']] = $typeName; @@ -1394,9 +1395,31 @@ class HotelHelper $objType->save(); } - foreach ($sellingTypes as $typeName) { - $objType = new HotelRoomTypeSellingType(); - $objType->type = HotelRoomTypeSellingType::ROOM_TYPE_OBJECT_SELLING_TYPE; + return true; + } + + public function createHotelDefaultRoomSellingTypes() + { + $sellingObjects = array( + 'Room', + 'Apartment', + 'Villa', + 'Cottage', + 'Bungalow', + 'House', + 'Chalet', + 'Cabin', + 'Studio', + 'Penthouse', + 'Camping Pitch', + 'Overwater Bungalow', + 'Heritage Room', + 'Houseboat', + ); + + $languages = Language::getLanguages(true); + foreach ($sellingObjects as $typeName) { + $objType = new RoomTypeSellingObject(); $objType->active = 1; foreach ($languages as $lang) { $objType->name[$lang['id_lang']] = $typeName; @@ -2029,7 +2052,7 @@ class HotelHelper $product->show_at_front = 1; $product->is_virtual = 1; $product->indexed = 1; - $product->id_room_type_selling_object_type = 3; // assign default selling type as 'Per Room' + $product->id_room_type_selling_object= 1; $product->save(); $product_id = $product->id; @@ -2518,6 +2541,8 @@ class HotelHelper $this->saveDummyHotelFeatures($htl_id); $this->saveDummyProductsAndRelatedInfo($htl_id); $this->saveDummyServiceProductsAndRelatedInfo(); + $this->createHotelDefaultPropertyTypes(); + $this->createHotelDefaultRoomSellingTypes(); return true; } diff --git a/modules/hotelreservationsystem/classes/HotelPropertyType.php b/modules/hotelreservationsystem/classes/HotelPropertyType.php new file mode 100644 index 000000000..9d75dc6d9 --- /dev/null +++ b/modules/hotelreservationsystem/classes/HotelPropertyType.php @@ -0,0 +1,112 @@ + 'htl_property_type', + 'primary' => 'id_htl_property_type', + 'multilang' => true, + 'fields' => array( + 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), + 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false), + 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false), + 'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true), + ), + ); + + public function delete() + { + Db::getInstance()->update( + 'htl_branch_info', + array('id_property_type' => 0), + '`id_property_type` = '.(int)$this->id + ); + + return parent::delete(); + } + + /** + * Get the property type name of a hotel in the requested language. + * + * @param int|null $idHotel + * @param int|null $idLang + * + * @return string + */ + public static function getPropertyType($idHotel = null, $idLang = null) + { + $idHotel = (int) $idHotel; + $idLang = $idLang ? (int) $idLang : (int) Context::getContext()->language->id; + $cacheKey = 'HotelPropertyType::getPropertyType'.$idHotel.'_'.$idLang; + + if (!Cache::isStored($cacheKey)) { + $sql = 'SELECT hptl.`name` + FROM `'._DB_PREFIX_.'htl_branch_info` hbi + LEFT JOIN `'._DB_PREFIX_.'htl_property_type_lang` hptl + ON (hbi.`id_property_type` = hptl.`id_htl_property_type` + AND hptl.`id_lang` = '.$idLang.') + WHERE hbi.`id` = '.$idHotel; + + Cache::store($cacheKey, Db::getInstance()->getValue($sql)); + } + + $propertyType = Cache::retrieve($cacheKey); + + return $propertyType ? $propertyType : Translate::getModuleTranslation('hotelreservationsystem', 'Hotel', 'HotelPropertyType'); + } + + /** + * Get the list of property types in the requested language. + * + * @param int|null $idLang + * @param bool $active + * + * @return array + */ + public static function getPropertyTypes($idLang = null, $active = true) + { + $idLang = $idLang ? (int) $idLang : (int) Context::getContext()->language->id; + $active = (bool) $active; + $cacheKey = 'HotelPropertyType::getPropertyTypes'.$idLang.'_'.(int) $active; + + if (!Cache::isStored($cacheKey)) { + $sql = 'SELECT hpt.`id_htl_property_type` AS `id_property_type`, hptl.`name` + FROM `'._DB_PREFIX_.'htl_property_type` hpt + LEFT JOIN `'._DB_PREFIX_.'htl_property_type_lang` hptl + ON (hpt.`id_htl_property_type` = hptl.`id_htl_property_type` + AND hptl.`id_lang` = '.$idLang.')'. + ($active ? ' WHERE hpt.`active` = 1' : ''). + ' ORDER BY hptl.`name` ASC'; + + Cache::store($cacheKey, Db::getInstance()->executeS($sql)); + } + + return Cache::retrieve($cacheKey); + } +} diff --git a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php index 06e9ee61d..5d754acad 100644 --- a/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php +++ b/modules/hotelreservationsystem/classes/HotelReservationSystemDb.php @@ -118,20 +118,19 @@ class HotelReservationSystemDb PRIMARY KEY (`id`, `id_lang`) ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8;", - "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_room_type_selling_type` ( - `id_htl_room_type_selling_type` int(10) unsigned NOT NULL AUTO_INCREMENT, - `type` tinyint(2) unsigned NOT NULL, + "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_property_type` ( + `id_htl_property_type` int(10) unsigned NOT NULL AUTO_INCREMENT, `active` tinyint(1) unsigned NOT NULL DEFAULT '1', `date_add` datetime NOT NULL, `date_upd` datetime NOT NULL, - PRIMARY KEY (`id_htl_room_type_selling_type`) + PRIMARY KEY (`id_htl_property_type`) ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8 AUTO_INCREMENT=1;", - "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_room_type_selling_type_lang` ( - `id_htl_room_type_selling_type` int(10) unsigned NOT NULL, + "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_property_type_lang` ( + `id_htl_property_type` int(10) unsigned NOT NULL, `id_lang` int(10) unsigned NOT NULL, `name` varchar(255) NOT NULL, - PRIMARY KEY (`id_htl_room_type_selling_type`, `id_lang`) + PRIMARY KEY (`id_htl_property_type`, `id_lang`) ) ENGINE="._MYSQL_ENGINE_." DEFAULT CHARSET=utf8;", "CREATE TABLE IF NOT EXISTS `"._DB_PREFIX_."htl_cart_booking_data` ( @@ -630,8 +629,8 @@ class HotelReservationSystemDb `'._DB_PREFIX_.'htl_bed_type`, `'._DB_PREFIX_.'htl_bed_type_lang`, `'._DB_PREFIX_.'htl_room_type_bed_type`, - `'._DB_PREFIX_.'htl_room_type_selling_type`, - `'._DB_PREFIX_.'htl_room_type_selling_type_lang`, + `'._DB_PREFIX_.'htl_property_type`, + `'._DB_PREFIX_.'htl_property_type_lang`, `'._DB_PREFIX_.'htl_access`, `'._DB_PREFIX_.'htl_settings_link`, `'._DB_PREFIX_.'htl_settings_link_lang`' diff --git a/modules/hotelreservationsystem/classes/HotelRoomType.php b/modules/hotelreservationsystem/classes/HotelRoomType.php index 3f345bc03..1f6e5fd6b 100644 --- a/modules/hotelreservationsystem/classes/HotelRoomType.php +++ b/modules/hotelreservationsystem/classes/HotelRoomType.php @@ -234,18 +234,29 @@ class HotelRoomType extends ObjectModel if (!$idLang) { $idLang = Context::getContext()->language->id; } - $sql = 'SELECT hrt.*, hbl.`hotel_name`, hrtstl.`name` AS `room_type_selling_type_name` + + $sql = 'SELECT hrt.*, hbl.`hotel_name`, + hrtstl.`name` AS `room_type_selling_object`, + CONCAT(hrtstl.`name`, "s") AS `multiple_room_type_selling_object` FROM `'._DB_PREFIX_.'htl_room_type` AS hrt INNER JOIN `'._DB_PREFIX_.'htl_branch_info_lang` AS hbl - ON (hbl.`id` = hrt.`id_hotel` AND hbl.`id_lang` = '.(int)$idLang.') + ON (hbl.`id` = hrt.`id_hotel` + AND hbl.`id_lang` = '.(int)$idLang.') LEFT JOIN `'._DB_PREFIX_.'product` AS p - ON (p.`id_product` = hrt.`id_product`) - LEFT JOIN `'._DB_PREFIX_.'htl_room_type_selling_type_lang` AS hrtstl - ON (hrtstl.`id_htl_room_type_selling_type` = p.`id_room_type_selling_object_type` - AND hrtstl.`id_lang` = '.(int)$idLang.') + ON (p.`id_product` = hrt.`id_product`) + LEFT JOIN `'._DB_PREFIX_.'room_type_selling_object_lang` AS hrtstl + ON (hrtstl.`id_room_type_selling_object` = p.`id_room_type_selling_object` + AND hrtstl.`id_lang` = '.(int)$idLang.') WHERE hrt.`id_product` = '.(int)$id_product; - return Db::getInstance()->getRow($sql); + $result = Db::getInstance()->getRow($sql); + + if ($result && !$result['room_type_selling_object']) { + $result['room_type_selling_object'] = Translate::getModuleTranslation('hotelreservationsystem', 'Room', 'HotelRoomType'); + $result['multiple_room_type_selling_object'] = Translate::getModuleTranslation('hotelreservationsystem', 'Rooms', 'HotelRoomType'); + } + + return $result; } /** @@ -303,15 +314,15 @@ class HotelRoomType extends ObjectModel $idLang = Context::getContext()->language->id; } - $sql = 'SELECT pl.`name`, COUNT(hri.`id`) AS `numberOfRooms`, hrt.`id_product`, `adults`, `children`, `max_adults`, `max_children`, `max_guests`, hrtstl.`name` AS `room_type_selling_type_name` + $sql = 'SELECT pl.`name`, COUNT(hri.`id`) AS `numberOfRooms`, hrt.`id_product`, `adults`, `children`, `max_adults`, `max_children`, `max_guests`, hrtstl.`name` AS `room_type_selling_object`, CONCAT(hrtstl.`name`, "s") AS `multiple_room_type_selling_object` '.($position ? ', cp.`position`' : '').' '.($fullDetail ? ', pl.`link_rewrite`, pl.`description_short`' : '').' FROM `'._DB_PREFIX_.'htl_room_type` AS `hrt` INNER JOIN `'._DB_PREFIX_.'htl_room_information` AS `hri` ON (hri.`id_product` = hrt.`id_product`)'; $sql .= ' INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (hrt.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$idLang.')'; $sql .= ' LEFT JOIN `'._DB_PREFIX_.'product` AS p ON (p.`id_product` = hrt.`id_product`) - LEFT JOIN `'._DB_PREFIX_.'htl_room_type_selling_type_lang` AS hrtstl - ON (hrtstl.`id_htl_room_type_selling_type` = p.`id_room_type_selling_object_type` + LEFT JOIN `'._DB_PREFIX_.'room_type_selling_object_lang` AS hrtstl + ON (hrtstl.`id_room_type_selling_object` = p.`id_room_type_selling_object` AND hrtstl.`id_lang` = '.(int)$idLang.')'; if ($position) { @@ -323,7 +334,17 @@ class HotelRoomType extends ObjectModel GROUP BY hrt.`id_product`'. ($position ? ' ORDER BY cp.`position`' : ''); - return Db::getInstance()->executeS($sql); + $results = Db::getInstance()->executeS($sql); + + foreach ($results as &$row) { + if (!$row['room_type_selling_object']) { + $row['room_type_selling_object'] = Translate::getModuleTranslation('hotelreservationsystem', 'Room', 'HotelRoomType'); + $row['multiple_room_type_selling_object'] = Translate::getModuleTranslation('hotelreservationsystem', 'Rooms', 'HotelRoomType'); + } + } + unset($row); + + return $results; } /** diff --git a/modules/hotelreservationsystem/classes/HotelRoomTypeSellingType.php b/modules/hotelreservationsystem/classes/HotelRoomTypeSellingType.php deleted file mode 100644 index 28ecf8503..000000000 --- a/modules/hotelreservationsystem/classes/HotelRoomTypeSellingType.php +++ /dev/null @@ -1,102 +0,0 @@ - 'htl_room_type_selling_type', - 'primary' => 'id_htl_room_type_selling_type', - 'multilang' => true, - 'fields' => array( - 'type' => array('type' => self::TYPE_INT, 'validate' => 'isUnsignedInt', 'required' => true), - 'active' => array('type' => self::TYPE_BOOL, 'validate' => 'isBool'), - 'date_add' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false), - 'date_upd' => array('type' => self::TYPE_DATE, 'validate' => 'isDate', 'copy_post' => false), - 'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true), - ), - ); - - public static function getRoomTypeSellingObjectTypes($idLang = null, $active = true) - { - if (!$idLang) { - $idLang = Context::getContext()->language->id; - } - - $cache_key = 'HotelRoomTypeSellingType::getRoomTypeSellingObjectTypes'.$idLang.'_'.$active; - if(!Cache::isStored($cache_key)){ - $sql = 'SELECT hrtst.`id_htl_room_type_selling_type` AS `id_room_type_selling_object_type`, hrtstl.`name` - FROM `'._DB_PREFIX_.'htl_room_type_selling_type` hrtst - LEFT JOIN `'._DB_PREFIX_.'htl_room_type_selling_type_lang` hrtstl - ON (hrtst.`id_htl_room_type_selling_type` = hrtstl.`id_htl_room_type_selling_type` - AND hrtstl.`id_lang` = '.(int) $idLang.') - WHERE hrtst.`type` = '.(int) self::ROOM_TYPE_OBJECT_SELLING_TYPE. - ($active ? ' AND hrtst.`active` = 1' : '').' - ORDER BY hrtstl.`name` ASC'; - - $res = Db::getInstance()->executeS($sql); - }else { - $res = Cache::retrieve($cache_key); - } - - return $res; - - } - - public static function getHotelPropertyTypes($idLang = null, $active = true) - { - if (!$idLang) { - $idLang = Context::getContext()->language->id; - } - - $cache_key = 'HotelRoomTypeSellingType::getHotelPropertyTypes'.$idLang.'_'.$active; - if(!Cache::isStored($cache_key)){ - - $sql = 'SELECT hrtst.`id_htl_room_type_selling_type` AS `id_property_type`, hrtstl.`name` - FROM `'._DB_PREFIX_.'htl_room_type_selling_type` hrtst - LEFT JOIN `'._DB_PREFIX_.'htl_room_type_selling_type_lang` hrtstl - ON (hrtst.`id_htl_room_type_selling_type` = hrtstl.`id_htl_room_type_selling_type` - AND hrtstl.`id_lang` = '.(int) $idLang.') - WHERE hrtst.`type` = '.(int) self::HOTEL_PROPERTY_TYPE. - ($active ? ' AND hrtst.`active` = 1' : '').' - ORDER BY hrtstl.`name` ASC'; - - $res = Db::getInstance()->executeS($sql); - - }else{ - $res = Cache::retrieve($cache_key); - } - - return $res; - - } - -} diff --git a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php index 1a3ddceec..dc457008f 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminAddHotelController.php @@ -45,16 +45,24 @@ class AdminAddHotelController extends ModuleAdminController $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'state` s ON (s.`id_state` = aa.`id_state`)'; $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'country_lang` cl ON (cl.`id_country` = aa.`id_country` AND cl.`id_lang` = '.(int) $this->context->language->id.')'; - - $this->_select = ' hbl.`hotel_name`, aa.`city`, s.`name` as `state_name`, cl.`name` as country_name'; + $this->_join .= 'LEFT JOIN `'._DB_PREFIX_.'htl_property_type_lang` hrtsl + ON (hrtsl.`id_htl_property_type` = a.`id_property_type` AND hrtsl.`id_lang` = '.(int) $this->context->language->id.')'; + $this->_select = ' hrtsl.`name` as `property_type` , hbl.`hotel_name`, aa.`city`, s.`name` as `state_name`, cl.`name` as `country_name`'; $this->fields_list = array( 'id' => array( 'title' => $this->l('ID'), 'align' => 'center', ), + 'property_type' => array( + 'title' => $this->l('Property type'), + 'align' => 'center', + 'optional' => false, + 'filter_key' => 'hrtsl!name', + 'order_key' => 'hrtsl!name', + ), 'hotel_name' => array( - 'title' => $this->l('Hotel Name'), + 'title' => $this->l('Name'), 'align' => 'center', ), 'city' => array( @@ -222,7 +230,7 @@ class AdminAddHotelController extends ModuleAdminController $smartyVars['PS_MAX_CHECKOUT_OFFSET'] = (int) Configuration::get('PS_MAX_CHECKOUT_OFFSET'); $smartyVars['PS_MIN_BOOKING_OFFSET'] = (int) Configuration::get('PS_MIN_BOOKING_OFFSET'); $smartyVars['WK_ORDER_REFUND_ALLOWED'] = Configuration::get('WK_ORDER_REFUND_ALLOWED'); - $hotelPropertyTypes = HotelRoomTypeSellingType::getHotelPropertyTypes($this->context->language->id); + $hotelPropertyTypes = HotelPropertyType::getPropertyTypes($this->context->language->id); $smartyVars['hotel_property_types_info'] = $hotelPropertyTypes; $selectedHotelPropertyType = Tools::getValue('id_property_type'); if (!$selectedHotelPropertyType && isset($hotelBranchInfo)) { @@ -296,10 +304,6 @@ class AdminAddHotelController extends ModuleAdminController } } - if ($idHotelPropertyType == '' && $idHotelPropertyType == null && !Validate::isUnsignedId($idHotelPropertyType)) { - $this->errors[] = $this->l('Invalid property type.'); - } - foreach ($languages as $lang) { if ($shortDescription = html_entity_decode(Tools::getValue('short_description_'.$lang['id_lang']))) { if (!Validate::isCleanHtml($shortDescription)) { diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php new file mode 100644 index 000000000..b63cbb5e8 --- /dev/null +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php @@ -0,0 +1,127 @@ +bootstrap = true; + $this->table = 'htl_property_type'; + $this->className = 'HotelPropertyType'; + $this->identifier = 'id_htl_property_type'; + $this->lang = true; + $this->context = Context::getContext(); + $this->toolbar_title = $this->l('Property Types'); + + parent::__construct(); + + $this->fields_list = array( + 'id_htl_property_type' => array( + 'title' => $this->l('ID'), + 'align' => 'center', + 'class' => 'fixed-width-xs', + ), + 'name' => array( + 'title' => $this->l('Name'), + 'align' => 'left', + ), + 'active' => array( + 'title' => $this->l('Status'), + 'align' => 'center', + 'active' => 'status', + 'type' => 'bool', + 'orderby' => false, + ), + ); + + $this->addRowAction('edit'); + $this->addRowAction('delete'); + $this->bulk_actions = array( + 'delete' => array( + 'text' => $this->l('Delete selected'), + 'confirm' => $this->l('Delete selected items?'), + 'icon' => 'icon-trash', + ), + ); + } + + public function initPageHeaderToolbar() + { + if (!$this->display || $this->display == 'list') { + $this->page_header_toolbar_btn['new_property_type'] = array( + 'href' => self::$currentIndex.'&add'.$this->table.'&token='.$this->token, + 'desc' => $this->l('Add New Property', null, null, false), + 'icon' => 'process-icon-new', + ); + } + + parent::initPageHeaderToolbar(); + } + + public function renderForm() + { + if (!$this->loadObject(true)) { + return; + } + + $this->fields_form = array( + 'legend' => array( + 'title' => $this->l('Property Type'), + 'icon' => 'icon-building', + ), + 'input' => array( + array( + 'type' => 'text', + 'label' => $this->l('Name'), + 'name' => 'name', + 'lang' => true, + 'required' => true, + 'hint' => $this->l('Displayed name for this property type.'), + ), + array( + 'type' => 'switch', + 'label' => $this->l('Status'), + 'name' => 'active', + 'is_bool' => true, + 'values' => array( + array( + 'id' => 'active_on', + 'value' => 1, + 'label' => $this->l('Enabled'), + ), + array( + 'id' => 'active_off', + 'value' => 0, + 'label' => $this->l('Disabled'), + ), + ), + ), + ), + 'submit' => array( + 'title' => $this->l('Save'), + ), + ); + + return parent::renderForm(); + } +} diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index fd1b887da..d684fcf5f 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -375,7 +375,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController } $booking_data['rm_data'][$roomKey]['occupancy_required_for_booking'] = - (int) (Product::getRoomTypeBookingMethod($roomData['id_product']) == HotelBookingDetail::PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY); + (int) Product::isOccupancyBookingMethod($roomData['id_product']); } $this->context->smarty->assign(array( @@ -576,13 +576,13 @@ class AdminHotelRoomsBookingController extends ModuleAdminController if ($bookingData = $objBookingDetail->getBookingData($bookingParams)) { if ($bookingData['stats']['num_avail']) { $eventColor = '#7EC77B'; - $title = sprintf($this->l('Available Rooms : %s'), $bookingData['stats']['num_avail']); + $title = sprintf($this->l('Available Stays : %s'), $bookingData['stats']['num_avail']); } elseif ($bookingData['stats']['num_part_avai']) { $eventColor = '#FFC224'; - $title = sprintf($this->l('Partially Available Rooms : %s'), $bookingData['stats']['num_part_avai']); + $title = sprintf($this->l('Partially Available Stays : %s'), $bookingData['stats']['num_part_avai']); } else { $eventColor = '#FF3838'; - $title = sprintf($this->l('Available Rooms : %s'), $bookingData['stats']['num_avail']); + $title = sprintf($this->l('Available Stays : %s'), $bookingData['stats']['num_avail']); } $bookingData['date_from_format'] = Tools::displayDate($searchDateFrom); $bookingData['date_to_format'] = Tools::displayDate($searchDateTo); @@ -688,7 +688,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $date_from = Tools::getValue('date_from'); $date_to = Tools::getValue('date_to'); $occupancy = Tools::getValue('occupancy'); - if (Product::getRoomTypeBookingMethod($id_product) == HotelBookingDetail::PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY) { + if (Product::isOccupancyBookingMethod($id_product)) { if (!Validate::isOccupancy($occupancy)) { $occupancy = array(); } diff --git a/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php b/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php index 28268cf10..c25c6af0a 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminOrderRefundRequestsController.php @@ -93,7 +93,7 @@ class AdminOrderRefundRequestsController extends ModuleAdminController if ($refundReqBookings) { $this->fields_list['num_rooms'] = array( - 'title' => $this->l('Total Rooms'), + 'title' => $this->l('Total Stays'), 'align' => 'center', 'havingFilter' => true, ); @@ -304,7 +304,7 @@ class AdminOrderRefundRequestsController extends ModuleAdminController $objCustomer = new Customer($objOrderReturn->id_customer); $objOrder = new Order($objOrderReturn->id_order); $orderCurrency = new Currency($objOrder->id_currency); - + $objRoomType = new HotelRoomType(); $objRefundRules = new HotelOrderRefundRules(); if ($refundReqBookings = $objOrderReturn->getOrderRefundRequestedBookings($objOrderReturn->id_order, $objOrderReturn->id)){ foreach ($refundReqBookings as &$booking) { @@ -313,6 +313,9 @@ class AdminOrderRefundRequestsController extends ModuleAdminController $objOrderReturn->id, $booking['id'] ); + + $roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($booking['id_product']); + $booking['room_type_info'] = $roomTypeInfo; $booking = array_merge($booking, array_shift($bookingCharges)); } } diff --git a/modules/hotelreservationsystem/define.php b/modules/hotelreservationsystem/define.php index aa436407f..c5e7b3df7 100644 --- a/modules/hotelreservationsystem/define.php +++ b/modules/hotelreservationsystem/define.php @@ -49,7 +49,7 @@ require_once 'classes/HotelRoomDisableDates.php'; require_once 'classes/HotelBranchRefundRules.php'; require_once 'classes/HotelBedType.php'; require_once 'classes/HotelRoomTypeBedType.php'; -require_once 'classes/HotelRoomTypeSellingType.php'; +require_once 'classes/HotelPropertyType.php'; // linked products require_once 'classes/RoomTypeServiceProduct.php'; diff --git a/modules/hotelreservationsystem/hotelreservationsystem.php b/modules/hotelreservationsystem/hotelreservationsystem.php index c361346b1..bf808b6a2 100644 --- a/modules/hotelreservationsystem/hotelreservationsystem.php +++ b/modules/hotelreservationsystem/hotelreservationsystem.php @@ -555,7 +555,7 @@ class HotelReservationSystem extends Module $this->installTab('AdminAddHotel', 'Manage Hotel', 'AdminHotelReservationSystemManagement'); $this->installTab('AdminHotelRoomsBooking', 'Book Now', 'AdminHotelReservationSystemManagement'); $this->installTab('AdminHotelFeatures', 'Manage Hotel Features', 'AdminHotelReservationSystemManagement'); - $this->installTab('AdminHotelRoomTypeSellingTypes', 'Property & Room Types', 'AdminHotelReservationSystemManagement'); + $this->installTab('AdminHotelPropertyTypes', 'Manage Property Types', 'AdminHotelReservationSystemManagement'); $this->installTab('AdminOrderRefundRules', 'Manage Order Refund Rules', 'AdminHotelReservationSystemManagement'); $this->installTab('AdminOrderRefundRequests', 'Manage Order Refund Requests', 'AdminHotelReservationSystemManagement'); @@ -611,7 +611,6 @@ class HotelReservationSystem extends Module || !$objHtlHelper->insertDefaultHotelEntries() || !$objHtlHelper->createHotelRoomDefaultFeatures() || !$objHtlHelper->createHotelDefaultBedTypes() - || !$objHtlHelper->createHotelDefaultRoomTypeSellingTypes() || !$objHtlHelper->insertHotelCommonFeatures() ) { return false; 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 2081956a3..5b865a0be 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 @@ -123,23 +123,25 @@
    -
    - -
    - + {if isset($hotel_property_types_info) && $hotel_property_types_info} +
    + +
    + +
    -
    + {/if}
    {l s='Rooms Booking Detail'}{l s='Stays Booking Detail'}
    {l s="Room Image"}{l s="Room Description"}{l s="Room Capcity"}{l s="Stay Image"}{l s="Stay Description"}{l s="Stay Capcity"} {l s="Unit Price"}{l s="Rooms Qty"}{l s="Stays Qty"} {l s="Check-in Date"} {l s="Check-out Date"} {l s="Total"}
    - {l s="Total Rooms Cost"} + {l s="Total Stays Cost"} {$list['room_price_tax_excl']} diff --git a/mails/en/order_conf_total_info_text.tpl b/mails/en/order_conf_total_info_text.tpl index ca048b8d0..f8917505b 100644 --- a/mails/en/order_conf_total_info_text.tpl +++ b/mails/en/order_conf_total_info_text.tpl @@ -1,5 +1,5 @@ {if isset($list['has_room_bookings']) && $list['has_room_bookings']} -{l s="Total Rooms Cost"} {$list['room_price_tax_excl']} +{l s="Total Stays Cost"} {$list['room_price_tax_excl']} {/if} {if isset($list['has_standalone_products']) && $list['has_standalone_products']} diff --git a/mails/en/order_hotel_detail.tpl b/mails/en/order_hotel_detail.tpl index 710025127..97c314cca 100644 --- a/mails/en/order_hotel_detail.tpl +++ b/mails/en/order_hotel_detail.tpl @@ -7,7 +7,7 @@ {l s='Hotel Name'}: {$list['hotel_name']}
    {l s='Hotel Phone'}: {$list['hotel_phone']}
    {l s='Hotel Email'}: {$list['hotel_email']}
    - {l s='Total Rooms'}: {$list['num_rooms']}
    + {l s='Total Stays'}: {$list['num_rooms']}

    {/if} \ No newline at end of file diff --git a/mails/en/order_hotel_detail_text.tpl b/mails/en/order_hotel_detail_text.tpl index e80d3bb4b..b44866e10 100644 --- a/mails/en/order_hotel_detail_text.tpl +++ b/mails/en/order_hotel_detail_text.tpl @@ -4,6 +4,6 @@ {l s='Hotel Name'}: {$list['hotel_name']} {l s='Hotel Phone'}: {$list['hotel_phone']} {l s='Hotel Email'}: {$list['hotel_email']} -{l s='Total Rooms'}: {$list['num_rooms']} +{l s='Total Stays'}: {$list['num_rooms']} {/if} \ No newline at end of file diff --git a/mails/en/order_refund_completed_admin.txt b/mails/en/order_refund_completed_admin.txt index 5ab3942c1..13e4ceedd 100755 --- a/mails/en/order_refund_completed_admin.txt +++ b/mails/en/order_refund_completed_admin.txt @@ -12,8 +12,8 @@ Transaction Id: {id_transaction} Booking details -Room Num -Room Type +Stay Num +Stay Type Hotel Duration {refundBookingHtml} diff --git a/mails/en/order_refund_completed_customer.txt b/mails/en/order_refund_completed_customer.txt index c063d7c0e..ee20a0bf9 100755 --- a/mails/en/order_refund_completed_customer.txt +++ b/mails/en/order_refund_completed_customer.txt @@ -12,9 +12,9 @@ Payment Mode: {payment_mode} Transaction Id: {id_transaction} Booking details -Room Type +Stay Type Hotel -Num. Rooms +Num. Stays Duration {refundBookingHtml} diff --git a/mails/en/order_refund_denied_admin.txt b/mails/en/order_refund_denied_admin.txt index 722b43415..b4bf0dc27 100755 --- a/mails/en/order_refund_denied_admin.txt +++ b/mails/en/order_refund_denied_admin.txt @@ -10,8 +10,8 @@ Refund Status: {status_name} Booking details -Room Num -Room Type +Stay Num +Stay Type Hotel Duration diff --git a/mails/en/order_refund_denied_customer.txt b/mails/en/order_refund_denied_customer.txt index cbd4410fe..b6c9b4318 100755 --- a/mails/en/order_refund_denied_customer.txt +++ b/mails/en/order_refund_denied_customer.txt @@ -11,9 +11,9 @@ Refund Status: {status_name} Booking details -Room Type +Stay Type Hotel -Num. Rooms +Num. Stays Duration {refundBookingHtml} diff --git a/mails/en/order_refund_pending_admin.txt b/mails/en/order_refund_pending_admin.txt index f520f617c..24b12dfe0 100755 --- a/mails/en/order_refund_pending_admin.txt +++ b/mails/en/order_refund_pending_admin.txt @@ -11,8 +11,8 @@ Cancelation Reason: {cancelation_reason} Requested Booking Cancellations -Room Num -Room Type +Stay Num +Stay Type Hotel Duration diff --git a/mails/en/order_refund_pending_customer.txt b/mails/en/order_refund_pending_customer.txt index 012c6e64e..fc93e00c1 100755 --- a/mails/en/order_refund_pending_customer.txt +++ b/mails/en/order_refund_pending_customer.txt @@ -10,9 +10,9 @@ Refund Status: {status_name} Booking details -Room Type +Stay Type Hotel -Num. Rooms +Num. Stays Duration {refundBookingHtml} diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index cd98e1d01..568aaf46b 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -136,6 +136,7 @@ var ajaxCart = { var dateFrom = $(this).attr('cat_rm_check_in'); var dateTo = $(this).attr('cat_rm_check_out'); + occupancy_required_for_booking = $(this).closest('.booking_room_fields').data('occupancy-required'); var occupancy = getBookingOccupancyDetails($(this).closest('.booking_room_fields'), true); /* By Webkul * Note : In our case minimalQuantity is taken from Qty. field @@ -378,9 +379,6 @@ var ajaxCart = { if ($('.cart_block_list').hasClass('collapsed')) this.expand(); - var isOccupancyBooking = getOccupancyRequiredForBooking($(callerElement).closest('.booking_room_fields')); - ajaxCart.lastOccupancyRequiredForBooking = isOccupancyBooking; - // create from data in order to manage adding different type of products var req = new FormData(); req.append('controller', 'cart'); @@ -401,7 +399,7 @@ var ajaxCart = { if (typeof dateTo != 'undefined') req.append('dateTo', dateTo); - if (isOccupancyBooking) { + if (occupancy_required_for_booking) { req.append('occupancy', JSON.stringify(occupancy)); } else { req.append('qty', ((occupancy && occupancy != null) ? occupancy : '1')); @@ -1206,28 +1204,22 @@ var ajaxCart = { $('#layer_cart_product_quantity').parent().show(); var product_quantity_text = ''; if(parseInt(product.booking_product)) { - var roomLabel = product.attribute_type || (typeof room_txt !== 'undefined' ? room_txt : 'Room'); - var roomsLabel = product.attribute_types || (typeof rooms_txt !== 'undefined' ? rooms_txt : roomLabel); - applyRoomLabelsToLayer(roomLabel, roomsLabel); let rooms = 0; let adults = 0; let children = 0; - var isOccupancyBooking = (typeof ajaxCart.lastOccupancyRequiredForBooking !== 'undefined') ? ajaxCart.lastOccupancyRequiredForBooking : occupancy_required_for_booking; - var $roomLabel = $('#layer_cart .layer_cart_room_txt .layer_cart_attribute_type'); - if ($roomLabel.length) { - var $labelContainer = $roomLabel.closest('.layer_cart_room_txt'); - var label = isOccupancyBooking ? $labelContainer.data('label-occupancy') : $labelContainer.data('label-quantity'); - if (label) { - $roomLabel.text(label); - } + if (typeof product.layer_cart_attribute_label !== 'undefined') { + $('#layer_cart .layer_cart_attribute_type').text(product.layer_cart_attribute_label); } - if (isOccupancyBooking) { + if(typeof product.layer_cart_room_success_msg !== 'undefined'){ + $('#layer_cart .layer_cart_room_success_msg').text(product.layer_cart_room_success_msg); + } + if (occupancy_required_for_booking) { $.each(product.occupancy, function(index, val) { rooms++; adults += parseInt(val.adults); children += parseInt(val.children); }); - product_quantity_text = getRoomTypeGuestOccupancyFormated(adults, children, rooms); + product_quantity_text = getRoomTypeGuestOccupancyFormated(adults, children, rooms,product.room_info.room_type_selling_object, product.room_info.multiple_room_type_selling_object); } else { product_quantity_text = product.occupancy; } @@ -1469,8 +1461,7 @@ function getBookingOccupancyDetails(bookingform, booking_product) { let occupancy; if (booking_product) { - var isOccupancyBooking = getOccupancyRequiredForBooking(bookingform); - if (isOccupancyBooking) { + if (occupancy_required_for_booking) { $('.booking_guest_occupancy_conatiner .dropdown').removeClass('open'); let selected_occupancy = $(bookingform).find(".occupancy_info_block.selected") if (selected_occupancy.length) { @@ -1513,29 +1504,3 @@ function getBookingOccupancyDetails(bookingform, booking_product) return occupancy; } -function applyRoomLabelsToLayer(roomLabel, roomsLabel) -{ - var $layer = $('#layer_cart'); - $layer.find('[data-room-msg-template]').each(function() { - var template = $(this).attr('data-room-msg-template'); - if (!template) { - return; - } - var text = template.replace(/__ROOMS__/g, roomsLabel).replace(/__ROOM__/g, roomLabel); - $(this).text(text); - }); -} - -function getOccupancyRequiredForBooking(bookingform) { - var value = occupancy_required_for_booking; - var $form = bookingform ? $(bookingform) : $('#booking-form').closest('.booking_room_fields'); - - if ($form.length) { - var dataVal = $form.data('occupancy-required'); - if (dataVal !== undefined) { - value = parseInt(dataVal) === 1; - } - } - - return value; -} diff --git a/modules/blockcart/blockcart.php b/modules/blockcart/blockcart.php index 7cf3c7325..e2e975b2e 100644 --- a/modules/blockcart/blockcart.php +++ b/modules/blockcart/blockcart.php @@ -305,18 +305,20 @@ class Blockcart extends Module 'cart_default' ); $addedProduct['booking_product'] = $objProduct->booking_product; - $roomLabel = $objRoomType->getRoomTypeInfoByIdProduct($objProduct->id, $this->context->language->id); - if ($roomLabel) { - $addedProduct['attribute_type'] = $roomLabel['room_type_selling_type_name']; - $addedProduct['attribute_types'] = $roomLabel['room_type_selling_type_name'].'s'; - } + $room_info = $objRoomType->getRoomTypeInfoByIdProduct($objProduct->id, $this->context->language->id); + $addedProduct['room_info'] = $room_info; if ($objProduct->booking_product) { + $addedProduct['occupancy_required_for_booking'] = (bool) Product::isOccupancyBookingMethod($objProduct->id); + $addedProduct['layer_cart_attribute_label'] = $addedProduct['occupancy_required_for_booking'] + ? sprintf($this->l('%s occupancy'), $room_info['room_type_selling_object']) + : sprintf($this->l('%s quantity added'), $room_info['multiple_room_type_selling_object']); $price = $addedProduct['price'] = HotelRoomTypeFeaturePricing::getRoomTypeTotalPrice( $objProduct->id, $addedProduct['date_from'], $addedProduct['date_to'], $addedProduct['occupancy'] ); + $addedProduct['layer_cart_room_success_msg'] = sprintf($this->l('%s successfully added to your cart'), $room_info['room_type_selling_object']); if ($priceDisplayMethod == PS_TAX_EXC) { $addedProduct['price'] = Tools::displayPrice($price['total_price_tax_excl']); } else { @@ -473,6 +475,8 @@ class Blockcart extends Module $res = $this->getContentVars($params); if (is_array($res) && ($id_product = Tools::getValue('id_product')) && Configuration::get('PS_BLOCK_CART_SHOW_CROSSSELLING')) { + $isOccupancyType = Product::isOccupancyBookingMethod($id_product); + $this->context->smarty->assign('occupancy_required_for_booking', $isOccupancyType); $this->smarty->assign('orderProducts', OrderDetail::getCrossSells($id_product, $this->context->language->id, Configuration::get('PS_BLOCK_CART_XSELL_LIMIT'))); $res['crossSelling'] = $this->display(__FILE__, 'crossselling.tpl'); } diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index 534e111ac..5e90552ea 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -33,8 +33,8 @@ {$total_products_in_cart} - - + + {if $cart_qties > 0} {if $priceDisplay == 1} @@ -196,7 +196,7 @@ {block name='blockcart_layer_cart_left_heading'}

    - {l s='Room successfully added to your cart' mod='blockcart'} + {l s='Stay successfully added to your cart' mod='blockcart'}

    {l s='Product successfully added to your cart' mod='blockcart'} @@ -223,14 +223,12 @@
    - - {if isset($occupancy_required_for_booking) && $occupancy_required_for_booking}{l s='Room occupancy' mod='blockcart'}{else}{l s='Rooms quantity added' mod='blockcart'}{/if}  -  - + {if isset($occupancy_required_for_booking) && $occupancy_required_for_booking}{l s='Stay occupancy' mod='blockcart'}{else}{l s='Stays quantity added' mod='blockcart'}{/if}  -  {l s='Quantity' mod='blockcart'}  - 
    - {l s='Room type cost' mod='blockcart'}  -  + {l s='Stay type cost' mod='blockcart'}  -  {l s='Total' mod='blockcart'}  - 
    @@ -434,7 +432,7 @@ {addJsDefL name=qty_txt}{l s='Qty' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=duration_txt}{l s='Duration' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=capacity_txt}{l s='Capacity' mod='blockcart' js=1}{/addJsDefL} - {addJsDefL name=remove_rm_title}{l s='Remove this room from my cart' mod='blockcart' js=1}{/addJsDefL} + {addJsDefL name=remove_rm_title}{l s='Remove this stay from my cart' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=no_internet_txt}{l s='No internet. Please check your internet connection.' mod='blockcart' js=1}{/addJsDefL} {addJsDef rm_avail_process_lnk = $link->getModuleLink('blockcart', 'checkroomavailabilityajaxprocess')} diff --git a/modules/blockcart/cartrow.tpl b/modules/blockcart/cartrow.tpl index e909aaacf..47d370f90 100644 --- a/modules/blockcart/cartrow.tpl +++ b/modules/blockcart/cartrow.tpl @@ -89,7 +89,7 @@

    {$data_v['num_rm']} {convertPrice price=($data_v['amount'] + $data_v['demand_price'])}
    - - + + @@ -70,7 +70,7 @@
    {l s='Room No.' mod='hotelreservationsystem'}{l s='Room Type' mod='hotelreservationsystem'}{l s='Stay No.' mod='hotelreservationsystem'}{l s='Stay Type' mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Amount (Tax excl.)' mod='hotelreservationsystem'}
    - + 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 b8cc6ceee..a236ed232 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 @@ -16,10 +16,10 @@
    @@ -27,7 +27,7 @@
    {l s='Rooms Amount (Tax excl.):' mod='hotelreservationsystem'}{l s='Stays Amount (Tax excl.):' mod='hotelreservationsystem'} {if isset($cart_rooms_amount)}{convertPrice price=$cart_rooms_amount}{else}{convertPrice price=0}{/if}
    - + @@ -59,13 +59,13 @@ - - + {if $book_v.occupancy_required_for_booking} @@ -148,7 +148,7 @@ -
    {l s='%s No.' sprintf=$book_v['room_type_selling_type_name'] mod='hotelreservationsystem'}{l s='%s No.' sprintf=$book_v['room_type_selling_object'] mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Message' mod='hotelreservationsystem'} {l s='Allotment Type' mod='hotelreservationsystem'}
    {l s='Duration' mod='hotelreservationsystem'}{l s='%s No.' sprintf=$book_v['room_type_selling_type_name'] mod='hotelreservationsystem'}{l s='%s No.' sprintf=$book_v['room_type_selling_object'] mod='hotelreservationsystem'} {l s='Allotment Type' mod='hotelreservationsystem'}{l s='Guests' mod='hotelreservationsystem'}
    - + @@ -246,7 +246,7 @@
    {l s='%s No.' sprintf=$book_v['room_type_selling_type_name'] mod='hotelreservationsystem'}{l s='%s No.' sprintf=$book_v['room_type_selling_object'] mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Order' mod='hotelreservationsystem'} {l s='Message' mod='hotelreservationsystem'}
    - + diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/search-stats.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/search-stats.tpl index 11690bc24..f929dd4ff 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/search-stats.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/search-stats.tpl @@ -1,12 +1,12 @@
    -
    +
    -

    {l s='Total Rooms' mod='hotelreservationsystem'}

    +

    {l s='Total Stays' mod='hotelreservationsystem'}

    {if isset($booking_data) && $booking_data}{$booking_data['stats']['total_rooms']|escape:'htmlall':'UTF-8'}{else}00{/if}

    @@ -15,7 +15,7 @@
    -

    {l s='Available Rooms' mod='hotelreservationsystem'}

    +

    {l s='Available Stays' mod='hotelreservationsystem'}

    {if isset($booking_data) && $booking_data}{$booking_data['stats']['num_avail']|escape:'htmlall':'UTF-8'}{else}00{/if}

    @@ -35,7 +35,7 @@
    -

    {l s='Booked Rooms' mod='hotelreservationsystem'}

    +

    {l s='Booked Stays' mod='hotelreservationsystem'}

    {if isset($booking_data) && $booking_data}{$booking_data['stats']['num_booked']|escape:'htmlall':'UTF-8'}{else}00{/if}

    @@ -47,7 +47,7 @@
    -

    {l s='Unavailable Rooms' mod='hotelreservationsystem'}

    +

    {l s='Unavailable Stays' mod='hotelreservationsystem'}

    {if isset($booking_data) && $booking_data}{$booking_data['stats']['num_unavail']|escape:'htmlall':'UTF-8'}{else}00{/if}

    @@ -56,7 +56,7 @@
    -

    {l s='In-Cart Rooms' mod='hotelreservationsystem'}

    +

    {l s='In-Cart Stays' mod='hotelreservationsystem'}

    {if isset($booking_data) && $booking_data}{$booking_data['stats']['num_cart']|escape:'htmlall':'UTF-8'}{else}00{/if}

    @@ -67,7 +67,7 @@
    - {l s='Available Rooms' mod='hotelreservationsystem'} + {l s='Available Stays' mod='hotelreservationsystem'}
    @@ -75,11 +75,11 @@
    - {l s='Unavailable Rooms' mod='hotelreservationsystem'} + {l s='Unavailable Stays' mod='hotelreservationsystem'}
    - {l s='Booked Rooms' mod='hotelreservationsystem'} + {l s='Booked Stays' mod='hotelreservationsystem'}
    \ No newline at end of file diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl index 6dfd81da5..5d8cc6a22 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/view.tpl @@ -231,7 +231,7 @@
    -
    {l s='Total Rooms' mod='hotelreservationsystem'}
    +
    {l s='Total Stays' mod='hotelreservationsystem'}
    @@ -239,15 +239,15 @@
    -
    {l s='Booked Rooms' mod='hotelreservationsystem'}
    +
    {l s='Booked Stays' mod='hotelreservationsystem'}
    -
    {l s='Unavailable Rooms' mod='hotelreservationsystem'}
    +
    {l s='Unavailable Stays' mod='hotelreservationsystem'}
    -
    {l s='Partially Available Rooms' mod='hotelreservationsystem'}
    +
    {l s='Partially Available Stays' mod='hotelreservationsystem'}
    diff --git a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl index 6a2ee54fa..c5069eb3e 100644 --- a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl @@ -84,7 +84,7 @@ {if isset($refundReqBookings) && $refundReqBookings}
    - {l s='Total rooms' mod='hotelreservationsystem'} : + {l s='Total stays' mod='hotelreservationsystem'} :
    {$refundReqBookings|count} @@ -142,14 +142,14 @@ {if !$isRefundCompleted}
    {/if} - - + + {if !$isRefundCompleted} - + {/if} {if $hasOrderDiscountOrPayment || $isRefundCompleted} @@ -176,7 +176,7 @@ - + '.(!$this->id_hotel ? '' : '').' @@ -415,7 +415,7 @@ class StatsCheckUp extends Module $hotelsHtml .= ' - + '.(!$this->id_hotel ? '' : '').' diff --git a/modules/statsproduct/statsproduct.php b/modules/statsproduct/statsproduct.php index 4307437f9..1b601a5c8 100644 --- a/modules/statsproduct/statsproduct.php +++ b/modules/statsproduct/statsproduct.php @@ -308,7 +308,7 @@ class StatsProduct extends ModuleGraph '.$this->l('Room type name').' diff --git a/pdf/invoice.extra-demands-tab.tpl b/pdf/invoice.extra-demands-tab.tpl index e7edf7fa4..d89bfdcfb 100644 --- a/pdf/invoice.extra-demands-tab.tpl +++ b/pdf/invoice.extra-demands-tab.tpl @@ -27,10 +27,10 @@
    {l s='%s No.' sprintf=$book_v['room_type_selling_type_name'] mod='hotelreservationsystem'}{l s='%s No.' sprintf=$book_v['room_type_selling_object'] mod='hotelreservationsystem'} {l s='Status' mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Message' mod='hotelreservationsystem'}{l s='Room num' mod='hotelreservationsystem'}{l s='Room type' mod='hotelreservationsystem'}{l s='Stay num' mod='hotelreservationsystem'}{l s='Stay type' mod='hotelreservationsystem'} {l s='Property' mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Total cost (tax incl.)' mod='hotelreservationsystem'} {l s='Total paid amount (tax incl.)' mod='hotelreservationsystem'}{l s='Rooms cancelation charges' mod='hotelreservationsystem'}{l s='Stays cancelation charges' mod='hotelreservationsystem'}{l s='Refund amount' mod='hotelreservationsystem'} '.$this->l('Images').' '.$this->l('Orders').''.$this->l('Total rooms').''.$this->l('Total stays').' '.$this->l('Overall status').''.$this->l('Action').'
    '.$this->l('Images').' '.$this->l('Orders').''.$this->l('Total rooms').''.$this->l('Total stays').' '.$this->l('Overall status').'
    - '.$this->l('Total rooms').' + '.$this->l('Total stays').' '.$this->l('Action').' @@ -400,7 +400,7 @@ class StatsProduct extends ModuleGraph case 42: $this->_titles['main'][0] = $this->l('ID'); $this->_titles['main'][1] = $this->l('Room type name'); - $this->_titles['main'][2] = $this->l('Total Rooms'); + $this->_titles['main'][2] = $this->l('Total Stays'); break; } } diff --git a/modules/wkroomsearchblock/views/templates/hook/categoryPageSearch.tpl b/modules/wkroomsearchblock/views/templates/hook/categoryPageSearch.tpl index e0a1037a5..36f5f6ec9 100644 --- a/modules/wkroomsearchblock/views/templates/hook/categoryPageSearch.tpl +++ b/modules/wkroomsearchblock/views/templates/hook/categoryPageSearch.tpl @@ -24,7 +24,7 @@ {if isset($hotels_info) && count($hotels_info)}
    -

    {l s='Search Rooms' mod='wkroomsearchblock'}

    +

    {l s='Search Stays' mod='wkroomsearchblock'}


    {block name='search_form'} diff --git a/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl b/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl index 26f90c9e8..6be773d60 100644 --- a/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl +++ b/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl @@ -164,7 +164,7 @@ {/foreach} {else}
    -
    {l s='Room - 1' mod='wkroomsearchblock'}
    +
    {l s='Stay - 1' mod='wkroomsearchblock'}
    @@ -226,7 +226,7 @@
    - {l s='Add Room' mod='wkroomsearchblock'} + {l s='Add Stay' mod='wkroomsearchblock'} @@ -240,7 +240,7 @@ {block name='search_form_submit'}
    {/block} diff --git a/pdf/invoice.addresses-tab.tpl b/pdf/invoice.addresses-tab.tpl index df5e70de0..67de4a81f 100644 --- a/pdf/invoice.addresses-tab.tpl +++ b/pdf/invoice.addresses-tab.tpl @@ -33,7 +33,7 @@ -->
    {if !empty($hotel_address)} - {l s='Hotel Detail' pdf='true'}

    + {l s='%s Detail' sprintf=$property_type pdf='true'}

    {$hotel_address} {/if}
    - + - + @@ -45,7 +45,7 @@ {/if} - - - - - - - - - - - - - - - - - - - - - - - - - -
    {l s='Room Additional Facilities Detail' pdf='true'}{l s='Stay Additional Facilities Detail' pdf='true'}
    {l s='Room Type' pdf='true'}{l s='Stay Type' pdf='true'} {l s='Name' pdf='true'} {l s='Tax rate(s)' pdf='true'} {l s='Total' pdf='true'}
    {l s='(Tax excl.)' pdf='true'}
    {$roomDemand['room_type_name']}
    {dateFormat date=$roomDemand['date_from']} {l s='to' pdf='true'} {dateFormat date=$roomDemand['date_to']}
    - {l s='Room' pdf='true'} - {$roomCount} + {l s='Stay' pdf='true'} - {$roomCount}
    @@ -72,10 +72,10 @@ - + - + @@ -92,7 +92,7 @@ {/if} - - - - - - - - - - - - -
    {l s='Room Extra Services Detail' pdf='true'}{l s='Stay Extra Services Detail' pdf='true'}
    {l s='Room Type' pdf='true'}{l s='Stay Type' pdf='true'} {l s='Name' pdf='true'} {l s='Tax rate(s)' pdf='true'} {l s='Qty' pdf='true'} {$htlBookingServices['room_type_name']}
    {dateFormat date=$htlBookingServices['date_from']} {l s='to' pdf='true'} {dateFormat date=$htlBookingServices['date_to']}
    - {l s='Room' pdf='true'} - {$roomCount} + {l s='Stay' pdf='true'} - {$roomCount}
    diff --git a/pdf/invoice.product-tab.tpl b/pdf/invoice.product-tab.tpl index d31799c1f..8fb02e16e 100644 --- a/pdf/invoice.product-tab.tpl +++ b/pdf/invoice.product-tab.tpl @@ -27,20 +27,20 @@ - + {if $display_product_images} - + {/if} - + {* {if isset($layout.before_discount)} {/if} *} - + @@ -71,7 +71,7 @@ - - - - - - - - - - - - -
    {l s='Rooms Details' pdf='true'}{l s='Stays Details' pdf='true'}
    {l s='Room Image' pdf='true'}{l s='Stay Image' pdf='true'}{l s='Room Description' pdf='true'}{l s='Stay Description' pdf='true'} {l s='Tax Rate(s)' pdf='true'}{l s='Base price' pdf='true'}
    {l s='(Tax excl.)' pdf='true'}
    {l s='Unit Price' pdf='true'}
    {l s='(Tax excl.)' pdf='true'}
    {l s='Rooms' pdf='true'}{l s='Stays' pdf='true'} {l s='Check-in Date' pdf='true'} {l s='Check-out Date' pdf='true'} {l s='Total' pdf='true'}
    {l s='(Tax excl.)' pdf='true'}

    - {if $rm_v['adults'] <= 9}0{$rm_v['adults']}{else}{$rm_v['adults']}{/if} {if $rm_v['adults'] > 1}{l s='Adults'}{else}{l s='Adult'}{/if}{if $rm_v['children']}, {if $rm_v['children'] <= 9}0{$rm_v['children']}{else} {$rm_v['children']}{/if} {if $rm_v['children'] > 1}{l s='Children'}{else}{l s='Child'}{/if}{/if}
    {if $rm_v['num_rm'] <= 9}0{/if}{$rm_v['num_rm']} {if $rm_v['num_rm'] > 1}{l s='Rooms'}{else}{l s='Room'}{/if} + {if $rm_v['adults'] <= 9}0{$rm_v['adults']}{else}{$rm_v['adults']}{/if} {if $rm_v['adults'] > 1}{l s='Adults'}{else}{l s='Adult'}{/if}{if $rm_v['children']}, {if $rm_v['children'] <= 9}0{$rm_v['children']}{else} {$rm_v['children']}{/if} {if $rm_v['children'] > 1}{l s='Children'}{else}{l s='Child'}{/if}{/if}
    {if $rm_v['num_rm'] <= 9}0{/if}{$rm_v['num_rm']} {if $rm_v['num_rm'] > 1}{l s='Stays'}{else}{l s='Stay'}{/if}

    diff --git a/pdf/invoice.tax-tab.tpl b/pdf/invoice.tax-tab.tpl index 511d8fe54..87d391bd6 100644 --- a/pdf/invoice.tax-tab.tpl +++ b/pdf/invoice.tax-tab.tpl @@ -68,7 +68,7 @@ {if $label == 'additional_services_tax'} {l s='Services' pdf='true'} {elseif $label == 'room_tax'} - {l s='Rooms' pdf='true'} + {l s='Stays' pdf='true'} {elseif $label == 'extra_demands_tax'} {l s='Facilities' pdf='true'} {elseif $label == 'convenience_fee_tax'} diff --git a/pdf/invoice.total-tab.tpl b/pdf/invoice.total-tab.tpl index b0a42eac7..6ce211442 100644 --- a/pdf/invoice.total-tab.tpl +++ b/pdf/invoice.total-tab.tpl @@ -27,7 +27,7 @@ {if isset($footer.room_price_tax_excl) && $footer.room_price_tax_excl}
    - {l s='Total Rooms Cost (tax excl.)' pdf='true'} + {l s='Total Stays Cost (tax excl.)' pdf='true'} {displayPrice currency=$order->id_currency price=$footer.room_price_tax_excl} @@ -67,7 +67,7 @@ {* {if isset($footer.product_taxes) && $footer.product_taxes}
    - {l s='Rooms Tax' pdf='true'} + {l s='Stays Tax' pdf='true'} {displayPrice currency=$order->id_currency price=($footer.room_price_tax_incl - $footer.room_price_tax_excl)} diff --git a/pdf/order-slip.product-tab.tpl b/pdf/order-slip.product-tab.tpl index 6ba4979dc..fb0b3b445 100644 --- a/pdf/order-slip.product-tab.tpl +++ b/pdf/order-slip.product-tab.tpl @@ -27,13 +27,13 @@ - + - + - + diff --git a/themes/hotel-reservation-theme/$tpl_dir./shopping-cart.tpl b/themes/hotel-reservation-theme/$tpl_dir./shopping-cart.tpl new file mode 100644 index 000000000..e69de29bb diff --git a/themes/hotel-reservation-theme/_partials/booking-form.tpl b/themes/hotel-reservation-theme/_partials/booking-form.tpl index 23dd74bc6..896a21643 100644 --- a/themes/hotel-reservation-theme/_partials/booking-form.tpl +++ b/themes/hotel-reservation-theme/_partials/booking-form.tpl @@ -19,15 +19,9 @@ * @copyright Since 2010 Webkul * @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 *} -{if isset($room_type_info['room_type_selling_type_name']) && $room_type_info['room_type_selling_type_name']} - {assign var=attribute_types value=$room_type_info['room_type_selling_type_name']|cat:'s'} - {assign var=attribute_type value=$room_type_info['room_type_selling_type_name']} -{else} - {assign var=attribute_types value={l s='Rooms'}} - {assign var=attribute_type value={l s='Room'}} -{/if} +
    -
    +
    {block name='booking_form_content'} {block name='product_hidden_fields'} @@ -72,7 +66,7 @@ {include file="./occupancy_field.tpl"} {/block} {else} - + {block name='quantity_field'} {include file="./quantity_field.tpl"} {/block} @@ -85,7 +79,7 @@
    - +

    {convertPrice price=$rooms_price|floatval} + @@ -106,7 +100,7 @@

    {if isset($selected_service_product) && $selected_service_product}
    -

    {l s='Selected services'} {l s='(Per %s)' sprintf=$attribute_type}

    +

    {l s='Selected services'} {l s='(Per %s)' sprintf=$room_type_info['room_type_selling_object']}

    {foreach $selected_service_product as $product}
    @@ -127,7 +121,7 @@ {/if} {if isset($selected_demands) && $selected_demands}
    -

    {l s='Selected facilities'} {l s='(Per room)'}

    +

    {l s='Selected facilities'} {l s='(Per stay)'}

    {foreach $selected_demands as $product}
    @@ -149,7 +143,7 @@
    -
    {l s='Total price per %s' sprintf=$attribute_type}
    +
    {l s='Total price per %s' sprintf=$room_type_info['room_type_selling_object']}

    {displayPrice price=$demands_price_per_room}

    @@ -187,7 +181,7 @@ {$total_available_rooms|escape:'html':'UTF-8'} - {if $total_available_rooms > 1} {l s='%s left!' sprintf=$attribute_types} {else} {l s='%s left!' sprintf=$attribute_type} {/if} + {if $total_available_rooms > 1} {l s='%s left!' sprintf=$room_type_info['multiple_room_type_selling_object']} {else} {l s='%s left!' sprintf=$room_type_info['room_type_selling_object']} {/if}
    {/if} {/block} @@ -218,7 +212,7 @@ {/block} {else}
    - {l s='All %s sold out!' sprintf=$attribute_types} + {l s='All %s sold out!' sprintf=$room_type_info['multiple_room_type_selling_object']}
    {/if} {/if} @@ -346,7 +340,7 @@ {/if} {* {if $order_date_restrict}
    - {l s='You can\'t book rooms after %s.' sprintf=[{dateFormat date=$max_order_date full=0}]} + {l s='You can\'t book stays after %s.' sprintf=[{dateFormat date=$max_order_date full=0}]}
    {/if} *} diff --git a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl index f74c3b628..4af332b9e 100644 --- a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl +++ b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl @@ -39,7 +39,7 @@ {if isset($selectedRoomDemands) && $selectedRoomDemands}
    -

    {l s='Add below facilities to the rooms for better hotel experience'}

    +

    {l s='Add below facilities to the %s for better hotel experience' sprintf=$room_type_info['room_type_selling_object']}

    {assign var=roomCount value=1} {foreach $selectedRoomDemands as $key => $roomDemand} @@ -47,7 +47,7 @@
    @@ -101,7 +101,7 @@ {if isset($roomTypeServiceProducts) && $roomTypeServiceProducts}
    -

    {l s='Add below services to the rooms for better hotel experience'}

    +

    {l s='Add below services to the %s for better hotel experience' sprintf=$room_type_info['room_type_selling_object']}

    {assign var=roomCount value=1} {foreach $cartRooms as $key => $cartRoom} @@ -109,7 +109,7 @@
    diff --git a/themes/hotel-reservation-theme/_partials/occupancy_field.tpl b/themes/hotel-reservation-theme/_partials/occupancy_field.tpl index 004f64a96..dd77bde6f 100644 --- a/themes/hotel-reservation-theme/_partials/occupancy_field.tpl +++ b/themes/hotel-reservation-theme/_partials/occupancy_field.tpl @@ -20,20 +20,12 @@ * @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 *} -{if isset($room_type_info['room_type_selling_type_name']) && $room_type_info['room_type_selling_type_name']} - {assign var=attribute_type value=$room_type_info['room_type_selling_type_name']} - {assign var=attribute_types value=$room_type_info['room_type_selling_type_name']|cat:'s'} -{else} - {assign var=attribute_type value={l s='Room'}} - {assign var=attribute_types value={l s='Rooms'}} -{/if} -
    - + {/foreach} diff --git a/themes/hotel-reservation-theme/order-confirmation.tpl b/themes/hotel-reservation-theme/order-confirmation.tpl index 9ead821bb..89da2e402 100644 --- a/themes/hotel-reservation-theme/order-confirmation.tpl +++ b/themes/hotel-reservation-theme/order-confirmation.tpl @@ -64,7 +64,7 @@ {if $any_back_order} {if $shw_bo_msg}
    -

    *{l s='Some of your rooms are on back order. Please read the following message for rooms with status on backorder'}

    +

    *{l s='Some of your stays are on back order. Please read the following message for stays with status on backorder'}

    -  {$back_ord_msg}

    @@ -76,7 +76,7 @@
    {if isset($cart_htl_data)}
    -
    {l s='Room Details'}
    +
    {l s='Stay Details'}
    {foreach from=$cart_htl_data key=data_k item=data_v} {foreach from=$data_v['date_diff'] key=rm_k item=rm_v} @@ -100,13 +100,6 @@
    {assign var="is_full_date" value=($show_full_date && ($rm_v['data_form']|date_format:'%D' == $rm_v['data_to']|date_format:'%D'))} - {if isset($data_v['room_type_selling_type_name']) && $data_v['room_type_selling_type_name']} - {assign var=attribute_type value=$data_v['room_type_selling_type_name']} - {assign var=attribute_types value=$data_v['room_type_selling_type_name']|cat:'s'} - {else} - {assign var=attribute_type value={l s='Room'}} - {assign var=attribute_types value={l s='Rooms'}} - {/if}
    {l s='Check-in'}
    @@ -124,7 +117,7 @@
    -
    {if $rm_v.num_rm > 1}{$attribute_types|escape:'html':'UTF-8'}{else}{$attribute_type|escape:'html':'UTF-8'}{/if}
    +
    {if $rm_v.num_rm > 1}{$data_v['multiple_room_type_selling_object']|escape:'html':'UTF-8'}{else}{$data_v['room_type_selling_object']|escape:'html':'UTF-8'}{/if}
    {$rm_v.num_rm|string_format:'%02d'}
    @@ -173,7 +166,7 @@
    -

    {l s='Room cost'} :

    +

    {l s='%s cost' sprintf=$data_v['multiple_room_type_selling_object']} :

    diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl index c6f5c2351..2e2489853 100644 --- a/themes/hotel-reservation-theme/order-detail.tpl +++ b/themes/hotel-reservation-theme/order-detail.tpl @@ -78,7 +78,7 @@ {if isset($obj_hotel_branch_information) && $obj_hotel_branch_information}

    - {l s='%s Details' sprintf=$property_name} + {l s='%s Details' sprintf=[$property_name|default:'Hotel']}
    @@ -102,7 +102,7 @@
    -
    {l s='%s Name' sprintf=$property_name}
    +
    {l s='%s Name' sprintf=[$property_name|default:'Hotel']}
    {$obj_hotel_branch_information->hotel_name}
    {l s='Phone Number'}
    @@ -176,7 +176,7 @@ {if isset($obj_hotel_branch_information)} @@ -1064,7 +1057,7 @@
    {if isset($hasRoomRefunds) && $hasRoomRefunds} - + {/if} {if isset($hasProductRefunds) && $hasProductRefunds} diff --git a/themes/hotel-reservation-theme/order-opc.tpl b/themes/hotel-reservation-theme/order-opc.tpl index 81115a208..8ccbfd473 100644 --- a/themes/hotel-reservation-theme/order-opc.tpl +++ b/themes/hotel-reservation-theme/order-opc.tpl @@ -62,7 +62,7 @@
    {block name='order_opc_rooms_summary_heading'}
    - {l s='Rooms & Price Summary'} + {l s='Stays & Price Summary'}
    {/block} @@ -340,7 +340,7 @@ {include file="$tpl_dir./errors.tpl"} {/block} -

    {l s='You have not added any rooms or products to your cart yet.'}

    +

    {l s='You have not added any stays or products to your cart yet.'}

    {/if} {block name='order_opc_js_vars'} {strip} diff --git a/themes/hotel-reservation-theme/order-return.tpl b/themes/hotel-reservation-theme/order-return.tpl index 6b14106e1..382a94dee 100644 --- a/themes/hotel-reservation-theme/order-return.tpl +++ b/themes/hotel-reservation-theme/order-return.tpl @@ -54,16 +54,16 @@ {block name='order_return_detail'} {if $refundReqBookings} {if isset($refundReqProducts) && $refundReqProducts} -

    {l s='Rooms refund requests'}

    +

    {l s='Stays refund requests'}

    {/if}
    {l s='Room Bookings Detail' pdf='true'}{l s='Stay Bookings Detail' pdf='true'}
    {l s='Room Type / Reference' pdf='true'}{l s='Stay Type / Reference' pdf='true'} {l s='Hotel' pdf='true'} {l s='Duration' pdf='true'}{l s='Num rooms' pdf='true'}{l s='Num stays' pdf='true'} {l s='Total Price' pdf='true'}
    {if $tax_excluded_display}{l s='(Tax Excl.)' pdf='true'}{else}{l s='(Tax Incl.)' pdf='true'}{/if}
    {$data_v['num_rm']} {convertPrice price=($data_v['amount'] + $data_v['demand_price'])}
    {l s='Order'}{l s='Total rooms'}{l s='Total stays'}{l s='Total products'}
    - - + + - + {if $isRefundCompleted} @@ -72,7 +72,7 @@ {foreach from=$refundReqBookings item=$booking name=refundRequest} - + {assign var="is_full_date" value=($show_full_date && ($booking['date_from']|date_format:'%D' == $booking['date_to']|date_format:'%D'))} diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index d7d9f8dc6..2afc79a4e 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -49,7 +49,7 @@ {/if} --> {if isset($adminActionDisplay) && $adminActionDisplay}
    -

    {l s='This room type is not visible to your customers.'} +

    {l s='This stay type is not visible to your customers.'} {l s='Publish'} @@ -205,18 +205,13 @@ {/block} {/if}

    - {if isset($room_type_info['room_type_selling_type_name']) && $room_type_info['room_type_selling_type_name']} - {assign var=attribute_type value=$room_type_info['room_type_selling_type_name']} - {else} - {assign var=attribute_type value={l s='Room'}} - {/if}
    {block name='product_tabs'}
    {l s='Rooms'}{l s='Room type'}{l s='Stays'}{l s='Stay type'} {l s='Property Name'} {l s='Duration'}{l s='Total rooms price (tax incl.)'}{l s='Total stays price (tax incl.)'} {l s='Extra services price (tax incl.)'}{l s='Refund amount'}
    {l s='Room'} - {$smarty.foreach.refundRequest.iteration|string_format:'%02d'}{l s='Stay'} - {$smarty.foreach.refundRequest.iteration|string_format:'%02d'} {$booking['room_type_name']|escape:'htmlall':'UTF-8'} {$booking['hotel_name']|escape:'htmlall':'UTF-8'}
    - {l s='Stay Type selection'} + {l s='Room Type selection'} diff --git a/admin/themes/default/template/controllers/cart_rules/product_rule.tpl b/admin/themes/default/template/controllers/cart_rules/product_rule.tpl index 3e0214739..10afca5a0 100644 --- a/admin/themes/default/template/controllers/cart_rules/product_rule.tpl +++ b/admin/themes/default/template/controllers/cart_rules/product_rule.tpl @@ -3,7 +3,7 @@ {* Everything is on a single line in order to avoid a empty space between the [ ] and the word *} - [{if $product_rule_type == 'products'}{l s='Stay types:'}{elseif $product_rule_type == 'categories'}{l s='Categories:'}{elseif $product_rule_type == 'manufacturers'}{l s='Manufacturers:'}{elseif $product_rule_type == 'suppliers'}{l s='Suppliers'}{elseif $product_rule_type == 'attributes'}{l s='Attributes'}{/if}] + [{if $product_rule_type == 'products'}{l s='Room types:'}{elseif $product_rule_type == 'categories'}{l s='Categories:'}{elseif $product_rule_type == 'manufacturers'}{l s='Manufacturers:'}{elseif $product_rule_type == 'suppliers'}{l s='Suppliers'}{elseif $product_rule_type == 'attributes'}{l s='Attributes'}{/if}]
    diff --git a/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl b/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl index 6977cff00..fded1812c 100644 --- a/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl +++ b/admin/themes/default/template/controllers/cart_rules/product_rule_group.tpl @@ -14,7 +14,7 @@
    - +
    @@ -26,7 +26,7 @@
    {if isset($product_rules) && $product_rules|@count} {foreach from=$product_rules item='product_rule'} diff --git a/admin/themes/default/template/controllers/carts/helpers/view/view.tpl b/admin/themes/default/template/controllers/carts/helpers/view/view.tpl index 381e81bec..7a09fc693 100644 --- a/admin/themes/default/template/controllers/carts/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/carts/helpers/view/view.tpl @@ -81,7 +81,7 @@ - + diff --git a/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl b/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl index 32d0bc9a0..d11710c85 100644 --- a/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl +++ b/admin/themes/default/template/controllers/customer_threads/helpers/view/message.tpl @@ -55,7 +55,7 @@   - {dateFormat date=$message.date_add full=0} - {$message.date_add|substr:11:5} {if $message.private}{l s='Private'}{/if} {if isset($message.file_name)}   {l s="Attachment"}{/if} - {if isset($message.product_name)}   {if isset($message.booking_product) && $message.booking_product}{l s="Stay type:"}{else}{l s="Product:"}{/if} {$message.product_name|escape:'html':'UTF-8'} {/if} + {if isset($message.product_name)}   {if isset($message.booking_product) && $message.booking_product}{l s="Room type:"}{else}{l s="Product:"}{/if} {$message.product_name|escape:'html':'UTF-8'} {/if}

    {$message.message|escape:'html':'UTF-8'|nl2br}

    diff --git a/admin/themes/default/template/controllers/customers/helpers/view/view.tpl b/admin/themes/default/template/controllers/customers/helpers/view/view.tpl index 1ecd5b9f5..4f52451c7 100644 --- a/admin/themes/default/template/controllers/customers/helpers/view/view.tpl +++ b/admin/themes/default/template/controllers/customers/helpers/view/view.tpl @@ -358,7 +358,7 @@ {if $products AND count($products)}
    - {l s='Stay types and services'} {count($products)} + {l s='Room types and services'} {count($products)}
    {l s='Image'}{l s='Stay Type'}{l s='Room Type'} {l s='Hotel'} {l s='Duration'} {l s='occupancy'}
    diff --git a/admin/themes/default/template/controllers/import/helpers/form/form.tpl b/admin/themes/default/template/controllers/import/helpers/form/form.tpl index a077ec3a2..61870cf91 100644 --- a/admin/themes/default/template/controllers/import/helpers/form/form.tpl +++ b/admin/themes/default/template/controllers/import/helpers/form/form.tpl @@ -315,7 +315,7 @@ {l s='Sample Hotels file'} - {l s='Sample Stay Types file'} + {l s='Sample Room Types file'} {l s='Sample Stays file'} diff --git a/admin/themes/default/template/controllers/normal_products/associations.tpl b/admin/themes/default/template/controllers/normal_products/associations.tpl index ddbaff453..52708b6f8 100644 --- a/admin/themes/default/template/controllers/normal_products/associations.tpl +++ b/admin/themes/default/template/controllers/normal_products/associations.tpl @@ -46,13 +46,13 @@
    - {l s='Associations are used to display service product category wise on stay type page when'} {l s='Category filter'} {l s='is enabled'} + {l s='Associations are used to display service product category wise on room type page when'} {l s='Category filter'} {l s='is enabled'}
    {include file="controllers/products/multishop/checkbox.tpl" field="id_category_default" type="default"}
    diff --git a/admin/themes/default/template/controllers/normal_products/features.tpl b/admin/themes/default/template/controllers/normal_products/features.tpl index 04baf3c36..7c3cf710d 100644 --- a/admin/themes/default/template/controllers/normal_products/features.tpl +++ b/admin/themes/default/template/controllers/normal_products/features.tpl @@ -23,10 +23,10 @@ {if isset($product->id)}
    -

    {l s='Assign features to this stay type'}

    +

    {l s='Assign features to this room type'}

    - {l s='You can specify a value for each relevant feature regarding this stay type. Empty fields will not be displayed.'}
    + {l s='You can specify a value for each relevant feature regarding this room type. Empty fields will not be displayed.'}
    {l s='You can either create a specific value, or select among the existing pre-defined values you\'ve previously added.'}
    diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index 870e8e26c..1a008c063 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -30,8 +30,8 @@

    {l s='Information'}

    {if isset($display_common_field) && $display_common_field} -
    {l s='Warning, if you change the value of fields with an orange bullet %s, the value will be changed for all other shops for this stay type' sprintf=$bullet_common_field}
    +
    {l s='Warning, if you change the value of fields with an orange bullet %s, the value will be changed for all other shops for this room type' sprintf=$bullet_common_field}
    {/if} {include file="controllers/products/multishop/check_fields.tpl" product_tab="Informations"} @@ -103,7 +103,7 @@
    {include file="controllers/products/multishop/checkbox.tpl" field="name" type="default" multilang="true"}
    @@ -155,7 +155,7 @@
    - + @@ -62,7 +62,7 @@ - + diff --git a/mails/en/booking_extra_demands.txt b/mails/en/booking_extra_demands.txt index b81fc7bc4..a73cdf3ea 100644 --- a/mails/en/booking_extra_demands.txt +++ b/mails/en/booking_extra_demands.txt @@ -1,6 +1,6 @@ {if isset($list)} {l s='Extra Demands Details'} - {l s='Stay Type'} + {l s='Room Type'} {l s='Extra demand name'} {l s='Total'} {l s='(Tax excl.)'} diff --git a/mails/en/booking_extra_demands_text.tpl b/mails/en/booking_extra_demands_text.tpl index e8ee4b5dc..a9912e849 100644 --- a/mails/en/booking_extra_demands_text.tpl +++ b/mails/en/booking_extra_demands_text.tpl @@ -2,7 +2,7 @@ {l s='Stay Extra Demands Detail'} -{l s='Stay Type'} +{l s='Room Type'} {l s='Name'} {l s='Total'} {l s='(Tax excl.)'} @@ -45,7 +45,7 @@ {l s='Stays Services Detail'} -{l s='Stay Type'} +{l s='Room Type'} {l s='Name'} {l s='Qty'} {l s='Total'} diff --git a/mails/en/bookings_refund_request_detail_admin.tpl b/mails/en/bookings_refund_request_detail_admin.tpl index bdd382c89..15746d490 100644 --- a/mails/en/bookings_refund_request_detail_admin.tpl +++ b/mails/en/bookings_refund_request_detail_admin.tpl @@ -6,7 +6,7 @@ - + diff --git a/mails/en/bookings_refund_request_detail_admin_text.tpl b/mails/en/bookings_refund_request_detail_admin_text.tpl index e5d75108f..aeee78e27 100644 --- a/mails/en/bookings_refund_request_detail_admin_text.tpl +++ b/mails/en/bookings_refund_request_detail_admin_text.tpl @@ -2,7 +2,7 @@ {l s="Stay Num"} -{l s="Stay Type"} +{l s="Room Type"} {l s="Hotel"} diff --git a/mails/en/bookings_refund_request_detail_customer.tpl b/mails/en/bookings_refund_request_detail_customer.tpl index 52d33a0f8..52a0fa435 100644 --- a/mails/en/bookings_refund_request_detail_customer.tpl +++ b/mails/en/bookings_refund_request_detail_customer.tpl @@ -5,7 +5,7 @@ - + diff --git a/mails/en/bookings_refund_request_detail_customer_text.tpl b/mails/en/bookings_refund_request_detail_customer_text.tpl index 536982d28..6dd5f585e 100644 --- a/mails/en/bookings_refund_request_detail_customer_text.tpl +++ b/mails/en/bookings_refund_request_detail_customer_text.tpl @@ -3,7 +3,7 @@ {l s='Stays Bookings Detail'} -{l s="Stay Type"} +{l s="Room Type"} {l s="Hotel"} diff --git a/mails/en/order_refund_completed_admin.txt b/mails/en/order_refund_completed_admin.txt index 13e4ceedd..0962d1344 100755 --- a/mails/en/order_refund_completed_admin.txt +++ b/mails/en/order_refund_completed_admin.txt @@ -13,7 +13,7 @@ Transaction Id: {id_transaction} Booking details Stay Num -Stay Type +Room Type Hotel Duration {refundBookingHtml} diff --git a/mails/en/order_refund_completed_customer.txt b/mails/en/order_refund_completed_customer.txt index ee20a0bf9..ae0f5ecd3 100755 --- a/mails/en/order_refund_completed_customer.txt +++ b/mails/en/order_refund_completed_customer.txt @@ -12,7 +12,7 @@ Payment Mode: {payment_mode} Transaction Id: {id_transaction} Booking details -Stay Type +Room Type Hotel Num. Stays Duration diff --git a/mails/en/order_refund_denied_admin.txt b/mails/en/order_refund_denied_admin.txt index b4bf0dc27..402c08def 100755 --- a/mails/en/order_refund_denied_admin.txt +++ b/mails/en/order_refund_denied_admin.txt @@ -11,7 +11,7 @@ Refund Status: {status_name} Booking details Stay Num -Stay Type +Room Type Hotel Duration diff --git a/mails/en/order_refund_denied_customer.txt b/mails/en/order_refund_denied_customer.txt index b6c9b4318..a5d520607 100755 --- a/mails/en/order_refund_denied_customer.txt +++ b/mails/en/order_refund_denied_customer.txt @@ -11,7 +11,7 @@ Refund Status: {status_name} Booking details -Stay Type +Room Type Hotel Num. Stays Duration diff --git a/mails/en/order_refund_pending_admin.txt b/mails/en/order_refund_pending_admin.txt index 24b12dfe0..d3cfb2814 100755 --- a/mails/en/order_refund_pending_admin.txt +++ b/mails/en/order_refund_pending_admin.txt @@ -12,7 +12,7 @@ Cancelation Reason: {cancelation_reason} Requested Booking Cancellations Stay Num -Stay Type +Room Type Hotel Duration diff --git a/mails/en/order_refund_pending_customer.txt b/mails/en/order_refund_pending_customer.txt index fc93e00c1..c50c62b34 100755 --- a/mails/en/order_refund_pending_customer.txt +++ b/mails/en/order_refund_pending_customer.txt @@ -10,7 +10,7 @@ Refund Status: {status_name} Booking details -Stay Type +Room Type Hotel Num. Stays Duration diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index 5e90552ea..fa9a8051b 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -228,7 +228,7 @@
    - {l s='Stay type cost' mod='blockcart'}  -  + {l s='Room type cost' mod='blockcart'}  -  {l s='Total' mod='blockcart'}  - 
    diff --git a/modules/dashguestcycle/dashguestcycle.php b/modules/dashguestcycle/dashguestcycle.php index 243b6db3e..b12d17126 100644 --- a/modules/dashguestcycle/dashguestcycle.php +++ b/modules/dashguestcycle/dashguestcycle.php @@ -140,9 +140,9 @@ class DashGuestCycle extends Module { $header = array( 'name' => array('title' => $this->l('Customer Name'), 'class' => 'text-left'), - 'room_num' => array('title' => $this->l('Room No.'), 'class' => 'text-center'), + 'room_num' => array('title' => $this->l('Stay No.'), 'class' => 'text-center'), 'room_type' => array('title' => $this->l('Room Type'), 'class' => 'text-left'), - 'hotel' => array('title' => $this->l('Hotel'), 'class' => 'text-left'), + 'hotel' => array('title' => $this->l('Property'), 'class' => 'text-left'), 'guests' => array('title' => $this->l('Guests'), 'class' => 'text-center'), 'check_out' => array('title' => $this->l('Check-out (LOS)'), 'class' => 'text-left'), 'order_id' => array('title' => $this->l('Order ID'), 'class' => 'text-center'), @@ -200,9 +200,9 @@ class DashGuestCycle extends Module { $header = array( 'name' => array('title' => $this->l('Customer Name'), 'class' => 'text-left'), - 'room_num' => array('title' => $this->l('Room No.'), 'class' => 'text-center'), + 'room_num' => array('title' => $this->l('Stay No.'), 'class' => 'text-center'), 'room_type' => array('title' => $this->l('Room Type'), 'class' => 'text-left'), - 'hotel' => array('title' => $this->l('Hotel'), 'class' => 'text-left'), + 'hotel' => array('title' => $this->l('Property'), 'class' => 'text-left'), 'guests' => array('title' => $this->l('Guests'), 'class' => 'text-center'), 'check_in' => array('title' => $this->l('Check-in (LOS)'), 'class' => 'text-left'), 'order_id' => array('title' => $this->l('Order ID'), 'class' => 'text-center'), @@ -260,9 +260,9 @@ class DashGuestCycle extends Module { $header = array( 'name' => array('title' => $this->l('Customer Name'), 'class' => 'text-left'), - 'room_num' => array('title' => $this->l('Room No.'), 'class' => 'text-center'), + 'room_num' => array('title' => $this->l('Stay No.'), 'class' => 'text-center'), 'room_type' => array('title' => $this->l('Room Type'), 'class' => 'text-left'), - 'hotel' => array('title' => $this->l('Hotel'), 'class' => 'text-left'), + 'hotel' => array('title' => $this->l('Property'), 'class' => 'text-left'), 'guests' => array('title' => $this->l('Guests'), 'class' => 'text-center'), 'check_in' => array('title' => $this->l('Check-in'), 'class' => 'text-left'), 'check_out' => array('title' => $this->l('Check-out (LOS)'), 'class' => 'text-left'), @@ -326,7 +326,7 @@ class DashGuestCycle extends Module $header = array( 'order_id' => array('title' => $this->l('Order ID'), 'class' => 'text-center'), 'name' => array('title' => $this->l('Customer Name'), 'class' => 'text-left'), - 'hotel' => array('title' => $this->l('Hotel'), 'class' => 'text-left'), + 'hotel' => array('title' => $this->l('Property'), 'class' => 'text-left'), 'total' => array('title' => $this->l('Total Stays'), 'class' => 'text-center'), 'guests' => array('title' => $this->l('Guests'), 'class' => 'text-center'), 'order_total' => array('title' => $this->l('Order Total'), 'class' => 'text-right'), @@ -388,9 +388,9 @@ class DashGuestCycle extends Module $header = array( 'request_id' => array('title' => $this->l('Request ID'), 'class' => 'text-center'), 'name' => array('title' => $this->l('Customer Name'), 'class' => 'text-left'), - 'room_num' => array('title' => $this->l('Room No.'), 'class' => 'text-center'), + 'room_num' => array('title' => $this->l('Stay No.'), 'class' => 'text-center'), 'room_type' => array('title' => $this->l('Room Type'), 'class' => 'text-left'), - 'hotel' => array('title' => $this->l('Hotel'), 'class' => 'text-left'), + 'hotel' => array('title' => $this->l('Property'), 'class' => 'text-left'), 'guests' => array('title' => $this->l('Guests'), 'class' => 'text-center'), 'check_in' => array('title' => $this->l('Check-in'), 'class' => 'text-left'), 'check_out' => array('title' => $this->l('Check-out'), 'class' => 'text-left'), diff --git a/modules/dashinsights/dashinsights.php b/modules/dashinsights/dashinsights.php index 0b0676a5c..b15ea49c4 100644 --- a/modules/dashinsights/dashinsights.php +++ b/modules/dashinsights/dashinsights.php @@ -60,7 +60,7 @@ class DashInsights extends Module Media::addJsDef(array( 'hotel_txt' => $this->l('Hotel'), 'nights_booked_txt' => $this->l('Nights Booked'), - 'room_booked_txt' => $this->l('Rooms Booked'), + 'room_booked_txt' => $this->l('Stays Booked'), 'length_of_stay_txt' => $this->l('Length Of Stay'), 'total_nights_booked_txt' => $this->l('Total Nights Booked'), 'date_txt' => $this->l('Date'), @@ -127,7 +127,7 @@ class DashInsights extends Module $addressInfo = HotelBranchInformation::getAddress($idHotel, $this->context->language->id); $panelsLabel = sprintf('(%s, %s)', $objHotelBranchInformation->hotel_name, $addressInfo['city']); } else { - $panelsLabel = $this->l('(All Hotels)'); + $panelsLabel = $this->l('(All Properties)'); } $return = array( @@ -145,13 +145,13 @@ class DashInsights extends Module 'chart_type' => 'multibar_chart_dotw_dashinsights', 'data' => $daysOfTheWeekData, 'date_format' => $this->context->language->date_format_lite, - 'axis_labels' => array('y' => $this->l('Rooms occupied')), + 'axis_labels' => array('y' => $this->l('Stays occupied')), ), 'dashinsights_multibar_chart2' => array( 'chart_type' => 'multibar_chart_los_dashinsights', 'data' => $lengthOfStayData, 'date_format' => $this->context->language->date_format_lite, - 'axis_labels' => array('x' => $this->l('Length of stay'), 'y' => $this->l('Rooms occupied')), + 'axis_labels' => array('x' => $this->l('Length of stay'), 'y' => $this->l('Stays occupied')), ), ), ); @@ -164,10 +164,10 @@ class DashInsights extends Module $seriesWiseRoomNights = array(); if (Configuration::get('PS_DASHBOARD_SIMULATION')) { // set room nights demo data - if ($idHotel == 0) { // if 'All Hotels' is selected + if ($idHotel == 0) { // if 'All Properties' is selected $allHotelSeriesInfo = array( 'data' => array(), - 'label' => $this->l('All Hotels'), + 'label' => $this->l('All Properties'), ); foreach ($this->discreteDates as $discreteDate) { @@ -207,11 +207,11 @@ class DashInsights extends Module ); } } else { - if ($idHotel == 0) { // if 'All Hotels' is selected + if ($idHotel == 0) { // if 'All Properties' is selected $idsHotel = $this->accessibleIdsHotel; $allHotelSeriesInfo = array( 'data' => AdminStatsController::getRoomNightsData($dateFrom, $dateTo, $idsHotel), - 'label' => $this->l('All Hotels'), + 'label' => $this->l('All Properties'), ); $seriesWiseRoomNights[] = $allHotelSeriesInfo; @@ -271,10 +271,10 @@ class DashInsights extends Module $seriesWiseDaysOfTheWeek = array(); if (Configuration::get('PS_DASHBOARD_SIMULATION')) { // set room nights demo data - if ($idHotel == 0) { // if 'All Hotels' is selected + if ($idHotel == 0) { // if 'All Properties' is selected $allHotelSeriesInfo = array( 'data' => array(), - 'label' => $this->l('All Hotels'), + 'label' => $this->l('All Properties'), ); // 1 = SUN @@ -316,11 +316,11 @@ class DashInsights extends Module ); } } else { - if ($idHotel == 0) { // if 'All Hotels' is selected + if ($idHotel == 0) { // if 'All Properties' is selected $idsHotel = $this->accessibleIdsHotel; $allHotelSeriesInfo = array( 'data' => AdminStatsController::getOccupiedRoomsForDaysOfTheWeek($dateFrom, $dateTo, $idsHotel), - 'label' => $this->l('All Hotels'), + 'label' => $this->l('All Properties'), ); $seriesWiseDaysOfTheWeek[] = $allHotelSeriesInfo; @@ -348,7 +348,7 @@ class DashInsights extends Module $averageDaysOfTheWeekData = AdminStatsController::getOccupiedRoomsForDaysOfTheWeek($dateFrom, $dateTo, $idsHotel, true, true); $averageSeriesInfo = array( 'data' => $averageDaysOfTheWeekData, - 'label' => $this->l('Other Hotels Average'), + 'label' => $this->l('Other Properties Average'), ); $seriesWiseDaysOfTheWeek[] = $averageSeriesInfo; @@ -409,10 +409,10 @@ class DashInsights extends Module if (Configuration::get('PS_DASHBOARD_SIMULATION')) { // set room nights demo data - if ($idHotel == 0) { // if 'All Hotels' is selected + if ($idHotel == 0) { // if 'All Properties' is selected $allHotelSeriesInfo = array( 'data' => array(), - 'label' => $this->l('All Hotels'), + 'label' => $this->l('All Properties'), ); $roomsOccupied = array( @@ -486,11 +486,11 @@ class DashInsights extends Module ); } } else { - if ($idHotel == 0) { // if 'All Hotels' is selected + if ($idHotel == 0) { // if 'All Properties' is selected $idsHotel = $this->accessibleIdsHotel; $allHotelSeriesInfo = array( 'data' => AdminStatsController::getLengthOfStayInfo($day, $dateFrom, $dateTo, $idsHotel), - 'label' => $this->l('All Hotels'), + 'label' => $this->l('All Properties'), ); $seriesWiseLengthOfStay[] = $allHotelSeriesInfo; diff --git a/modules/dashinsights/views/templates/hook/dashboard-zone-two.tpl b/modules/dashinsights/views/templates/hook/dashboard-zone-two.tpl index d164c8393..27df76a44 100644 --- a/modules/dashinsights/views/templates/hook/dashboard-zone-two.tpl +++ b/modules/dashinsights/views/templates/hook/dashboard-zone-two.tpl @@ -35,7 +35,7 @@
    -

    {l s='Room Nights' mod='dashinsights'}

    +

    {l s='Stay Nights' mod='dashinsights'}

    diff --git a/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl b/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl index cf2f74964..9beb30b62 100644 --- a/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl +++ b/modules/dashperformance/views/templates/hook/dashboard_zone_two.tpl @@ -75,7 +75,7 @@
    -

    {l s='Revenue Per Available Room' mod='dashperformance'}

    +

    {l s='Revenue Per Available Stay' mod='dashperformance'}

    -- @@ -85,7 +85,7 @@
    -

    {l s='Total Revenue Per Available Room' mod='dashperformance'}

    +

    {l s='Total Revenue Per Available Stay' mod='dashperformance'}

    -- diff --git a/modules/hotelreservationsystem/classes/HotelBookingDetail.php b/modules/hotelreservationsystem/classes/HotelBookingDetail.php index 96c05607f..72e3e8198 100644 --- a/modules/hotelreservationsystem/classes/HotelBookingDetail.php +++ b/modules/hotelreservationsystem/classes/HotelBookingDetail.php @@ -86,8 +86,6 @@ class HotelBookingDetail extends ObjectModel const SEARCH_TYPE_OWS = 1; const SEARCH_TYPE_NORMAL = 2; - // - const PS_ROOM_UNIT_SELECTION_TYPE_DEFAULT = 0; const PS_ROOM_UNIT_SELECTION_TYPE_OCCUPANCY = 1; const PS_ROOM_UNIT_SELECTION_TYPE_QUANTITY = 2; diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php index b63cbb5e8..4992e4af0 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelPropertyTypesController.php @@ -100,9 +100,10 @@ class AdminHotelPropertyTypesController extends ModuleAdminController ), array( 'type' => 'switch', - 'label' => $this->l('Status'), + 'label' => $this->l('Enabled'), 'name' => 'active', 'is_bool' => true, + 'default_value' => 1, 'values' => array( array( 'id' => 'active_on', @@ -124,4 +125,38 @@ class AdminHotelPropertyTypesController extends ModuleAdminController return parent::renderForm(); } + + public function postProcess() + { + if (Tools::isSubmit('submitAdd'.$this->table)) { + $languages = Language::getLanguages(false); + $defaultLangId = Configuration::get('PS_LANG_DEFAULT'); + $objDefaultLanguage = Language::getLanguage((int) $defaultLangId); + $idPropertyType = Tools::getValue($this->identifier); + + if (!trim(Tools::getValue('name_'.$defaultLangId))) { + $this->errors[] = $this->l('Name is required at least in ').$objDefaultLanguage['name']; + } else { + foreach ($languages as $lang) { + if (trim(Tools::getValue('name_'.$lang['id_lang']))) { + if (!Validate::isGenericName(Tools::getValue('name_'.$lang['id_lang']))) { + $this->errors[] = $this->l('Invalid Name in ').$lang['name']; + } + } + } + } + + if ($idPropertyType) { + $this->display = 'edit'; + } else { + $this->display = 'add'; + } + + if (!$this->errors) { + parent::postProcess(); + } + } else { + parent::postProcess(); + } + } } diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index d684fcf5f..78eb518db 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -41,8 +41,8 @@ class AdminHotelRoomsBookingController extends ModuleAdminController parent::__construct(); - $this->_conf[52] = $this->l('Room in the booking is successfully reallocated'); - $this->_conf[53] = $this->l('Room in the booking is successfully swapped'); + $this->_conf[52] = $this->l('Stay in the booking is successfully reallocated'); + $this->_conf[53] = $this->l('Stay in the booking is successfully swapped'); } public function init() @@ -946,7 +946,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController $modal = array( 'modal_id' => 'room-reallocation-modal', 'modal_class' => 'modal-md order_detail_modal', - 'modal_title' => '  '.$this->l('Room Reallocation / Swap'), + 'modal_title' => '  '.$this->l('Stay Reallocation / Swap'), 'modal_content' => $this->context->smarty->fetch('controllers/orders/modals/_room_reallocation.tpl'), 'modal_actions' => null, ); @@ -994,14 +994,14 @@ class AdminHotelRoomsBookingController extends ModuleAdminController 'add_to_cart' => $this->l('Add To Cart', null, true), 'remove' => $this->l('Remove', null, true), 'noRoomTypeAvlTxt' => $this->l('No room type available.', null, true), - 'slct_rm_err' => $this->l('Please select a room first.', null, true), + 'slct_rm_err' => $this->l('Please select a stay first.', null, true), 'slct_rm_type_err' => $this->l('Please select a room type first.', null, true), 'product_added_cart_txt' => $this->l('Product added in cart', null, true), 'info_icon_path' => _MODULE_DIR_.$this->module->name.'/views/img/Slices/info-icon.svg', 'select_age_txt' => $this->l('Select age', null, true), 'under_1_age' => $this->l('Under 1', null, true), - 'room_txt' => $this->l('Room', null, true), - 'rooms_txt' => $this->l('Rooms', null, true), + 'room_txt' => $this->l('Stay', null, true), + 'rooms_txt' => $this->l('Stays', null, true), 'remove_txt' => $this->l('Remove', null, true), 'adult_txt' => $this->l('Adults', null, true), 'adults_txt' => $this->l('Adults', null, true), @@ -1010,7 +1010,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController 'below_txt' => $this->l('Below', null, true), 'years_txt' => $this->l('years', null, true), 'all_children_txt' => $this->l('All Children', null, true), - 'max_occupancy_reached_txt' => $this->l('Maximum room occupancy reached', null, true), + 'max_occupancy_reached_txt' => $this->l('Maximum stay occupancy reached', null, true), 'max_adults_txt' => $this->l('Maximum adult occupancy reached', null, true), 'max_children_txt' => $this->l('Maximum children occupancy reached', null, true), 'no_children_allowed_txt' => $this->l('Only adults can be accommodated', null, true), @@ -1018,13 +1018,13 @@ class AdminHotelRoomsBookingController extends ModuleAdminController 'PS_BACKDATE_ORDER_ALLOW' => $PS_BACKDATE_ORDER_ALLOW, // 'check_calender_var' => $check_calender_var, 'txtSomeErr' => $this->l('Some error occurred. Please try again.', null, true), - 'no_rm_avail_txt' => $this->l('No room available.', null, true), - 'no_realloc_rm_avail_txt' => $this->l('No room available for reallocation.', null, true), + 'no_rm_avail_txt' => $this->l('No stay available.', null, true), + 'no_realloc_rm_avail_txt' => $this->l('No stay available for reallocation.', null, true), 'no_realloc_rm_type_avail_txt' => $this->l('No room type available for reallocation.', null, true), - 'no_swap_rm_avail_txt' => $this->l('No room available for swap.', null, true), - 'select_room_txt' => $this->l('Select room', null, true), - 'added_room_success_txt' => $this->l('Room added to cart successfully', null, true), - 'removed_room_success_txt' => $this->l('Room removed from cart successfully', null, true), + 'no_swap_rm_avail_txt' => $this->l('No stay available for swap.', null, true), + 'select_room_txt' => $this->l('Select stay', null, true), + 'added_room_success_txt' => $this->l('Stay added to cart successfully', null, true), + 'removed_room_success_txt' => $this->l('Stay removed from cart successfully', null, true), ); if (Configuration::get('PS_BACKOFFICE_SEARCH_TYPE') == HotelBookingDetail::SEARCH_TYPE_OWS ) { $jsVars['is_occupancy_wise_search'] = true; diff --git a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-cart.tpl b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-cart.tpl index 1c1b045d9..e562e5664 100644 --- a/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-cart.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/hotel_rooms_booking/helpers/view/_partials/booking-cart.tpl @@ -14,7 +14,7 @@
    - + diff --git a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl index c5069eb3e..f8bef0905 100644 --- a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl @@ -143,7 +143,7 @@ {/if} - + diff --git a/modules/statscheckup/statscheckup.php b/modules/statscheckup/statscheckup.php index 8c32d680a..073b5aae2 100644 --- a/modules/statscheckup/statscheckup.php +++ b/modules/statscheckup/statscheckup.php @@ -234,7 +234,7 @@ class StatsCheckUp extends Module 'DESCRIPTIONS' => array('name' => $this->l('Descriptions'), 'text' => $this->l('chars (without HTML)')), 'IMAGES' => array('name' => $this->l('Images'), 'text' => $this->l('images')), 'ORDERS' => array('name' => $this->l('Orders'), 'text' => $this->l('orders / month')), - 'TOTAL_ROOMS' => array('name' => $this->l('Total stays'), 'text' => $this->l('rooms')), + 'TOTAL_ROOMS' => array('name' => $this->l('Total stays'), 'text' => $this->l('stays')), ); $hotelsHtml = ' diff --git a/modules/statsproduct/statsproduct.php b/modules/statsproduct/statsproduct.php index 1b601a5c8..a8c634e12 100644 --- a/modules/statsproduct/statsproduct.php +++ b/modules/statsproduct/statsproduct.php @@ -356,9 +356,9 @@ class StatsProduct extends ModuleGraph if (Tools::getValue('export')) { $this->_titles['main'][] = $this->l('Date'); } - $this->_titles['main'][] = $this->l('Room nights'); + $this->_titles['main'][] = $this->l('Stay nights'); $this->_titles['main'][] = $this->l('Views (x100)'); - $this->_titles['y'] = $this->l('Room nights, Views (x100)'); + $this->_titles['y'] = $this->l('Stay nights, Views (x100)'); $this->_formats['y'] = 'd'; $this->query[0] = 'SELECT o.`date_add`, SUM(DATEDIFF(hbd.`date_to`, hbd.`date_from`)) AS total diff --git a/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php b/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php index 7d23d48e7..90528dfb1 100644 --- a/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php +++ b/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php @@ -223,7 +223,7 @@ class AdminHotelRoomModuleSettingController extends ModuleAdminController $this->fields_form = array( 'legend' => array( - 'title' => $this->l('Rooms Configuration'), + 'title' => $this->l('Stays Configuration'), 'icon' => 'icon-globe' ), 'input' => array( diff --git a/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl b/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl index 6be773d60..1141721c3 100644 --- a/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl +++ b/modules/wkroomsearchblock/views/templates/hook/searchForm.tpl @@ -88,7 +88,7 @@ - + @@ -75,7 +75,7 @@ - + diff --git a/pdf/order-slip.product-tab.tpl b/pdf/order-slip.product-tab.tpl index fb0b3b445..67a02f0e0 100644 --- a/pdf/order-slip.product-tab.tpl +++ b/pdf/order-slip.product-tab.tpl @@ -30,7 +30,7 @@ - + diff --git a/themes/hotel-reservation-theme/_partials/room_type_list.tpl b/themes/hotel-reservation-theme/_partials/room_type_list.tpl index 528be5c56..1baf86f0a 100644 --- a/themes/hotel-reservation-theme/_partials/room_type_list.tpl +++ b/themes/hotel-reservation-theme/_partials/room_type_list.tpl @@ -152,7 +152,7 @@ {/foreach} {else}
    - {l s='No stay available for this hotel!'} + {l s='No stay available for this property!'}
    {/if} diff --git a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl index 5e90552ea..fa9a8051b 100644 --- a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl +++ b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl @@ -228,7 +228,7 @@
    - {l s='Stay type cost' mod='blockcart'}  -  + {l s='Room type cost' mod='blockcart'}  -  {l s='Total' mod='blockcart'}  - 
    diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl index 2e2489853..f7f03580a 100644 --- a/themes/hotel-reservation-theme/order-detail.tpl +++ b/themes/hotel-reservation-theme/order-detail.tpl @@ -577,12 +577,12 @@ {block name='order_detail_add_order_messages_form'}
    - +

    {if $service_products_formatted} - {l s='To add a comment about a stay type/product, please select one first.'} + {l s='To add a comment about a room type/product, please select one first.'} {else} - {l s='To add a comment about a stay type, please select one first.'} + {l s='To add a comment about a room type, please select one first.'} {/if}

    {l s='Stay Extra Demands Detail'}
    {l s='Stay Type'}{l s='Room Type'} {l s='Name'} {l s='Total'}
    {l s='(Tax excl.)'}
    {l s='Stays Services Detail'}
    {l s='Stay Type'}{l s='Room Type'} {l s='Name'} {l s='Qty'} {l s='Total'}
    {l s="Stay Num"}{l s="Stay Type"}{l s="Room Type"} {l s="Hotel"} {l s="Duration"}
    {l s='Stays Bookings Detail'}
    {l s="Stay Type"}{l s="Room Type"} {l s="Hotel"} {l s="Stays Qty"} {l s="Duration"}
    {l s='Stay No.' mod='hotelreservationsystem'}{l s='Stay Type' mod='hotelreservationsystem'}{l s='Room Type' mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Amount (Tax excl.)' mod='hotelreservationsystem'} {l s='Stay num' mod='hotelreservationsystem'}{l s='Stay type' mod='hotelreservationsystem'}{l s='Room type' mod='hotelreservationsystem'} {l s='Property' mod='hotelreservationsystem'} {l s='Duration' mod='hotelreservationsystem'} {l s='Total cost (tax incl.)' mod='hotelreservationsystem'}{l s='Stay Additional Facilities Detail' pdf='true'}
    {l s='Stay Type' pdf='true'}{l s='Room Type' pdf='true'} {l s='Name' pdf='true'} {l s='Tax rate(s)' pdf='true'} {l s='Total' pdf='true'}
    {l s='(Tax excl.)' pdf='true'}
    {l s='Stay Extra Services Detail' pdf='true'}
    {l s='Stay Type' pdf='true'}{l s='Room Type' pdf='true'} {l s='Name' pdf='true'} {l s='Tax rate(s)' pdf='true'} {l s='Qty' pdf='true'}{l s='Stay Bookings Detail' pdf='true'}
    {l s='Stay Type / Reference' pdf='true'}{l s='Room Type / Reference' pdf='true'} {l s='Hotel' pdf='true'} {l s='Duration' pdf='true'} {l s='Num stays' pdf='true'}
    - + diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index 2afc79a4e..8453e6e82 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -49,7 +49,7 @@ {/if} --> {if isset($adminActionDisplay) && $adminActionDisplay} - {else} - {/if} diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index ce48b8773..917a164a0 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -2283,6 +2283,7 @@ class AdminProductsControllerCore extends AdminController $_POST['description_short'] = strip_tags(Tools::getValue('description_short')); } $_POST['booking_method'] = Tools::getValue('booking_method_switch') ? (int)Tools::getValue('booking_method') : 0; + $_POST['id_room_type_selling_object'] = Tools::getValue('id_room_type_selling_object') ?? 0; // Check description short size without html $limit = (int)Configuration::get('PS_SHORT_DESC_LIMIT'); From f98ad8ee82dfef25d58d5b315ebfc98de6f872cd Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Wed, 20 May 2026 14:57:42 +0530 Subject: [PATCH 14/93] replace hotel word to property --- .../controllers/access/helpers/form/form.tpl | 4 +-- .../orders/modals/_cancel_room_bookings.tpl | 2 +- controllers/admin/AdminImagesController.php | 6 ++-- controllers/admin/AdminImportController.php | 18 +++++----- .../admin/AdminOrderPreferencesController.php | 6 ++-- .../bookings_refund_request_detail_admin.tpl | 2 +- ...ookings_refund_request_detail_customer.tpl | 2 +- ...gs_refund_request_detail_customer_text.tpl | 2 +- mails/en/order_hotel_detail.tpl | 8 ++--- mails/en/order_hotel_detail_text.tpl | 8 ++--- modules/blockcart/blockcart.tpl | 2 +- modules/dashinsights/dashinsights.php | 2 +- modules/dashproducts/dashproducts.php | 8 ++--- ...minHotelConfigurationSettingController.php | 2 +- .../admin/AdminHotelFeaturePricesSettings.php | 2 +- .../AdminHotelGeneralSettingsController.php | 36 +++++++++---------- .../AdminHotelRoomsBookingController.php | 6 ++-- .../helpers/form/form.tpl | 8 ++--- .../helpers/view/view.tpl | 2 +- .../hotel_features/helpers/view/view.tpl | 2 +- .../hotel_rooms_booking/helpers/view/view.tpl | 6 ++-- .../admin/AdminHotelReviewHotelReview.php | 4 +-- .../statsbestcategories.php | 6 ++-- .../statsbestproducts/statsbestproducts.php | 2 +- modules/statscatalog/statscatalog.php | 4 +-- modules/statscheckup/statscheckup.php | 4 +-- .../AdminAboutHotelBlockSettingController.php | 8 ++--- .../AdminFeaturesModuleSettingController.php | 4 +-- .../wkhotelfeaturesblock.php | 4 +-- .../wkhotelfilterblock/wkhotelfilterblock.php | 2 +- .../AdminHotelRoomModuleSettingController.php | 20 +++++------ .../wkroomsearchblock/wkroomsearchblock.php | 6 ++-- ...minTestimonialsModuleSettingController.php | 4 +-- .../wktestimonialblock/wktestimonialblock.php | 4 +-- pdf/order-slip.product-tab.tpl | 2 +- .../modules/blockcart/blockcart.tpl | 2 +- .../hotel-reservation-theme/order-detail.tpl | 2 +- themes/hotel-reservation-theme/product.tpl | 2 +- 38 files changed, 107 insertions(+), 107 deletions(-) diff --git a/admin/themes/default/template/controllers/access/helpers/form/form.tpl b/admin/themes/default/template/controllers/access/helpers/form/form.tpl index d3f2a73f8..6d07fe6ee 100644 --- a/admin/themes/default/template/controllers/access/helpers/form/form.tpl +++ b/admin/themes/default/template/controllers/access/helpers/form/form.tpl @@ -261,11 +261,11 @@
    {if isset($hotels) && $hotels}
    -

    {l s='Hotel Permissions'}

    +

    {l s='Property Permissions'}

    {l s='Stays'}{l s='Stay type'}{l s='Room type'} {l s='Property Name'} {l s='Duration'} {l s='Total stays price (tax incl.)'}
    - + - + diff --git a/controllers/admin/AdminImagesController.php b/controllers/admin/AdminImagesController.php index 9298fa147..68631940d 100644 --- a/controllers/admin/AdminImagesController.php +++ b/controllers/admin/AdminImagesController.php @@ -86,7 +86,7 @@ class AdminImagesControllerCore extends AdminController 'orderby' => false ), 'hotels' => array( - 'title' => $this->l('Hotels'), + 'title' => $this->l('Properties'), 'align' => 'center', 'type' => 'bool', 'active' => 'hotels', @@ -301,7 +301,7 @@ class AdminImagesControllerCore extends AdminController ), array( 'type' => 'switch', - 'label' => $this->l('Hotels'), + 'label' => $this->l('Properties'), 'name' => 'hotels', 'required' => false, 'is_bool' => true, @@ -503,7 +503,7 @@ class AdminImagesControllerCore extends AdminController $types = array( 'categories' => $this->l('Categories'), 'products' => $this->l('Room Types/Products'), - 'hotels' => $this->l('Hotels'), + 'hotels' => $this->l('Properties'), // 'manufacturers' => $this->l('Manufacturers'), // 'suppliers' => $this->l('Suppliers'), // 'scenes' => $this->l('Scenes'), diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index fec2fd096..7345f0afe 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -78,7 +78,7 @@ class AdminImportControllerCore extends AdminController { $this->bootstrap = true; $this->entities = array( - $this->l('Hotels'), + $this->l('Properties'), $this->l('Room Types'), $this->l('Stays'), $this->l('Categories'), @@ -108,7 +108,7 @@ class AdminImportControllerCore extends AdminController 'parent' => Configuration::get('PS_HOME_CATEGORY'), ); break; - case $this->entities[$this->l('Hotels')]: + case $this->entities[$this->l('Properties')]: $this->required_fields = array( 'hotel_name', 'phone', @@ -132,7 +132,7 @@ class AdminImportControllerCore extends AdminController 'no' => array('label' => $this->l('Ignore this column')), 'id' => array('label' => $this->l('ID')), 'active' => array('label' => $this->l('Active (0/1)')), - 'hotel_name' => array('label' => $this->l('Hotel Name *')), + 'hotel_name' => array('label' => $this->l('Property Name *')), 'short_description' => array('label' => $this->l('Short Description')), 'description' => array('label' => $this->l('Description')), 'phone' => array('label' => $this->l('Mobile phone *')), @@ -146,7 +146,7 @@ class AdminImportControllerCore extends AdminController 'city' => array('label' => $this->l('City *')), 'postcode' => array('label' => $this->l('Zip Code *')), 'fax' => array('label' => $this->l('Fax')), - 'policies' => array('label' => $this->l('Hotel Policies')), + 'policies' => array('label' => $this->l('Property Policies')), 'active_refund' => array('label' => $this->l('Allow Refund (0 = No, 1 = Yes)')), 'refund_ids' => array('label' => $this->l('Refund IDs (x,y,z...)')), 'max_checkout_offset' => array('label' => $this->l('Maximum checkout offset')), @@ -169,7 +169,7 @@ class AdminImportControllerCore extends AdminController 'id' => array('label' => $this->l('ID')), 'active' => array('label' => $this->l('Active (0/1)')), 'name' => array('label' => $this->l('Name *')), - 'id_hotel' => array('label' => $this->l('Hotel ID *')), + 'id_hotel' => array('label' => $this->l('Property ID *')), 'price' => array('label' => $this->l('Pre-tax retail price')), 'wholesale_price' => array('label' => $this->l('Pre-tax operating cost')), 'id_tax_rules_group' => array('label' => $this->l('Tax rule ID')), @@ -1479,8 +1479,8 @@ class AdminImportControllerCore extends AdminController } } } else { - $this->warnings[] = $this->l('Hotel creation for the ').$objCountry->name. - $this->l(' is currently unavailable. Kindly activate the country for hotel creation.'); + $this->warnings[] = $this->l('Property creation for the ').$objCountry->name. + $this->l(' is currently unavailable. Kindly activate the country for property creation.'); } } } @@ -3297,7 +3297,7 @@ class AdminImportControllerCore extends AdminController } } break; - case $this->entities[$this->l('Hotels')]: + case $this->entities[$this->l('Properties')]: Db::getInstance()->execute('TRUNCATE TABLE `'._DB_PREFIX_.'htl_branch_info_lang`'); Db::getInstance()->execute('DELETE c, cl FROM `'._DB_PREFIX_.'category` c LEFT JOIN `'._DB_PREFIX_.'category_lang` cl ON c.id_category = cl.id_category @@ -3494,7 +3494,7 @@ class AdminImportControllerCore extends AdminController $import_type = false; Db::getInstance()->disableCache(); switch ((int)Tools::getValue('entity')) { - case $this->entities[$import_type = $this->l('Hotels')]: + case $this->entities[$import_type = $this->l('Properties')]: $this->hotelImport(); $this->clearSmartyCache(); break; diff --git a/controllers/admin/AdminOrderPreferencesController.php b/controllers/admin/AdminOrderPreferencesController.php index d3000dea1..d16123ec9 100644 --- a/controllers/admin/AdminOrderPreferencesController.php +++ b/controllers/admin/AdminOrderPreferencesController.php @@ -330,7 +330,7 @@ class AdminOrderPreferencesControllerCore extends AdminController ), array( 'value' => Product::STANDARD_PRODUCT_ADDRESS_PREFERENCE_HOTEL, - 'name' => $this->l('Hotel Address') + 'name' => $this->l('Property Address') ), array( 'value' => Product::STANDARD_PRODUCT_ADDRESS_PREFERENCE_CUSTOM, @@ -374,8 +374,8 @@ class AdminOrderPreferencesControllerCore extends AdminController 'identifier' => 'value', 'js' => "changeStandardProductAddressType()", 'hint' => $this->l('Select address for standard product tax calculation, this will be used to calculate the tax for the standard product price.'), - 'desc' => $this->l('The selected address will be used to calculate tax for standard products. To change the hotel address, update the "Primary Hotel" in the'). - ' '.$this->l('Hotel General Configuration.').'' + 'desc' => $this->l('The selected address will be used to calculate tax for standard products. To change the property address, update the "Primary Property" in the'). + ' '.$this->l('Property General Configuration.').'' ), 'PS_STANDARD_PRODUCT_ORDER_ADDRESS' => array( 'title' => $this->l('Custom address for tax calculation'), diff --git a/mails/en/bookings_refund_request_detail_admin.tpl b/mails/en/bookings_refund_request_detail_admin.tpl index 15746d490..7c437554e 100644 --- a/mails/en/bookings_refund_request_detail_admin.tpl +++ b/mails/en/bookings_refund_request_detail_admin.tpl @@ -7,7 +7,7 @@ - + diff --git a/mails/en/bookings_refund_request_detail_customer.tpl b/mails/en/bookings_refund_request_detail_customer.tpl index 52a0fa435..6f6f70f03 100644 --- a/mails/en/bookings_refund_request_detail_customer.tpl +++ b/mails/en/bookings_refund_request_detail_customer.tpl @@ -6,7 +6,7 @@ - + diff --git a/mails/en/bookings_refund_request_detail_customer_text.tpl b/mails/en/bookings_refund_request_detail_customer_text.tpl index 6dd5f585e..0b81bbaea 100644 --- a/mails/en/bookings_refund_request_detail_customer_text.tpl +++ b/mails/en/bookings_refund_request_detail_customer_text.tpl @@ -5,7 +5,7 @@ {l s="Room Type"} -{l s="Hotel"} +{l s="Property Name"} {l s="Stays Qty"} diff --git a/mails/en/order_hotel_detail.tpl b/mails/en/order_hotel_detail.tpl index 97c314cca..7def2f0e4 100644 --- a/mails/en/order_hotel_detail.tpl +++ b/mails/en/order_hotel_detail.tpl @@ -1,12 +1,12 @@ {if isset($list['hotel_name']) && $list['hotel_name']}

    - {l s='Hotel details'}: + {l s='Property details'}:

    - {l s='Hotel Name'}: {$list['hotel_name']}
    - {l s='Hotel Phone'}: {$list['hotel_phone']}
    - {l s='Hotel Email'}: {$list['hotel_email']}
    + {l s='Property Name'}: {$list['hotel_name']}
    + {l s='Property Phone'}: {$list['hotel_phone']}
    + {l s='Property Email'}: {$list['hotel_email']}
    {l s='Total Stays'}: {$list['num_rooms']}

    diff --git a/mails/en/order_hotel_detail_text.tpl b/mails/en/order_hotel_detail_text.tpl index b44866e10..7dc951483 100644 --- a/mails/en/order_hotel_detail_text.tpl +++ b/mails/en/order_hotel_detail_text.tpl @@ -1,9 +1,9 @@ {if isset($list['hotel_name']) && $list['hotel_name']} -{l s='Hotel details'}: +{l s='Property details'}: -{l s='Hotel Name'}: {$list['hotel_name']} -{l s='Hotel Phone'}: {$list['hotel_phone']} -{l s='Hotel Email'}: {$list['hotel_email']} +{l s='Property Name'}: {$list['hotel_name']} +{l s='Property Phone'}: {$list['hotel_phone']} +{l s='Property Email'}: {$list['hotel_email']} {l s='Total Stays'}: {$list['num_rooms']} {/if} \ No newline at end of file diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index fa9a8051b..ca1901956 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -215,7 +215,7 @@
    - {l s='Hotel Name' mod='blockcart'}  -  + {l s='Property Name' mod='blockcart'}  - 
    diff --git a/modules/dashinsights/dashinsights.php b/modules/dashinsights/dashinsights.php index b15ea49c4..e9c99498c 100644 --- a/modules/dashinsights/dashinsights.php +++ b/modules/dashinsights/dashinsights.php @@ -58,7 +58,7 @@ class DashInsights extends Module { if (Tools::getValue('controller') == 'AdminDashboard') { Media::addJsDef(array( - 'hotel_txt' => $this->l('Hotel'), + 'hotel_txt' => $this->l('Property'), 'nights_booked_txt' => $this->l('Nights Booked'), 'room_booked_txt' => $this->l('Stays Booked'), 'length_of_stay_txt' => $this->l('Length Of Stay'), diff --git a/modules/dashproducts/dashproducts.php b/modules/dashproducts/dashproducts.php index d26b71a68..a72bcd91e 100644 --- a/modules/dashproducts/dashproducts.php +++ b/modules/dashproducts/dashproducts.php @@ -146,7 +146,7 @@ class DashProducts extends Module array('title' => $this->l('Customer Name'), 'class' => 'text-left'), array('title' => $this->l('Total Stays'), 'class' => 'text-left'), array('title' => $this->l('Order'), 'class' => 'text-left'), - array('title' => $this->l('Hotel'), 'class' => 'text-left'), + array('title' => $this->l('Property'), 'class' => 'text-left'), array('title' => $this->l('Total').' '.$this->l('Tax excl.'), 'class' => 'text-left'), array('title' => $this->l('Date'), 'class' => 'text-left'), array('title' => $this->l('Status'), 'class' => 'text-left'), @@ -235,7 +235,7 @@ class DashProducts extends Module ), array( 'id' => 'category', - 'title' => $this->l('Hotel'), + 'title' => $this->l('Property'), 'class' => 'text-center', ), array( @@ -339,7 +339,7 @@ class DashProducts extends Module ), array( 'id' => 'hotel', - 'title' => $this->l('Hotel'), + 'title' => $this->l('Property'), 'class' => 'text-center', ), array( @@ -448,7 +448,7 @@ class DashProducts extends Module ), array( 'id' => 'reference', - 'title' => $this->l('Hotel'), + 'title' => $this->l('Property'), 'class' => 'text-center' ), array( diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelConfigurationSettingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelConfigurationSettingController.php index f44afd8f7..f235e6c8a 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelConfigurationSettingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelConfigurationSettingController.php @@ -122,7 +122,7 @@ class AdminHotelConfigurationSettingController extends ModuleAdminController { parent::initToolbar(); if ($this->display == 'view') { - $this->toolbar_title = $this->l('Hotel Settings'); + $this->toolbar_title = $this->l('Property Settings'); $this->page_header_toolbar_btn['manage_links'] = array( 'icon' => 'process-icon-cogs', 'href' => self::$currentIndex.'&display=list&token='.$this->token, diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelFeaturePricesSettings.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelFeaturePricesSettings.php index d5731d87f..0f7bc7c40 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelFeaturePricesSettings.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelFeaturePricesSettings.php @@ -113,7 +113,7 @@ class AdminHotelFeaturePricesSettingsController extends ModuleAdminController 'class' => 'chosen', ), 'hotel_name' => array( - 'title' => $this->l('Hotel'), + 'title' => $this->l('Property'), 'align' => 'center', 'type' => 'select', 'filter_key' => 'hrt!id_hotel', diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelGeneralSettingsController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelGeneralSettingsController.php index e18ab1f4a..f11e57fc0 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelGeneralSettingsController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelGeneralSettingsController.php @@ -112,11 +112,11 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController 'hint' => $this->l('Enable if you want the next booking search field to be focused automatically after setting value for a field.'), ), 'WK_HOTEL_NAME_SEARCH_THRESHOLD' => array( - 'title' => $this->l('Hotel name search threshold'), + 'title' => $this->l('Property name search threshold'), 'type' => 'text', 'required' => true, 'validation' => 'isUnsignedInt', - 'hint' => $this->l('Enter the number of hotels after which user can search hotel by name.'), + 'hint' => $this->l('Enter the number of properties after which user can search property by name.'), 'desc' => $this->l('Set to 0 to always show the search box.'), 'class' => 'fixed-width-xxl', ), @@ -129,34 +129,34 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController 'title' => $this->l('Website Configuration'), 'fields' => array( 'WK_HTL_CHAIN_NAME' => array( - 'title' => $this->l('Hotel Name'), + 'title' => $this->l('Property Name'), 'type' => 'textLang', 'lang' => true, 'required' => true, 'validation' => 'isGenericName', - 'hint' => $this->l('Enter Hotel name in case of single hotel or enter your hotels chain name in case of multiple hotels.'), + 'hint' => $this->l('Enter Property name in case of single property or enter your properties chain name in case of multiple properties.'), ), 'WK_HTL_TAG_LINE' => array( - 'title' => $this->l('Hotel Tag Line'), + 'title' => $this->l('Property Tag Line'), 'type' => 'textareaLang', 'lang' => true, 'required' => true, 'validation' => 'isGenericName', - 'hint' => $this->l('This will display hotel tag line in hotel page.'), + 'hint' => $this->l('This will display property tag line in property page.'), ), 'WK_HTL_SHORT_DESC' => array( - 'title' => $this->l('Hotel Short Description'), + 'title' => $this->l('Property Short Description'), 'type' => 'textareaLang', 'lang' => true, 'required' => true, 'rows' => '4', 'cols' => '2', 'validation' => 'isGenericName', - 'hint' => $this->l('This will display hotel short description in footer. Note: number of letters must be less than 220.'), + 'hint' => $this->l('This will display property short description in footer. Note: number of letters must be less than 220.'), ), 'WK_PRIMARY_HOTEL' => array( - 'title' => $this->l('Primary hotel'), - 'hint' => $this->l('Primary hotel is used to default address for your business. The hotel address will be considered as your registered business address.'), + 'title' => $this->l('Primary property'), + 'hint' => $this->l('Primary property is used to default address for your business. The property address will be considered as your registered business address.'), 'type' => 'select', 'identifier' => 'id', 'list' => $hotelsInfo, @@ -541,41 +541,41 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController // End occupancy fields validation if (!$hotelNameSearchThreshold && $hotelNameSearchThreshold !== '0') { - $this->errors[] = $this->l('Hotel name search threshold field is required.'); + $this->errors[] = $this->l('Property name search threshold field is required.'); } elseif (!Validate::isUnsignedInt($hotelNameSearchThreshold)) { - $this->errors[] = $this->l('Hotel name search threshold field is invalid.'); + $this->errors[] = $this->l('Property name search threshold field is invalid.'); } if (!trim(Tools::getValue('WK_HTL_CHAIN_NAME_'.$defaultLangId))) { - $this->errors[] = $this->l('Hotel chain name is required at least in ').$objDefaultLanguage['name']; + $this->errors[] = $this->l('Property chain name is required at least in ').$objDefaultLanguage['name']; } else { foreach ($languages as $lang) { if (trim(Tools::getValue('WK_HTL_CHAIN_NAME_'.$lang['id_lang']))) { if (!Validate::isGenericName(Tools::getValue('WK_HTL_CHAIN_NAME_'.$lang['id_lang']))) { - $this->errors[] = $this->l('Invalid hotel chain name in ').$lang['name']; + $this->errors[] = $this->l('Invalid property chain name in ').$lang['name']; } } } } if (!trim(Tools::getValue('WK_HTL_TAG_LINE_'.$defaultLangId))) { - $this->errors[] = $this->l('Hotel tag line is required at least in ').$objDefaultLanguage['name']; + $this->errors[] = $this->l('Property tag line is required at least in ').$objDefaultLanguage['name']; } else { foreach ($languages as $lang) { if (trim(Tools::getValue('WK_HTL_TAG_LINE_'.$lang['id_lang']))) { if (!Validate::isGenericName(Tools::getValue('WK_HTL_TAG_LINE_'.$lang['id_lang']))) { - $this->errors[] = $this->l('Invalid Hotel tag line in ').$lang['name']; + $this->errors[] = $this->l('Invalid Property tag line in ').$lang['name']; } } } } if (!trim(Tools::getValue('WK_HTL_SHORT_DESC_'.$defaultLangId))) { - $this->errors[] = $this->l('Hotel short description is required at least in '). + $this->errors[] = $this->l('Property short description is required at least in '). $objDefaultLanguage['name']; } else { foreach ($languages as $lang) { if (trim(Tools::getValue('WK_HTL_SHORT_DESC_'.$lang['id_lang']))) { if (!Validate::isGenericName(Tools::getValue('WK_HTL_SHORT_DESC_'.$lang['id_lang']))) { - $this->errors[] = $this->l('Invalid hotel short description in ').$lang['name']; + $this->errors[] = $this->l('Invalid property short description in ').$lang['name']; } } } diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index 78eb518db..d3c728c63 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -644,7 +644,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController if (validate::isLoadedObject($objHotelBranch = new HotelBranchInformation($id_hotel))) { $hotelIdAddress = $objHotelBranch->getHotelIdAddress(); } else { - $this->errrors[] = $this->l('Hotel not found'); + $this->errrors[] = $this->l('Property not found'); } } @@ -985,11 +985,11 @@ class AdminHotelRoomsBookingController extends ModuleAdminController 'rooms_reallocation_url' => $this->context->link->getAdminLink('AdminHotelRoomsBooking'), 'rooms_booking_url' => $this->context->link->getAdminLink('AdminHotelRoomsBooking'), 'opt_select_all' => $this->l('All Types', null, true), - 'slt_another_htl' => $this->l('Select Another Hotel', null, true), + 'slt_another_htl' => $this->l('Select Another Property', null, true), 'product_type_cond' => $this->l('Product type is required', null, true), 'from_date_cond' => $this->l('From date is required', null, true), 'to_date_cond' => $this->l('To date is required', null, true), - 'hotel_name_cond' => $this->l('Hotel Name is required', null, true), + 'hotel_name_cond' => $this->l('Property Name is required', null, true), 'num_rooms_cond' => $this->l('Number of Rooms is required', null, true), 'add_to_cart' => $this->l('Add To Cart', null, true), 'remove' => $this->l('Remove', null, true), diff --git a/modules/hotelreservationsystem/views/templates/admin/assign_hotel_features/helpers/form/form.tpl b/modules/hotelreservationsystem/views/templates/admin/assign_hotel_features/helpers/form/form.tpl index c5b09363c..122b130cc 100644 --- a/modules/hotelreservationsystem/views/templates/admin/assign_hotel_features/helpers/form/form.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/assign_hotel_features/helpers/form/form.tpl @@ -33,7 +33,7 @@
    {if isset($edit)} {else}
    @@ -51,7 +51,7 @@ {/foreach} {else} - {l s='No hotels available' mod='hotelreservationsystem'} + {l s='No properties available' mod='hotelreservationsystem'} {/if} @@ -209,7 +209,7 @@ {else}
    - {l s='No Hotels' mod='hotelreservationsystem'} + {l s='No Properties Available' mod='hotelreservationsystem'}
    diff --git a/modules/qlohotelreview/controllers/admin/AdminHotelReviewHotelReview.php b/modules/qlohotelreview/controllers/admin/AdminHotelReviewHotelReview.php index a8e7d9284..79fbb9058 100644 --- a/modules/qlohotelreview/controllers/admin/AdminHotelReviewHotelReview.php +++ b/modules/qlohotelreview/controllers/admin/AdminHotelReviewHotelReview.php @@ -72,8 +72,8 @@ class AdminHotelReviewHotelReviewController extends ModuleAdminController 'class' => 'fixed-width-xs', ), 'hotel_name' => array( - 'title' => $this->l('Hotel'), - 'hint' => $this->l('Name of the hotel for which this review has been added.'), + 'title' => $this->l('Property Name'), + 'hint' => $this->l('Name of the property for which this review has been added.'), 'align' => 'left', 'callback' => 'getHotelLink', ), diff --git a/modules/statsbestcategories/statsbestcategories.php b/modules/statsbestcategories/statsbestcategories.php index c3eb94abf..781e28908 100644 --- a/modules/statsbestcategories/statsbestcategories.php +++ b/modules/statsbestcategories/statsbestcategories.php @@ -56,7 +56,7 @@ class StatsBestCategories extends ModuleGrid $this->columns = array( array( 'id' => 'name', - 'header' => $this->l('Hotel name'), + 'header' => $this->l('Property Name'), 'dataIndex' => 'hotel_name', 'align' => 'center' ), @@ -65,14 +65,14 @@ class StatsBestCategories extends ModuleGrid 'header' => $this->l('Room nights booked'), 'dataIndex' => 'totalRoomsBooked', 'align' => 'center', - 'tooltip' => $this->l('The room nights booked for the hotel.'), + 'tooltip' => $this->l('The room nights booked for the property.'), ), array( 'id' => 'availableRooms', 'header' => $this->l('Available room nights'), 'dataIndex' => 'availableRooms', 'align' => 'center', - 'tooltip' => $this->l('The total room nights available for booking for the hotel.'), + 'tooltip' => $this->l('The total room nights available for booking for the property.'), ), array( 'id' => 'totalOrders', diff --git a/modules/statsbestproducts/statsbestproducts.php b/modules/statsbestproducts/statsbestproducts.php index 74d0f8603..3128f5386 100644 --- a/modules/statsbestproducts/statsbestproducts.php +++ b/modules/statsbestproducts/statsbestproducts.php @@ -64,7 +64,7 @@ class StatsBestProducts extends ModuleGrid ), array( 'id' => 'hotelName', - 'header' => $this->l('Hotel name'), + 'header' => $this->l('Property Name'), 'dataIndex' => 'hotelName', 'align' => 'center', ), diff --git a/modules/statscatalog/statscatalog.php b/modules/statscatalog/statscatalog.php index aeb179514..4244a2f7c 100644 --- a/modules/statscatalog/statscatalog.php +++ b/modules/statscatalog/statscatalog.php @@ -46,7 +46,7 @@ class StatsCatalog extends Module parent::__construct(); - $this->displayName = $this->l('Hotel statistics'); + $this->displayName = $this->l('Property statistics'); $this->description = $this->l('Adds a tab containing general statistics about your catalog to the Stats dashboard.'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => '1.7.0.99'); } @@ -278,7 +278,7 @@ class StatsCatalog extends Module
    • '.$this->returnLine($this->l('Available room types'), ''.(int)$total).'
    • '.$this->returnLine($this->l('Average base price'), ''.Tools::displayPrice($average_price, $this->context->currency)).'
    • -
    • '.$this->returnLine($this->l('Hotel page views'), ''.(int)$total_hotel_page_viewed).'
    • +
    • '.$this->returnLine($this->l('Property page views'), ''.(int)$total_hotel_page_viewed).'
    • '.$this->returnLine($this->l('Room type page views'), ''.(int)$total_room_type_page_viewed).'
    • '.$this->returnLine($this->l('Booked room nights'), ''.(int)$total_booked_rooms).'
    • '.$this->returnLine($this->l('Average number of page visits'), ''.number_format((float)$average_viewed, 2, '.', '')).'
    • diff --git a/modules/statscheckup/statscheckup.php b/modules/statscheckup/statscheckup.php index 073b5aae2..f65446750 100644 --- a/modules/statscheckup/statscheckup.php +++ b/modules/statscheckup/statscheckup.php @@ -167,7 +167,7 @@ class StatsCheckUp extends Module
    - + '; foreach ($languages as $language) { $hotelsHtml .= ''; diff --git a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php index 133fc0bac..351d9fc48 100644 --- a/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php +++ b/modules/wkabouthotelblock/controllers/admin/AdminAboutHotelBlockSettingController.php @@ -36,7 +36,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController $this->fields_options = array( 'global' => array( - 'title' => $this->l('Hotel Interior Description'), + 'title' => $this->l('Property Interior Description'), 'icon' => 'icon-cogs', 'fields' => array( 'HOTEL_INTERIOR_HEADING' => array( @@ -188,7 +188,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController $this->fields_form = array( 'legend' => array( - 'title' => $this->l('Add New Hotel Interior Image'), + 'title' => $this->l('Add New Property Interior Image'), 'icon' => 'icon-list-ul' ), 'input' => array( @@ -200,7 +200,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController ), array( 'type' => 'file', - 'label' => $this->l('Hotel Interior Image'), + 'label' => $this->l('Property Interior Image'), 'name' => 'interior_img', 'required' => true, 'display_image' => true, @@ -252,7 +252,7 @@ class AdminAboutHotelBlockSettingController extends ModuleAdminController } if (!(Tools::getValue("id_interior_image") && !$file['size'])) { if (!$file['size']) { - $this->errors[] = $this->l('Hotel Interior Image Required.'); + $this->errors[] = $this->l('Property Interior Image Required.'); } elseif ($error = ImageManager::validateUpload($file, Tools::getMaxUploadSize())) { $this->errors[] = $error; } diff --git a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php index e4f6608a1..c53dc6fa5 100644 --- a/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php +++ b/modules/wkhotelfeaturesblock/controllers/admin/AdminFeaturesModuleSettingController.php @@ -42,7 +42,7 @@ class AdminFeaturesModuleSettingController extends ModuleAdminController // field options for global fields $this->fields_options = array( 'global' => array( - 'title' => $this->l('Hotel Amenity Setting'), + 'title' => $this->l('Property Amenity Setting'), 'icon' => 'icon-cogs', 'fields' => array( 'HOTEL_AMENITIES_HEADING' => array( @@ -278,7 +278,7 @@ class AdminFeaturesModuleSettingController extends ModuleAdminController } if (!$hotelAmenityId || $file['size']) { if (!$file['size']) { - $this->errors[] = $this->l('Hotel Amenity Image Required.'); + $this->errors[] = $this->l('Property Amenity Image Required.'); } elseif ($error = ImageManager::validateUpload($file, Tools::getMaxUploadSize())) { $this->errors[] = $error; } diff --git a/modules/wkhotelfeaturesblock/wkhotelfeaturesblock.php b/modules/wkhotelfeaturesblock/wkhotelfeaturesblock.php index 5538dcc1e..7f02b3c0b 100644 --- a/modules/wkhotelfeaturesblock/wkhotelfeaturesblock.php +++ b/modules/wkhotelfeaturesblock/wkhotelfeaturesblock.php @@ -40,8 +40,8 @@ class WkHotelFeaturesBlock extends Module $this->bootstrap = true; parent::__construct(); - $this->displayName = $this->l('Hotel Features'); - $this->description = $this->l('Show Hotel Amenities on the home page using this module.'); + $this->displayName = $this->l('Property Features'); + $this->description = $this->l('Show Property Amenities on the home page using this module.'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } diff --git a/modules/wkhotelfilterblock/wkhotelfilterblock.php b/modules/wkhotelfilterblock/wkhotelfilterblock.php index 17226b9a2..2acc75b23 100644 --- a/modules/wkhotelfilterblock/wkhotelfilterblock.php +++ b/modules/wkhotelfilterblock/wkhotelfilterblock.php @@ -41,7 +41,7 @@ class wkhotelfilterblock extends Module parent::__construct(); $this->displayName = $this->l('Layered filters and sorting block'); - $this->description = $this->l('Hotel filter and sorting block'); + $this->description = $this->l('Property filter and sorting block'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } diff --git a/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php b/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php index 90528dfb1..bbc4f5292 100644 --- a/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php +++ b/modules/wkhotelroom/controllers/admin/AdminHotelRoomModuleSettingController.php @@ -43,26 +43,26 @@ class AdminHotelRoomModuleSettingController extends ModuleAdminController $this->fields_options = array( 'global' => array( - 'title' => $this->l('Hotel Room Display Setting'), + 'title' => $this->l('Property Room Display Setting'), 'icon' => 'icon-cogs', 'fields' => array( 'HOTEL_ROOM_DISPLAY_HEADING' => array( - 'title' => $this->l('Hotel Room Block Title'), + 'title' => $this->l('Property Room Block Title'), 'type' => 'textLang', 'lang' => true, 'required' => true, 'validation' => 'isGenericName', - 'hint' => $this->l('Enter a title for the hotel rooms block.'), + 'hint' => $this->l('Enter a title for the property rooms block.'), ), 'HOTEL_ROOM_DISPLAY_DESCRIPTION' => array( - 'title' => $this->l('Hotel room block description'), + 'title' => $this->l('Property room block description'), 'type' => 'textareaLang', 'lang' => true, 'required' => true, 'validation' => 'isGenericName', 'rows' => '4', 'cols' => '2', - 'hint' => $this->l('Enter a description for the hotel rooms block.'), + 'hint' => $this->l('Enter a description for the property rooms block.'), ), ), 'submit' => array('title' => $this->l('Save')) @@ -91,7 +91,7 @@ class AdminHotelRoomModuleSettingController extends ModuleAdminController 'orderby' => false, ), 'hotel_name' => array( - 'title' => $this->l('Hotel'), + 'title' => $this->l('Property'), 'align' => 'center', 'orderby' => false, ), @@ -335,25 +335,25 @@ class AdminHotelRoomModuleSettingController extends ModuleAdminController $objDefaultLanguage = Language::getLanguage((int) $defaultLangId); $languages = Language::getLanguages(false); if (!trim(Tools::getValue('HOTEL_ROOM_DISPLAY_HEADING_'.$defaultLangId))) { - $this->errors[] = $this->l('Hotel rooms block title is required at least in '). + $this->errors[] = $this->l('Property rooms block title is required at least in '). $objDefaultLanguage['name']; } else { foreach ($languages as $lang) { if (trim(Tools::getValue('HOTEL_ROOM_DISPLAY_HEADING_'.$lang['id_lang']))) { if (!Validate::isGenericName(Tools::getValue('HOTEL_ROOM_DISPLAY_HEADING_'.$lang['id_lang']))) { - $this->errors[] = $this->l('Invalid hotel rooms block title in ').$lang['name']; + $this->errors[] = $this->l('Invalid property rooms block title in ').$lang['name']; } } } } if (!trim(Tools::getValue('HOTEL_ROOM_DISPLAY_DESCRIPTION_'.$defaultLangId))) { - $this->errors[] = $this->l('Hotel rooms block description is required at least in '). + $this->errors[] = $this->l('Property rooms block description is required at least in '). $objDefaultLanguage['name']; } else { foreach ($languages as $lang) { if (trim(Tools::getValue('HOTEL_ROOM_DISPLAY_DESCRIPTION_'.$lang['id_lang']))) { if (!Validate::isGenericName(Tools::getValue('HOTEL_ROOM_DISPLAY_DESCRIPTION_'.$lang['id_lang']))) { - $this->errors[] = $this->l('Invalid hotel rooms block description in ').$lang['name']; + $this->errors[] = $this->l('Invalid property rooms block description in ').$lang['name']; } } } diff --git a/modules/wkroomsearchblock/wkroomsearchblock.php b/modules/wkroomsearchblock/wkroomsearchblock.php index 7629e3aac..a47a38ec2 100644 --- a/modules/wkroomsearchblock/wkroomsearchblock.php +++ b/modules/wkroomsearchblock/wkroomsearchblock.php @@ -71,13 +71,13 @@ class WkRoomSearchBlock extends Module 'autocompletesearch' ), 'no_results_found_cond' => $this->l('No results found for this search', false, true), - 'hotel_name_cond' => $this->l('Please select a hotel name', false, true), + 'hotel_name_cond' => $this->l('Please select a property name', false, true), 'check_in_time_cond' => $this->l('Please enter Check In time', false, true), 'check_out_time_cond' => $this->l('Please enter Check Out time', false, true), 'less_checkin_date' => $this->l('Check In date can not be before current date.', false, true), 'more_checkout_date' => $this->l('Check Out date must be greater than Check In date.', false, true), - 'hotel_location_txt' => $this->l('Hotel Location', false, true), - 'select_htl_txt' => $this->l('Select Hotel', false, true), + 'hotel_location_txt' => $this->l('Property Location', false, true), + 'select_htl_txt' => $this->l('Select Property', false, true), 'select_age_txt' => $this->l('Select age', false, true), 'under_1_age' => $this->l('Under 1', false, true), 'room_txt' => $this->l('Stay', false, true), diff --git a/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php b/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php index 7c3ad8a2c..2d4feac9d 100644 --- a/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php +++ b/modules/wktestimonialblock/controllers/admin/AdminTestimonialsModuleSettingController.php @@ -37,7 +37,7 @@ class AdminTestimonialsModuleSettingController extends ModuleAdminController $this->fields_options = array( 'modulesetting' => array( - 'title' => $this->l('Hotel Testimonials Setting'), + 'title' => $this->l('Property Testimonials Setting'), 'fields' => array( 'HOTEL_TESIMONIAL_BLOCK_HEADING' => array( 'title' => $this->l('Testimonial block title'), @@ -154,7 +154,7 @@ class AdminTestimonialsModuleSettingController extends ModuleAdminController $this->fields_form = array( 'legend' => array( - 'title' => $this->l('Hotel Testimonial Configuration'), + 'title' => $this->l('Property Testimonial Configuration'), 'icon' => 'icon-globe' ), 'input' => array( diff --git a/modules/wktestimonialblock/wktestimonialblock.php b/modules/wktestimonialblock/wktestimonialblock.php index bdf04f06c..8305910a9 100644 --- a/modules/wktestimonialblock/wktestimonialblock.php +++ b/modules/wktestimonialblock/wktestimonialblock.php @@ -42,8 +42,8 @@ class WkTestimonialBlock extends Module $this->bootstrap = true; parent::__construct(); - $this->displayName = $this->l('Hotel Testimonial'); - $this->description = $this->l('Show Hotel testimonials on home page using this module.'); + $this->displayName = $this->l('Property Testimonial'); + $this->description = $this->l('Show Property testimonials on home page using this module.'); $this->ps_versions_compliancy = array('min' => '1.6', 'max' => _PS_VERSION_); } diff --git a/pdf/order-slip.product-tab.tpl b/pdf/order-slip.product-tab.tpl index 67a02f0e0..b0e382a29 100644 --- a/pdf/order-slip.product-tab.tpl +++ b/pdf/order-slip.product-tab.tpl @@ -31,7 +31,7 @@ - + diff --git a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl index fa9a8051b..ca1901956 100644 --- a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl +++ b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl @@ -215,7 +215,7 @@
    - {l s='Hotel Name' mod='blockcart'}  -  + {l s='Property Name' mod='blockcart'}  - 
    diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl index f7f03580a..682198561 100644 --- a/themes/hotel-reservation-theme/order-detail.tpl +++ b/themes/hotel-reservation-theme/order-detail.tpl @@ -121,7 +121,7 @@
    {else} -
    {l s='Hotel details not available.'}
    +
    {l s='Property details not available.'}
    {/if} diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index 8453e6e82..364fe2c31 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -329,7 +329,7 @@
    - {l s='Hotel Images'} + {l s='Property Images'}
    From 5541f6761466e96526b81ab6572fb949853dbaff Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Wed, 20 May 2026 15:21:24 +0530 Subject: [PATCH 15/93] fix: issue get only active room type selling object --- .../hotelreservationsystem/classes/HotelRoomType.php | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/modules/hotelreservationsystem/classes/HotelRoomType.php b/modules/hotelreservationsystem/classes/HotelRoomType.php index 1f6e5fd6b..fb5cbaeea 100644 --- a/modules/hotelreservationsystem/classes/HotelRoomType.php +++ b/modules/hotelreservationsystem/classes/HotelRoomType.php @@ -244,8 +244,11 @@ class HotelRoomType extends ObjectModel AND hbl.`id_lang` = '.(int)$idLang.') LEFT JOIN `'._DB_PREFIX_.'product` AS p ON (p.`id_product` = hrt.`id_product`) + LEFT JOIN `'._DB_PREFIX_.'room_type_selling_object` AS hrtso + ON (hrtso.`id_room_type_selling_object` = p.`id_room_type_selling_object` + AND hrtso.`active` = 1) LEFT JOIN `'._DB_PREFIX_.'room_type_selling_object_lang` AS hrtstl - ON (hrtstl.`id_room_type_selling_object` = p.`id_room_type_selling_object` + ON (hrtstl.`id_room_type_selling_object` = hrtso.`id_room_type_selling_object` AND hrtstl.`id_lang` = '.(int)$idLang.') WHERE hrt.`id_product` = '.(int)$id_product; @@ -321,8 +324,11 @@ class HotelRoomType extends ObjectModel INNER JOIN `'._DB_PREFIX_.'htl_room_information` AS `hri` ON (hri.`id_product` = hrt.`id_product`)'; $sql .= ' INNER JOIN `'._DB_PREFIX_.'product_lang` pl ON (hrt.`id_product` = pl.`id_product` AND pl.`id_lang` = '.(int)$idLang.')'; $sql .= ' LEFT JOIN `'._DB_PREFIX_.'product` AS p ON (p.`id_product` = hrt.`id_product`) + LEFT JOIN `'._DB_PREFIX_.'room_type_selling_object` AS hrtso + ON (hrtso.`id_room_type_selling_object` = p.`id_room_type_selling_object` + AND hrtso.`active` = 1) LEFT JOIN `'._DB_PREFIX_.'room_type_selling_object_lang` AS hrtstl - ON (hrtstl.`id_room_type_selling_object` = p.`id_room_type_selling_object` + ON (hrtstl.`id_room_type_selling_object` = hrtso.`id_room_type_selling_object` AND hrtstl.`id_lang` = '.(int)$idLang.')'; if ($position) { From b3240226005394f832a2073ca0ab8a2bb31519e4 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Mon, 25 May 2026 14:33:49 +0530 Subject: [PATCH 16/93] Fixed: Service product prices are incorrect when added to an order created in a different currency. --- .../normal_products/informations.tpl | 41 ++- .../controllers/normal_products/prices.tpl | 46 ++- .../normal_products/selected_option.tpl | 98 ++++++ .../orders/_cart_booking_demands.tpl | 2 +- .../_add_order_extra_services_tab_content.tpl | 32 +- ..._extra_services_facilities_tab_content.tpl | 6 +- ..._services_service_products_tab_content.tpl | 36 ++- classes/Cart.php | 216 ++++++------- classes/PaymentModule.php | 42 +-- classes/Product.php | 24 +- classes/order/Order.php | 25 +- classes/order/OrderDetail.php | 22 +- classes/order/OrderInvoice.php | 6 +- .../WebserviceSpecificManagementBookings.php | 21 +- controllers/admin/AdminCartsController.php | 126 ++++++-- .../admin/AdminNormalProductsController.php | 51 +-- controllers/admin/AdminOrdersController.php | 293 +++++++++++------- controllers/admin/AdminProductsController.php | 18 +- controllers/admin/AdminStatsController.php | 4 +- controllers/front/CartController.php | 52 +++- controllers/front/GuestTrackingController.php | 33 +- .../front/OrderConfirmationController.php | 93 +++--- controllers/front/OrderDetailController.php | 87 ++---- js/admin.js | 12 + js/admin/normal_products.js | 39 +-- modules/blockcart/ajax-cart.js | 20 +- .../classes/HotelCartBookingData.php | 19 ++ .../classes/HotelHelper.php | 2 +- .../classes/RoomTypeServiceProduct.php | 7 +- .../classes/ServiceProductCartDetail.php | 24 +- .../helpers/view/view.tpl | 2 +- .../qlostatsserviceproducts.php | 25 +- .../_partials/cart_booking_demands.tpl | 4 +- .../_partials/service-products-list-row.tpl | 2 +- .../js/modules/blockcart/ajax-cart.js | 22 +- .../modules/blockcart/blockcart.tpl | 6 +- .../order-confirmation.tpl | 16 +- .../hotel-reservation-theme/order-detail.tpl | 2 +- themes/hotel-reservation-theme/product.tpl | 2 +- 39 files changed, 940 insertions(+), 638 deletions(-) create mode 100644 admin/themes/default/template/controllers/normal_products/selected_option.tpl diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index 3bf54bd1b..b1d0b9f72 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -231,21 +231,34 @@
    {* Code For Standard product working *}
    -
    diff --git a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl index 3dc6241f0..d56daffe8 100644 --- a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl @@ -96,7 +96,7 @@ $selectedRoomServiceProduct['date_from'], $selectedRoomServiceProduct['date_to'] ) > 1} - {l s='/ night'} + {l s='/ day'} {/if} {/if} @@ -134,16 +134,26 @@
    - - + + +
    + +
    +
    + +
    +
    + +
    diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl index 3537d8dd2..e4f40435a 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl @@ -51,7 +51,7 @@ {$currencySign} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ night'} + {l s='/ day'} {/if}
    @@ -122,7 +122,7 @@ {/if} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ night'} + {l s='/ day'} {/if}
    @@ -159,7 +159,7 @@ diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl index 4f6ce1c58..d8d3ef96d 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl @@ -87,7 +87,7 @@ $additionalServices['date_from'], $additionalServices['date_to'] ) > 1} - {l s='/ night'} + {l s='/ day'} {/if} @@ -161,7 +161,7 @@ $additionalServices['date_from'], $additionalServices['date_to'] ) > 1} - {l s='/ night'} + {l s='/ day'} {/if} @@ -197,16 +197,26 @@
    - - + + +
    + +
    +
    + +
    +
    + +
    @@ -304,7 +314,7 @@ $additionalServices['date_from'], $additionalServices['date_to'] ) > 1} - {l s='/ night'} + {l s='/ day'} {/if}
    - + diff --git a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl index da29873a8..bb77c1095 100644 --- a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl @@ -99,7 +99,7 @@ $selectedRoomServiceProduct['date_from'], $selectedRoomServiceProduct['date_to'] ) > 1} - {l s='/ day'} + {l s='/ night'} {/if} {/if} diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl index e4f40435a..3537d8dd2 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_facilities_tab_content.tpl @@ -51,7 +51,7 @@ {$currencySign} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ day'} + {l s='/ night'} {/if} @@ -122,7 +122,7 @@ {/if} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ day'} + {l s='/ night'} {/if} @@ -159,7 +159,7 @@ diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl index b322c7dde..de2af862f 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl @@ -89,7 +89,7 @@ $additionalServices['date_from'], $additionalServices['date_to'] ) > 1} - {l s='/ day'} + {l s='/ night'} {/if} @@ -164,7 +164,7 @@ $additionalServices['date_from'], $additionalServices['date_to'] ) > 1} - {l s='/ day'} + {l s='/ night'} {/if} @@ -320,7 +320,7 @@ $additionalServices['date_from'], $additionalServices['date_to'] ) > 1} - {l s='/ day'} + {l s='/ night'} {/if} @@ -729,8 +729,8 @@ {assign var=room_services_price_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_te)} {assign var=room_services_price_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + $total_demands_price_ti)} - {assign var=total_standard_products_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} - {assign var=total_standard_products_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE))} + {assign var=total_standard_products_tax_incl value=($order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_STANDALONE) + $order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_HOTEL))} + {assign var=total_standard_products_tax_excl value=($order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_STANDALONE) + $order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_HOTEL))} {assign var=total_tax_without_discount value=(($room_price_tax_incl - $room_price_tax_excl) + ($room_services_price_tax_incl - $room_services_price_tax_excl) + ($total_standard_products_tax_incl - $total_standard_products_tax_excl))} @@ -979,7 +979,7 @@ ({$hotel_booking_detail.adults|string_format:'%02d'} {if $hotel_booking_detail.adults > 1}{l s='Adults'}{else}{l s='Adult'}{/if}{if $hotel_booking_detail.children > 0}{l s=', '}{$hotel_booking_detail.children|string_format:'%02d'} {if $hotel_booking_detail.children > 1}{l s='Children'}{else}{l s='Child'}{/if}{/if}) - {if $hotel_booking_detail.is_cancelled}{l s='Cancelled'}{else if $hotel_booking_detail.is_refunded}{l s='Refunded'}{else if $hotel_booking_detail.refund_denied}{l s='Refund denied'}{else if $hotel_booking_detail.id_status != $ROOM_STATUS_ALLOTED}{if $hotel_booking_detail.id_status == $ROOM_STATUS_CHECKED_OUT}{l s='Checked-Out'}{else}{l s='Checked-In'}{/if}{/if} + {if $hotel_booking_detail.is_cancelled}{l s='Cancelled'}{else if $hotel_booking_detail.is_refunded}{l s='Refunded'}{else if $hotel_booking_detail.refund_denied}{l s='Refund denied'} {include file='_partials/htl-tooltip.tpl' tooltip_content={l s='Refund for this booking is denied. Please contact admin for more detail.'}}{else if $hotel_booking_detail.id_status != $ROOM_STATUS_ALLOTED}{if $hotel_booking_detail.id_status == $ROOM_STATUS_CHECKED_OUT}{l s='Checked-Out'}{else}{l s='Checked-In'}{/if}{/if} @@ -1037,7 +1037,7 @@ {$product_option.name}{if isset($product_option.option_name) && $product_option.option_name} : {$product_option.option_name}{/if} - {if $product_option.is_cancelled}{l s='Cancelled'}{else if $product_option.is_refunded}{l s='Refunded'}{else if isset($product_option.refund_denied) && $product_option.refund_denied}{l s='Refund denied'}{/if} + {if $product_option.is_cancelled}{l s='Cancelled'}{else if $product_option.is_refunded}{l s='Refunded'}{else if isset($product_option.refund_denied) && $product_option.refund_denied}{l s='Refund denied'} {include file='_partials/htl-tooltip.tpl' tooltip_content={l s='Refund for this product is denied. Please contact admin for more detail.'}}{/if} {if $product_option.allow_multiple_quantity}
    diff --git a/themes/hotel-reservation-theme/shopping-cart-detail.tpl b/themes/hotel-reservation-theme/shopping-cart-detail.tpl index ccbb199e7..668006b40 100644 --- a/themes/hotel-reservation-theme/shopping-cart-detail.tpl +++ b/themes/hotel-reservation-theme/shopping-cart-detail.tpl @@ -120,22 +120,18 @@
    -

    - - {displayPrice price=($rm_v['amount'])} - +

    + {displayPrice price=($rm_v['amount'])} {if (($rm_v['amount'] - $rm_v['amount_without_auto_add']) > 0) && (in_array($data_v['id_product'], $discounted_products) || $PS_ROOM_PRICE_AUTO_ADD_BREAKDOWN)} - - - -

    {l s='Total rooms price'} {if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}

    From b4a087be55f998bc38a685d83a43d5822b114bb9 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Mon, 1 Jun 2026 11:35:05 +0530 Subject: [PATCH 23/93] Fix price calculation issue labal --- .../_partials/cart_booking_demands.tpl | 4 ++-- .../_partials/service-products-list-row.tpl | 2 +- themes/hotel-reservation-theme/product.tpl | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl index a7c56b4b1..fe620e385 100644 --- a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl +++ b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl @@ -82,7 +82,7 @@

    - {if isset($selected_adv_option) && isset($demand['adv_option'][$selected_adv_option]['price'])}{convertPrice price = $demand['adv_option'][$selected_adv_option]['price']|escape:'html':'UTF-8'}{else}{convertPrice price = $demand['price']|escape:'html':'UTF-8'}{/if}{if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/Day'}{/if} + {if isset($selected_adv_option) && isset($demand['adv_option'][$selected_adv_option]['price'])}{convertPrice price = $demand['adv_option'][$selected_adv_option]['price']|escape:'html':'UTF-8'}{else}{convertPrice price = $demand['price']|escape:'html':'UTF-8'}{/if}{if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/Night'}{/if}

    @@ -183,7 +183,7 @@ $product.price_calculation_method, $cartRoom.date_from|default:'', $cartRoom.date_to|default:'' - ) > 1}{l s='/Day'}{/if} + ) > 1}{l s='/Night'}{/if} {/if} diff --git a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl index 8aba19cd4..ea97398e2 100644 --- a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl +++ b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl @@ -86,7 +86,7 @@ $service_product.date_from|default:$date_from|default:'', $service_product.date_to|default:$date_to|default:'' ) > 1} - {l s='/Day'} + {l s='/Night'} {/if} {/block} {if $service_product.allow_multiple_quantity && $service_product.available_for_order && $service_product.max_quantity > 0} diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index c6f23c5e2..f9836c246 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -455,7 +455,7 @@
    {/if}
    -

    {$demand['name']|escape:'html':'UTF-8'} {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}{convertPrice price = $demand['price']}{if $demand['price_calc_method'] == $WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/day'}{/if}{/if}

    +

    {$demand['name']|escape:'html':'UTF-8'} {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}{convertPrice price = $demand['price']}{if $demand['price_calc_method'] == $WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/night'}{/if}{/if}

    {if isset($demand['adv_option']) && $demand['adv_option']}
    @@ -136,8 +165,34 @@ + {capture name='adm_pcm_tooltip_content'} + {assign var="priceCalcMethod" value=$product['price_calculation_method']|default:0} +
    +
    +
      + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-in day'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='During-stay days'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-out day'}
    • + {/if} +
    +
    + {/capture} + {include file='helpers/tooltip.tpl' tooltip_content=$smarty.capture.adm_pcm_tooltip_content allow_html=true} + + {capture name='room_type_service_pcm_tooltip_content'} + {assign var="priceCalcMethod" value=$service['price_calculation_method']|default:0} +
    +
    +
      + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-in day'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='During-stay days'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-out day'}
    • + {/if} +
    +
    + {/capture} + {include file='helpers/tooltip.tpl' tooltip_content=$smarty.capture.room_type_service_pcm_tooltip_content allow_html=true} {if !$isRefundCompleted} - - - - - - - - - - - - -
    {l s='Hotel'}{l s='Property'} {l s='All'} diff --git a/admin/themes/default/template/controllers/orders/modals/_cancel_room_bookings.tpl b/admin/themes/default/template/controllers/orders/modals/_cancel_room_bookings.tpl index 6335b7549..5cdf0462c 100644 --- a/admin/themes/default/template/controllers/orders/modals/_cancel_room_bookings.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_cancel_room_bookings.tpl @@ -45,7 +45,7 @@ {l s='Stay No.'} {l s='Room Type'}{l s='Hotel Name'}{l s='Property Name'} {l s='Duration'} {l s='Total Price (Tax incl.)'}
    {l s="Stay Num"} {l s="Room Type"}{l s="Hotel"}{l s="Property Name"} {l s="Duration"}
    {l s="Room Type"}{l s="Hotel"}{l s="Property Name"} {l s="Stays Qty"} {l s="Duration"}
    '.$this->l('ID').''.(!$this->id_hotel ? $this->l('Hotel') : $this->l('Room type')).''.(!$this->id_hotel ? $this->l('Property') : $this->l('Room type')).' '.$this->l('Active').''.$this->l('Desc.').' ('.Tools::strtoupper($language['iso_code']).')
    {l s='Room Type / Reference' pdf='true'}{l s='Hotel' pdf='true'}{l s='Property Name' pdf='true'} {l s='Duration' pdf='true'} {l s='Num stays' pdf='true'} {l s='Total Price' pdf='true'}
    {if $tax_excluded_display}{l s='(Tax Excl.)' pdf='true'}{else}{l s='(Tax Incl.)' pdf='true'}{/if}
    {displayPrice price=$demand['unit_price_tax_excl'] currency=$orderCurrency} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ night'} + {l s='/ day'} {/if} {displayPrice price=$demand['total_price_tax_excl'] currency=$orderCurrency} diff --git a/classes/Cart.php b/classes/Cart.php index ced44ff2d..d544f3cf9 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -827,7 +827,7 @@ class CartCore extends ObjectModel $serviceProducts = array(); $context = Context::getContext(); foreach ($productList as $key => $product) { - if (!$product['booking_product'] && Product::isSellableAsStandalone($product['selling_preference_type'])) { + if (!$product['booking_product'] && Product::isSellableAsStandalone($product['selling_preference_type'] && !Product::isSellableWithRoomType($product['selling_preference_type']))) { if (Validate::isLoadedObject( $objProduct = new Product($product['id_product'], false, $this->id_lang) )) { @@ -1756,124 +1756,102 @@ class CartCore extends ObjectModel $canSellWithRoomType = Product::isSellableWithRoomType($product['selling_preference_type']); $canSellWithHotel = Product::isSellableWithHotel($product['selling_preference_type']); $canSellAsStandalone = Product::isSellableAsStandalone($product['selling_preference_type']); + $isRoomServiceTotalType = in_array($type, array( + Cart::ONLY_ROOM_SERVICES, + 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, + )); - if ($canSellAsStandalone - && (!$canSellWithHotel && !$canSellWithRoomType - || ($type == Cart::ONLY_STANDALONE_PRODUCTS && !$canSellWithHotel)) - ) { + if ($canSellAsStandalone && !$isRoomServiceTotalType) { $idHotelCartBooking = isset($product['id_hotel_cart_booking']) ? (int)$product['id_hotel_cart_booking'] : 0; $idHotel = isset($product['id_hotel']) ? (int)$product['id_hotel'] : 0; - if ($servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( + if ($serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, [], - $idHotel, - $idHotelCartBooking, + 0, + 0, null, (int)$product['id_product'] )) { - foreach ($servicePorducts as $servicePorduct) { + foreach ($serviceProducts as $serviceProduct) { if ($with_taxes) { - $priceAdd = $servicePorduct['unit_price_tax_incl']; + $priceAdd = $serviceProduct['unit_price_tax_incl']; } else { - $priceAdd = $servicePorduct['unit_price_tax_excl']; + $priceAdd = $serviceProduct['unit_price_tax_excl']; } if ($ps_round_type == Order::ROUND_TOTAL) { - $products_total[$id_tax_rules_group.'_'.$id_address] += $priceAdd * (int)$servicePorduct['quantity']; + $products_total[$id_tax_rules_group.'_'.$id_address] += $priceAdd * (int)$serviceProduct['quantity']; } else { - $products_total[$id_tax_rules_group] += $priceAdd * (int)$servicePorduct['quantity']; + $products_total[$id_tax_rules_group] += $priceAdd * (int)$serviceProduct['quantity']; } + } } - } else if ($canSellWithHotel) { - $isRoomServiceTotalType = in_array($type, array( - Cart::ONLY_ROOM_SERVICES, - 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, - )); - $id_hotel = null; - $id_hotel_cart_booking = null; - if ($param_product) { - if (isset($product['id_hotel']) && (int)$product['id_hotel']) { - $id_hotel = (int)$product['id_hotel']; - } - if (isset($product['id_hotel_cart_booking']) && (int)$product['id_hotel_cart_booking']) { - $id_hotel_cart_booking = (int)$product['id_hotel_cart_booking']; - } - } - - $servicePorducts = $objServiceProductCartDetail->getServiceProductsInCart( - $this->id, - [], - null, - null, - null, - (int)$product['id_product'] - ); - - if ($servicePorducts) { - foreach ($servicePorducts as $servicePorduct) { - if ($param_product) { - if ($id_hotel_cart_booking !== null - && (int)$servicePorduct['id_hotel_cart_booking'] !== $id_hotel_cart_booking - ) { - continue; - } - if ($id_hotel_cart_booking === null - && $id_hotel !== null - && ( - !empty($servicePorduct['id_hotel_cart_booking']) - || (int)$servicePorduct['id_hotel'] !== $id_hotel - ) - ) { - continue; - } - } - if ($isRoomServiceTotalType && empty($servicePorduct['id_hotel_cart_booking'])) { - continue; - } - if ($type == Cart::ONLY_STANDALONE_PRODUCTS - && !empty($servicePorduct['id_hotel_cart_booking']) - ) { - continue; - } - if ($with_taxes) { - $priceAdd = $servicePorduct['total_price_tax_incl']; - } else { - $priceAdd = $servicePorduct['total_price_tax_excl']; - } - - if ($ps_round_type == Order::ROUND_TOTAL) { - $products_total[$id_tax_rules_group.'_'.$id_address] += $priceAdd; - } else { - $products_total[$id_tax_rules_group] += $priceAdd; - } - } - } - } else if ($canSellWithRoomType) { - $isRoomServiceTotalType = in_array($type, array( - Cart::ONLY_ROOM_SERVICES, - 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, - )); - - $idHotelCartBooking = null; - if ($param_product && isset($product['id_hotel_cart_booking'])) { - $idHotelCartBooking = (int)$product['id_hotel_cart_booking']; + } + if ($canSellWithHotel ) { + if ($type == Cart::ONLY_ROOM_SERVICES + || $type == Cart::ONLY_CONVENIENCE_FEE + || $type == Cart::ONLY_ROOM_SERVICES_WITHOUT_AUTO_ADD + || $type == Cart::ONLY_ROOM_SERVICES_WITHOUT_CONVENIENCE_FEE + || $type == Cart::ONLY_ROOM_SERVICES_WITH_AUTO_ADD_WITHOUT_CONVENIENCE_FEE + ) { + $serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( + $this->id, + [], + 0, + null, + null, + (int)$product['id_product'] + ); } elseif ($type == Cart::ONLY_STANDALONE_PRODUCTS) { - $idHotelCartBooking = 0; + $serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( + $this->id, + [], + null, + 0, + null, + (int)$product['id_product'] + ); + } else { + $serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( + $this->id, + [], + isset($product['id_hotel']) ? $product['id_hotel'] : null, + null, + null, + (int)$product['id_product'] + ); } + if ($serviceProducts) { + foreach ($serviceProducts as $serviceProduct) { + if(!empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_hotel_cart_booking'])) { + if ($with_taxes) { + $priceAdd = $serviceProduct['total_price_tax_incl']; + } else { + $priceAdd = $serviceProduct['total_price_tax_excl']; + } + + if ($ps_round_type == Order::ROUND_TOTAL) { + $products_total[$id_tax_rules_group.'_'.$id_address] += $priceAdd; + } else { + $products_total[$id_tax_rules_group] += $priceAdd; + } + } + } + } + } + if ($canSellWithRoomType && $type !== Cart::ONLY_STANDALONE_PRODUCTS) { + if ($servicesWithRoom = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, [], 0, - $idHotelCartBooking, + null, null, (int)$product['id_product'], null, @@ -1883,27 +1861,19 @@ class CartCore extends ObjectModel (int)$product['price_addition_type'] )) { foreach ($servicesWithRoom as $service) { - if ($param_product && $idHotelCartBooking !== null) { - if (!$idHotelCartBooking && !empty($service['id_hotel_cart_booking'])) { - continue; + if(!empty($service['id_hotel_cart_booking']) && empty($service['id_hotel'])) { + if ($with_taxes) { + $servicePrice = $service['total_price_tax_incl']; + } else { + $servicePrice = $service['total_price_tax_excl']; } - if ($idHotelCartBooking && (int)$service['id_hotel_cart_booking'] !== $idHotelCartBooking) { - continue; - } - } elseif ($isRoomServiceTotalType && empty($service['id_hotel_cart_booking'])) { - continue; - } - if ($with_taxes) { - $servicePrice = $service['total_price_tax_incl']; - } else { - $servicePrice = $service['total_price_tax_excl']; - } - // Rounding as per configurations - if ($ps_round_type == Order::ROUND_TOTAL) { - $products_total[$id_tax_rules_group.'_'.$id_address] += $servicePrice; - } else { - $products_total[$id_tax_rules_group] += $servicePrice; + // Rounding as per configurations + if ($ps_round_type == Order::ROUND_TOTAL) { + $products_total[$id_tax_rules_group.'_'.$id_address] += $servicePrice; + } else { + $products_total[$id_tax_rules_group] += $servicePrice; + } } } } @@ -2495,16 +2465,12 @@ class CartCore extends ObjectModel 'id_hotel_cart_booking' => $selectedProduct['id_hotel_cart_booking'], ); } - if (Product::PRICE_CALCULATION_METHOD_PER_DAY == $selectedProduct['price_calculation_method']) { - $numDays = HotelHelper::getNumberOfDays( - $selectedProduct['date_from'], - $selectedProduct['date_to'] - ); - $array[$selectedProduct['id_room_type_hotel']]['quantity'] += ($selectedProduct['quantity'] * $numDays); - } else { - $array[$selectedProduct['id_room_type_hotel']]['quantity'] += $selectedProduct['quantity']; - - } + $numDays = Product::getPriceCalculationApplicableDays( + $selectedProduct['price_calculation_method'], + $selectedProduct['date_from'], + $selectedProduct['date_to'] + ); + $array[$selectedProduct['id_room_type_hotel']]['quantity'] += ($selectedProduct['quantity'] * $numDays); } if ($array) { @@ -2512,8 +2478,8 @@ class CartCore extends ObjectModel $product['cart_quantity'] = $selectedProduct['quantity']; $product['total'] = $selectedProduct['total_price_tax_excl']; $product['total_wt'] = $selectedProduct['total_price_tax_incl']; - $product['price_wt'] = $selectedProduct['total_price_tax_incl'] / $selectedProduct['quantity']; - $product['price'] = $selectedProduct['total_price_tax_excl'] / $selectedProduct['quantity']; + $product['price_wt'] = $selectedProduct['total_price_tax_incl'] / max($selectedProduct['quantity'], 1); + $product['price'] = $selectedProduct['total_price_tax_excl'] / max($selectedProduct['quantity'], 1); $product['id_hotel'] = $selectedProduct['id_hotel']; $product['id_room_type'] = $selectedProduct['id_room_type']; $product['id_hotel_cart_booking'] = $selectedProduct['id_hotel_cart_booking']; diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index a022f3484..43158862f 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -505,7 +505,6 @@ abstract class PaymentModuleCore extends Module $objMail = new Mail(); $objServiceProductCartDetail = new ServiceProductCartDetail(); $cart_rules = $this->context->cart->getCartRules(); - foreach ($order_detail_list as $key => $order_detail) { /** @var OrderDetail $order_detail */ @@ -541,7 +540,6 @@ abstract class PaymentModuleCore extends Module $product_var_tpl_list = array(); $orderServiceProducts = array(); - $processedServiceProductCartIds = array(); $objProduct = new Product(); foreach ($order->product_list as $product) { @@ -970,11 +968,9 @@ abstract class PaymentModuleCore extends Module $objServiceProductCartDetail = new ServiceProductCartDetail(); foreach ($normalProducts as $product) { $idProduct = $product['id_product']; - $canSellWithRoomType = Product::isSellableWithRoomType($product['selling_preference_type']); - $canSellWithHotel = Product::isSellableWithHotel($product['selling_preference_type']); - $canSellAsStandalone = Product::isSellableAsStandalone($product['selling_preference_type']); + $productSellingType = $product['selling_preference_type']; - if ($canSellWithRoomType && !$canSellWithHotel && !$canSellAsStandalone) { + if (Product::isSellableWithRoomType($productSellingType)) { if ($roomTypeServices = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, [], @@ -983,16 +979,10 @@ abstract class PaymentModuleCore extends Module null, $product['id_product'] )) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - $product['selling_preference_type'] - ); + + $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct($idProduct, $order->id, $product['selling_preference_type']); foreach ($roomTypeServices as $roomTypeService) { - if (!Validate::isDate($roomTypeService['date_from']) - || !Validate::isDate($roomTypeService['date_to']) - || !(int) $roomTypeService['id_room_type'] - ) { + if (!$roomTypeService['id_hotel_cart_booking']) { continue; } $roomBookingDetail = $objBookingDetail->getRowByIdOrderIdProductInDateRange( @@ -1002,9 +992,6 @@ abstract class PaymentModuleCore extends Module $roomTypeService['date_to'], $roomTypeService['id_room'] ); - if (empty($roomBookingDetail['id'])) { - continue; - } $objServiceProductOrderDetail = new ServiceProductOrderDetail(); $objServiceProductOrderDetail->id_product = $idProduct; $objServiceProductOrderDetail->id_order = $order->id; @@ -1021,7 +1008,7 @@ abstract class PaymentModuleCore extends Module $objServiceProductOrderDetail->save(); } } - } elseif ($canSellWithHotel && !$canSellWithRoomType && !$canSellAsStandalone) { + } elseif (Product::isSellableWithHotel($productSellingType)) { if ($hotelProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, [], @@ -1030,11 +1017,7 @@ abstract class PaymentModuleCore extends Module null, $product['id_product'] )) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - $product['selling_preference_type'] - ); + $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct($idProduct, $order->id, $product['selling_preference_type']); foreach ($hotelProducts as $hotelProduct) { $objServiceProductOrderDetail = new ServiceProductOrderDetail(); $objServiceProductOrderDetail->id_product = $idProduct; @@ -1056,9 +1039,10 @@ abstract class PaymentModuleCore extends Module } $objServiceProductOrderDetail->quantity = $hotelProduct['quantity']; $objServiceProductOrderDetail->save(); + } } - } elseif ($canSellAsStandalone && !$canSellWithRoomType && !$canSellWithHotel) { + } elseif (Product::isSellableAsStandalone($productSellingType)) { if ($standaloneProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, [], @@ -1067,11 +1051,7 @@ abstract class PaymentModuleCore extends Module null, $product['id_product'] )) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct( - $idProduct, - $order->id, - $product['selling_preference_type'] - ); + $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct($idProduct, $order->id, $product['selling_preference_type']); foreach ($standaloneProducts as $standaloneProduct) { $objServiceProductOrderDetail = new ServiceProductOrderDetail(); $objServiceProductOrderDetail->id_product = $idProduct; @@ -1089,7 +1069,7 @@ abstract class PaymentModuleCore extends Module $objServiceProductOrderDetail->save(); } } - } + } } } diff --git a/classes/Product.php b/classes/Product.php index dcf55eb40..f88ec4917 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -569,12 +569,10 @@ class ProductCore extends ObjectModel const PRICE_ADDITION_TYPE_WITH_ROOM = 1; const PRICE_ADDITION_TYPE_INDEPENDENT = 2; - const PRICE_CALCULATION_METHOD_PER_DAY = 1; - const PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY = 1; const PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY = 2; - const PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY = 3; - const PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY = 4; + const PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY = 4; + const PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY = 3; const PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY = 5; const PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY = 6; const PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY = 7; @@ -6909,23 +6907,31 @@ class ProductCore extends ObjectModel return (int) $defaultDays; } + $checkin = 1; + $checkout = 1; + $duringStay = max($numNights - 1, 0); + switch ((int) $priceCalculationMethod) { case self::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY: + return $checkin; + case self::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY: - return 1; + return $checkout; case self::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY: - return max($numNights - 1, 1); + return $duringStay; case self::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY: - return 2; + return $checkin + $checkout; case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY: + return $checkin + $duringStay; + case self::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY: - return $numNights; + return $checkout + $duringStay; case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY: - return $numNights + 1; + return $checkin + $checkout + $duringStay; default: return $numNights; diff --git a/classes/order/Order.php b/classes/order/Order.php index 0ed9581a3..26ee52823 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -47,9 +47,6 @@ class OrderCore extends ObjectModel const ORDER_COMPLETE_CANCELLATION_OR_REFUND_REQUEST_FLAG = 3; - const SERVICE_PRODUCT_CONTEXT_ROOM_LINKED = 1; - const SERVICE_PRODUCT_CONTEXT_NON_ROOM = 2; - /** @var int Delivery address id */ public $id_address_delivery; @@ -2581,12 +2578,11 @@ class OrderCore extends ObjectModel )) { $totals = array_reduce($serviceProductDetail, function ($carry, $item) use ($order_detail) { $objHotelBookingDetail = new HotelBookingDetail((int) $item['id_htl_booking_detail']); - $numDays = 1; - if ((Product::PRICE_CALCULATION_METHOD_PER_DAY == $order_detail['product_price_calculation_method']) - && (!$numDays = HotelHelper::getNumberOfDays($objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to)) - ) { - $numDays = 1; - } + $numDays = Product::getPriceCalculationApplicableDays( + $order_detail['product_price_calculation_method'], + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); if (!empty($item['id_tax_rules_group'])) { $qty = isset($item['quantity']) ? $item['quantity'] : 0; @@ -2637,12 +2633,11 @@ class OrderCore extends ObjectModel // We are getting auto added service for specific room.There will be only on htl_booking_detail but can have multiple auto added service with room. // Note: All the auto added service with room have same id_tax_rule group $autoAddedServiceData = array_shift($autoAddedServiceData); - $numDays = 1; - if ((Product::PRICE_CALCULATION_METHOD_PER_DAY == $order_detail['product_price_calculation_method']) - && (!$numDays = HotelHelper::getNumberOfDays($autoAddedServiceData['date_from'], $autoAddedServiceData['date_to'])) - ) { - $numDays = 1; - } + $numDays = Product::getPriceCalculationApplicableDays( + $order_detail['product_price_calculation_method'], + $autoAddedServiceData['date_from'], + $autoAddedServiceData['date_to'] + ); $autoAddedServices = $autoAddedServiceData['additional_services']; // Calculate total quantity of auto-added services diff --git a/classes/order/OrderDetail.php b/classes/order/OrderDetail.php index 3f37eeb1d..4b28d23ff 100644 --- a/classes/order/OrderDetail.php +++ b/classes/order/OrderDetail.php @@ -450,12 +450,11 @@ class OrderDetailCore extends ObjectModel $taxGroupInfo['id_room_type'], )) { $serviceProductData = array_shift($serviceProductData); - $numDays = 1; - if ((Product::PRICE_CALCULATION_METHOD_PER_DAY == $this->product_price_calculation_method) - && (!$numDays = HotelHelper::getNumberOfDays($serviceProductData['date_from'], $serviceProductData['date_to'])) - ) { - $numDays = 1; - } + $numDays = Product::getPriceCalculationApplicableDays( + $this->product_price_calculation_method, + $serviceProductData['date_from'], + $serviceProductData['date_to'] + ); $unit_price_tax_excl = array_reduce($serviceProductData['additional_services'], function ($unitPriceTaxExcl, $item) { return $unitPriceTaxExcl + (isset($item['unit_price_tax_excl']) ? $item['unit_price_tax_excl'] : 0); @@ -488,12 +487,11 @@ class OrderDetailCore extends ObjectModel $serviceProductData = array_shift($serviceProductData); - $numDays = 1; - if ((Product::PRICE_CALCULATION_METHOD_PER_DAY == $this->product_price_calculation_method) - && (!$numDays = HotelHelper::getNumberOfDays($serviceProductData['date_from'], $serviceProductData['date_to'])) - ) { - $numDays = 1; - } + $numDays = Product::getPriceCalculationApplicableDays( + $this->product_price_calculation_method, + $serviceProductData['date_from'], + $serviceProductData['date_to'] + ); $quantity = $quantity * $numDays; } diff --git a/classes/order/OrderInvoice.php b/classes/order/OrderInvoice.php index f97c589fc..457a0baa9 100644 --- a/classes/order/OrderInvoice.php +++ b/classes/order/OrderInvoice.php @@ -483,7 +483,7 @@ class OrderInvoiceCore extends ObjectModel return (!$v['is_booking_product'] && !$v['product_auto_add'] && Product::isSellableWithRoomType($v['selling_preference_type'])); }); - $details = $order->getProductTaxesDetails($order_detail, false); + $details = $order->getProductTaxesDetails($order_detail, false,Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); if ($sum_composite_taxes) { $grouped_details = array(); @@ -550,7 +550,7 @@ class OrderInvoiceCore extends ObjectModel ); }); - $details = $order->getProductTaxesDetails($order_detail, false); + $details = $order->getProductTaxesDetails($order_detail, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); if ($sum_composite_taxes) { $grouped_details = array(); @@ -609,8 +609,6 @@ class OrderInvoiceCore extends ObjectModel // - 'total_price_tax_excl' // - 'total_amount' $breakdown = array(); - $order_detail = array(); - $products = $this->getProducts(); $order_detail = $this->getProducts(); $order_detail = array_filter($order_detail, function($v) { return (!$v['is_booking_product'] && ( diff --git a/classes/webservice/WebserviceSpecificManagementBookings.php b/classes/webservice/WebserviceSpecificManagementBookings.php index ad3586d3b..e234ef7fa 100644 --- a/classes/webservice/WebserviceSpecificManagementBookings.php +++ b/classes/webservice/WebserviceSpecificManagementBookings.php @@ -1015,15 +1015,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We } } - $serviceProductPrice = $objOrder->getTotalProductsWithTaxes( - false, - false, - null, - null, - null, - [], - Order::SERVICE_PRODUCT_CONTEXT_ROOM_LINKED - ); + $serviceProductPrice = $objOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); if ($demands = $objHotelBookingDemands->getExtraDemandsTaxesDetails($objOrder->id)) { $demandsPrice = array_sum(array_column($demands, 'total_price_tax_excl')); // Adding the tax @@ -1187,12 +1179,11 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $objOrderDetail = new OrderDetail($service['id_order_detail']); $objServiceProductOrderDetail = new ServiceProductOrderDetail($service['id_service_product_order_detail']); $quantity = $objServiceProductOrderDetail->quantity; - if ($objOrderDetail->product_price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $quantity = $quantity * HotelHelper::getNumberOfDays( - $objHotelBookingDetail->date_from, - $objHotelBookingDetail->date_to - ); - } + $quantity *= Product::getPriceCalculationApplicableDays( + $objOrderDetail->product_price_calculation_method, + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); if (isset($this->wsRequestedRoomTypes[$dateRoomJoinKey]['services'][$service['id_product']])) { $oldPriceTaxExcl = $objServiceProductOrderDetail->total_price_tax_excl; diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index c38b6d896..2b8115761 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -1211,33 +1211,39 @@ class AdminCartsControllerCore extends AdminController $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) ); + if ($serviceProducts) { + foreach ($serviceProducts as $key => $servProduct) { + if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$servProduct['id_product'])) + && Product::getQuantity((int)$servProduct['id_product']) <= 0 + ) { + unset($serviceProducts[$key]); + continue; + } + $numDays = Product::getPriceCalculationApplicableDays( + $servProduct['price_calculation_method'], + $dateFrom, + $dateTo + ); + + $serviceProducts[$key]['price_tax_exc'] = Product::getServiceProductPrice( + $servProduct['id_product'], + 0, + 0, + $idProduct, + false, + 1, + $dateFrom, + $dateTo, + $idCart + ) / max($numDays, 1); + } + } + } else { $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); $serviceProducts = $objRoomTypeServiceProduct->getServiceProductsData($idProduct, 1, 0, false, 2, null); } - if ($serviceProducts) { - foreach ($serviceProducts as $key => $servProduct) { - $numDays = Product::getPriceCalculationApplicableDays( - $servProduct['price_calculation_method'], - $dateFrom, - $dateTo - ); - - $serviceProducts[$key]['price_tax_exc'] = Product::getServiceProductPrice( - $servProduct['id_product'], - 0, - 0, - $idProduct, - false, - 1, - $dateFrom, - $dateTo, - $idCart - )/$numDays; - } - } - $objServiceProductCartDetail = new ServiceProductCartDetail(); if ($selectedRoomServiceProduct = $objCartBookingData->getRoomRowByIdProductIdRoomInDateRange( $idCart, @@ -1381,6 +1387,7 @@ class AdminCartsControllerCore extends AdminController $idHotelCartBooking = Tools::getValue('id_hotel_cart_booking'); // valiadate services being added if (Validate::isLoadedObject($objHtlCartBooking = new HotelCartBookingData($idHotelCartBooking))) { + $objCart = new Cart($objHtlCartBooking->id_cart); $name = trim(Tools::getValue('new_service_name')); $price = Tools::getValue('new_service_price'); $priceCalcMethod = Tools::getValue('new_service_price_calc_method'); @@ -1415,6 +1422,15 @@ class AdminCartsControllerCore extends AdminController $response['hasError'] = true; $response['errors'][] = Tools::displayError('Invalid service name'); } + + if (empty($priceCalcMethod)) { + $response['hasError'] = true; + $response['errors'][] = Tools::displayError('Please select at least one price calculation method.'); + } elseif ( + !Validate::isUnsignedInt($priceCalcMethod)) { + $response['hasError'] = true; + $response['errors'][] = Tools::displayError('Invalid price calculation method.'); + } if (!isset($price)) { $response['hasError'] = true; @@ -1427,6 +1443,12 @@ class AdminCartsControllerCore extends AdminController // if no validation errors then add service if (!$response['hasError']) { // ======= START: Create Service product ========= + if ($objCart->id_currency != (int)Configuration::get('PS_CURRENCY_DEFAULT')) { + $currency = Currency::getCurrencyInstance($objCart->id_currency); + $price = Tools::ps_round($price/$currency->conversion_rate, 6); + $this->context->currency = new Currency((int) $objCart->id_currency); + } + $objServiceProduct = new Product(); $objServiceProduct->price_calculation_method = $priceCalcMethod; $objServiceProduct->selling_preference_type = Product::SELLING_PREFERENCE_WITH_ROOM_TYPE; @@ -1466,7 +1488,6 @@ class AdminCartsControllerCore extends AdminController RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE ); // If service product is create successfully the start adding the product in cart and order - $objCart = new Cart($objHtlCartBooking->id_cart); $objServiceProduct = new Product($objServiceProduct->id, false, $objCart->id_lang); $objServiceProductCartDetail = new ServiceProductCartDetail(); @@ -1539,16 +1560,32 @@ class AdminCartsControllerCore extends AdminController $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) ); + if ($serviceProducts) { + foreach ($serviceProducts as $key => $servProduct) { + $numDays = Product::getPriceCalculationApplicableDays( + $servProduct['price_calculation_method'], + $objCartBookingData->date_from, + $objCartBookingData->date_to + ); + + $serviceProducts[$key]['price_tax_exc'] = Product::getServiceProductPrice( + $servProduct['id_product'], + 0, + 0, + $objCartBookingData->id_product, + false, + 1, + $objCartBookingData->date_from, + $objCartBookingData->date_to, + $objCartBookingData->id_cart + )/$numDays; + } + } } else { $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); $serviceProducts = $objRoomTypeServiceProduct->getServiceProductsData($objCartBookingData->id_product, 1, 0, false, 2, null); } - if ($serviceProducts) { - foreach ($serviceProducts as $key => $servProduct) { - $serviceProducts[$key]['price_tax_exc'] = $servProduct['price']; - } - } $objServiceProductCartDetail = new ServiceProductCartDetail(); if ($selectedRoomServiceProduct = $objCartBookingData->getRoomRowByIdProductIdRoomInDateRange( @@ -1632,6 +1669,39 @@ class AdminCartsControllerCore extends AdminController $response['hasError'] = true; $response['errors'][] = Tools::displayError('Invalid unit price for service').': '.$objProduct->name; } + + if ($selected && $objProduct->allow_multiple_quantity + && isset($serviceQuantities[$idServiceProduct]) + && Validate::isUnsignedInt($serviceQuantities[$idServiceProduct]) + ) { + $cartTotalQty = Cart::getProductQtyInCart($objCart->id, $idServiceProduct); + + $qty = (int)$serviceQuantities[$idServiceProduct]; + $numDays = Product::getPriceCalculationApplicableDays( + $objProduct->price_calculation_method, + $objHotelCartBookingData->date_from, + $objHotelCartBookingData->date_to + ); + + $existingQty = 0; + $objSpCartDetail = new ServiceProductCartDetail(); + if ($idExistingDetail = $objSpCartDetail->alreadyExists( + $objCart->id, + $idServiceProduct, + $idCartBooking + )) { + $existingQty = (int)(new ServiceProductCartDetail($idExistingDetail))->quantity * $numDays; + } + + $finalQty = (int)$cartTotalQty - $existingQty + ($qty * $numDays); + if ($objProduct->max_quantity && $finalQty > $objProduct->max_quantity) { + $response['hasError'] = true; + $response['errors'][] = Tools::displayError(sprintf('Cannot add more than %d quantity.', $objProduct->max_quantity)).': '.$objProduct->name; + } elseif (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$idServiceProduct)) && !$objProduct->checkQty($finalQty)) { + $response['hasError'] = true; + $response['errors'][] = Tools::displayError('There isn\'t enough product in stock.').': '.$objProduct->name; + } + } } else { $response['errors'][] = Tools::displayError('Some services not found. please try after refreshing the page'); } diff --git a/controllers/admin/AdminNormalProductsController.php b/controllers/admin/AdminNormalProductsController.php index ba3dbb220..7bea0215f 100644 --- a/controllers/admin/AdminNormalProductsController.php +++ b/controllers/admin/AdminNormalProductsController.php @@ -227,7 +227,7 @@ class AdminNormalProductsControllerCore extends AdminController LEFT JOIN `'._DB_PREFIX_.'htl_room_type` hrt ON (rsp.`id_element` = hrt.`id_product` AND rsp.`element_type` = '.(int)RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE.') '.HotelBranchInformation::addHotelRestriction(false, 'hrt'); - $this->_select .= ' IF(a.`auto_add_to_cart`, "'.$this->l('Yes').'", "'.$this->l('No').'") as auto_added, IF(a.`auto_add_to_cart`, 1, 0) as badge_success, IF(a.`show_at_front`, "'.$this->l('Yes').'", "'.$this->l('No').'") as show_at_front_txt, CASE a.`price_calculation_method` WHEN '.Product::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY.' THEN "'.$this->l('Only check-in day').'" WHEN '.Product::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY.' THEN "'.$this->l('Only check-out day').'" WHEN '.Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY.' THEN "'.$this->l('Only during-stay days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY.' THEN "'.$this->l('Check-in and check-out days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY.' THEN "'.$this->l('Check-in | during-stay days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY.' THEN "'.$this->l('Check-out | during-stay days').'" WHEN '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.' THEN "'.$this->l('Check-in | check-out | during-stay days').'" ELSE "'.$this->l('Only check-in day').'" END as price_calculation_method_txt, (SELECT COUNT(hri.`id`) FROM `'._DB_PREFIX_.'htl_room_information` hri WHERE hri.`id_product` = a.`id_product`) as num_rooms, '; + $this->_select .= ' IF(a.`auto_add_to_cart`, "'.$this->l('Yes').'", "'.$this->l('No').'") as auto_added, IF(a.`auto_add_to_cart`, 1, 0) as badge_success, IF(a.`show_at_front`, "'.$this->l('Yes').'", "'.$this->l('No').'") as show_at_front_txt, (SELECT COUNT(hri.`id`) FROM `'._DB_PREFIX_.'htl_room_information` hri WHERE hri.`id_product` = a.`id_product`) as num_rooms, '; $this->_select .= ' COUNT(hrt.`id_product`) as products_associated, '; $this->_select .= 'shop.`name` AS `shopname`, a.`id_shop_default`, '; $this->_select .= $alias_image.'.`id_image` AS `id_image`, cl.`name` AS `name_category`, '.$alias.'.`price`, 0 AS `price_final`, a.`is_virtual`, pd.`nb_downloadable`, sav.`quantity` AS `sav_quantity`, '.$alias.'.`active`, IF(sav.`quantity`<=0, 1, 0) AS `badge_danger`'; @@ -302,13 +302,14 @@ class AdminNormalProductsControllerCore extends AdminController 'callback' => 'getPriceDisplayPreference', 'list' => $priceAdditionType, ); - $this->fields_list['price_calculation_method_txt'] = array( + $this->fields_list['price_calculation_method'] = array( 'title' => $this->l('Price calculation method'), 'filter_key' => 'a!price_calculation_method', 'type' => 'select', 'list' => $priceCalculationMethod, 'visible_default' => true, 'optional' => true, + 'callback' => 'getPriceCalculationMethod', ); $this->servicesCategory = array(); $idServiceCategory = Configuration::get('PS_SERVICE_CATEGORY'); @@ -432,23 +433,29 @@ class AdminNormalProductsControllerCore extends AdminController public function getBuyingOption($selling_preference_type, $row) { - if ($selling_preference_type == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) { - return $this->l('With room type'); - } else if ($selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE) { - return $this->l('With hotel|room type'); - } else if ($selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE) { - return $this->l('Standalone'); - } else if ($selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE) { - return $this->l('With hotel'); - } else if ($selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE) { - return $this->l('With hotel|standalone'); - } else if ($selling_preference_type == Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE) { - return $this->l('With room type|standalone'); - } else if ($selling_preference_type == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) { - return $this->l('With hotel|room type|standalone'); + $list = $this->fields_list['selling_preference_type']['list']; + + if (!isset($list[$selling_preference_type])) { + return '--'; } - return '--'; + $this->context->smarty->assign('selected_options', array_map('trim', explode('|', $list[$selling_preference_type]))); + + return $this->context->smarty->fetch('controllers/normal_products/selected_option.tpl'); + } + + public function getPriceCalculationMethod($txt, $row) + { + $list = $this->fields_list['price_calculation_method']['list']; + $method = (int)$row['price_calculation_method']; + + if (!isset($list[$method])) { + return '--'; + } + + $this->context->smarty->assign('selected_options', array_map('trim', explode('|', $list[$method]))); + + return $this->context->smarty->fetch('controllers/normal_products/selected_option.tpl'); } public function getHotelName($hotelName, $row) @@ -480,7 +487,7 @@ class AdminNormalProductsControllerCore extends AdminController .'template')) { $bo_theme = 'default'; } - + $this->addJqueryUI('ui.tooltip', 'base', true); $this->addJs(__PS_BASE_URI__.$this->admin_webpath.'/themes/'.$bo_theme.'/js/jquery.iframe-transport.js'); $this->addJs(__PS_BASE_URI__.$this->admin_webpath.'/themes/'.$bo_theme.'/js/jquery.fileupload.js'); $this->addJs(__PS_BASE_URI__.$this->admin_webpath.'/themes/'.$bo_theme.'/js/jquery.fileupload-process.js'); @@ -2360,6 +2367,14 @@ class AdminNormalProductsControllerCore extends AdminController $this->errors[] = $this->l('This product must be in the default category.'); } + if (!Tools::getValue('selling_preference_type')) { + $this->errors[] = $this->l('Please select at least one buying option.'); + } + + if (!Tools::getValue('price_calculation_method')) { + $this->errors[] = $this->l('Please select at least one price calculation method.'); + } + // Tags foreach ($languages as $language) { if ($value = Tools::getValue('tags_'.$language['id_lang'])) { diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 4739ab5d1..05c7a4f3c 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -996,25 +996,56 @@ class AdminOrdersControllerCore extends AdminController $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE), $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) - ); - } else { - $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); - $serviceProducts = $objRoomTypeServiceProduct->getServiceProductsData($idProduct, 1, 0, false, 2, null); - } + ); + + if($serviceProducts) { + foreach ($serviceProducts as $key => $servProduct) { + if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$servProduct['id_product'])) + && Product::getQuantity((int)$servProduct['id_product']) <= 0 + ) { + unset($serviceProducts[$key]); + continue; + } + if (!empty($additionalServices[$productLineData['id']]) + && in_array($servProduct['id_product'], array_column($additionalServices[$productLineData['id']]['additional_services'], 'id_product')) + ) { + unset($serviceProducts[$key]); + } else { - if ($serviceProducts) { - foreach ($serviceProducts as $key => $servProduct) { - $serviceProducts[$key]['price_tax_exc'] = $servProduct['price']; - if (isset($additionalServices[$productLineData['id']]) - && in_array($servProduct['id_product'], array_column($additionalServices[$productLineData['id']]['additional_services'], 'id_product')) - ) { - unset($serviceProducts[$key]); + $numDays = Product::getPriceCalculationApplicableDays( + $servProduct['price_calculation_method'], + $dateFrom, + $dateTo + ); + $serviceProducts[$key]['price_tax_exc'] = Product::getServiceProductPrice( + $servProduct['id_product'], + 0, + 0, + $idProduct, + false, + 1, + $dateFrom, + $dateTo + ) / max($numDays, 1); + } } } + } else { + $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); + if ($serviceProducts = $objRoomTypeServiceProduct->getServiceProductsData($idProduct, 1, 0, false, 2, null)) { + foreach ($serviceProducts as $key => $servProduct) { + if (isset($additionalServices[$productLineData['id']]) + && in_array($servProduct['id_product'], array_column($additionalServices[$productLineData['id']]['additional_services'], 'id_product')) + ) { + unset($serviceProducts[$key]); + } + } - $smartyVars['serviceProducts'] = $serviceProducts; + } } + + $smartyVars['serviceProducts'] = $serviceProducts; $objOrderReturn = new OrderReturn(); $refundReqBookings = $objOrderReturn->getOrderRefundRequestedBookings($objOrder->id, 0, 1); $smartyVars['refundReqBookings'] = $refundReqBookings; @@ -5469,7 +5500,7 @@ class AdminOrdersControllerCore extends AdminController 1, $objBookingDetail->date_from, $objBookingDetail->date_to - ) / $numDays; + ) / max($numDays, 1); $unitPriceTaxExcl = Product::getServiceProductPrice( (int) $service['id_product'], 0, @@ -5479,7 +5510,7 @@ class AdminOrdersControllerCore extends AdminController 1, $objBookingDetail->date_from, $objBookingDetail->date_to - ) / $numDays; + ) / max($numDays, 1); $objServiceProductOrderDetail = new ServiceProductOrderDetail(); $objServiceProductOrderDetail->id_product = $service['id_product']; @@ -6235,61 +6266,67 @@ class AdminOrdersControllerCore extends AdminController && count($orderServiceProduct['additional_services']) ) { foreach ($orderServiceProduct['additional_services'] as $serviceProduct) { - if ($serviceProduct['price_calculation_method'] == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $newNumDays = HotelHelper::getNumberOfDays($new_date_from, $new_date_to); - $objServiceProductOrderDetail = new ServiceProductOrderDetail((int) $serviceProduct['id_service_product_order_detail']); - $unitPriceTaxExcl = $objServiceProductOrderDetail->unit_price_tax_excl; - $unitPriceTaxIncl = $objServiceProductOrderDetail->unit_price_tax_incl; + $newNumDays = Product::getPriceCalculationApplicableDays( + $serviceProduct['price_calculation_method'], + $new_date_from, + $new_date_to + ); + $oldNumDays = Product::getPriceCalculationApplicableDays( + $serviceProduct['price_calculation_method'], + $old_date_from, + $old_date_to + ); + $objServiceProductOrderDetail = new ServiceProductOrderDetail((int) $serviceProduct['id_service_product_order_detail']); + $unitPriceTaxExcl = $objServiceProductOrderDetail->unit_price_tax_excl; + $unitPriceTaxIncl = $objServiceProductOrderDetail->unit_price_tax_incl; - $newTotalPriceTaxExcl = Tools::processPriceRounding( - ($newNumDays * $unitPriceTaxExcl), - $objServiceProductOrderDetail->quantity, - $order->round_type, - $order->round_mode - ); - $newTotalPriceTaxIncl = Tools::processPriceRounding( - ($newNumDays * $unitPriceTaxIncl), - $objServiceProductOrderDetail->quantity, - $order->round_type, - $order->round_mode - ); + $newTotalPriceTaxExcl = Tools::processPriceRounding( + ($newNumDays * $unitPriceTaxExcl), + $objServiceProductOrderDetail->quantity, + $order->round_type, + $order->round_mode + ); + $newTotalPriceTaxIncl = Tools::processPriceRounding( + ($newNumDays * $unitPriceTaxIncl), + $objServiceProductOrderDetail->quantity, + $order->round_type, + $order->round_mode + ); - $order->total_products -= $objServiceProductOrderDetail->total_price_tax_excl; - $order->total_products_wt -= $objServiceProductOrderDetail->total_price_tax_incl; + $order->total_products -= $objServiceProductOrderDetail->total_price_tax_excl; + $order->total_products_wt -= $objServiceProductOrderDetail->total_price_tax_incl; - // change order total - $order->total_products += $newTotalPriceTaxExcl; - $order->total_products_wt += $newTotalPriceTaxIncl; + // change order total + $order->total_products += $newTotalPriceTaxExcl; + $order->total_products_wt += $newTotalPriceTaxIncl; - $objOrderDetail = new OrderDetail((int) $serviceProduct['id_order_detail']); - $objOrderDetail->total_price_tax_excl -= $objServiceProductOrderDetail->total_price_tax_excl; - $objOrderDetail->total_price_tax_incl -= $objServiceProductOrderDetail->total_price_tax_incl; + $objOrderDetail = new OrderDetail((int) $serviceProduct['id_order_detail']); + $objOrderDetail->total_price_tax_excl -= $objServiceProductOrderDetail->total_price_tax_excl; + $objOrderDetail->total_price_tax_incl -= $objServiceProductOrderDetail->total_price_tax_incl; - $objOrderDetail->total_price_tax_excl += $newTotalPriceTaxExcl; - $objOrderDetail->total_price_tax_incl += $newTotalPriceTaxIncl; + $objOrderDetail->total_price_tax_excl += $newTotalPriceTaxExcl; + $objOrderDetail->total_price_tax_incl += $newTotalPriceTaxIncl; - $oldNumDays = HotelHelper::getNumberOfDays($old_date_from, $old_date_to); - $oldProductQuantity = $objServiceProductOrderDetail->quantity * $oldNumDays; - $newProductQuantity = $objServiceProductOrderDetail->quantity * $newNumDays; - $objOrderDetail->product_quantity += ($newProductQuantity - $oldProductQuantity); + $oldProductQuantity = $objServiceProductOrderDetail->quantity * $oldNumDays; + $newProductQuantity = $objServiceProductOrderDetail->quantity * $newNumDays; + $objOrderDetail->product_quantity += ($newProductQuantity - $oldProductQuantity); - $objOrderDetail->save(); - $this->context->cart = new Cart($objServiceProductOrderDetail->id_cart); - $objOrderDetail->updateTaxAmount($order); + $objOrderDetail->save(); + $this->context->cart = new Cart($objServiceProductOrderDetail->id_cart); + $objOrderDetail->updateTaxAmount($order); - if (isset($order_invoice)) { - $order_invoice->total_paid_tax_excl -= $objServiceProductOrderDetail->total_price_tax_excl; - $order_invoice->total_paid_tax_incl -= $objServiceProductOrderDetail->total_price_tax_incl; + if (isset($order_invoice)) { + $order_invoice->total_paid_tax_excl -= $objServiceProductOrderDetail->total_price_tax_excl; + $order_invoice->total_paid_tax_incl -= $objServiceProductOrderDetail->total_price_tax_incl; - $order_invoice->total_paid_tax_excl += (float)$newTotalPriceTaxExcl; - $order_invoice->total_paid_tax_incl += (float)$newTotalPriceTaxIncl; - } - $objServiceProductOrderDetail->unit_price_tax_excl = $unitPriceTaxExcl; - $objServiceProductOrderDetail->unit_price_tax_incl = $unitPriceTaxIncl; - $objServiceProductOrderDetail->total_price_tax_excl = $newTotalPriceTaxExcl; - $objServiceProductOrderDetail->total_price_tax_incl = $newTotalPriceTaxIncl; - $objServiceProductOrderDetail->save(); + $order_invoice->total_paid_tax_excl += (float)$newTotalPriceTaxExcl; + $order_invoice->total_paid_tax_incl += (float)$newTotalPriceTaxIncl; } + $objServiceProductOrderDetail->unit_price_tax_excl = $unitPriceTaxExcl; + $objServiceProductOrderDetail->unit_price_tax_incl = $unitPriceTaxIncl; + $objServiceProductOrderDetail->total_price_tax_excl = $newTotalPriceTaxExcl; + $objServiceProductOrderDetail->total_price_tax_incl = $newTotalPriceTaxIncl; + $objServiceProductOrderDetail->save(); } } } @@ -6766,15 +6803,6 @@ class AdminOrdersControllerCore extends AdminController $order_invoice->total_discount_tax_excl = 0; $res &= $order_invoice->update(); } - - // If no rooms left in the order, Update Order total and discounts to 0 - $order->total_discounts = 0; - $order->total_discounts_tax_incl = 0; - $order->total_discounts_tax_excl = 0; - $order->total_paid = 0; - $order->total_paid_tax_incl = 0; - $order->total_paid_tax_excl = 0; - $order->update(); } // Assign to smarty informations in order to show the new product line @@ -7479,17 +7507,48 @@ class AdminOrdersControllerCore extends AdminController $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) ); + if ($serviceProducts) { + foreach ($serviceProducts as $key => $servProduct) { + if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$servProduct['id_product'])) + && Product::getQuantity((int)$servProduct['id_product']) <= 0 + ) { + unset($serviceProducts[$key]); + continue; + } + if (!empty($additionalServices[$idHtlBookingDetail]) + && in_array($servProduct['id_product'], array_column($additionalServices[$idHtlBookingDetail]['additional_services'], 'id_product')) + ) { + unset($serviceProducts[$key]); + } else { + + $numDays = Product::getPriceCalculationApplicableDays( + $servProduct['price_calculation_method'], + $dateFrom, + $dateTo + ); + + $serviceProducts[$key]['price_tax_exc'] = Product::getServiceProductPrice( + $servProduct['id_product'], + 0, + 0, + $idProduct, + false, + 1, + $dateFrom, + $dateTo + ) / max($numDays, 1); + } + } + } + } else { $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); - $serviceProducts = $objRoomTypeServiceProduct->getServiceProductsData($idProduct, 1, 0, false, 2, null); - } - - if ($serviceProducts) { - foreach ($serviceProducts as $key => $servProduct) { - $serviceProducts[$key]['price_tax_exc'] = $servProduct['price']; - if (isset($additionalServices[$idHtlBookingDetail]) && $additionalServices[$idHtlBookingDetail]) { - if (in_array($servProduct['id_product'], array_column($additionalServices[$idHtlBookingDetail]['additional_services'], 'id_product'))) { - unset($serviceProducts[$key]); + if ($serviceProducts = $objRoomTypeServiceProduct->getServiceProductsData($idProduct, 1, 0, false, 2, null)) { + foreach ($serviceProducts as $key => $servProduct) { + if (!empty($additionalServices[$idHtlBookingDetail])) { + if (in_array($servProduct['id_product'], array_column($additionalServices[$idHtlBookingDetail]['additional_services'], 'id_product'))) { + unset($serviceProducts[$key]); + } } } } @@ -7643,13 +7702,11 @@ class AdminOrdersControllerCore extends AdminController $objServiceProductOrderDetail->quantity = $quantity; $objServiceProductOrderDetail->unit_price_tax_excl = $unitPrice; $objServiceProductOrderDetail->unit_price_tax_incl = $unitPrice * $oldTaxMultiplier; - $numDays = 1; - if ($objOrderDetail->product_price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays( - $objHotelBookingDetail->date_from, - $objHotelBookingDetail->date_to - ); - } + $numDays = Product::getPriceCalculationApplicableDays( + $objOrderDetail->product_price_calculation_method, + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); $objServiceProductOrderDetail->total_price_tax_excl = Tools::processPriceRounding( ($objServiceProductOrderDetail->unit_price_tax_excl * $numDays), $quantity, @@ -7667,22 +7724,14 @@ class AdminOrdersControllerCore extends AdminController $priceDiffTaxExcl = $objServiceProductOrderDetail->total_price_tax_excl - $oldTotalPriceTaxExcl; $priceDiffTaxIncl = $objServiceProductOrderDetail->total_price_tax_incl - $oldTotalPriceTaxIncl; - if ($objOrderDetail->product_price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays( - $objHotelBookingDetail->date_from, - $objHotelBookingDetail->date_to - ); - $quantityDiff = ($objServiceProductOrderDetail->quantity - $oldQuantity)*$numDays; - } else { - $quantityDiff = $objServiceProductOrderDetail->quantity - $oldQuantity; - } + $quantityDiff = ($objServiceProductOrderDetail->quantity - $oldQuantity) * $numDays; $objOrderDetail->product_quantity += $quantityDiff; $objOrderDetail->total_price_tax_excl += $priceDiffTaxExcl; $objOrderDetail->total_price_tax_incl += $priceDiffTaxIncl; - $objOrderDetail->unit_price_tax_excl = ($objOrderDetail->total_price_tax_excl / $objOrderDetail->product_quantity); - $objOrderDetail->unit_price_tax_incl = ($objOrderDetail->total_price_tax_incl / $objOrderDetail->product_quantity); + $objOrderDetail->unit_price_tax_excl = ($objOrderDetail->total_price_tax_excl / max($objOrderDetail->product_quantity, 1)); + $objOrderDetail->unit_price_tax_incl = ($objOrderDetail->total_price_tax_incl / max($objOrderDetail->product_quantity, 1)); $result &= $objOrderDetail->updateTaxAmount($objOrder); @@ -7770,6 +7819,25 @@ class AdminOrdersControllerCore extends AdminController $response['hasError'] = true; $response['errors'][] = sprintf($this->l('Invalid unit price for %s.'), $objProduct->name); } + + if ($objProduct->allow_multiple_quantity && Validate::isUnsignedInt($qty[$service])) { + $finalQty = (int)$qty[$service]; + $numDays = Product::getPriceCalculationApplicableDays( + Product::getProductPriceCalculation($service), + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); + $stockQty = $finalQty * $numDays; + + if ($objProduct->max_quantity && $finalQty > $objProduct->max_quantity) { + $response['hasError'] = true; + $response['errors'][] = sprintf($this->l('Cannot add more than %d quantity.'), $objProduct->max_quantity).': '.$objProduct->name; + } elseif (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$service)) && !$objProduct->checkQty($stockQty)) { + $response['hasError'] = true; + $response['errors'][] = $this->l('There isn\'t enough product in stock.').': '.$objProduct->name; + } + } + $selectedServices[$key] = array( 'id' => $service, 'qty' => $qty[$service], @@ -7826,7 +7894,7 @@ class AdminOrdersControllerCore extends AdminController 1, $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to - ) / $numDays; + ) / max($numDays, 1); if ($initialServicePrice != $service['price']) { $specific_price = new SpecificPrice(); @@ -7887,7 +7955,7 @@ class AdminOrdersControllerCore extends AdminController 1, null, $roomHtlCartInfo['id'] - ) / $numDays; + ) / max($numDays, 1); $unitPriceTaxIncl = Product::getServiceProductPrice( (int) $product['id_product'], 0, @@ -7902,7 +7970,7 @@ class AdminOrdersControllerCore extends AdminController 1, null, $roomHtlCartInfo['id'] - ) / $numDays; + ) / max($numDays, 1); $totalPriceChangeTaxExcl += $totalPriceTaxExcl = Tools::processPriceRounding( ($unitPriceTaxExcl * $numDays), @@ -8047,6 +8115,15 @@ class AdminOrdersControllerCore extends AdminController $response['errors'][] = Tools::displayError('Invalid service name'); } + if (empty($priceCalcMethod)) { + $response['hasError'] = true; + $response['errors'][] = Tools::displayError('Please select at least one price calculation method.'); + } elseif ( + !Validate::isUnsignedInt($priceCalcMethod)) { + $response['hasError'] = true; + $response['errors'][] = Tools::displayError('Invalid price calculation method.'); + } + if (!isset($price)) { $response['hasError'] = true; $response['errors'][] = Tools::displayError('Service price is required'); @@ -8054,7 +8131,6 @@ class AdminOrdersControllerCore extends AdminController $response['hasError'] = true; $response['errors'][] = Tools::displayError('Invalid service price'); } - // if no validation errors then add service if (!$response['hasError']) { // ======= START: Create Service product ========= @@ -8164,7 +8240,7 @@ class AdminOrdersControllerCore extends AdminController $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to, $objCart->id - ) / $numDays; + ) / max($numDays, 1); $unitPriceTaxIncl = Product::getServiceProductPrice( (int)$product['id_product'], 0, @@ -8175,7 +8251,7 @@ class AdminOrdersControllerCore extends AdminController $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to, $objCart->id - ) / $numDays; + ) / max($numDays, 1); $totalPriceChangeTaxExcl += $totalPriceTaxExcl = Tools::processPriceRounding( ($unitPriceTaxExcl * $numDays), @@ -8358,13 +8434,12 @@ class AdminOrdersControllerCore extends AdminController if ($res &= $objServiceProductOrderDetail->delete()) { $order = new Order($objServiceProductOrderDetail->id_order); - if ($objOrderDetail->product_price_calculation_method == Product::PRICE_CALCULATION_METHOD_PER_DAY) { - $numDays = HotelHelper::getNumberOfDays( - $objHotelBookingDetail->date_from, - $objHotelBookingDetail->date_to - ); - $quantity = $quantity * $numDays; - } + $numDays = Product::getPriceCalculationApplicableDays( + $objOrderDetail->product_price_calculation_method, + $objHotelBookingDetail->date_from, + $objHotelBookingDetail->date_to + ); + $quantity = $quantity * $numDays; if ($quantity >= $objOrderDetail->product_quantity) { $objOrderDetail->delete(); } else { diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 0a7acb76f..7c8c20efc 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -415,9 +415,12 @@ class AdminProductsControllerCore extends AdminController ); $objProduct = new Product(); - $hotelServiceProducts = $objProduct->getServiceProducts(null, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE); - $roomTypeServiceProducts = $objProduct->getServiceProducts(null, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); - $allServiceProducts = array_merge($roomTypeServiceProducts, $hotelServiceProducts); + $allServiceProducts = array_values(array_filter( + $objProduct->getServiceProducts(null), + function ($serviceProduct) { + return Product::isSellableWithRoomType($serviceProduct['selling_preference_type']); + } + )); $serviceProducts = array(); foreach ($allServiceProducts as $serviceProduct) { $serviceProducts[$serviceProduct['id_product']] = $serviceProduct['name']; @@ -3152,9 +3155,12 @@ class AdminProductsControllerCore extends AdminController $objRoomType = new HotelRoomType(); if ($hotelRoomType = $objRoomType->getRoomTypeInfoByIdProduct($obj->id)) { - $hotelServiceProducts = $obj->getServiceProducts(null, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE); - $roomTypeServiceProducts = $obj->getServiceProducts(null, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); - $allServiceProducts = array_merge($roomTypeServiceProducts, $hotelServiceProducts); + $allServiceProducts = array_values(array_filter( + $obj->getServiceProducts(null), + function ($serviceProduct) { + return Product::isSellableWithRoomType($serviceProduct['selling_preference_type']); + } + )); $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); $objRoomTypeServiceProductPrice = new RoomTypeServiceProductPrice(); diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index ba6b3b371..95ee79919 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -2304,9 +2304,9 @@ class AdminStatsControllerCore extends AdminStatsTabController IFNULL(SUM( CASE WHEN od.`purchase_supplier_price` <> "0.000000" - THEN (od.`purchase_supplier_price` / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_PER_BOOKING.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1))) + THEN (od.`purchase_supplier_price` / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1))) WHEN od.`purchase_supplier_price` = "0.000000" - THEN ((od.`original_product_price` / o.`conversion_rate`) * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100) / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_PER_BOOKING.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1)) + THEN ((od.`original_product_price` / o.`conversion_rate`) * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100) / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1)) END ), 0) FROM `'._DB_PREFIX_.'service_product_order_detail` rtspod diff --git a/controllers/front/CartController.php b/controllers/front/CartController.php index 98fb6eaac..67ee06439 100644 --- a/controllers/front/CartController.php +++ b/controllers/front/CartController.php @@ -482,7 +482,11 @@ class CartControllerCore extends FrontController if ($product->allow_multiple_quantity) { $finalQuantity = $this->qty; if (isset($productCartDetail) && $productCartDetail) { - $finalQuantity += $productCartDetail['quantity']; + $quantityInCart = Cart::getProductQtyInCart( + $id_cart, + $this->id_product + ); + $finalQuantity += $quantityInCart; } if ($product->max_quantity && $finalQuantity > $product->max_quantity) { $this->errors[] = Tools::displayError(sprintf('You cannot add more than %d quantity for this product in the cart.', $product->max_quantity)); @@ -560,22 +564,24 @@ class CartControllerCore extends FrontController } } - // Check product quantity availability - if ($this->id_product_attribute) { - if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !ProductAttribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) { + // Check product quantity availability only when no earlier validation error exists + if (!$this->errors) { + if ($this->id_product_attribute) { + if (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !ProductAttribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) { + $this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax')); + } + } elseif ($product->hasAttributes()) { + $minimumQuantity = ($product->out_of_stock == 2) ? !Configuration::get('PS_ORDER_OUT_OF_STOCK') : !$product->out_of_stock; + $this->id_product_attribute = Product::getDefaultAttribute($product->id, $minimumQuantity); + // @todo do something better than a redirect admin !! + if (!$this->id_product_attribute) { + Tools::redirectAdmin($this->context->link->getProductLink($product)); + } elseif (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !ProductAttribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) { + $this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax')); + } + } elseif (!$product->checkQty($qty_to_check)) { $this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax')); } - } elseif ($product->hasAttributes()) { - $minimumQuantity = ($product->out_of_stock == 2) ? !Configuration::get('PS_ORDER_OUT_OF_STOCK') : !$product->out_of_stock; - $this->id_product_attribute = Product::getDefaultAttribute($product->id, $minimumQuantity); - // @todo do something better than a redirect admin !! - if (!$this->id_product_attribute) { - Tools::redirectAdmin($this->context->link->getProductLink($product)); - } elseif (!Product::isAvailableWhenOutOfStock($product->out_of_stock) && !ProductAttribute::checkAttributeQty($this->id_product_attribute, $qty_to_check)) { - $this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax')); - } - } elseif (!$product->checkQty($qty_to_check)) { - $this->errors[] = Tools::displayError('There isn\'t enough product in stock.', !Tools::getValue('ajax')); } // If no errors, process product addition @@ -748,8 +754,20 @@ class CartControllerCore extends FrontController if ($objProduct->allow_multiple_quantity) { if (!Validate::isUnsignedInt($qty)) { $this->errors[] = Tools::displayError('The quantity you\'ve entered is invalid.'); - } elseif ($objProduct->max_quantity && $qty > $objProduct->max_quantity) { - $this->errors[] = Tools::displayError(sprintf('cannot add more than %d quantity.', $objProduct->max_quantity)); + } else { + $cartTotalQty = Cart::getProductQtyInCart((int)$this->context->cart->id,(int)$idServiceProduct); + $numDays = Product::getPriceCalculationApplicableDays( + $objProduct->price_calculation_method, + $objHotelCartBookingData->date_from, + $objHotelCartBookingData->date_to + ); + $currentQty = $qty * $numDays; + $finalQty = (int)$cartTotalQty + $currentQty; + if ($objProduct->max_quantity && $finalQty > $objProduct->max_quantity) { + $this->errors[] = Tools::displayError(sprintf('cannot add more than %d quantity.', $objProduct->max_quantity)); + } else if (!Product::isAvailableWhenOutOfStock($objProduct->out_of_stock) && !$objProduct->checkQty($finalQty)) { + $this->errors[] = Tools::displayError('There isn\'t enough product in stock.'); + } } } else { $qty = 1; diff --git a/controllers/front/GuestTrackingController.php b/controllers/front/GuestTrackingController.php index fd684953b..3b6fd2b2b 100644 --- a/controllers/front/GuestTrackingController.php +++ b/controllers/front/GuestTrackingController.php @@ -524,10 +524,7 @@ class GuestTrackingControllerCore extends FrontController 1 ); } - } else if ( - Product::isSellableWithHotel($type_value['selling_preference_type']) - || Product::isSellableAsStandalone($type_value['selling_preference_type']) - ) { + } else if (Product::isSellableWithHotel($type_value['selling_preference_type'])) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { @@ -535,21 +532,21 @@ class GuestTrackingControllerCore extends FrontController } else { $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); } + $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($idOrder, $type_value['id_order_detail'], $type_value['product_id']); + foreach ($hotelProducts as $hotelProduct) { + $hotelServiceProducts[] = array_merge($type_value, $hotelProduct); + } + } else if (Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + $cover_image_arr = $product->getCover($type_value['product_id']); - $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder( - $idOrder, - $type_value['id_order_detail'], - $type_value['product_id'] - ); - foreach ($serviceProducts as $serviceProduct) { - $isStandaloneRow = empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_htl_booking_detail']); - $isHotelRow = !empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_htl_booking_detail']); - - if ($isHotelRow && Product::isSellableWithHotel($type_value['selling_preference_type'])) { - $hotelServiceProducts[] = array_merge($type_value, $serviceProduct); - } elseif ($isStandaloneRow && Product::isSellableAsStandalone($type_value['selling_preference_type'])) { - $standaloneServiceProducts[] = array_merge($type_value, $serviceProduct); - } + if (!empty($cover_image_arr)) { + $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $product->id.'-'.$cover_image_arr['id_image'], 'small_default'); + } else { + $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); + } + $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($idOrder, $type_value['id_order_detail'], $type_value['product_id']); + foreach ($standaloneProducts as $standaloneProduct) { + $standaloneServiceProducts[] = array_merge($type_value, $standaloneProduct); } } } diff --git a/controllers/front/OrderConfirmationController.php b/controllers/front/OrderConfirmationController.php index 44940f97d..e40a7bec0 100644 --- a/controllers/front/OrderConfirmationController.php +++ b/controllers/front/OrderConfirmationController.php @@ -149,6 +149,7 @@ class OrderConfirmationControllerCore extends FrontController $cart_standalone_service_products = array(); $cart_hotel_service_products = array(); $cart_htl_data = array(); + foreach ($cartOrders as $cartOrder) { $idOrder = $cartOrder['id_order']; $objCartOrder = new Order($idOrder); @@ -298,7 +299,7 @@ class OrderConfirmationControllerCore extends FrontController if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_ti'])) { $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_ti'] = 0; } - $additionalServicesPriceTI = $objServiceProductOrderDetail->getRoomTypeServiceProducts( + $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_ti'] += $extraDemandPriceTI = $objServiceProductOrderDetail->getRoomTypeServiceProducts( $idOrder, 0, 0, @@ -310,12 +311,10 @@ class OrderConfirmationControllerCore extends FrontController 1, 0 ); - $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_ti'] += $additionalServicesPriceTI; - $orderTotalInfo['total_services_ti'] += $additionalServicesPriceTI; if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_te'])) { $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_te'] = 0; } - $additionalServicesPriceTE = $objServiceProductOrderDetail->getRoomTypeServiceProducts( + $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_te'] += $extraDemandPriceTE = $objServiceProductOrderDetail->getRoomTypeServiceProducts( $idOrder, 0, 0, @@ -327,13 +326,11 @@ class OrderConfirmationControllerCore extends FrontController 0, 0 ); - $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_te'] += $additionalServicesPriceTE; - $orderTotalInfo['total_services_te'] += $additionalServicesPriceTE; // get auto added price to be displayed with room price if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_ti'])) { $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_ti'] = 0; } - $autoAddedServicesPriceTI = $objServiceProductOrderDetail->getRoomTypeServiceProducts( + $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_ti'] += $objServiceProductOrderDetail->getRoomTypeServiceProducts( $idOrder, 0, 0, @@ -346,12 +343,10 @@ class OrderConfirmationControllerCore extends FrontController 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM ); - $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_ti'] += $autoAddedServicesPriceTI; - $orderTotalInfo['total_auto_add_services_ti'] += $autoAddedServicesPriceTI; if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_te'])) { $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_te'] = 0; } - $autoAddedServicesPriceTE = $objServiceProductOrderDetail->getRoomTypeServiceProducts( + $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_te'] += $objServiceProductOrderDetail->getRoomTypeServiceProducts( $idOrder, 0, 0, @@ -364,16 +359,10 @@ class OrderConfirmationControllerCore extends FrontController 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM ); - $cart_htl_data[$type_key]['date_diff'][$date_join]['additional_services_price_auto_add_te'] += $autoAddedServicesPriceTE; - $orderTotalInfo['total_auto_add_services_te'] += $autoAddedServicesPriceTE; $totalRoomsBooked += 1; } - } else { - $canSellWithRoomType = Product::isSellableWithRoomType($type_value['selling_preference_type']); - $canSellWithHotel = Product::isSellableWithHotel($type_value['selling_preference_type']); - $canSellAsStandalone = Product::isSellableAsStandalone($type_value['selling_preference_type']); - + } else if (Product::isSellableWithHotel($type_value['selling_preference_type'])) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { @@ -383,43 +372,36 @@ class OrderConfirmationControllerCore extends FrontController } $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($idOrder, $type_value['id_order_detail'], $type_value['product_id']); foreach ($serviceProducts as $serviceProduct) { - $idHotel = (int)$serviceProduct['id_hotel']; - $isRoomLinked = !empty($serviceProduct['id_htl_booking_detail']); + $type_value['total_price_tax_excl'] = $serviceProduct['total_price_tax_excl']; + $type_value['total_price_tax_incl'] = $serviceProduct['total_price_tax_incl']; + $type_value['product_quantity'] = $serviceProduct['quantity']; + $type_value['option_name'] = $serviceProduct['option_name']; + $type_value['location'] = $serviceProduct['option_name']; - $serviceLine = $type_value; - $serviceLine['unit_price_tax_excl'] = $serviceProduct['unit_price_tax_excl']; - $serviceLine['unit_price_tax_incl'] = $serviceProduct['unit_price_tax_incl']; - $serviceLine['total_price_tax_excl'] = $serviceProduct['total_price_tax_excl']; - $serviceLine['total_price_tax_incl'] = $serviceProduct['total_price_tax_incl']; - $serviceLine['product_quantity'] = $serviceProduct['quantity']; - $serviceLine['option_name'] = $serviceProduct['option_name']; - - if ( - $canSellWithRoomType - && (int)$type_value['product_auto_add'] == 1 - && (int)$type_value['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT - ) { - $orderTotalInfo['total_convenience_fee_ti'] += $serviceLine['total_price_tax_incl']; - $orderTotalInfo['total_convenience_fee_te'] += $serviceLine['total_price_tax_excl']; - continue; + if ($hotelInfo = $objHtlBranchInfo->hotelBranchesInfo($this->context->language->id, 2, 1, $serviceProduct['id_hotel'])) { + $type_value['hotel_location'] = $hotelInfo['hotel_name'].', '.$hotelInfo['city']. + ($hotelInfo['state_name']?', '.$hotelInfo['state_name']:'').', '. + $hotelInfo['country_name'].', '.$hotelInfo['postcode']; } + $cart_hotel_service_products[] = $type_value; + } + } else if (Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + $cover_image_arr = $product->getCover($type_value['product_id']); - if ($canSellWithHotel && $idHotel) { - $serviceLine['location'] = $serviceProduct['option_name']; - if ($hotelInfo = $objHtlBranchInfo->hotelBranchesInfo($this->context->language->id, 2, 1, $idHotel)) { - $serviceLine['hotel_location'] = $hotelInfo['hotel_name'].', '.$hotelInfo['city']. - ($hotelInfo['state_name']?', '.$hotelInfo['state_name']:'').', '. - $hotelInfo['country_name'].', '.$hotelInfo['postcode']; - } - $cart_hotel_service_products[] = $serviceLine; - } elseif ($canSellAsStandalone && !$idHotel && !$isRoomLinked) { - $cart_standalone_service_products[] = $serviceLine; - } else { - continue; - } - - $orderTotalInfo['total_standalone_products_ti'] += $serviceLine['total_price_tax_incl']; - $orderTotalInfo['total_standalone_products_te'] += $serviceLine['total_price_tax_excl']; + if (!empty($cover_image_arr)) { + $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $product->id.'-'.$cover_image_arr['id_image'], 'small_default'); + } else { + $type_value['cover_img'] = $this->context->link->getImageLink($product->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); + } + $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($idOrder, $type_value['id_order_detail'], $type_value['product_id']); + foreach ($serviceProducts as $serviceProduct) { + $type_value['unit_price_tax_excl'] = $serviceProduct['unit_price_tax_excl']; + $type_value['unit_price_tax_incl'] = $serviceProduct['unit_price_tax_incl']; + $type_value['total_price_tax_excl'] = $serviceProduct['total_price_tax_excl']; + $type_value['total_price_tax_incl'] = $serviceProduct['total_price_tax_incl']; + $type_value['product_quantity'] = $serviceProduct['quantity']; + $type_value['option_name'] = $serviceProduct['option_name']; + $cart_standalone_service_products[] = $type_value; } } } @@ -433,9 +415,17 @@ class OrderConfirmationControllerCore extends FrontController if (!$objCartOrder->hasInvoice()) { $orders_has_invoice = 0; } + $orderTotalInfo['total_standalone_products_ti'] += ($objCartOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE)+$objCartOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE)); + $orderTotalInfo['total_standalone_products_te'] += ($objCartOrder->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE)+$objCartOrder->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE)); $orderTotalInfo['total_wrapping'] += $objCartOrder->total_wrapping; $orderTotalInfo['total_rooms_te'] += $objCartOrder->getTotalProductsWithoutTaxes(false, true); $orderTotalInfo['total_rooms_ti'] += $objCartOrder->getTotalProductsWithTaxes(false, true); + $orderTotalInfo['total_auto_add_services_te'] += $objCartOrder->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); + $orderTotalInfo['total_auto_add_services_ti'] += $objCartOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM); + $orderTotalInfo['total_services_te'] += $objCartOrder->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0); + $orderTotalInfo['total_services_ti'] += $objCartOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0); + $orderTotalInfo['total_convenience_fee_te'] += $objCartOrder->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); + $orderTotalInfo['total_convenience_fee_ti'] += $objCartOrder->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT); $orderTotalInfo['total_discounts'] += $objCartOrder->total_discounts; $orderTotalInfo['total_discounts_te'] += $objCartOrder->total_discounts_tax_excl; @@ -481,6 +471,7 @@ class OrderConfirmationControllerCore extends FrontController $this->setTemplate(_PS_THEME_DIR_.'order-confirmation.tpl'); } + /** * Execute the hook displayPaymentReturn */ diff --git a/controllers/front/OrderDetailController.php b/controllers/front/OrderDetailController.php index 98e979865..c71439dab 100644 --- a/controllers/front/OrderDetailController.php +++ b/controllers/front/OrderDetailController.php @@ -101,7 +101,6 @@ class OrderDetailControllerCore extends FrontController $total_convenience_fee_te = 0; $total_convenience_fee_ti = 0; $roomTypes = array(); - $processedConvenienceFeeProducts = array(); $objOrderReturn = new OrderReturn(); $refundedAmount = 0; $refundedAmount = $objOrderReturn->getRefundedAmount($order->id); @@ -359,17 +358,8 @@ class OrderDetailControllerCore extends FrontController $value['avg_price_diff_tax_excl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_excl'] - $value['product_price_tax_excl'], 6)); $value['avg_price_diff_tax_incl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_incl'] - $value['product_price_tax_incl'], 6)); } - } else { - $canSellWithRoomType = Product::isSellableWithRoomType($type_value['selling_preference_type']); - $canSellWithHotel = Product::isSellableWithHotel($type_value['selling_preference_type']); - $canSellAsStandalone = Product::isSellableAsStandalone($type_value['selling_preference_type']); - - if ($canSellWithRoomType - && $type_value['product_auto_add'] - && $type_value['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT - && !isset($processedConvenienceFeeProducts[$type_value['product_id']]) - ) { - $processedConvenienceFeeProducts[$type_value['product_id']] = true; + } else if (Product::isSellableWithRoomType($type_value['selling_preference_type'])) { + if ($type_value['product_auto_add'] && $type_value['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT) { $total_convenience_fee_ti += $objServiceProductOrderDetail->getRoomTypeServiceProducts( $id_order, $type_value['product_id'], @@ -395,50 +385,37 @@ class OrderDetailControllerCore extends FrontController 1 ); } - - if ($canSellWithHotel || $canSellAsStandalone) { - $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder( - $id_order, - $type_value['id_order_detail'], - $type_value['product_id'] - ); - - foreach ($serviceProducts as $serviceProduct) { - $idHotel = (int)$serviceProduct['id_hotel']; - $isRoomLinked = !empty($serviceProduct['id_htl_booking_detail']); - - // Room-linked rows are already included in room detail block. - if ($isRoomLinked) { - continue; - } - - if ($canSellWithHotel && $idHotel) { - $hotelProduct = array_merge($type_value, $serviceProduct); - $hotelServiceProducts[] = $hotelProduct; - $formattedProduct = $serviceProduct; - $formattedProduct['refund_denied'] = 0; - if (isset($serviceProduct['refund_info']) - && ($serviceProduct['refund_info']['refunded'] && !$serviceProduct['refund_info']['id_customization']) - ) { - $formattedProduct['refund_denied'] = 1; - } - } elseif ($canSellAsStandalone && !$idHotel) { - $standaloneProduct = array_merge($type_value, $serviceProduct); - $standaloneServiceProducts[] = $standaloneProduct; - $formattedProduct = $serviceProduct; - } else { - continue; - } - - if (!isset($serviceProductsFormatted[$serviceProduct['id_product']])) { - $serviceProductsFormatted[$serviceProduct['id_product']] = array( - 'id_product' => $serviceProduct['id_product'], - 'name' => $serviceProduct['name'], - 'options' => array() - ); - } - $serviceProductsFormatted[$serviceProduct['id_product']]['options'][] = $formattedProduct; + } else if (Product::isSellableWithHotel($type_value['selling_preference_type'])) { + $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($id_order, $type_value['id_order_detail'], $type_value['product_id']); + foreach ($hotelProducts as $hotelProduct) { + $hotelServiceProducts[] = array_merge($type_value, $hotelProduct); + if (!isset($serviceProductsFormatted[$hotelProduct['id_product']])) { + $serviceProductsFormatted[$hotelProduct['id_product']] = array( + 'id_product' => $hotelProduct['id_product'], + 'name' => $hotelProduct['name'], + 'options' => array() + ); } + $hotelProduct['refund_denied'] = 0; + if (isset($hotelProduct['refund_info']) + && ($hotelProduct['refund_info']['refunded'] && !$hotelProduct['refund_info']['id_customization']) + ) { + $hotelProduct['refund_denied'] = 1; + } + $serviceProductsFormatted[$hotelProduct['id_product']]['options'][] = $hotelProduct; + } + } else if (Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($id_order, $type_value['id_order_detail'], $type_value['product_id']); + foreach ($standaloneProducts as $standaloneProduct) { + $standaloneServiceProducts[] = array_merge($type_value, $standaloneProduct); + if (!isset($serviceProductsFormatted[$standaloneProduct['id_product']])) { + $serviceProductsFormatted[$standaloneProduct['id_product']] = array( + 'id_product' => $standaloneProduct['id_product'], + 'name' => $standaloneProduct['name'], + 'options' => array() + ); + } + $serviceProductsFormatted[$standaloneProduct['id_product']]['options'][] = $standaloneProduct; } } $roomTypes[$type_value['id_product']] = $type_value; diff --git a/js/admin.js b/js/admin.js index 48507c79a..06665a2df 100644 --- a/js/admin.js +++ b/js/admin.js @@ -1749,3 +1749,15 @@ function closeRecommendation() } }); } + +function applyPriceCalcMethodValue() +{ + var ci = $('#pcm_checkin').is(':checked') ? 1 : 0; + var co = $('#pcm_checkout').is(':checked') ? 2 : 0; + var ds = $('#pcm_duringstay').is(':checked') ? 4 : 0; + $('#price_calculation_method').val(ci + co + ds); +} +$(document).on('change','#pcm_checkin, #pcm_checkout, #pcm_duringstay', function() { + applyPriceCalcMethodValue(); +}); +applyPriceCalcMethodValue(); \ No newline at end of file diff --git a/js/admin/normal_products.js b/js/admin/normal_products.js index 9826b146f..6b283d882 100644 --- a/js/admin/normal_products.js +++ b/js/admin/normal_products.js @@ -565,34 +565,21 @@ product_tabs['Informations'] = new function(){ function applySellingPreferenceUIState() { - var sellingPreference = parseInt($('#selling_preference_type').val(), 10); - var showHotelTree = $.inArray(sellingPreference, [ - SELLING_PREFERENCE_HOTEL_STANDALONE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ]) !== -1; - var showRoomTypeTree = $.inArray(sellingPreference, [ - 0, - SELLING_PREFERENCE_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ]) !== -1; - var showAutoAddToCart = $.inArray(sellingPreference, [ - 0, - SELLING_PREFERENCE_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ]) !== -1; + var withRoomType = $('#sp_with_room_type').is(':checked'); + var withHotel = $('#sp_with_hotel').is(':checked'); + var standalone = $('#sp_standalone').is(':checked'); + + // Bitmask: Room Type=1, Hotel=2, Standalone=4 + var sellingPreference = (withRoomType ? 1 : 0) + (withHotel ? 2 : 0) + (standalone ? 4 : 0); + $('#selling_preference_type').val(sellingPreference); + var $autoAddOff = $('#auto_add_to_cart_off'); var $autoAddCheckedInput; - toggleAssociationFieldNames('#associated_hotel_tree', showHotelTree); - toggleAssociationFieldNames('#associated_hotel_rooms_tree', showRoomTypeTree); + toggleAssociationFieldNames('#associated_hotel_tree', withHotel); + toggleAssociationFieldNames('#associated_hotel_rooms_tree', withRoomType); - if (showAutoAddToCart) { + if (withRoomType) { $('#auto_add_to_cart_container').show('fast'); $autoAddCheckedInput = $('input[name="auto_add_to_cart"]:checked'); if (!$autoAddCheckedInput.length) { @@ -609,12 +596,12 @@ product_tabs['Informations'] = new function(){ $('#product_options').show('fast'); } - $('#selling_preference_type').on('change',function(){ + $('#sp_with_room_type, #sp_with_hotel, #sp_standalone').on('change', function(){ setTimeout(function() { applySellingPreferenceUIState(); }, 0); }); - $('#selling_preference_type').trigger('change'); + applySellingPreferenceUIState(); $('#simple_product').attr('checked', true); $('input[name="type_product"]').on('click', function(e) diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index 85c34b47e..a7cdbe2e3 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -748,11 +748,12 @@ var ajaxCart = { //try to know if the current product is still in the new list var stayInTheCart = false; - var isHotelRow = (typeof ids[3] != 'undefined' && parseInt(ids[3], 10) > 0); + var isHotelRow = (typeof ids[3] != 'undefined' && parseInt(ids[3]) > 0); for (aProduct in jsonData.products) { //we've called the variable aProduct because IE6 bug if this variable is called product //if product has attributes - if (isHotelRow && (typeof jsonData.products[aProduct]['hotel_wise_data'] != 'undefined' && jsonData.products[aProduct]['hotel_wise_data'].length)) { + if (isHotelRow && jsonData.products[aProduct]['id'] == ids[0] + && (typeof jsonData.products[aProduct]['hotel_wise_data'] != 'undefined' && jsonData.products[aProduct]['hotel_wise_data'].length)) { $.each(jsonData.products[aProduct]['hotel_wise_data'], function() { if (ids[3] == this.id_hotel) { stayInTheCart = true; @@ -760,7 +761,20 @@ var ajaxCart = { }); } else { if (jsonData.products[aProduct]['id'] == ids[0] && (!ids[1] || jsonData.products[aProduct]['idCombination'] == ids[1])) { - stayInTheCart = true; + var productType = parseInt(jsonData.products[aProduct]['selling_preference_type']); + var isStandaloneRow = (typeof ids[3] == 'undefined' || parseInt(ids[3]) === 0); + + if (!isStandaloneRow) { + } else if ( + ajaxCart.isSellableAsStandalone(productType) + && (ajaxCart.isSellableWithHotel(productType) || ajaxCart.isSellableWithRoomType(productType)) + ) { + if (parseInt(jsonData.products[aProduct]['standalone_total_qty']) > 0) { + stayInTheCart = true; + } + } else { + stayInTheCart = true; + } // update the product customization display (when the product is still in the cart) ajaxCart.hideOldProductCustomizations(jsonData.products[aProduct], productDomId); } diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index 86b46ddd7..4a8565923 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -1027,6 +1027,25 @@ class HotelCartBookingData extends ObjectModel } } } + + // Check available stock: remove if cart quantity exceeds what is in stock. + if (!$toRemoveService) { + $availableQty = Product::getQuantity((int)$service['id_product']); + $totalQty = Cart::getProductQtyInCart((int)$service['id_cart'],(int)$service['id_product']); + if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$service['id_product'])) + && $availableQty !== false + && $availableQty < (int)$totalQty + ) { + $toRemoveService = 1; + } + } + + // Check max quantity: remove if cart quantity exceeds the product's configured maximum. + if (!$toRemoveService && $product->allow_multiple_quantity && (int)$product->max_quantity > 0) { + if ((int)$service['quantity'] > (int)$product->max_quantity) { + $toRemoveService = 1; + } + } } if ($toRemoveService) { diff --git a/modules/hotelreservationsystem/classes/HotelHelper.php b/modules/hotelreservationsystem/classes/HotelHelper.php index 709a9b23a..afc2a0735 100644 --- a/modules/hotelreservationsystem/classes/HotelHelper.php +++ b/modules/hotelreservationsystem/classes/HotelHelper.php @@ -2187,7 +2187,7 @@ class HotelHelper 'price' => '250', 'auto_add_to_cart' => 1, 'show_at_front' => 0, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_PER_BOOKING, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_INDEPENDENT, 'en' => array( 'name' => 'Internet Handling Charges', diff --git a/modules/hotelreservationsystem/classes/RoomTypeServiceProduct.php b/modules/hotelreservationsystem/classes/RoomTypeServiceProduct.php index 9bac1f873..06bcd0079 100644 --- a/modules/hotelreservationsystem/classes/RoomTypeServiceProduct.php +++ b/modules/hotelreservationsystem/classes/RoomTypeServiceProduct.php @@ -200,7 +200,12 @@ class RoomTypeServiceProduct extends ObjectModel $subCategory )) { $serviceProducts = Product::getProductsProperties($idLang, $serviceProducts); - foreach($serviceProducts as &$serviceProduct) { + foreach($serviceProducts as $key => &$serviceProduct) { + if (!$serviceProduct['allow_oosp'] && $serviceProduct['quantity'] <= 0) { + unset($serviceProducts[$key]); + continue; + } + $serviceProduct['price_tax_exc'] = Product::getServiceProductPrice( (int)$serviceProduct['id_product'], 0, diff --git a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php index f7456863e..512e12b6b 100644 --- a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php +++ b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php @@ -95,7 +95,9 @@ class ServiceProductCartDetail extends ObjectModel $objHotelCartBookingData->date_from, $objHotelCartBookingData->date_to ); - $updateQty *= $numdays; + if($numdays){ + $updateQty *= $numdays; + } if ($objServiceProductCartDetail->delete()) { $objCart = new Cart($product['id_cart']); if (isset(Context::getContext()->controller->controller_type)) { @@ -269,7 +271,7 @@ class ServiceProductCartDetail extends ObjectModel 1, null, $product['htl_cart_booking_id'] - )/$numDays; + ) / max($numDays, 1); $priceTaxExcl = Product::getServiceProductPrice( $objProduct->id, $product['id_product_option'], @@ -284,7 +286,7 @@ class ServiceProductCartDetail extends ObjectModel 1, null, $product['htl_cart_booking_id'] - )/$numDays; + ) / max($numDays, 1); $optionDetails = false; if (ServiceProductOption::productHasOptions($product['id_product'])) { @@ -461,9 +463,11 @@ class ServiceProductCartDetail extends ObjectModel $objHotelCartBooking->date_from, $objHotelCartBooking->date_to ); - $quantity = $objServiceProductCartDetail->quantity * $numDays; + if($numDays){ + $quantity = $quantity * $numDays; + } } - + $objCart = new Cart($idCart); return $objCart->updateQty($quantity, $idProduct); } @@ -514,6 +518,16 @@ class ServiceProductCartDetail extends ObjectModel $updateQunatity = $objServiceProductCartDetail->delete(); } if ($updateQunatity) { + if (Validate::isLoadedObject($objHotelCartBooking = new HotelCartBookingData($product['id_hotel_cart_booking']))) { + $objProduct = new Product((int) $product['id_product']); + $numDays = Product::getPriceCalculationApplicableDays( + $objProduct->price_calculation_method, + $objHotelCartBooking->date_from, + $objHotelCartBooking->date_to + ); + $removedQuantity = $removedQuantity * $numDays; + } + $objCart = new Cart($idCart); if (isset(Context::getContext()->controller->controller_type)) { $controllerType = Context::getContext()->controller->controller_type; diff --git a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl index d8cadf9e9..3a181b149 100644 --- a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl @@ -372,7 +372,7 @@
    diff --git a/modules/qlostatsserviceproducts/qlostatsserviceproducts.php b/modules/qlostatsserviceproducts/qlostatsserviceproducts.php index fd72eb7e3..684cf15f9 100644 --- a/modules/qlostatsserviceproducts/qlostatsserviceproducts.php +++ b/modules/qlostatsserviceproducts/qlostatsserviceproducts.php @@ -179,24 +179,25 @@ class QloStatsServiceProducts extends ModuleGrid public function setQueryForServices($dateBetween) { + $numNightsSql = 'IFNULL(DATEDIFF(hbd.`date_to`, hbd.`date_from`), 0)'; + $applicableDaysSql = 'CASE + WHEN spod.`id_htl_booking_detail` IS NULL OR spod.`id_htl_booking_detail` = 0 THEN 1 + WHEN od.`product_price_calculation_method` IN ('.(int)Product::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY.', '.(int)Product::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY.') THEN 1 + WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY.' THEN GREATEST('.$numNightsSql.' - 1, 1) + WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY.' THEN 2 + WHEN od.`product_price_calculation_method` IN ('.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY.', '.(int)Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY.') THEN GREATEST('.$numNightsSql.', 1) + WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.' THEN GREATEST('.$numNightsSql.' + 1, 1) + ELSE GREATEST('.$numNightsSql.', 1) + END'; + $this->query = '(SELECT od.`product_name` as `display_name`, p.`active`, od.`product_auto_add` as auto_add_to_cart, od.`product_price_addition_type` as price_addition_type, ROUND(IFNULL(SUM(spod.`total_price_tax_excl` / o.`conversion_rate`), 0), 2) / SUM( - IF(od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_PER_DAY.', - (IF(spod.`id_htl_booking_detail`, - DATEDIFF(hbd.`date_to`, hbd.`date_from`), - 1)) * spod.`quantity`, - spod.`quantity` - ) + ('.$applicableDaysSql.') * spod.`quantity` ) AS avgPriceSold, IFNULL(SUM( - IF(od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_PER_DAY.', - (IF(spod.`id_htl_booking_detail`, - DATEDIFF(hbd.`date_to`, hbd.`date_from`), - 1)) * spod.`quantity`, - spod.`quantity` - ) + ('.$applicableDaysSql.') * spod.`quantity` ), 0) AS totalQuantitySold, ROUND(IFNULL(SUM(spod.`total_price_tax_excl` / o.`conversion_rate`), 0), 2) AS totalPriceSold FROM '._DB_PREFIX_.'service_product_order_detail spod diff --git a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl index 5a3db8aaa..b22722e4f 100644 --- a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl +++ b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl @@ -82,7 +82,7 @@

    - {if isset($selected_adv_option) && isset($demand['adv_option'][$selected_adv_option]['price'])}{convertPrice price = $demand['adv_option'][$selected_adv_option]['price']|escape:'html':'UTF-8'}{else}{convertPrice price = $demand['price']|escape:'html':'UTF-8'}{/if}{if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/Night'}{/if} + {if isset($selected_adv_option) && isset($demand['adv_option'][$selected_adv_option]['price'])}{convertPrice price = $demand['adv_option'][$selected_adv_option]['price']|escape:'html':'UTF-8'}{else}{convertPrice price = $demand['price']|escape:'html':'UTF-8'}{/if}{if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/Day'}{/if}

    @@ -156,7 +156,7 @@ $product.price_calculation_method, $cartRoom.date_from|default:'', $cartRoom.date_to|default:'' - ) > 1}{l s='/Night'}{/if} + ) > 1}{l s='/Day'}{/if} {/if} diff --git a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl index 5a8896426..fa04edfea 100644 --- a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl +++ b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl @@ -59,7 +59,7 @@ $service_product.date_from|default:$date_from|default:'', $service_product.date_to|default:$date_to|default:'' ) > 1} - {l s='/Night'} + {l s='/Day'} {/if} {/block} {if $service_product.allow_multiple_quantity && $service_product.available_for_order && $service_product.max_quantity > 0} diff --git a/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js b/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js index 85c34b47e..a69ecd93f 100644 --- a/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js +++ b/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js @@ -748,11 +748,12 @@ var ajaxCart = { //try to know if the current product is still in the new list var stayInTheCart = false; - var isHotelRow = (typeof ids[3] != 'undefined' && parseInt(ids[3], 10) > 0); + var isHotelRow = (typeof ids[3] != 'undefined' && parseInt(ids[3]) > 0); for (aProduct in jsonData.products) { //we've called the variable aProduct because IE6 bug if this variable is called product //if product has attributes - if (isHotelRow && (typeof jsonData.products[aProduct]['hotel_wise_data'] != 'undefined' && jsonData.products[aProduct]['hotel_wise_data'].length)) { + if (isHotelRow && jsonData.products[aProduct]['id'] == ids[0] + && (typeof jsonData.products[aProduct]['hotel_wise_data'] != 'undefined' && jsonData.products[aProduct]['hotel_wise_data'].length)) { $.each(jsonData.products[aProduct]['hotel_wise_data'], function() { if (ids[3] == this.id_hotel) { stayInTheCart = true; @@ -760,7 +761,20 @@ var ajaxCart = { }); } else { if (jsonData.products[aProduct]['id'] == ids[0] && (!ids[1] || jsonData.products[aProduct]['idCombination'] == ids[1])) { - stayInTheCart = true; + var productType = parseInt(jsonData.products[aProduct]['selling_preference_type']); + var isStandaloneRow = (typeof ids[3] == 'undefined' || parseInt(ids[3]) === 0); + + if (!isStandaloneRow) { + } else if ( + ajaxCart.isSellableAsStandalone(productType) + && (ajaxCart.isSellableWithHotel(productType) || ajaxCart.isSellableWithRoomType(productType)) + ) { + if (parseInt(jsonData.products[aProduct]['standalone_total_qty']) > 0) { + stayInTheCart = true; + } + } else { + stayInTheCart = true; + } // update the product customization display (when the product is still in the cart) ajaxCart.hideOldProductCustomizations(jsonData.products[aProduct], productDomId); } @@ -945,7 +959,7 @@ var ajaxCart = { if (product.booking_product) { content += formatCurrency(parseFloat(product.bookingData.total_room_type_amount), currency_format, currency_sign, currency_blank); - } else if (typeof(hotel_wise_data) != 'undefined') { + } else if (typeof(hotel_wise_data) != 'undefined' && ajaxCart.isSellableWithHotel(product.selling_preference_type)) { content += formatCurrency(parseFloat(hotel_wise_data.amount), currency_format, currency_sign, currency_blank); } else { content += formatCurrency(parseFloat(product.amount), currency_format, currency_sign, currency_blank); diff --git a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl index a45968365..182945dfe 100644 --- a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl +++ b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl @@ -64,7 +64,7 @@ {foreach from=$products key=data_k item='product' name='myLoop'} {* only show products that are booking or global without room *} {if $product.booking_product || Product::isSellableAsStandalone($product.selling_preference_type) || Product::isSellableWithHotel($product.selling_preference_type)} - {if isset($product.hotel_wise_data) && $product.hotel_wise_data} + {if Product::isSellableWithHotel($product.selling_preference_type) && isset($product.hotel_wise_data) && $product.hotel_wise_data} {foreach $product.hotel_wise_data as $hotel_wise_data} {include file="./cartrow.tpl" hotel_wise_data=$hotel_wise_data} {/foreach} @@ -144,7 +144,7 @@ {/if} {/block} {block name='blockcart_shopping_cart_total_convenience_fee'} - {if isset($total_convenience_fee)} + {if isset($total_convenience_fee) && $total_convenience_fee}
    {convertPrice price=$total_convenience_fee} {l s='Convenience Fees' mod='blockcart'} @@ -326,7 +326,7 @@
    --> {block name='blockcart_layer_cart_total_convenience_fee'} - {if isset($total_convenience_fee)} + {if isset($total_convenience_fee) && $total_convenience_fee}
    {l s='Convenience Fees' mod='blockcart'} diff --git a/themes/hotel-reservation-theme/order-confirmation.tpl b/themes/hotel-reservation-theme/order-confirmation.tpl index e8cc450cc..2297d556b 100644 --- a/themes/hotel-reservation-theme/order-confirmation.tpl +++ b/themes/hotel-reservation-theme/order-confirmation.tpl @@ -254,9 +254,9 @@
    {l s='Unit Price'}
    {if $group_use_tax} - {displayWtPriceWithCurrency price=$product.unit_price_tax_incl currency=$currency} + {displayWtPriceWithCurrency price=$product.unit_price_tax_incl currency=$objOrderCurrency} {else} - {displayWtPriceWithCurrency price=$product.unit_price_tax_excl currency=$currency} + {displayWtPriceWithCurrency price=$product.unit_price_tax_excl currency=$objOrderCurrency} {/if}
    @@ -272,9 +272,9 @@
    {l s='Total Pricing'}
    {if $group_use_tax} - {displayWtPriceWithCurrency price=$product.total_price_tax_incl currency=$currency} + {displayWtPriceWithCurrency price=$product.total_price_tax_incl currency=$objOrderCurrency} {else} - {displayWtPriceWithCurrency price=$product.total_price_tax_excl currency=$currency} + {displayWtPriceWithCurrency price=$product.total_price_tax_excl currency=$objOrderCurrency} {/if}
    @@ -328,9 +328,9 @@
    {l s='Unit Price'}
    {if $group_use_tax} - {displayWtPriceWithCurrency price=$product.unit_price_tax_incl currency=$currency} + {displayWtPriceWithCurrency price=$product.unit_price_tax_incl currency=$objOrderCurrency} {else} - {displayWtPriceWithCurrency price=$product.unit_price_tax_excl currency=$currency} + {displayWtPriceWithCurrency price=$product.unit_price_tax_excl currency=$objOrderCurrency} {/if}
    @@ -346,9 +346,9 @@
    {l s='Total Pricing'}
    {if $group_use_tax} - {displayWtPriceWithCurrency price=$product.total_price_tax_incl currency=$currency} + {displayWtPriceWithCurrency price=$product.total_price_tax_incl currency=$objOrderCurrency} {else} - {displayWtPriceWithCurrency price=$product.total_price_tax_excl currency=$currency} + {displayWtPriceWithCurrency price=$product.total_price_tax_excl currency=$objOrderCurrency} {/if}
    diff --git a/themes/hotel-reservation-theme/order-detail.tpl b/themes/hotel-reservation-theme/order-detail.tpl index d1682db6a..c0bc6432d 100644 --- a/themes/hotel-reservation-theme/order-detail.tpl +++ b/themes/hotel-reservation-theme/order-detail.tpl @@ -1133,7 +1133,7 @@ {addJsDefL name=pending_state_msg}{l s='Pending...' js=1}{/addJsDefL} {addJsDefL name=mail_sending_err}{l s='Some error occurred while sending mail to the customer' js=1}{/addJsDefL} {addJsDefL name=refund_request_sending_error}{l s='Some error occurred while processing request for booking cancellation.' js=1}{/addJsDefL} - {addJsDefL name=no_bookings_selected}{l s='Please select at least one room to proceed for cancellation.' js=1}{/addJsDefL} + {addJsDefL name=no_bookings_selected}{l s='Please select at least one room or service to proceed for cancellation.' js=1}{/addJsDefL} {addJsDefL name=refund_request_success_txt}{l s='Request for booking cancellation is successffully created.' js=1}{/addJsDefL} {addJsDefL name=order_message_choose_txt}{l s='-- Choose --' js=1}{/addJsDefL} {addJsDefL name=order_message_success_txt}{l s='Order message sent successfully.' js=1}{/addJsDefL} diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index 9492fbc86..70f6deb30 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -455,7 +455,7 @@ {/if}
    -

    {$demand['name']|escape:'html':'UTF-8'} {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}{convertPrice price = $demand['price']}{if $demand['price_calc_method'] == $WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/Night'}{/if}{/if}

    +

    {$demand['name']|escape:'html':'UTF-8'} {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}{convertPrice price = $demand['price']}{if $demand['price_calc_method'] == $WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/day'}{/if}{/if}

    {if isset($demand['adv_option']) && $demand['adv_option']} - {foreach $associated_hotels as $hotel} - - {/foreach} - + +
    + +
    +
    + +
    {/if} {/block} + {block name='booking_form_associated_hotels'} +
    + {if isset($associated_hotels) && $associated_hotels} +
    + + +
    + {/if} +
    + {/block} {block name='booking_form_product_option'} {if isset($product_option) && $product_option} diff --git a/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js b/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js index a69ecd93f..51978e8fe 100644 --- a/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js +++ b/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js @@ -201,7 +201,7 @@ var ajaxCart = { var date_from = $('#room_check_in').val(); var date_to = $('#room_check_out').val(); - var id_hotel = $('#service_id_hotel').length ? $('#service_id_hotel').val() : 0; + var id_hotel = ($('input[name="buying_option"]').length && $('input[name="buying_option"]:checked').val() == '2') ? 0 : ($('#service_id_hotel').length ? $('#service_id_hotel').val() : 0); var occupancy = getBookingOccupancyDetails($(this).closest('.booking_room_fields'), parseInt(booking_product)); if (occupancy) { diff --git a/themes/hotel-reservation-theme/js/product.js b/themes/hotel-reservation-theme/js/product.js index b0771177c..4c375b794 100644 --- a/themes/hotel-reservation-theme/js/product.js +++ b/themes/hotel-reservation-theme/js/product.js @@ -1590,4 +1590,12 @@ function getBookingOccupancy() } return occupancy; -} \ No newline at end of file +} + +$(document).on('change', 'input[name="buying_option"]', function() { + if ($(this).val() == '2') { + $('#hotel_selection_block').hide(); + } else { + $('#hotel_selection_block').show(); + } +}); \ No newline at end of file From 3acacf95f9525c90e80ba6798524105327b5482b Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Tue, 26 May 2026 17:53:50 +0530 Subject: [PATCH 18/93] Added: price calculation info tooltip on service products list --- admin/themes/default/css/admin-tooltip.css | 79 +++++++++++++++++++ admin/themes/default/js/admin-theme.js | 45 +++++++++++ .../normal_products/selected_option.tpl | 65 --------------- .../template/controllers/orders/form.tpl | 27 +++++++ .../_add_order_extra_services_tab_content.tpl | 5 +- ..._services_service_products_tab_content.tpl | 10 ++- .../_partials/_price-calculation-info.tpl | 43 ++++++++++ classes/Product.php | 4 +- .../admin/AdminNormalProductsController.php | 5 +- controllers/admin/AdminOrdersController.php | 2 + controllers/front/OrderOpcController.php | 1 + controllers/front/ProductController.php | 1 + js/admin/normal_products.js | 24 ++---- js/admin/orders.js | 19 ++++- .../_partials/cart_booking_demands.tpl | 3 +- .../_partials/order-extra-services.tpl | 1 + .../_partials/price-calculation-info.tpl | 43 ++++++++++ .../_partials/service-products-list-row.tpl | 1 + themes/hotel-reservation-theme/css/global.css | 34 ++++++++ themes/hotel-reservation-theme/js/global.js | 38 +++++++++ .../js/order-confirmation.js | 1 + .../js/order-detail.js | 1 + .../hotel-reservation-theme/js/order-opc.js | 1 + themes/hotel-reservation-theme/js/product.js | 3 +- 24 files changed, 363 insertions(+), 93 deletions(-) create mode 100644 admin/themes/default/css/admin-tooltip.css create mode 100644 admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl create mode 100644 themes/hotel-reservation-theme/_partials/price-calculation-info.tpl diff --git a/admin/themes/default/css/admin-tooltip.css b/admin/themes/default/css/admin-tooltip.css new file mode 100644 index 000000000..c4d618cb3 --- /dev/null +++ b/admin/themes/default/css/admin-tooltip.css @@ -0,0 +1,79 @@ +/* +* NOTICE OF LICENSE +* +* This source file is subject to the Open Software License version 3.0 +* that is bundled with this package in the file LICENSE.md +* It is also available through the world-wide-web at this URL: +* https://opensource.org/license/osl-3-0-php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to support@qloapps.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to a 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 +* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 +*/ + +/* Trigger element styles */ +.selected-option-info, +.price-calculation-info { + cursor: pointer; +} + +.price-calculation-info { + display: inline-block; + vertical-align: middle; + margin-left: 4px; +} + +.selected-option-info .icon-info-sign, +.price-calculation-info .icon-info-sign { + color: #00aff0; + font-size: 16px; +} + +/* Unified tooltip bubble */ +.ui-tooltip.admin-info-tooltip { + background: #ffffff; + border: 1px solid #ddd; + box-shadow: 0 2px 6px rgba(0, 0, 0, 0.2); + color: #333; + padding: 8px 12px; + font-size: 13px; +} + +.ui-tooltip.admin-info-tooltip ul { + margin: 0; + padding: 0 0 0 16px; + list-style: disc; +} + +.ui-tooltip.admin-info-tooltip ul li { + padding: 2px 0; +} + +.ui-tooltip.admin-info-tooltip .price-info-tooltip-cont { + min-width: 160px; +} + +.ui-tooltip.admin-info-tooltip .applied-on-label { + margin: 0 0 6px; + font-weight: 600; + font-size: 13px; +} + +.ui-tooltip.admin-info-tooltip .applied-on-days { + margin: 0; + padding-left: 16px; + font-size: 13px; +} + +.ui-tooltip.admin-info-tooltip .applied-on-days li { + padding: 2px 0; +} diff --git a/admin/themes/default/js/admin-theme.js b/admin/themes/default/js/admin-theme.js index 1aa61350d..0fdc86b2e 100644 --- a/admin/themes/default/js/admin-theme.js +++ b/admin/themes/default/js/admin-theme.js @@ -479,3 +479,48 @@ $(document).ready(function() { $(this).prop('selected', false); }); }); //end dom ready + + +function initAdminTooltip(config) { + var $elements = $(config.selector); + if (!$elements.length) { + return; + } + $elements.each(function () { + if (config.skipIfInitialized && $(this).data('ui-tooltip')) { + return; + } + $(this).tooltip({ + content: config.getContent, + items: config.items, + trigger: 'hover', + tooltipClass: config.tooltipClass, + open: function (event, ui) { + if (typeof event.originalEvent === 'undefined') { + return false; + } + var $id = $(ui.tooltip).attr('id'); + if ($('div.ui-tooltip').not('#' + $id).length) { + return false; + } + }, + close: function (event, ui) { + ui.tooltip.hover( + function () { $(this).stop(true).fadeTo(400, 1); }, + function () { $(this).fadeOut(400, function () { $(this).remove(); }); } + ); + } + }); + }); +} + +$(document).ready(function () { + initAdminTooltip({ + selector: '.selected-option-info', + items: '.selected-option-info', + tooltipClass: 'admin-info-tooltip', + getContent: function () { + return $(this).data('options'); + } + }); +}); \ No newline at end of file diff --git a/admin/themes/default/template/controllers/normal_products/selected_option.tpl b/admin/themes/default/template/controllers/normal_products/selected_option.tpl index fab919780..24156a9e1 100644 --- a/admin/themes/default/template/controllers/normal_products/selected_option.tpl +++ b/admin/themes/default/template/controllers/normal_products/selected_option.tpl @@ -20,34 +20,6 @@ * @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 *} -{if empty($selected_option_css_initialized)} - {assign var='selected_option_css_initialized' value=true scope='global'} - -{/if} {capture name='options_list'}
      @@ -59,40 +31,3 @@ {$selected_options|@count} Selected - -{if empty($selected_option_js_initialized)} - {assign var='selected_option_js_initialized' value=true scope='global'} - -{/if} diff --git a/admin/themes/default/template/controllers/orders/form.tpl b/admin/themes/default/template/controllers/orders/form.tpl index dda7d6aa5..3d6f19103 100644 --- a/admin/themes/default/template/controllers/orders/form.tpl +++ b/admin/themes/default/template/controllers/orders/form.tpl @@ -1595,6 +1595,15 @@ }, complete: function() { $(".loading_overlay").hide(); + initAdminTooltip({ + selector: '.price-calculation-info', + items: 'span', + tooltipClass: 'admin-info-tooltip', + skipIfInitialized: true, + getContent: function () { + return $(this).siblings('.price-calculation-info-container').html(); + } + }); } }); }); @@ -1815,6 +1824,15 @@ }, complete: function() { $(".loading_overlay").hide(); + initAdminTooltip({ + selector: '.price-calculation-info', + items: 'span', + tooltipClass: 'admin-info-tooltip', + skipIfInitialized: true, + getContent: function () { + return $(this).siblings('.price-calculation-info-container').html(); + } + }); } }); }); @@ -1865,6 +1883,15 @@ }, complete: function() { $(".loading_overlay").hide(); + initAdminTooltip({ + selector: '.price-calculation-info', + items: 'span', + tooltipClass: 'admin-info-tooltip', + skipIfInitialized: true, + getContent: function () { + return $(this).siblings('.price-calculation-info-container').html(); + } + }); } }); }); diff --git a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl index d56daffe8..da29873a8 100644 --- a/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_add_order_extra_services_tab_content.tpl @@ -61,7 +61,10 @@
    -

    {$product['name']|escape:'html':'UTF-8'}

    +
    + {$product['name']|escape:'html':'UTF-8'} + {include file='controllers/orders/modals/_partials/_price-calculation-info.tpl' pcm=$product['price_calculation_method']|default:0} +
    {if $product['auto_add_to_cart'] && $product['price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT} diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl index d8d3ef96d..b322c7dde 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl @@ -53,7 +53,9 @@ {foreach $additionalServices['additional_services'] as $service}
    -
    {$service['name']|escape:'html':'UTF-8'}
    +
    + {$service['name']|escape:'html':'UTF-8'} +
    @@ -134,6 +136,7 @@ {$product['name']|escape:'html':'UTF-8'} + {include file='controllers/orders/modals/_partials/_price-calculation-info.tpl' pcm=$product['price_calculation_method']|default:0} {if $product['auto_add_to_cart'] && $product['price_addition_type'] == Product::PRICE_ADDITION_TYPE_WITH_ROOM} @@ -291,7 +294,10 @@ {$service['id_product']|escape:'html':'UTF-8'}{if !$service['product_deleted']} {/if} {$service['name']|escape:'html':'UTF-8'} + {$service['name']|escape:'html':'UTF-8'} + {include file='controllers/orders/modals/_partials/_price-calculation-info.tpl' pcm=$service.price_calculation_method|default:0} + {if $service['product_auto_add'] && $service['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT} {l s='Convenience fee'} diff --git a/admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl b/admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl new file mode 100644 index 000000000..00ad669f5 --- /dev/null +++ b/admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl @@ -0,0 +1,43 @@ +{* +* NOTICE OF LICENSE +* +* This source file is subject to the Open Software License version 3.0 +* that is bundled with this package in the file LICENSE.md +* It is also available through the world-wide-web at this URL: +* https://opensource.org/license/osl-3-0-php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to support@qloapps.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to a 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 +* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 +*} + +{* Required param: pcm — price_calculation_method integer value *} + + + + + diff --git a/classes/Product.php b/classes/Product.php index f88ec4917..3267ff979 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -562,8 +562,8 @@ class ProductCore extends ObjectModel const SELLING_PREFERENCE_HOTEL_STANDALONE = 2; // Product to be sold Standalone with Hotels const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE = 3; // Product to be sold Standalone with Hotels and with Room types also const SELLING_PREFERENCE_STANDALONE = 4; // Product to be sold standalone - const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE = 5; // Product to be sold standalone with Hotels and with Room types also - const SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE = 6; // Product to be sold standalone and with Room types also + const SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE = 5; // Product to be sold standalone and with Room types also + const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE = 6; // Product to be sold standalone with Hotels and with Room types also const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE = 7; // Product to be sold standalone with Hotels and with Room types also and standalone const PRICE_ADDITION_TYPE_WITH_ROOM = 1; diff --git a/controllers/admin/AdminNormalProductsController.php b/controllers/admin/AdminNormalProductsController.php index 7bea0215f..0c3986722 100644 --- a/controllers/admin/AdminNormalProductsController.php +++ b/controllers/admin/AdminNormalProductsController.php @@ -487,7 +487,7 @@ class AdminNormalProductsControllerCore extends AdminController .'template')) { $bo_theme = 'default'; } - $this->addJqueryUI('ui.tooltip', 'base', true); + $this->addJs(__PS_BASE_URI__.$this->admin_webpath.'/themes/'.$bo_theme.'/js/jquery.iframe-transport.js'); $this->addJs(__PS_BASE_URI__.$this->admin_webpath.'/themes/'.$bo_theme.'/js/jquery.fileupload.js'); $this->addJs(__PS_BASE_URI__.$this->admin_webpath.'/themes/'.$bo_theme.'/js/jquery.fileupload-process.js'); @@ -1542,6 +1542,9 @@ class AdminNormalProductsControllerCore extends AdminController _PS_JS_DIR_.'jquery/plugins/timepicker/jquery-ui-timepicker-addon.css', _PS_CSS_DIR_.'ps-hotel-reservation.css', )); + }else { + $this->addCSS(__PS_BASE_URI__.$this->admin_webpath.'/themes/default/css/admin-tooltip.css'); + $this->addJqueryUI('ui.tooltip', 'base', true); } } diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index 7dcae4db2..ba8a1e481 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -1334,6 +1334,8 @@ class AdminOrdersControllerCore extends AdminController $this->addJqueryUI('ui.datepicker'); $this->addJS(_PS_JS_DIR_.'vendor/d3.v3.min.js'); + $this->addCSS(__PS_BASE_URI__.$this->admin_webpath.'/themes/default/css/admin-tooltip.css'); + $this->addJqueryUI(array('ui.tooltip'), 'base', true); if ($this->display == 'view') { if ($this->loadObject()) { diff --git a/controllers/front/OrderOpcController.php b/controllers/front/OrderOpcController.php index d1814c445..1628eb376 100644 --- a/controllers/front/OrderOpcController.php +++ b/controllers/front/OrderOpcController.php @@ -416,6 +416,7 @@ class OrderOpcControllerCore extends ParentOrderController } else { $this->addJS(_THEME_MOBILE_JS_DIR_.'opc.js'); } + $this->addJqueryUI(array('ui.tooltip'), 'base', true); $this->addJS(array( _THEME_JS_DIR_.'tools/statesManagement.js', diff --git a/controllers/front/ProductController.php b/controllers/front/ProductController.php index 2bd349a78..22e74f24b 100644 --- a/controllers/front/ProductController.php +++ b/controllers/front/ProductController.php @@ -40,6 +40,7 @@ class ProductControllerCore extends FrontController if (count($this->errors)) { return; } + $this->addJqueryUI(array('ui.tooltip'), 'base', true); if (!$this->useMobileTheme()) { $this->addCSS(_THEME_CSS_DIR_.'product.css'); diff --git a/js/admin/normal_products.js b/js/admin/normal_products.js index 3047cf9a0..e42f286de 100644 --- a/js/admin/normal_products.js +++ b/js/admin/normal_products.js @@ -568,26 +568,12 @@ product_tabs['Informations'] = new function(){ var withRoomType = $('#sp_with_room_type').is(':checked'); var withHotel = $('#sp_with_hotel').is(':checked'); var standalone = $('#sp_standalone').is(':checked'); + const sellingPreference = + (withRoomType ? SELLING_PREFERENCE_WITH_ROOM_TYPE : 0) | + (withHotel ? SELLING_PREFERENCE_HOTEL_STANDALONE : 0) | + (standalone ? SELLING_PREFERENCE_STANDALONE : 0); - var sellingPreference; - if (withRoomType && withHotel && standalone) { - sellingPreference = 7; // HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - } else if (withHotel && standalone) { - sellingPreference = 5; // HOTEL_STANDALONE_AND_WITH_STANDALONE - } else if (withRoomType && standalone) { - sellingPreference = 6; // STANDALONE_AND_WITH_ROOM_TYPE - } else if (withRoomType && withHotel) { - sellingPreference = 3; // HOTEL_STANDALONE_AND_WITH_ROOM_TYPE - } else if (standalone) { - sellingPreference = 4; // STANDALONE - } else if (withHotel) { - sellingPreference = 2; // HOTEL_STANDALONE - } else if (withRoomType) { - sellingPreference = 1; // WITH_ROOM_TYPE - } else { - sellingPreference = 0; - } - $('#selling_preference_type').val(sellingPreference); + $('#selling_preference_type').val(sellingPreference); var $autoAddOff = $('#auto_add_to_cart_off'); var $autoAddCheckedInput; diff --git a/js/admin/orders.js b/js/admin/orders.js index 9d88bb44a..2eb349cf8 100644 --- a/js/admin/orders.js +++ b/js/admin/orders.js @@ -1410,6 +1410,15 @@ $(document).ready(function() { }, complete: function() { $(".loading_overlay").hide(); + initAdminTooltip({ + selector: '.price-calculation-info', + items: 'span', + tooltipClass: 'admin-info-tooltip', + skipIfInitialized: true, + getContent: function () { + return $(this).siblings('.price-calculation-info-container').html(); + } + }); } }); }); @@ -2481,7 +2490,15 @@ const EditRoomBookingModal = { // initialize datepickers EditRoomBookingModal.initDatePickers(); - + initAdminTooltip({ + selector: '.price-calculation-info', + items: 'span', + tooltipClass: 'admin-info-tooltip', + skipIfInitialized: true, + getContent: function () { + return $(this).siblings('.price-calculation-info-container').html(); + } + }); $('#edit_product .extra-services-container #id_htl_booking').val(jsonProductLineData.id); $('#edit-room-booking-modal').modal('show'); } else { diff --git a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl index b22722e4f..7f218e0c8 100644 --- a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl +++ b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl @@ -134,7 +134,8 @@ {/if}
    -

    {$product['name']|escape:'html':'UTF-8'}

    + {$product['name']|escape:'html':'UTF-8'} + {include file='_partials/price-calculation-info.tpl' pcm=$product.price_calculation_method|default:0} {if $product.allow_multiple_quantity}
    diff --git a/themes/hotel-reservation-theme/_partials/order-extra-services.tpl b/themes/hotel-reservation-theme/_partials/order-extra-services.tpl index 095cfc644..903ba40c8 100644 --- a/themes/hotel-reservation-theme/_partials/order-extra-services.tpl +++ b/themes/hotel-reservation-theme/_partials/order-extra-services.tpl @@ -58,6 +58,7 @@ {if $additionalService['allow_multiple_quantity']} {l s='(Quantity: %s)' sprintf=[$additionalService['quantity']|string_format:'%02d']} {/if} + {include file='_partials/price-calculation-info.tpl' pcm=$additionalService.price_calculation_method|default:0}
    diff --git a/themes/hotel-reservation-theme/_partials/price-calculation-info.tpl b/themes/hotel-reservation-theme/_partials/price-calculation-info.tpl new file mode 100644 index 000000000..af5f05850 --- /dev/null +++ b/themes/hotel-reservation-theme/_partials/price-calculation-info.tpl @@ -0,0 +1,43 @@ +{** +* NOTICE OF LICENSE +* +* This source file is subject to the Open Software License version 3.0 +* that is bundled with this package in the file LICENSE.md +* It is also available through the world-wide-web at this URL: +* https://opensource.org/license/osl-3-0-php +* If you did not receive a copy of the license and are unable to +* obtain it through the world-wide-web, please send an email +* to support@qloapps.com so we can send you a copy immediately. +* +* DISCLAIMER +* +* Do not edit or add to this file if you wish to upgrade this module to a 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 +* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 +*} + +{* Required param: pcm — price_calculation_method integer value *} + + + + + diff --git a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl index fa04edfea..8df8fe516 100644 --- a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl +++ b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl @@ -38,6 +38,7 @@ {block name='service_product_name'}
    {$service_product['name']} + {include file='_partials/price-calculation-info.tpl' pcm=$service_product.price_calculation_method|default:0}
    {/block} {block name='service_product_description'} diff --git a/themes/hotel-reservation-theme/css/global.css b/themes/hotel-reservation-theme/css/global.css index 7fb667b55..5f279fe45 100644 --- a/themes/hotel-reservation-theme/css/global.css +++ b/themes/hotel-reservation-theme/css/global.css @@ -9187,3 +9187,37 @@ div a.our_properties_link{ color: #fff; font-size: 17px; font-weight: 400;} + +/* price calculation info tooltip */ +.price-calculation-info { + cursor: pointer; + display: inline-block; + vertical-align: middle; + margin-left: 4px; +} +.ui-tooltip.price-tootip { + box-shadow: 0 2px 6px 0 rgb(0 0 0 / 20%); + background: #FFFFFF; + border: unset; + color: #333; + padding: 9px 15px; +} +.ui-tooltip.price-tootip .price-info-tooltip-cont { + min-width: 160px; +} +.ui-tooltip.price-tootip .applied-on-label { + margin: 0 0 6px; + font-weight: 600; + font-size: 13px; +} +.ui-tooltip.price-tootip .applied-on-days { + margin: 0; + padding-left: 16px; + font-size: 13px; +} +.ui-tooltip.price-tootip .applied-on-days li { + padding: 2px 0; +} +.price-info-tooltip-cont ul li{ + list-style: disc;; +} diff --git a/themes/hotel-reservation-theme/js/global.js b/themes/hotel-reservation-theme/js/global.js index ff00f02c0..b842d5b47 100644 --- a/themes/hotel-reservation-theme/js/global.js +++ b/themes/hotel-reservation-theme/js/global.js @@ -457,3 +457,41 @@ window.addEventListener('online', function () { window.addEventListener('offline', function () { onlineFlag = false; }); + +function initPriceCalculationTooltip() { + if ($('.price-calculation-info').length) { + $('.price-calculation-info').each(function () { + if ($(this).hasClass('ui-tooltip-content')) { + return; + } + $(this).tooltip({ + content: $(this).siblings('.price-calculation-info-container').html(), + items: 'span', + trigger: 'hover', + tooltipClass: 'price-tootip', + open: function (event, ui) { + if (typeof (event.originalEvent) === 'undefined') { + return false; + } + var $id = $(ui.tooltip).attr('id'); + if ($('div.ui-tooltip').not('#' + $id).length) { + return false; + } + }, + close: function (event, ui) { + ui.tooltip.hover(function () { + $(this).stop(true).fadeTo(400, 1); + }, function () { + $(this).fadeOut('400', function () { + $(this).remove(); + }); + }); + } + }); + }); + } +} + +$(document).ready(function () { + initPriceCalculationTooltip(); +}); diff --git a/themes/hotel-reservation-theme/js/order-confirmation.js b/themes/hotel-reservation-theme/js/order-confirmation.js index 615bee6ff..d9b645df8 100644 --- a/themes/hotel-reservation-theme/js/order-confirmation.js +++ b/themes/hotel-reservation-theme/js/order-confirmation.js @@ -49,6 +49,7 @@ $(document).ready(function(){ if (result.extra_demands) { $('#rooms_extra_services').html(''); $('#rooms_extra_services').append(result.extra_demands); + initPriceCalculationTooltip(); } $.fancybox({ href: "#rooms_extra_services", diff --git a/themes/hotel-reservation-theme/js/order-detail.js b/themes/hotel-reservation-theme/js/order-detail.js index 800440304..a0e1a9ac7 100644 --- a/themes/hotel-reservation-theme/js/order-detail.js +++ b/themes/hotel-reservation-theme/js/order-detail.js @@ -362,6 +362,7 @@ $(document).on('click', '.btn-view-extra-services', function(e) { if (result.extra_demands) { $('#popup-view-extra-services').html(''); $('#popup-view-extra-services').append(result.extra_demands); + initPriceCalculationTooltip(); $.fancybox.open({ href: '#popup-view-extra-services', diff --git a/themes/hotel-reservation-theme/js/order-opc.js b/themes/hotel-reservation-theme/js/order-opc.js index 854f90fbb..999f73c67 100644 --- a/themes/hotel-reservation-theme/js/order-opc.js +++ b/themes/hotel-reservation-theme/js/order-opc.js @@ -705,6 +705,7 @@ $(document).ready(function() if (result.extra_demands) { $('#rooms_extra_services').html(''); $('#rooms_extra_services').append(result.extra_demands); + initPriceCalculationTooltip(); } $.fancybox({ href: "#rooms_extra_services", diff --git a/themes/hotel-reservation-theme/js/product.js b/themes/hotel-reservation-theme/js/product.js index 4c375b794..c14bd9cff 100644 --- a/themes/hotel-reservation-theme/js/product.js +++ b/themes/hotel-reservation-theme/js/product.js @@ -1171,6 +1171,7 @@ $(document).ready(function() { triggerElement.hide(); } } + initPriceCalculationTooltip(); } else { triggerElement.hide(); } @@ -1598,4 +1599,4 @@ $(document).on('change', 'input[name="buying_option"]', function() { } else { $('#hotel_selection_block').show(); } -}); \ No newline at end of file +}); From a940ad173e322d755c65776ee6649312b6091328 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Thu, 28 May 2026 19:37:51 +0530 Subject: [PATCH 19/93] Fix: Incorrect Product Selling Type Handling During Order Validation --- .../normal_products/informations.tpl | 6 +- classes/Cart.php | 58 +++++++------ classes/PaymentModule.php | 82 +++++++++++++++---- classes/Product.php | 73 +++++------------ classes/order/OrderDetail.php | 2 +- classes/order/OrderInvoice.php | 10 +-- classes/pdf/HTMLTemplateInvoice.php | 17 +--- classes/pdf/HTMLTemplateOrderSlip.php | 14 ++-- controllers/admin/AdminImportController.php | 4 +- controllers/admin/AdminOrdersController.php | 36 ++++---- controllers/admin/AdminProductsController.php | 4 +- controllers/front/CartController.php | 12 +-- controllers/front/GuestTrackingController.php | 6 +- .../front/OrderConfirmationController.php | 4 +- controllers/front/OrderDetailController.php | 6 +- controllers/front/ProductController.php | 14 ++-- modules/blockcart/blockcart.php | 8 +- modules/blockcart/blockcart.tpl | 6 +- modules/blockcart/cartrow.tpl | 12 +-- .../classes/HotelCartBookingData.php | 6 +- .../AdminHotelRoomsBookingController.php | 2 +- .../modules/blockcart/blockcart.tpl | 8 +- .../modules/blockcart/cartrow.tpl | 2 +- 23 files changed, 205 insertions(+), 187 deletions(-) diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index b1d0b9f72..a528df729 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -241,21 +241,21 @@
    diff --git a/classes/Cart.php b/classes/Cart.php index d544f3cf9..813ff4f89 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -827,7 +827,7 @@ class CartCore extends ObjectModel $serviceProducts = array(); $context = Context::getContext(); foreach ($productList as $key => $product) { - if (!$product['booking_product'] && Product::isSellableAsStandalone($product['selling_preference_type'] && !Product::isSellableWithRoomType($product['selling_preference_type']))) { + if (!$product['booking_product'] && Product::isSellableAsStandalone($product['id_product']) && !Product::isSellableWithRoomType($product['id_product'])) { if (Validate::isLoadedObject( $objProduct = new Product($product['id_product'], false, $this->id_lang) )) { @@ -1659,9 +1659,9 @@ class CartCore extends ObjectModel continue; } - $canSellWithRoomType = Product::isSellableWithRoomType($product['selling_preference_type']); - $canSellWithHotel = Product::isSellableWithHotel($product['selling_preference_type']); - $canSellAsStandalone = Product::isSellableAsStandalone($product['selling_preference_type']); + $canSellWithRoomType = Product::isSellableWithRoomType($product['id_product']); + $canSellWithHotel = Product::isSellableWithHotel($product['id_product']); + $canSellAsStandalone = Product::isSellableAsStandalone($product['id_product']); if ($canSellWithRoomType) { if ($type == Cart::ONLY_STANDALONE_PRODUCTS && !$canSellAsStandalone && !$canSellWithHotel) { @@ -1753,9 +1753,6 @@ class CartCore extends ObjectModel $products_total[$id_tax_rules_group.'_'.$id_address] = 0; } if (!$product['booking_product']) { - $canSellWithRoomType = Product::isSellableWithRoomType($product['selling_preference_type']); - $canSellWithHotel = Product::isSellableWithHotel($product['selling_preference_type']); - $canSellAsStandalone = Product::isSellableAsStandalone($product['selling_preference_type']); $isRoomServiceTotalType = in_array($type, array( Cart::ONLY_ROOM_SERVICES, Cart::ONLY_CONVENIENCE_FEE, @@ -1764,10 +1761,28 @@ class CartCore extends ObjectModel Cart::ONLY_ROOM_SERVICES_WITH_AUTO_ADD_WITHOUT_CONVENIENCE_FEE, )); - if ($canSellAsStandalone && !$isRoomServiceTotalType) { - $idHotelCartBooking = isset($product['id_hotel_cart_booking']) ? (int)$product['id_hotel_cart_booking'] : 0; - $idHotel = isset($product['id_hotel']) ? (int)$product['id_hotel'] : 0; + $singleContextSellTypes = [ + Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_HOTEL_STANDALONE, + Product::SELLING_PREFERENCE_STANDALONE, + ]; + $specificSellType = ($param_product + && isset($product['selling_preference_type']) + && in_array((int)$product['selling_preference_type'], $singleContextSellTypes)) + ? (int)$product['selling_preference_type'] + : null; + $sellsAsStandalone = $specificSellType !== null + ? ($specificSellType === Product::SELLING_PREFERENCE_STANDALONE) + : Product::isSellableAsStandalone($product['id_product']); + $sellsWithHotel = $specificSellType !== null + ? ($specificSellType === Product::SELLING_PREFERENCE_HOTEL_STANDALONE) + : Product::isSellableWithHotel($product['id_product']); + $sellsWithRoomType = $specificSellType !== null + ? ($specificSellType === Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) + : Product::isSellableWithRoomType($product['id_product']); + + if ($sellsAsStandalone && !$isRoomServiceTotalType) { if ($serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, [], @@ -1791,8 +1806,8 @@ class CartCore extends ObjectModel } } - } - if ($canSellWithHotel ) { + } + if ($sellsWithHotel) { if ($type == Cart::ONLY_ROOM_SERVICES || $type == Cart::ONLY_CONVENIENCE_FEE || $type == Cart::ONLY_ROOM_SERVICES_WITHOUT_AUTO_ADD @@ -1829,7 +1844,7 @@ class CartCore extends ObjectModel if ($serviceProducts) { foreach ($serviceProducts as $serviceProduct) { - if(!empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_hotel_cart_booking'])) { + if (!empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_hotel_cart_booking'])) { if ($with_taxes) { $priceAdd = $serviceProduct['total_price_tax_incl']; } else { @@ -1845,7 +1860,7 @@ class CartCore extends ObjectModel } } } - if ($canSellWithRoomType && $type !== Cart::ONLY_STANDALONE_PRODUCTS) { + if ($sellsWithRoomType && $type !== Cart::ONLY_STANDALONE_PRODUCTS) { if ($servicesWithRoom = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, @@ -2436,7 +2451,7 @@ class CartCore extends ObjectModel } } } else { - if (Product::isSellableWithRoomType($product['selling_preference_type'])) { + if (Product::isSellableWithRoomType($product['id_product'])) { // get standard products which are booked for room types // send id_hotel = 0 for standard products with room types if ($selectedServiceProducts = $objServiceProductCartDetail->getServiceProductsInCart( @@ -2509,7 +2524,7 @@ class CartCore extends ObjectModel } } } - if (Product::isSellableAsStandalone($product['selling_preference_type'])) { + if (Product::isSellableAsStandalone($product['id_product'])) { if ($selectedServiceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, [], @@ -2566,8 +2581,7 @@ class CartCore extends ObjectModel } } } - - if (Product::isSellableWithHotel($product['selling_preference_type'])) { + if (Product::isSellableWithHotel($product['id_product'])) { if ($selectedServiceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->id, [], @@ -3198,11 +3212,9 @@ class CartCore extends ObjectModel $id_address = HotelRoomType::getHotelIdAddressByIdProduct($id_product); } else { // if the product is a standard product the get the address as per the selling preference - $sellingPreferenceType = Product::getSellingPreferenceType($id_product); - - $canSellWithRoomType = Product::isSellableWithRoomType($sellingPreferenceType); - $canSellWithHotel = Product::isSellableWithHotel($sellingPreferenceType); - $canSellAsStandalone = Product::isSellableAsStandalone($sellingPreferenceType); + $canSellWithRoomType = Product::isSellableWithRoomType($id_product); + $canSellWithHotel = Product::isSellableWithHotel($id_product); + $canSellAsStandalone = Product::isSellableAsStandalone($id_product); if ($canSellWithHotel) { if ($htlAddress = HotelBranchInformation::getAddress($id_hotel)) { diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 43158862f..8b6e57e1b 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -589,12 +589,11 @@ abstract class PaymentModuleCore extends Module $virtual_product &= false; } - if ( - !$product['booking_product'] && !$product['id_hotel_cart_booking'] - && ( - Product::isSellableAsStandalone($product['selling_preference_type']) - || Product::isSellableWithHotel($product['selling_preference_type']) - ) + if (!$product['booking_product'] + && ($product['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE + || $product['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE + || $product['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE + ) ) { $cover_image_arr = $objProduct->getCover($product['id_product']); @@ -604,11 +603,10 @@ abstract class PaymentModuleCore extends Module $cover_img = $this->context->link->getImageLink($product['link_rewrite'], $this->context->language->iso_code."-default", 'small_default'); } $product_var_tpl['cover_img'] = $cover_img; - $idHotel = isset($product['id_hotel']) ? $product['id_hotel'] : 0; $serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $order->id_cart, [], - $idHotel, + null, 0, null, $product['id_product'] @@ -966,11 +964,9 @@ abstract class PaymentModuleCore extends Module if (!empty($normalProducts)) { $objServiceProductCartDetail = new ServiceProductCartDetail(); - foreach ($normalProducts as $product) { + foreach($normalProducts as $product) { $idProduct = $product['id_product']; - $productSellingType = $product['selling_preference_type']; - - if (Product::isSellableWithRoomType($productSellingType)) { + if (Product::SELLING_PREFERENCE_WITH_ROOM_TYPE == $product['selling_preference_type']) { if ($roomTypeServices = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, [], @@ -979,7 +975,6 @@ abstract class PaymentModuleCore extends Module null, $product['id_product'] )) { - $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct($idProduct, $order->id, $product['selling_preference_type']); foreach ($roomTypeServices as $roomTypeService) { if (!$roomTypeService['id_hotel_cart_booking']) { @@ -1008,7 +1003,7 @@ abstract class PaymentModuleCore extends Module $objServiceProductOrderDetail->save(); } } - } elseif (Product::isSellableWithHotel($productSellingType)) { + } elseif (Product::SELLING_PREFERENCE_HOTEL_STANDALONE == $product['selling_preference_type']) { if ($hotelProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, [], @@ -1042,7 +1037,7 @@ abstract class PaymentModuleCore extends Module } } - } elseif (Product::isSellableAsStandalone($productSellingType)) { + } elseif (Product::SELLING_PREFERENCE_STANDALONE == $product['selling_preference_type']) { if ($standaloneProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, [], @@ -1067,6 +1062,63 @@ abstract class PaymentModuleCore extends Module $objServiceProductOrderDetail->option_name = $standaloneProduct['option_name']; $objServiceProductOrderDetail->quantity = $standaloneProduct['quantity']; $objServiceProductOrderDetail->save(); + + } + } + } elseif (Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE == $product['selling_preference_type']) { + $idProductRoomType = null; + $idProductHotel = null; + if (isset($product['id_room_type']) && $product['id_room_type']) { + $idProductRoomType = $product['id_room_type']; + } elseif (isset($product['id_hotel']) && $product['id_hotel']) { + $idProductHotel = $product['id_hotel']; + } + if ($serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( + $this->context->cart->id, + [], + $idProductHotel, + null, + $idProductRoomType, + $product['id_product'] + )) { + foreach ($serviceProducts as $serviceProduct) { + if ($serviceProduct['id_hotel']) { + $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct($idProduct, $order->id, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + } else { + $idOrderDetail = $objBookingDetail->getPsOrderDetailIdByIdProduct($idProduct, $order->id, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); + } + $objServiceProductOrderDetail = new ServiceProductOrderDetail(); + $objServiceProductOrderDetail->id_product = $idProduct; + $objServiceProductOrderDetail->id_order = $order->id; + $objServiceProductOrderDetail->id_order_detail = $idOrderDetail; + $objServiceProductOrderDetail->id_cart = $this->context->cart->id; + $objServiceProductOrderDetail->unit_price_tax_excl = $serviceProduct['unit_price_tax_excl']; + $objServiceProductOrderDetail->unit_price_tax_incl = $serviceProduct['unit_price_tax_incl']; + $objServiceProductOrderDetail->total_price_tax_excl = $serviceProduct['total_price_tax_excl']; + $objServiceProductOrderDetail->total_price_tax_incl = $serviceProduct['total_price_tax_incl']; + $objServiceProductOrderDetail->name = $product['name']; + $objServiceProductOrderDetail->quantity = $serviceProduct['quantity']; + $objServiceProductOrderDetail->id_product_option = $serviceProduct['id_product_option']; + $objServiceProductOrderDetail->option_name = $serviceProduct['option_name']; + if ($serviceProduct['id_hotel']) { + $objServiceProductOrderDetail->id_hotel = $serviceProduct['id_hotel']; + if (Validate::isLoadedObject( + $objHotelBranch = new HotelBranchInformation($serviceProduct['id_hotel'], $this->context->cart->id_lang) + )) { + $objServiceProductOrderDetail->hotel_name = $objHotelBranch->hotel_name; + } + } else { + $roomBookingDetail = $objBookingDetail->getRowByIdOrderIdProductInDateRange( + $order->id, + $serviceProduct['id_room_type'], + $serviceProduct['date_from'], + $serviceProduct['date_to'], + $serviceProduct['id_room'] + ); + $objServiceProductOrderDetail->id_htl_booking_detail = $roomBookingDetail['id']; + $objServiceProductOrderDetail->auto_added = $product['auto_add_to_cart']; + } + $objServiceProductOrderDetail->save(); } } } diff --git a/classes/Product.php b/classes/Product.php index 3267ff979..32c6d0bfe 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -6938,64 +6938,33 @@ class ProductCore extends ObjectModel } } - public static function getSellingPreferenceChannels($sellingPreferenceType) + public static function isSellableWithRoomType($idProduct) { - $channels = [ - 'with_room_type' => false, - 'with_hotel' => false, - 'standalone' => false, - ]; - - switch ((int) $sellingPreferenceType) { - case self::SELLING_PREFERENCE_WITH_ROOM_TYPE: - $channels['with_room_type'] = true; - break; - - case self::SELLING_PREFERENCE_HOTEL_STANDALONE: - $channels['with_hotel'] = true; - break; - - case self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE: - $channels['with_room_type'] = true; - $channels['with_hotel'] = true; - break; - - case self::SELLING_PREFERENCE_STANDALONE: - $channels['standalone'] = true; - break; - - case self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE: - $channels['with_hotel'] = true; - $channels['standalone'] = true; - break; - - case self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE: - $channels['with_room_type'] = true; - $channels['standalone'] = true; - break; - - case self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE: - $channels['with_room_type'] = true; - $channels['with_hotel'] = true; - $channels['standalone'] = true; - break; - } - - return $channels; + return in_array((int) self::getSellingPreferenceType($idProduct), [ + self::SELLING_PREFERENCE_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + ]); } - public static function isSellableWithRoomType($sellingPreferenceType) + public static function isSellableWithHotel($idProduct) { - return self::getSellingPreferenceChannels($sellingPreferenceType)['with_room_type']; + return in_array((int) self::getSellingPreferenceType($idProduct), [ + self::SELLING_PREFERENCE_HOTEL_STANDALONE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + ]); } - public static function isSellableWithHotel($sellingPreferenceType) + public static function isSellableAsStandalone($idProduct) { - return self::getSellingPreferenceChannels($sellingPreferenceType)['with_hotel']; - } - - public static function isSellableAsStandalone($sellingPreferenceType) - { - return self::getSellingPreferenceChannels($sellingPreferenceType)['standalone']; + return in_array((int) self::getSellingPreferenceType($idProduct), [ + self::SELLING_PREFERENCE_STANDALONE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + ]); } } diff --git a/classes/order/OrderDetail.php b/classes/order/OrderDetail.php index 926020678..f9e165503 100644 --- a/classes/order/OrderDetail.php +++ b/classes/order/OrderDetail.php @@ -390,7 +390,7 @@ class OrderDetailCore extends ObjectModel /** * Calculate tax rule groups for the service product based on each associated room type. */ - if (!$this->is_booking_product && Product::isSellableWithRoomType($this->selling_preference_type)) { + if (!$this->is_booking_product && $this->selling_preference_type == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE) { if ($this->product_auto_add && $this->product_price_addition_type == Product::PRICE_ADDITION_TYPE_WITH_ROOM) { return true; } diff --git a/classes/order/OrderInvoice.php b/classes/order/OrderInvoice.php index 457a0baa9..f3e79c9d5 100644 --- a/classes/order/OrderInvoice.php +++ b/classes/order/OrderInvoice.php @@ -415,7 +415,7 @@ class OrderInvoiceCore extends ObjectModel $order_detail = array_filter($order_detail, function($v) { return ($v['is_booking_product'] || ($v['product_auto_add'] - && Product::isSellableWithRoomType($v['selling_preference_type']) + && $v['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $v['product_price_addition_type'] == ProductCore::PRICE_ADDITION_TYPE_WITH_ROOM) ); }); @@ -480,7 +480,7 @@ class OrderInvoiceCore extends ObjectModel $breakdown = array(); $order_detail = $this->getProducts(); $order_detail = array_filter($order_detail, function($v) { - return (!$v['is_booking_product'] && !$v['product_auto_add'] && Product::isSellableWithRoomType($v['selling_preference_type'])); + return (!$v['is_booking_product'] && !$v['product_auto_add'] && $v['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); }); $details = $order->getProductTaxesDetails($order_detail, false,Product::SELLING_PREFERENCE_WITH_ROOM_TYPE); @@ -545,7 +545,7 @@ class OrderInvoiceCore extends ObjectModel $order_detail = array_filter($order_detail, function($v) { return (!$v['is_booking_product'] && $v['product_auto_add'] - && Product::isSellableWithRoomType($v['selling_preference_type']) + && $v['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $v['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT ); }); @@ -612,8 +612,8 @@ class OrderInvoiceCore extends ObjectModel $order_detail = $this->getProducts(); $order_detail = array_filter($order_detail, function($v) { return (!$v['is_booking_product'] && ( - Product::isSellableAsStandalone($v['selling_preference_type']) - || Product::isSellableWithHotel($v['selling_preference_type']) + $v['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE + || $v['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE )); }); diff --git a/classes/pdf/HTMLTemplateInvoice.php b/classes/pdf/HTMLTemplateInvoice.php index 37b895353..c23fdd280 100644 --- a/classes/pdf/HTMLTemplateInvoice.php +++ b/classes/pdf/HTMLTemplateInvoice.php @@ -607,9 +607,8 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate foreach ($cart_htl_data[$type_key]['date_diff'] as $key => &$value) { $value['avg_paid_unit_price_tax_excl'] = Tools::ps_round($value['avg_paid_unit_price_tax_excl'] / $value['num_rm'], 6); } - } else if ( - Product::isSellableWithHotel($type_value['selling_preference_type']) - || Product::isSellableAsStandalone($type_value['selling_preference_type']) + } else if (Product::SELLING_PREFERENCE_HOTEL_STANDALONE == $type_value['selling_preference_type'] + || Product::SELLING_PREFERENCE_STANDALONE == $type_value['selling_preference_type'] ) { $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($order_obj->id, $type_value['id_order_detail'], $type_value['product_id']); if ($taxes = OrderDetail::getTaxListStatic($type_value['id_order_detail'])) { @@ -623,17 +622,7 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate $order_detail_tax_label = HTMLTemplateInvoice::l('No tax'); } foreach ($serviceProducts as $serviceProduct) { - $isStandaloneRow = empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_htl_booking_detail']); - $isHotelRow = !empty($serviceProduct['id_hotel']) && empty($serviceProduct['id_htl_booking_detail']); - - if (!( - ($isStandaloneRow && Product::isSellableAsStandalone($type_value['selling_preference_type'])) - || ($isHotelRow && Product::isSellableWithHotel($type_value['selling_preference_type'])) - )) { - continue; - } - - if ($isHotelRow) { + if ($serviceProduct['id_hotel']) { $objHotel = new HotelBranchInformation($serviceProduct['id_hotel'], $order_obj->id_lang); $serviceProduct['hotel_name'] = $objHotel->hotel_name; } diff --git a/classes/pdf/HTMLTemplateOrderSlip.php b/classes/pdf/HTMLTemplateOrderSlip.php index 0c2a50c86..16396243f 100644 --- a/classes/pdf/HTMLTemplateOrderSlip.php +++ b/classes/pdf/HTMLTemplateOrderSlip.php @@ -286,7 +286,7 @@ class HTMLTemplateOrderSlipCore extends HTMLTemplateInvoice $order_detail = array_filter($this->order->products, function($v) { return ((isset($v['is_booking_product']) && $v['is_booking_product']) || ((isset($v['product_auto_add']) && $v['product_auto_add']) - && Product::isSellableWithRoomType($v['selling_preference_type']) + && $v['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $v['product_price_addition_type'] == ProductCore::PRICE_ADDITION_TYPE_WITH_ROOM) ); }); @@ -347,14 +347,10 @@ class HTMLTemplateOrderSlipCore extends HTMLTemplateInvoice // - 'total_amount' $breakdown = array(); $order_detail = array_filter($this->order->products, function($v) { - return ( - !$v['is_booking_product'] - && empty($v['id_htl_booking']) - && ( - Product::isSellableAsStandalone($v['selling_preference_type']) - || Product::isSellableWithHotel($v['selling_preference_type']) - ) - ); + return (!$v['is_booking_product'] && ( + $v['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE + || $v['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE + )); }); $details = $this->order->getProductTaxesDetails($order_detail, false); diff --git a/controllers/admin/AdminImportController.php b/controllers/admin/AdminImportController.php index 60cfce9a0..060a01970 100644 --- a/controllers/admin/AdminImportController.php +++ b/controllers/admin/AdminImportController.php @@ -1901,7 +1901,7 @@ class AdminImportControllerCore extends AdminController } $objServiceProduct = new Product($idServiceProduct); - if (Product::isSellableWithRoomType($objServiceProduct->selling_preference_type)) { + if (Product::isSellableWithRoomType($objServiceProduct->id)) { $objRoomTypeServiceProduct->addRoomProductLink( $objServiceProduct->id, $product->id, @@ -2329,7 +2329,7 @@ class AdminImportControllerCore extends AdminController $info['shop'] = explode($this->multiple_value_separator, $info['shop']); RoomTypeServiceProduct::deleteRoomProductLink($product->id); - if (Product::isSellableWithRoomType($product->selling_preference_type)) { + if (Product::isSellableWithRoomType($product->id)) { $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); if (isset($info['id_room_types']) && $info['id_room_types']) { $objRoomTypeServiceProduct->addRoomProductLink( diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index ba8a1e481..fcf696f8a 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -3357,14 +3357,14 @@ class AdminOrdersControllerCore extends AdminController } else { $product['image_link'] = $this->context->link->getImageLink($objProduct->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); } - if (Product::isSellableWithHotel($product['selling_preference_type']) - || Product::isSellableAsStandalone($product['selling_preference_type']) + if (Product::isSellableWithHotel($product['product_id']) + || Product::isSellableAsStandalone($product['product_id']) ) { $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($order->id, $product['id_order_detail'], $product['product_id']); foreach ($serviceProducts as $serviceProduct) { - if (!empty($serviceProduct['id_hotel']) && Product::isSellableWithHotel($product['selling_preference_type'])) { + if (!empty($serviceProduct['id_hotel']) && Product::isSellableWithHotel($product['product_id'])) { $orderHotelServiceProducts[] = array_merge($product, $serviceProduct); - } elseif (!$serviceProduct['id_hotel'] && !$serviceProduct['id_htl_booking_detail'] && Product::isSellableAsStandalone($product['selling_preference_type'])) { + } elseif (!$serviceProduct['id_hotel'] && !$serviceProduct['id_htl_booking_detail'] && Product::isSellableAsStandalone($product['product_id'])) { $orderStandaloneServiceProducts[] = array_merge($product, $serviceProduct); } } @@ -3702,10 +3702,10 @@ class AdminOrdersControllerCore extends AdminController $hotelStandaloneProducts = array(); $standaloneProducts = array(); foreach ($allServiceProducts as $serviceProduct) { - if (Product::isSellableWithHotel($serviceProduct['selling_preference_type'])) { + if (Product::isSellableWithHotel($serviceProduct['id_product'])) { $hotelStandaloneProducts[] = $serviceProduct; } - if (Product::isSellableAsStandalone($serviceProduct['selling_preference_type'])) { + if (Product::isSellableAsStandalone($serviceProduct['id_product'])) { $standaloneProducts[] = $serviceProduct; } } @@ -4484,9 +4484,9 @@ class AdminOrdersControllerCore extends AdminController if ($product->booking_product || ( - Product::isSellableWithRoomType($product->selling_preference_type) - && !Product::isSellableWithHotel($product->selling_preference_type) - && !Product::isSellableAsStandalone($product->selling_preference_type) + Product::isSellableWithRoomType($product->id) + && !Product::isSellableWithHotel($product->id) + && !Product::isSellableAsStandalone($product->id) ) ) { die(Tools::jsonEncode(array( 'result' => false, @@ -5585,14 +5585,14 @@ class AdminOrdersControllerCore extends AdminController $response['error'] = Tools::displayError('The product object cannot be loaded.'); } elseif ($objProduct->booking_product || ( - Product::isSellableWithRoomType($objProduct->selling_preference_type) - && !Product::isSellableWithHotel($objProduct->selling_preference_type) - && !Product::isSellableAsStandalone($objProduct->selling_preference_type) + Product::isSellableWithRoomType($objProduct->id) + && !Product::isSellableWithHotel($objProduct->id) + && !Product::isSellableAsStandalone($objProduct->id) ) ) { $response['status'] = false; $response['error'] = Tools::displayError('Invalid product. Please try adding any other product.'); - } elseif (!Product::isSellableAsStandalone($objProduct->selling_preference_type) + } elseif (!Product::isSellableAsStandalone($objProduct->id) && (!$addressTax->id_hotel || !Validate::isLoadedObject($objHotel = new HotelBranchInformation($addressTax->id_hotel))) ) { @@ -5692,8 +5692,8 @@ class AdminOrdersControllerCore extends AdminController if ($response['status']) { // If product is standalone and current order is for a hotel then we have to create a new order for this product $response['new_id_order'] = 0; - if (Product::isSellableAsStandalone($objProduct->selling_preference_type) - && !Product::isSellableWithHotel($objProduct->selling_preference_type) + if (Product::isSellableAsStandalone($objProduct->id) + && !Product::isSellableWithHotel($objProduct->id) && $addressTax->id_hotel ) { $objPaymentModule = new BoOrder(); @@ -5777,9 +5777,9 @@ class AdminOrdersControllerCore extends AdminController $objOrderDetail = new OrderDetail(); $cartProducts = $objCart->getProducts(); - if (Product::isSellableWithHotel($cartProducts[0]['selling_preference_type']) && $addressTax->id_hotel) { + if (Product::isSellableWithHotel($cartProducts[0]['id_product']) && $addressTax->id_hotel) { $cartProducts[0]['selling_preference_type'] = Product::SELLING_PREFERENCE_HOTEL_STANDALONE; - } elseif (Product::isSellableAsStandalone($cartProducts[0]['selling_preference_type'])) { + } elseif (Product::isSellableAsStandalone($cartProducts[0]['id_product'])) { $cartProducts[0]['selling_preference_type'] = Product::SELLING_PREFERENCE_STANDALONE; } $objOrderDetail->createList($objOrder, $objCart, $objOrder->getCurrentOrderState(), $cartProducts, (isset($objOrderInvoice) ? $objOrderInvoice->id : 0), $useTaxes, (int)Tools::getValue('add_product_warehouse')); @@ -7993,7 +7993,7 @@ class AdminOrdersControllerCore extends AdminController $product['total'] = $totalPriceTaxExcl; $product['total_wt'] = $totalPriceTaxIncl; - if (Product::isSellableWithRoomType($product['selling_preference_type'])) { + if (Product::isSellableWithRoomType($product['id_product'])) { $product['selling_preference_type'] = Product::SELLING_PREFERENCE_WITH_ROOM_TYPE; } } diff --git a/controllers/admin/AdminProductsController.php b/controllers/admin/AdminProductsController.php index 29518137e..445f7ba96 100644 --- a/controllers/admin/AdminProductsController.php +++ b/controllers/admin/AdminProductsController.php @@ -418,7 +418,7 @@ class AdminProductsControllerCore extends AdminController $allServiceProducts = array_values(array_filter( $objProduct->getServiceProducts(null), function ($serviceProduct) { - return Product::isSellableWithRoomType($serviceProduct['selling_preference_type']); + return Product::isSellableWithRoomType($serviceProduct['id_product']); } )); $serviceProducts = array(); @@ -3227,7 +3227,7 @@ class AdminProductsControllerCore extends AdminController $allServiceProducts = array_values(array_filter( $obj->getServiceProducts(null), function ($serviceProduct) { - return Product::isSellableWithRoomType($serviceProduct['selling_preference_type']); + return Product::isSellableWithRoomType($serviceProduct['id_product']); } )); diff --git a/controllers/front/CartController.php b/controllers/front/CartController.php index 67ee06439..10df365a1 100644 --- a/controllers/front/CartController.php +++ b/controllers/front/CartController.php @@ -180,8 +180,8 @@ class CartControllerCore extends FrontController } } else { $idProductOption = Tools::getValue('id_product_option', null); - $canSellWithHotel = Product::isSellableWithHotel($product->selling_preference_type); - $canSellStandalone = Product::isSellableAsStandalone($product->selling_preference_type); + $canSellWithHotel = Product::isSellableWithHotel($product->id); + $canSellStandalone = Product::isSellableAsStandalone($product->id); if ($canSellWithHotel && $this->id_hotel) { $objServiceProductCartDetail = new ServiceProductCartDetail(); @@ -460,8 +460,8 @@ class CartControllerCore extends FrontController $objHotelCartBookingData = new HotelCartBookingData(); $idProductOption = Tools::getValue('id_product_option'); $id_hotel = (int) Tools::getValue('id_hotel'); - $canSellWithHotel = Product::isSellableWithHotel($product->selling_preference_type); - $canSellStandalone = Product::isSellableAsStandalone($product->selling_preference_type); + $canSellWithHotel = Product::isSellableWithHotel($product->id); + $canSellStandalone = Product::isSellableAsStandalone($product->id); if ($canSellWithHotel && $id_hotel) { if ($operator == 'up') { @@ -643,7 +643,7 @@ class CartControllerCore extends FrontController } $this->context->cookie->avail_rooms = $availQty; } elseif ( - Product::isSellableWithHotel($product->selling_preference_type) + Product::isSellableWithHotel($product->id) && $id_hotel ) { $objServiceProductCartDetail = new ServiceProductCartDetail(); @@ -664,7 +664,7 @@ class CartControllerCore extends FrontController 'id_product_option' => isset($idProductOption) ? $idProductOption : null )); } - } elseif (Product::isSellableAsStandalone($product->selling_preference_type)) { + } elseif (Product::isSellableAsStandalone($product->id)) { $objServiceProductCartDetail = new ServiceProductCartDetail(); $update_quantity = $objServiceProductCartDetail->updateCartServiceProduct( $this->context->cart->id, diff --git a/controllers/front/GuestTrackingController.php b/controllers/front/GuestTrackingController.php index 3b6fd2b2b..991ffa5c5 100644 --- a/controllers/front/GuestTrackingController.php +++ b/controllers/front/GuestTrackingController.php @@ -497,7 +497,7 @@ class GuestTrackingControllerCore extends FrontController $value['avg_price_diff_tax_excl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_excl'] - $value['product_price_tax_excl'], 6)); $value['avg_price_diff_tax_incl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_incl'] - $value['product_price_tax_incl'], 6)); } - } elseif (Product::isSellableWithRoomType($type_value['selling_preference_type'])) { + } elseif (Product::SELLING_PREFERENCE_WITH_ROOM_TYPE == $type_value['selling_preference_type']) { if ($type_value['product_auto_add'] && $type_value['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT) { $total_convenience_fee_ti += $objServiceProductOrderDetail->getRoomTypeServiceProducts( $idOrder, @@ -524,7 +524,7 @@ class GuestTrackingControllerCore extends FrontController 1 ); } - } else if (Product::isSellableWithHotel($type_value['selling_preference_type'])) { + } else if (Product::SELLING_PREFERENCE_HOTEL_STANDALONE == $type_value['selling_preference_type']) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { @@ -536,7 +536,7 @@ class GuestTrackingControllerCore extends FrontController foreach ($hotelProducts as $hotelProduct) { $hotelServiceProducts[] = array_merge($type_value, $hotelProduct); } - } else if (Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + } else if (Product::SELLING_PREFERENCE_STANDALONE == $type_value['selling_preference_type']) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { diff --git a/controllers/front/OrderConfirmationController.php b/controllers/front/OrderConfirmationController.php index e40a7bec0..dd428dff2 100644 --- a/controllers/front/OrderConfirmationController.php +++ b/controllers/front/OrderConfirmationController.php @@ -362,7 +362,7 @@ class OrderConfirmationControllerCore extends FrontController $totalRoomsBooked += 1; } - } else if (Product::isSellableWithHotel($type_value['selling_preference_type'])) { + } else if ($type_value['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { @@ -385,7 +385,7 @@ class OrderConfirmationControllerCore extends FrontController } $cart_hotel_service_products[] = $type_value; } - } else if (Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + } else if ($type_value['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE) { $cover_image_arr = $product->getCover($type_value['product_id']); if (!empty($cover_image_arr)) { diff --git a/controllers/front/OrderDetailController.php b/controllers/front/OrderDetailController.php index c71439dab..0a949c7e4 100644 --- a/controllers/front/OrderDetailController.php +++ b/controllers/front/OrderDetailController.php @@ -358,7 +358,7 @@ class OrderDetailControllerCore extends FrontController $value['avg_price_diff_tax_excl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_excl'] - $value['product_price_tax_excl'], 6)); $value['avg_price_diff_tax_incl'] = abs(Tools::ps_round($value['avg_paid_unit_price_tax_incl'] - $value['product_price_tax_incl'], 6)); } - } else if (Product::isSellableWithRoomType($type_value['selling_preference_type'])) { + } else if (Product::SELLING_PREFERENCE_WITH_ROOM_TYPE ==$type_value['selling_preference_type']) { if ($type_value['product_auto_add'] && $type_value['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT) { $total_convenience_fee_ti += $objServiceProductOrderDetail->getRoomTypeServiceProducts( $id_order, @@ -385,7 +385,7 @@ class OrderDetailControllerCore extends FrontController 1 ); } - } else if (Product::isSellableWithHotel($type_value['selling_preference_type'])) { + } else if (Product::SELLING_PREFERENCE_HOTEL_STANDALONE == $type_value['selling_preference_type']) { $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($id_order, $type_value['id_order_detail'], $type_value['product_id']); foreach ($hotelProducts as $hotelProduct) { $hotelServiceProducts[] = array_merge($type_value, $hotelProduct); @@ -404,7 +404,7 @@ class OrderDetailControllerCore extends FrontController } $serviceProductsFormatted[$hotelProduct['id_product']]['options'][] = $hotelProduct; } - } else if (Product::isSellableAsStandalone($type_value['selling_preference_type'])) { + } else if (Product::SELLING_PREFERENCE_STANDALONE == $type_value['selling_preference_type']) { $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($id_order, $type_value['id_order_detail'], $type_value['product_id']); foreach ($standaloneProducts as $standaloneProduct) { $standaloneServiceProducts[] = array_merge($type_value, $standaloneProduct); diff --git a/controllers/front/ProductController.php b/controllers/front/ProductController.php index 22e74f24b..4eeaaa987 100644 --- a/controllers/front/ProductController.php +++ b/controllers/front/ProductController.php @@ -135,12 +135,12 @@ class ProductControllerCore extends FrontController // if product is a service product then check type of selling preference if (!$this->product->booking_product) { if ( - Product::isSellableWithRoomType($this->product->selling_preference_type) - && !Product::isSellableWithHotel($this->product->selling_preference_type) - && !Product::isSellableAsStandalone($this->product->selling_preference_type) + Product::isSellableWithRoomType($this->product->id) + && !Product::isSellableWithHotel($this->product->id) + && !Product::isSellableAsStandalone($this->product->id) ) { Tools::redirect($this->context->link->getPageLink('pagenotfound')); - } elseif (Product::isSellableWithHotel($this->product->selling_preference_type)) { + } elseif (Product::isSellableWithHotel($this->product->id)) { // For any hotel-sellable service product, ensure hotel associations exist. $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); $associatedHotels = $objRoomTypeServiceProduct->getAssociatedHotelsAndRoomType($this->product->id); @@ -921,9 +921,9 @@ class ProductControllerCore extends FrontController $buying_option = false ) { $smartyVars = array(); - $smartyVars['sellable_with_hotel'] = Product::isSellableWithHotel($this->product->selling_preference_type); - $smartyVars['sellable_as_standalone'] = Product::isSellableAsStandalone($this->product->selling_preference_type); - if (Product::isSellableWithHotel($this->product->selling_preference_type)) { + $smartyVars['sellable_with_hotel'] = Product::isSellableWithHotel($this->product->id); + $smartyVars['sellable_as_standalone'] = Product::isSellableAsStandalone($this->product->id); + if (Product::isSellableWithHotel($this->product->id)) { $objRoomTypeServiceProduct = new RoomTypeServiceProduct(); if ($associatedHotels = $objRoomTypeServiceProduct->getAssociatedHotelsAndRoomType($this->product->id)['hotel']) { diff --git a/modules/blockcart/blockcart.php b/modules/blockcart/blockcart.php index 2c2ea59ac..163d14acd 100644 --- a/modules/blockcart/blockcart.php +++ b/modules/blockcart/blockcart.php @@ -121,7 +121,7 @@ class Blockcart extends Module if (!$product['booking_product']) { $product['hasOptions'] = ServiceProductOption::productHasOptions($product['id_product']); - if (Product::isSellableAsStandalone($product['selling_preference_type'])) { + if (Product::isSellableAsStandalone($product['id_product'])) { $product['total_price_tax_incl'] = 0; $product['total_price_tax_excl'] = 0; $product['amount'] = 0; @@ -148,7 +148,7 @@ class Blockcart extends Module $nbTotalProducts += (int) $product['standalone_total_qty']; } - if (Product::isSellableWithHotel($product['selling_preference_type'])) { + if (Product::isSellableWithHotel($product['id_product'])) { if ($serviceProducts = $objServiceProductCartDetail->getServiceProductsInCart( $params['cart']->id, [(int) $product['selling_preference_type']], @@ -322,8 +322,8 @@ class Blockcart extends Module $addedProduct['date_from'] = Tools::displayDate($addedProduct['date_from'], null, $fullDate); $addedProduct['date_to'] = Tools::displayDate($addedProduct['date_to'], null, $fullDate); } else { - $canSellWithHotel = Product::isSellableWithHotel($objProduct->selling_preference_type); - $canSellStandalone = Product::isSellableAsStandalone($objProduct->selling_preference_type); + $canSellWithHotel = Product::isSellableWithHotel($objProduct->id); + $canSellStandalone = Product::isSellableAsStandalone($objProduct->id); if ($canSellWithHotel && !empty($addedProduct['id_hotel'])) { $addedProduct['unit_price'] = RoomTypeServiceProductPrice::getPrice( diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index ec29d14f4..6caf931e7 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -63,15 +63,15 @@
    {foreach from=$products key=data_k item='product' name='myLoop'} {* only show products that are booking or global without room *} - {if $product.booking_product || Product::isSellableAsStandalone($product.selling_preference_type) || Product::isSellableWithHotel($product.selling_preference_type)} + {if $product.booking_product || Product::isSellableAsStandalone($product.id_product) || Product::isSellableWithHotel($product.id_product)} {if isset($product.hotel_wise_data) && $product.hotel_wise_data} {foreach $product.hotel_wise_data as $hotel_wise_data} {include file="./cartrow.tpl" hotel_wise_data=$hotel_wise_data} {/foreach} {/if} {if $product.booking_product - || (!Product::isSellableWithHotel($product.selling_preference_type) && !Product::isSellableWithRoomType($product.selling_preference_type)) - || (Product::isSellableAsStandalone($product.selling_preference_type) && $product.standalone_total_qty > 0)} + || (!Product::isSellableWithHotel($product.id_product) && !Product::isSellableWithRoomType($product.id_product)) + || (Product::isSellableAsStandalone($product.id_product) && $product.standalone_total_qty > 0)} {include file="./cartrow.tpl" hotel_wise_data=false} {/if} {/if} diff --git a/modules/blockcart/cartrow.tpl b/modules/blockcart/cartrow.tpl index 68d0cbc96..16363bca3 100644 --- a/modules/blockcart/cartrow.tpl +++ b/modules/blockcart/cartrow.tpl @@ -11,7 +11,7 @@
    {/block} {block name='blockcart_shopping_cart_hotel_name'} - {if Product::isSellableWithHotel($product.selling_preference_type)} + {if Product::isSellableWithHotel($product.id_product)}
    {$hotel_wise_data.hotel_name|escape:'html':'UTF-8'}
    @@ -29,7 +29,7 @@ {if !isset($product.is_gift) || !$product.is_gift} {if $product.booking_product} {displayWtPrice p="`$product.bookingData.total_room_type_amount`"} - {else if Product::isSellableWithHotel($product.selling_preference_type)} + {else if Product::isSellableWithHotel($product.id_product)} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$hotel_wise_data.total_price_tax_excl`"}{else}{displayWtPrice p="`$hotel_wise_data.total_price_tax_incl`"}{/if} {else} {if $priceDisplay == $smarty.const.PS_TAX_EXC}{displayWtPrice p="`$product.total_price_tax_excl`"}{else}{displayWtPrice p="`$product.total_price_tax_incl`"}{/if} @@ -53,9 +53,9 @@ {if $product.booking_product} {$product.bookingData['total_num_rooms']} {elseif $product.allow_multiple_quantity} - {if Product::isSellableWithHotel($product.selling_preference_type)} + {if Product::isSellableWithHotel($product.id_product)} {$hotel_wise_data.total_qty} - {elseif Product::isSellableAsStandalone($product.selling_preference_type)} + {elseif Product::isSellableAsStandalone($product.id_product)} {$product.cart_quantity} {/if} {/if} @@ -99,9 +99,9 @@ {/block} {else if $product.hasOptions} {block name='blockcart_shopping_cart_options'} - {if Product::isSellableWithHotel($product.selling_preference_type)} + {if Product::isSellableWithHotel($product.id_product)} {assign var='options' value=$hotel_wise_data.options} - {else if Product::isSellableAsStandalone($product.selling_preference_type)} + {else if Product::isSellableAsStandalone($product.id_product)} {assign var='options' value=$product.options} {/if}
    diff --git a/modules/hotelreservationsystem/classes/HotelCartBookingData.php b/modules/hotelreservationsystem/classes/HotelCartBookingData.php index 4a8565923..b77b92d4a 100644 --- a/modules/hotelreservationsystem/classes/HotelCartBookingData.php +++ b/modules/hotelreservationsystem/classes/HotelCartBookingData.php @@ -961,9 +961,9 @@ class HotelCartBookingData extends ObjectModel if (!$product->active || (!$forAdminCart && !$product->available_for_order)) { $toRemoveService = 1; } else if ($checkServiceRoomLink) { - $isSellableWithRoomType = Product::isSellableWithRoomType($product->selling_preference_type); - $isSellableWithHotel = Product::isSellableWithHotel($product->selling_preference_type); - $isSellableAsStandalone = Product::isSellableAsStandalone($product->selling_preference_type); + $isSellableWithRoomType = Product::isSellableWithRoomType($product->id); + $isSellableWithHotel = Product::isSellableWithHotel($product->id); + $isSellableAsStandalone = Product::isSellableAsStandalone($product->id); if (ServiceProductOption::productHasOptions($service['id_product'])) { $skipOptionValidation = false; diff --git a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php index 591e0d89d..e2572d465 100644 --- a/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php +++ b/modules/hotelreservationsystem/controllers/admin/AdminHotelRoomsBookingController.php @@ -624,7 +624,7 @@ class AdminHotelRoomsBookingController extends ModuleAdminController if (!$product->id || !$product->active) { $this->errors[] = $this->l('This product is no longer available.'); } - if ($product->booking_product || !Product::isSellableAsStandalone($product->selling_preference_type)) { + if ($product->booking_product || !Product::isSellableAsStandalone($product->id)) { // cannot be added without room type or is a booking product. $this->errors[] = $this->l('This product is either a room type or additional service and cannot be added through this method.'); } elseif (!$product->allow_multiple_quantity) { diff --git a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl index 182945dfe..47121ca96 100644 --- a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl +++ b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl @@ -63,15 +63,15 @@
    {foreach from=$products key=data_k item='product' name='myLoop'} {* only show products that are booking or global without room *} - {if $product.booking_product || Product::isSellableAsStandalone($product.selling_preference_type) || Product::isSellableWithHotel($product.selling_preference_type)} - {if Product::isSellableWithHotel($product.selling_preference_type) && isset($product.hotel_wise_data) && $product.hotel_wise_data} + {if $product.booking_product || Product::isSellableAsStandalone($product.id_product) || Product::isSellableWithHotel($product.id_product)} + {if Product::isSellableWithHotel($product.id_product) && isset($product.hotel_wise_data) && $product.hotel_wise_data} {foreach $product.hotel_wise_data as $hotel_wise_data} {include file="./cartrow.tpl" hotel_wise_data=$hotel_wise_data} {/foreach} {/if} {if $product.booking_product - || (!Product::isSellableWithHotel($product.selling_preference_type) && !Product::isSellableWithRoomType($product.selling_preference_type)) - || (Product::isSellableAsStandalone($product.selling_preference_type) && $product.standalone_total_qty > 0)} + || (!Product::isSellableWithHotel($product.id_product) && !Product::isSellableWithRoomType($product.id_product)) + || (Product::isSellableAsStandalone($product.id_product) && $product.standalone_total_qty > 0)} {include file="./cartrow.tpl" hotel_wise_data=false} {/if} {/if} diff --git a/themes/hotel-reservation-theme/modules/blockcart/cartrow.tpl b/themes/hotel-reservation-theme/modules/blockcart/cartrow.tpl index f7ce76c25..8a31e3b2f 100644 --- a/themes/hotel-reservation-theme/modules/blockcart/cartrow.tpl +++ b/themes/hotel-reservation-theme/modules/blockcart/cartrow.tpl @@ -55,7 +55,7 @@ {elseif $product.allow_multiple_quantity} {if isset($hotel_wise_data.id_hotel) && $hotel_wise_data.id_hotel} {$hotel_wise_data.total_qty} - {elseif Product::isSellableAsStandalone($product.selling_preference_type)} + {elseif Product::isSellableAsStandalone($product.id_product)} {$product.standalone_total_qty|intval} {/if} {/if} From fa775f81693a026b0ff63ce43f0666faf0b3acc2 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 29 May 2026 13:02:45 +0530 Subject: [PATCH 20/93] Refactor back office code by removing unused and redundant logic --- .../orders/_cart_booking_demands.tpl | 2 +- .../_add_order_extra_services_tab_content.tpl | 2 +- ..._extra_services_facilities_tab_content.tpl | 6 +- ..._services_service_products_tab_content.tpl | 6 +- classes/order/Order.php | 24 +-- controllers/admin/AdminCartsController.php | 58 ++++--- controllers/admin/AdminOrdersController.php | 152 +++++------------- 7 files changed, 86 insertions(+), 164 deletions(-) diff --git a/admin/themes/default/template/controllers/orders/_cart_booking_demands.tpl b/admin/themes/default/template/controllers/orders/_cart_booking_demands.tpl index bd695ea59..fad6ca46e 100644 --- a/admin/themes/default/template/controllers/orders/_cart_booking_demands.tpl +++ b/admin/themes/default/template/controllers/orders/_cart_booking_demands.tpl @@ -83,7 +83,7 @@ {if isset($selected_adv_option) && isset($demand['adv_option'][$selected_adv_option]['price_tax_excl'])}{convertPrice price = $demand['adv_option'][$selected_adv_option]['price_tax_excl']|escape:'html':'UTF-8'}{else if isset($demand['adv_option']) && $demand['adv_option']}{convertPrice price = $demand['adv_option'][$demand['adv_option']|@key]['price_tax_excl']}{else}{convertPrice price = $demand['price_tax_excl']|escape:'html':'UTF-8'}{/if} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ day'} + {l s='/ night'} {/if}
    {displayPrice price=$demand['unit_price_tax_excl'] currency=$orderCurrency} {if $demand['price_calc_method'] == HotelRoomTypeGlobalDemand::WK_PRICE_CALC_METHOD_EACH_DAY} - {l s='/ day'} + {l s='/ night'} {/if} {displayPrice price=$demand['total_price_tax_excl'] currency=$orderCurrency} diff --git a/classes/order/Order.php b/classes/order/Order.php index 26ee52823..412f4460b 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -2882,27 +2882,13 @@ class OrderCore extends ObjectModel } // check hotel linked products $objServiceProductOrderDetail = new ServiceProductOrderDetail(); - $serviceProducts = array(); - $sellingPreferenceTypes = array( - Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - foreach ($sellingPreferenceTypes as $sellingPreferenceType) { - $serviceProducts = array_merge( - $serviceProducts, - $objServiceProductOrderDetail->getServiceProductsInOrder($this->id, 0, 0, $sellingPreferenceType) - ); + if ($hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($this->id, 0, 0, Product::SELLING_PREFERENCE_HOTEL_STANDALONE)) { + $res &= $this->checkList($hotelProducts, $action, false); + $hasRoomsOrProducts = 1; } - $serviceProducts = array_filter($serviceProducts, function ($serviceProduct) { - return empty($serviceProduct['id_htl_booking_detail']); - }); - if ($serviceProducts) { - $res &= $this->checkList($serviceProducts, $action, false); + if ($standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($this->id, 0, 0, Product::SELLING_PREFERENCE_STANDALONE)) { + $res &= $this->checkList($standaloneProducts, $action, false); $hasRoomsOrProducts = 1; } diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index 2b8115761..a30655767 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -354,12 +354,7 @@ class AdminCartsControllerCore extends AdminController $objServiceProductCartDetail = new ServiceProductCartDetail(); $hotelProducts = $objServiceProductCartDetail->getServiceProductsInCart( $cart->id, - [ - Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ], + [], $idHotel = null, 0, null, @@ -373,14 +368,15 @@ class AdminCartsControllerCore extends AdminController 1 ); + $hotelProducts = array_filter($hotelProducts, function ($product) { + return $product['id_hotel'] > 0 && $product['id_hotel_cart_booking'] == 0; + }); + $standaloneProducts = $objServiceProductCartDetail->getServiceProductsInCart( $cart->id, - [ - Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE - ] + [], + 0, + 0 ); if (count($standaloneProducts)) { @@ -1205,20 +1201,22 @@ class AdminCartsControllerCore extends AdminController if (Configuration::get('PS_ALLOW_ADD_ALL_SERVICES_IN_BOOKING')) { // get all services $objProduct = new Product(); - $serviceProducts = array_merge( - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) - ); + $serviceProducts = array_values(array_filter( + $objProduct->getServiceProducts(null), + function ($serviceProduct) { + return Product::isSellableWithRoomType($serviceProduct['id_product']); + } + )); if ($serviceProducts) { foreach ($serviceProducts as $key => $servProduct) { + if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$servProduct['id_product'])) && Product::getQuantity((int)$servProduct['id_product']) <= 0 ) { unset($serviceProducts[$key]); continue; } + $numDays = Product::getPriceCalculationApplicableDays( $servProduct['price_calculation_method'], $dateFrom, @@ -1554,14 +1552,22 @@ class AdminCartsControllerCore extends AdminController if (Configuration::get('PS_ALLOW_ADD_ALL_SERVICES_IN_BOOKING')) { // get all services $objProduct = new Product(); - $serviceProducts = array_merge( - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) - ); + $serviceProducts = array_values(array_filter( + $objProduct->getServiceProducts(null), + function ($serviceProduct) { + return Product::isSellableWithRoomType($serviceProduct['id_product']); + } + )); if ($serviceProducts) { foreach ($serviceProducts as $key => $servProduct) { + + if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$servProduct['id_product'])) + && Product::getQuantity((int)$servProduct['id_product']) <= 0 + ) { + unset($serviceProducts[$key]); + continue; + } + $numDays = Product::getPriceCalculationApplicableDays( $servProduct['price_calculation_method'], $objCartBookingData->date_from, @@ -1578,7 +1584,7 @@ class AdminCartsControllerCore extends AdminController $objCartBookingData->date_from, $objCartBookingData->date_to, $objCartBookingData->id_cart - )/$numDays; + )/ max($numDays, 1); } } } else { @@ -1742,7 +1748,7 @@ class AdminCartsControllerCore extends AdminController $idServiceProduct, $operator, $quantity, - false, + 0, $idCartBooking ))) { $originalPrice = Product::getPriceStatic($idServiceProduct, false); diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index fcf696f8a..d28c8fd23 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -992,12 +992,12 @@ class AdminOrdersControllerCore extends AdminController if (Configuration::get('PS_ALLOW_ADD_ALL_SERVICES_IN_BOOKING')) { // get all services $objProduct = new Product(); - $serviceProducts = array_merge( - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) - ); + $serviceProducts = array_values(array_filter( + $objProduct->getServiceProducts(null), + function ($serviceProduct) { + return Product::isSellableWithRoomType($serviceProduct['id_product']); + } + )); if($serviceProducts) { foreach ($serviceProducts as $key => $servProduct) { @@ -1156,35 +1156,18 @@ class AdminOrdersControllerCore extends AdminController } $refundReqProducts = $objOrderReturn->getOrderRefundRequestedProducts($objOrder->id, 0, 1, 1); - $serviceProducts = array(); - $sellingPreferenceTypes = array( - Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - foreach ($sellingPreferenceTypes as $sellingPreferenceType) { - $serviceProducts = array_merge( - $serviceProducts, - $objServiceProductOrderDetail->getServiceProductsInOrder($objOrder->id, 0, 0, $sellingPreferenceType) - ); - } - - $hotelProducts = array(); - $standaloneProducts = array(); - foreach ($serviceProducts as $product) { + $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($objOrder->id, 0, 0, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + foreach($hotelProducts as $key => $product) { if ((in_array($product['id_service_product_order_detail'], $refundReqProducts)) || $product['is_refunded']) { - continue; - } - if (!empty($product['id_hotel'])) { - $hotelProducts[] = $product; - } else if (!$product['id_hotel'] && !$product['id_htl_booking_detail']) { - $standaloneProducts[] = $product; + unset($hotelProducts[$key]); + } + } + $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($objOrder->id, 0, 0, Product::SELLING_PREFERENCE_STANDALONE); + foreach($standaloneProducts as $key => $product) { + if ((in_array($product['id_service_product_order_detail'], $refundReqProducts)) || $product['is_refunded']) { + unset($standaloneProducts[$key]); } } - $this->context->smarty->assign( array( @@ -2454,20 +2437,8 @@ class AdminOrdersControllerCore extends AdminController } } - $hotelProducts = array(); - $hotelSellingTypes = array( - Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - foreach ($hotelSellingTypes as $sellingPreferenceType) { - $hotelProducts = array_merge( - $hotelProducts, - $objRoomTypeServProdOrderDtl->getServiceProductsInOrder($order->id, 0, 0, $sellingPreferenceType) - ); - } - if ($hotelProducts && is_array($hotelProducts)) { + + if ($hotelProducts = $objRoomTypeServProdOrderDtl->getServiceProductsInOrder($order->id, 0, 0, Product::SELLING_PREFERENCE_HOTEL_STANDALONE)) { foreach ($hotelProducts as $serviceProduct) { $objRoomTypeServProdOrderDtl = new ServiceProductOrderDetail($serviceProduct['id_service_product_order_detail']); foreach ($fields as $field) { @@ -2481,20 +2452,8 @@ class AdminOrdersControllerCore extends AdminController $objRoomTypeServProdOrderDtl->save(); } } - $standaloneProducts = array(); - $standaloneSellingTypes = array( - Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - foreach ($standaloneSellingTypes as $sellingPreferenceType) { - $standaloneProducts = array_merge( - $standaloneProducts, - $objRoomTypeServProdOrderDtl->getServiceProductsInOrder($order->id, 0, 0, $sellingPreferenceType) - ); - } - if ($standaloneProducts && is_array($standaloneProducts)) { + + if ($standaloneProducts = $objRoomTypeServProdOrderDtl->getServiceProductsInOrder($order->id, 0, 0, Product::SELLING_PREFERENCE_STANDALONE)) { foreach ($standaloneProducts as $serviceProduct) { $objRoomTypeServProdOrderDtl = new ServiceProductOrderDetail($serviceProduct['id_service_product_order_detail']); foreach ($fields as $field) { @@ -2988,30 +2947,9 @@ class AdminOrdersControllerCore extends AdminController // if order has normal products the add kpi for total products $objServiceProductOrderDetail = new ServiceProductOrderDetail(); - $serviceProducts = array(); - $sellingPreferenceTypes = array( - Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, - ); - foreach ($sellingPreferenceTypes as $sellingPreferenceType) { - $serviceProducts = array_merge( - $serviceProducts, - $objServiceProductOrderDetail->getServiceProductsInOrder($objOrder->id, 0, 0, $sellingPreferenceType) - ); - } - $hotelProducts = array(); - $standaloneProducts = array(); - foreach ($serviceProducts as $serviceProduct) { - if (!empty($serviceProduct['id_hotel'])) { - $hotelProducts[] = $serviceProduct; - } else if (!$serviceProduct['id_hotel'] &&!$serviceProduct['id_htl_booking_detail']) { - $standaloneProducts[] = $serviceProduct; - } - } + $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($objOrder->id, 0, 0, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($objOrder->id, 0, 0, Product::SELLING_PREFERENCE_STANDALONE); + if ($hotelProducts || $standaloneProducts) { $helper = new HelperKpi(); $helper->id = 'box-total-products'; @@ -3357,16 +3295,16 @@ class AdminOrdersControllerCore extends AdminController } else { $product['image_link'] = $this->context->link->getImageLink($objProduct->link_rewrite, $this->context->language->iso_code.'-default', 'small_default'); } - if (Product::isSellableWithHotel($product['product_id']) - || Product::isSellableAsStandalone($product['product_id']) - ) { - $serviceProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($order->id, $product['id_order_detail'], $product['product_id']); - foreach ($serviceProducts as $serviceProduct) { - if (!empty($serviceProduct['id_hotel']) && Product::isSellableWithHotel($product['product_id'])) { - $orderHotelServiceProducts[] = array_merge($product, $serviceProduct); - } elseif (!$serviceProduct['id_hotel'] && !$serviceProduct['id_htl_booking_detail'] && Product::isSellableAsStandalone($product['product_id'])) { - $orderStandaloneServiceProducts[] = array_merge($product, $serviceProduct); - } + if ($product['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE) { + $hotelProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($order->id, $product['id_order_detail'], $product['product_id'], Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + foreach ($hotelProducts as $hotelProduct) { + $orderHotelServiceProducts[] = array_merge($product, $hotelProduct); + } + } + if ($product['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE) { + $standaloneProducts = $objServiceProductOrderDetail->getServiceProductsInOrder($order->id, $product['id_order_detail'], $product['product_id'], Product::SELLING_PREFERENCE_STANDALONE); + foreach ($standaloneProducts as $standaloneProduct) { + $orderStandaloneServiceProducts[] = array_merge($product, $standaloneProduct); } } } @@ -3698,17 +3636,9 @@ class AdminOrdersControllerCore extends AdminController // send hotel standalone and standalone products $objProduct = new Product(); - $allServiceProducts = $objProduct->getServiceProducts(null); - $hotelStandaloneProducts = array(); - $standaloneProducts = array(); - foreach ($allServiceProducts as $serviceProduct) { - if (Product::isSellableWithHotel($serviceProduct['id_product'])) { - $hotelStandaloneProducts[] = $serviceProduct; - } - if (Product::isSellableAsStandalone($serviceProduct['id_product'])) { - $standaloneProducts[] = $serviceProduct; - } - } + $hotelStandaloneProducts = $objProduct->getServiceProducts(null, Product::SELLING_PREFERENCE_HOTEL_STANDALONE); + $standaloneProducts = $objProduct->getServiceProducts(null, Product::SELLING_PREFERENCE_STANDALONE); + $this->tpl_view_vars = array( 'hotelStandaloneProducts' => $hotelStandaloneProducts, 'standaloneProducts' => $standaloneProducts, @@ -7502,12 +7432,12 @@ class AdminOrdersControllerCore extends AdminController if (Configuration::get('PS_ALLOW_ADD_ALL_SERVICES_IN_BOOKING')) { // get all services $objProduct = new Product(); - $serviceProducts = array_merge( - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE), - $objProduct->getServiceProducts(true, Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE) - ); + $serviceProducts = array_values(array_filter( + $objProduct->getServiceProducts(null), + function ($serviceProduct) { + return Product::isSellableWithRoomType($serviceProduct['id_product']); + } + )); if ($serviceProducts) { foreach ($serviceProducts as $key => $servProduct) { if (!Product::isAvailableWhenOutOfStock(StockAvailable::outOfStock((int)$servProduct['id_product'])) From 71cd5573daa4c215a2aec43547a9a76279b08c43 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 29 May 2026 13:14:04 +0530 Subject: [PATCH 21/93] changes product const name --- .../normal_products/helpers/form/form.tpl | 2 +- .../normal_products/informations.tpl | 14 +-- .../controllers/normal_products/prices.tpl | 20 ++-- .../_add_order_extra_services_tab_content.tpl | 2 +- ..._services_service_products_tab_content.tpl | 6 +- classes/Cart.php | 2 +- classes/PaymentModule.php | 4 +- classes/Product.php | 100 +++++++++--------- classes/order/Order.php | 4 +- classes/order/OrderDetail.php | 4 +- .../WebserviceSpecificManagementBookings.php | 12 +-- config/defines.inc.php | 2 +- controllers/admin/AdminCartsController.php | 6 +- .../admin/AdminNormalProductsController.php | 32 +++--- controllers/admin/AdminOrdersController.php | 28 ++--- controllers/admin/AdminStatsController.php | 4 +- controllers/front/CartController.php | 2 +- controllers/front/ParentOrderController.php | 18 ++-- modules/blockcart/ajax-cart.js | 8 +- modules/blockcart/blockcart.tpl | 8 +- .../classes/HotelHelper.php | 12 +-- .../classes/ServiceProductCartDetail.php | 8 +- .../qlostatsserviceproducts.php | 8 +- .../_partials/cart_booking_demands.tpl | 2 +- .../_partials/service-products-list-row.tpl | 2 +- .../js/modules/blockcart/ajax-cart.js | 8 +- .../modules/blockcart/blockcart.tpl | 8 +- 27 files changed, 161 insertions(+), 165 deletions(-) diff --git a/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl b/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl index bc29f7e99..14b55a338 100644 --- a/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl +++ b/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl @@ -78,7 +78,7 @@ var SELLING_PREFERENCE_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_WITH_ROOM_TYPE|intval}; var SELLING_PREFERENCE_HOTEL_STANDALONE = {Product::SELLING_PREFERENCE_HOTEL_STANDALONE|intval}; - var SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE|intval}; + var SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE|intval}; var SELLING_PREFERENCE_STANDALONE = {Product::SELLING_PREFERENCE_STANDALONE|intval}; var price_addition_type_with_room = {Product::PRICE_ADDITION_TYPE_WITH_ROOM|intval}; diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index a528df729..7dcd57e42 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -261,7 +261,7 @@ -
    selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE)}style="display:none;"{/if}> +
    selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE)}style="display:none;"{/if}>
    {include file="controllers/products/multishop/checkbox.tpl" field="category_box" type="category_box"}
    -
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0)}style="display:none;"{/if}> +
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0)}style="display:none;"{/if}>
    {include file="controllers/products/multishop/checkbox.tpl" field="category_box" type="category_box"}
    -
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0}style="display:none;"{/if}> +
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0}style="display:none;"{/if}>
    {displayPrice price=$service['unit_price_tax_excl'] currency=$orderCurrency} - {if Product::getPriceCalculationApplicableDays( + {if Product::getServicePriceBillableDays( $service['price_calculation_method'], $additionalServices['date_from'], $additionalServices['date_to'] diff --git a/classes/Cart.php b/classes/Cart.php index 813ff4f89..242072486 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -2480,7 +2480,7 @@ class CartCore extends ObjectModel 'id_hotel_cart_booking' => $selectedProduct['id_hotel_cart_booking'], ); } - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $selectedProduct['price_calculation_method'], $selectedProduct['date_from'], $selectedProduct['date_to'] diff --git a/classes/PaymentModule.php b/classes/PaymentModule.php index 8b6e57e1b..e289ad98a 100644 --- a/classes/PaymentModule.php +++ b/classes/PaymentModule.php @@ -592,7 +592,7 @@ abstract class PaymentModuleCore extends Module if (!$product['booking_product'] && ($product['selling_preference_type'] == Product::SELLING_PREFERENCE_STANDALONE || $product['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE - || $product['selling_preference_type'] == Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE + || $product['selling_preference_type'] == Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE ) ) { $cover_image_arr = $objProduct->getCover($product['id_product']); @@ -1065,7 +1065,7 @@ abstract class PaymentModuleCore extends Module } } - } elseif (Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE == $product['selling_preference_type']) { + } elseif (Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE == $product['selling_preference_type']) { $idProductRoomType = null; $idProductHotel = null; if (isset($product['id_room_type']) && $product['id_room_type']) { diff --git a/classes/Product.php b/classes/Product.php index 32c6d0bfe..8202e43d1 100644 --- a/classes/Product.php +++ b/classes/Product.php @@ -560,22 +560,22 @@ class ProductCore extends ObjectModel // Product selling preference types const SELLING_PREFERENCE_WITH_ROOM_TYPE = 1; // Product to be sold with Room types const SELLING_PREFERENCE_HOTEL_STANDALONE = 2; // Product to be sold Standalone with Hotels - const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE = 3; // Product to be sold Standalone with Hotels and with Room types also + const SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE = 3; // Product to be sold Standalone with Hotels and with Room types also const SELLING_PREFERENCE_STANDALONE = 4; // Product to be sold standalone - const SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE = 5; // Product to be sold standalone and with Room types also - const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE = 6; // Product to be sold standalone with Hotels and with Room types also - const SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE = 7; // Product to be sold standalone with Hotels and with Room types also and standalone + const SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE = 5; // Product to be sold standalone and with Room types also + const SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE = 6; // Product to be sold standalone with Hotels and with Room types also + const SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE = 7; // Product to be sold standalone with Hotels and with Room types also and standalone const PRICE_ADDITION_TYPE_WITH_ROOM = 1; const PRICE_ADDITION_TYPE_INDEPENDENT = 2; - const PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY = 1; - const PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY = 2; - const PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY = 4; + const PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY = 1; + const PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY = 2; + const PRICE_CALCULATION_METHOD_ON_DURING_STAY = 4; const PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY = 3; - const PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY = 5; - const PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY = 6; - const PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY = 7; + const PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY = 5; + const PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY = 6; + const PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY = 7; const STANDARD_PRODUCT_ADDRESS_PREFERENCE_CUSTOMER = 1; const STANDARD_PRODUCT_ADDRESS_PREFERENCE_HOTEL = 2; @@ -1456,9 +1456,9 @@ class ProductCore extends ObjectModel '(`element_type` = '.RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE.' AND `id_element` = '.(int)$this->id.') ) AND (p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_ROOM_TYPE. ' - || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE.' - || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE.' - || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE.') + || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE.' + || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE.' + || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE.') AND product_shop.`id_shop` = '.(int)$context->shop->id .($sub_category? ' AND product_shop.`id_category_default` = '.(int)$sub_category : '') .($front ? ' AND product_shop.`show_at_front` = 1':'') @@ -1503,9 +1503,9 @@ class ProductCore extends ObjectModel '(`element_type` = '.RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE.' AND `id_element` = '.(int)$this->id.') ) AND (p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_ROOM_TYPE. ' - || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE.' - || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE.' - || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE.')'. ' + || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE.' + || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE.' + || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE.')'. ' AND product_shop.`id_shop` = '.(int)$context->shop->id .($sub_category? ' AND product_shop.`id_category_default` = '.(int)$sub_category : '') .($front ? ' AND product_shop.`show_at_front` = 1':'') @@ -1554,9 +1554,9 @@ class ProductCore extends ObjectModel '(`element_type` = '.RoomTypeServiceProduct::WK_ELEMENT_TYPE_ROOM_TYPE.' AND `id_element` = '.(int)$this->id.') ) AND p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_ROOM_TYPE. - ' || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE. - ' || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE. - ' || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE. + ' || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE. + ' || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE. + ' || p.`selling_preference_type` = '.(int)self::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE. ' AND product_shop.`id_shop` = '.(int)$context->shop->id; $sql .= ' GROUP BY cl.`id_category`'; @@ -6881,7 +6881,7 @@ class ProductCore extends ObjectModel ) ); - $numdays = Product::getPriceCalculationApplicableDays( + $numdays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($idProduct), $dateFrom, $dateTo @@ -6892,46 +6892,42 @@ class ProductCore extends ObjectModel } - public static function getPriceCalculationApplicableDays( + public static function getServicePriceBillableDays( $priceCalculationMethod, $dateFrom, $dateTo, - $defaultDays = 1 ) { - if (empty($dateFrom) || empty($dateTo)) { - return (int) $defaultDays; - } $numNights = (int) HotelHelper::getNumberOfDays($dateFrom, $dateTo); - if ($numNights <= 0) { - return (int) $defaultDays; + if ($numNights < 1) { + return 1; } - $checkin = 1; - $checkout = 1; - $duringStay = max($numNights - 1, 0); + $checkinDay = 1; + $checkoutDay = 1; + $stayDay = $numNights - 1; switch ((int) $priceCalculationMethod) { - case self::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY: - return $checkin; + case self::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY: + return $checkinDay; - case self::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY: - return $checkout; + case self::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY: + return $checkoutDay; - case self::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY: - return $duringStay; + case self::PRICE_CALCULATION_METHOD_ON_DURING_STAY: + return $stayDay; case self::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY: - return $checkin + $checkout; + return $checkinDay + $checkoutDay; - case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY: - return $checkin + $duringStay; + case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY: + return $checkinDay + $stayDay; - case self::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY: - return $checkout + $duringStay; + case self::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY: + return $checkoutDay + $stayDay; - case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY: - return $checkin + $checkout + $duringStay; + case self::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY: + return $checkinDay + $checkoutDay + $stayDay; default: return $numNights; @@ -6942,9 +6938,9 @@ class ProductCore extends ObjectModel { return in_array((int) self::getSellingPreferenceType($idProduct), [ self::SELLING_PREFERENCE_WITH_ROOM_TYPE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ]); } @@ -6952,9 +6948,9 @@ class ProductCore extends ObjectModel { return in_array((int) self::getSellingPreferenceType($idProduct), [ self::SELLING_PREFERENCE_HOTEL_STANDALONE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ]); } @@ -6962,9 +6958,9 @@ class ProductCore extends ObjectModel { return in_array((int) self::getSellingPreferenceType($idProduct), [ self::SELLING_PREFERENCE_STANDALONE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - self::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - self::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + self::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE, + self::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ]); } } diff --git a/classes/order/Order.php b/classes/order/Order.php index 412f4460b..c3ed92715 100644 --- a/classes/order/Order.php +++ b/classes/order/Order.php @@ -2578,7 +2578,7 @@ class OrderCore extends ObjectModel )) { $totals = array_reduce($serviceProductDetail, function ($carry, $item) use ($order_detail) { $objHotelBookingDetail = new HotelBookingDetail((int) $item['id_htl_booking_detail']); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $order_detail['product_price_calculation_method'], $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -2633,7 +2633,7 @@ class OrderCore extends ObjectModel // We are getting auto added service for specific room.There will be only on htl_booking_detail but can have multiple auto added service with room. // Note: All the auto added service with room have same id_tax_rule group $autoAddedServiceData = array_shift($autoAddedServiceData); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $order_detail['product_price_calculation_method'], $autoAddedServiceData['date_from'], $autoAddedServiceData['date_to'] diff --git a/classes/order/OrderDetail.php b/classes/order/OrderDetail.php index f9e165503..a5d0c2176 100644 --- a/classes/order/OrderDetail.php +++ b/classes/order/OrderDetail.php @@ -450,7 +450,7 @@ class OrderDetailCore extends ObjectModel $taxGroupInfo['id_room_type'], )) { $serviceProductData = array_shift($serviceProductData); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $this->product_price_calculation_method, $serviceProductData['date_from'], $serviceProductData['date_to'] @@ -484,7 +484,7 @@ class OrderDetailCore extends ObjectModel $serviceProductData = array_shift($serviceProductData); $unit_price_tax_excl = isset($serviceProductData['unit_price_tax_excl']) ? $serviceProductData['unit_price_tax_excl'] : 0; - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $this->product_price_calculation_method, $serviceProductData['date_from'], $serviceProductData['date_to'] diff --git a/classes/webservice/WebserviceSpecificManagementBookings.php b/classes/webservice/WebserviceSpecificManagementBookings.php index b7c7546a8..960ab4521 100644 --- a/classes/webservice/WebserviceSpecificManagementBookings.php +++ b/classes/webservice/WebserviceSpecificManagementBookings.php @@ -1193,7 +1193,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $objOrderDetail = new OrderDetail($service['id_order_detail']); $objServiceProductOrderDetail = new ServiceProductOrderDetail($service['id_service_product_order_detail']); $quantity = $objServiceProductOrderDetail->quantity; - $quantity *= Product::getPriceCalculationApplicableDays( + $quantity *= Product::getServicePriceBillableDays( $objOrderDetail->product_price_calculation_method, $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -2312,7 +2312,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We foreach ($services as $service) { $insertedServiceProductIdOrderDetail = $objBookingDetail->getLastInsertedServiceIdOrderDetail($objOrder->id, $service['id_product']); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($service['id_product']), $objBookingDetail->date_from, $objBookingDetail->date_to @@ -2670,7 +2670,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We foreach ($selectedAdditonalServices[$idHotelBooking]['additional_services'] as $service) { $serviceOrderDetail = new OrderDetail($service['id_order_detail']); $cart_quantity = $service['quantity']; - $serviceApplicableDays = Product::getPriceCalculationApplicableDays( + $serviceApplicableDays = Product::getServicePriceBillableDays( $service['price_calculation_method'], $dateFrom, $dateTo @@ -3189,7 +3189,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $priceTaxExcl = $objServiceProductOrderDetail->total_price_tax_excl; $priceTaxIncl = $objServiceProductOrderDetail->total_price_tax_incl; $objHotelBookingDetail = new HotelBookingDetail($objServiceProductOrderDetail->id_htl_booking_detail); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($service['id_product']), $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -3285,7 +3285,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $insertedServiceProductIdOrderDetail = $objHotelBookingDetail->getLastInsertedServiceIdOrderDetail($objOrder->id, $service['id_product']); $objOrderDetail = new OrderDetail($insertedServiceProductIdOrderDetail); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($product['id_product']), $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -4214,7 +4214,7 @@ class WebserviceSpecificManagementBookingsCore Extends ObjectModel implements We $services['id_service'] = (int) $service['id_product']; $services['name'] = $service['name']; $services['quantity'] = (int) $service['quantity']; - $applicableDays = Product::getPriceCalculationApplicableDays( + $applicableDays = Product::getServicePriceBillableDays( $service['price_calculation_method'], $additionalService['date_from'], $additionalService['date_to'] diff --git a/config/defines.inc.php b/config/defines.inc.php index f16e93903..d78f92763 100644 --- a/config/defines.inc.php +++ b/config/defines.inc.php @@ -26,7 +26,7 @@ /* Debug only */ if (!defined('_PS_MODE_DEV_')) { - define('_PS_MODE_DEV_', false); + define('_PS_MODE_DEV_', true); } /* Compatibility warning */ define('_PS_DISPLAY_COMPATIBILITY_WARNING_', false); diff --git a/controllers/admin/AdminCartsController.php b/controllers/admin/AdminCartsController.php index a30655767..2d22649ae 100644 --- a/controllers/admin/AdminCartsController.php +++ b/controllers/admin/AdminCartsController.php @@ -1217,7 +1217,7 @@ class AdminCartsControllerCore extends AdminController continue; } - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $servProduct['price_calculation_method'], $dateFrom, $dateTo @@ -1568,7 +1568,7 @@ class AdminCartsControllerCore extends AdminController continue; } - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $servProduct['price_calculation_method'], $objCartBookingData->date_from, $objCartBookingData->date_to @@ -1683,7 +1683,7 @@ class AdminCartsControllerCore extends AdminController $cartTotalQty = Cart::getProductQtyInCart($objCart->id, $idServiceProduct); $qty = (int)$serviceQuantities[$idServiceProduct]; - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objProduct->price_calculation_method, $objHotelCartBookingData->date_from, $objHotelCartBookingData->date_to diff --git a/controllers/admin/AdminNormalProductsController.php b/controllers/admin/AdminNormalProductsController.php index 0c3986722..b41b5fd99 100644 --- a/controllers/admin/AdminNormalProductsController.php +++ b/controllers/admin/AdminNormalProductsController.php @@ -200,13 +200,13 @@ class AdminNormalProductsControllerCore extends AdminController Product::PRICE_ADDITION_TYPE_INDEPENDENT => $this->l('Convenience Fee') ); $priceCalculationMethod = array( - Product::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY => $this->l('Only check-in day'), - Product::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY => $this->l('Only check-out day'), - Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY => $this->l('Only during-stay days'), + Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY => $this->l('Only check-in day'), + Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY => $this->l('Only check-out day'), + Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY => $this->l('Only during-stay days'), Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY => $this->l('Check-in and check-out days'), - Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY => $this->l('Check-in | during-stay days'), - Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY => $this->l('Check-out | during-stay days'), - Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY => $this->l('Check-in | check-out | during-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY => $this->l('Check-in | during-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY => $this->l('Check-out | during-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY => $this->l('Check-in | check-out | during-stay days'), ); $this->_join .= ' @@ -331,12 +331,12 @@ class AdminNormalProductsControllerCore extends AdminController // Code For Standard product working $sellingPreferenceTypes = array( Product::SELLING_PREFERENCE_WITH_ROOM_TYPE => $this->l('With room type'), - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE => $this->l('With hotel|room type'), + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE => $this->l('With hotel|room type'), Product::SELLING_PREFERENCE_STANDALONE => $this->l('Standalone'), Product::SELLING_PREFERENCE_HOTEL_STANDALONE => $this->l('With hotel'), - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE => $this->l('With hotel|standalone'), - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE => $this->l('With room type|standalone'), - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE => $this->l('With hotel|room type|standalone'), + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE => $this->l('With hotel|standalone'), + Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE => $this->l('With room type|standalone'), + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE => $this->l('With hotel|room type|standalone'), ); $this->fields_list['selling_preference_type'] = array( 'type' => 'select', @@ -3016,15 +3016,15 @@ class AdminNormalProductsControllerCore extends AdminController $roomTypeSellingPreferences = array( Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ); $hotelSellingPreferences = array( Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ); if (in_array((int)$product->selling_preference_type, $roomTypeSellingPreferences, true)) { diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index d28c8fd23..a824685d0 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -1013,7 +1013,7 @@ class AdminOrdersControllerCore extends AdminController unset($serviceProducts[$key]); } else { - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $servProduct['price_calculation_method'], $dateFrom, $dateTo @@ -4184,9 +4184,9 @@ class AdminOrdersControllerCore extends AdminController $products = array(); $standaloneSellingPreferenceTypes = array( Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ); foreach ($standaloneSellingPreferenceTypes as $sellingPreferenceType) { if ($productsByType = Product::searchByName( @@ -5396,7 +5396,7 @@ class AdminOrdersControllerCore extends AdminController )) { foreach ($services as $service) { $insertedServiceProductIdOrderDetail = $objBookingDetail->getLastInsertedServiceIdOrderDetail($order->id, $service['id_product']); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($service['id_product']), $objBookingDetail->date_from, $objBookingDetail->date_to @@ -6197,12 +6197,12 @@ class AdminOrdersControllerCore extends AdminController && count($orderServiceProduct['additional_services']) ) { foreach ($orderServiceProduct['additional_services'] as $serviceProduct) { - $newNumDays = Product::getPriceCalculationApplicableDays( + $newNumDays = Product::getServicePriceBillableDays( $serviceProduct['price_calculation_method'], $new_date_from, $new_date_to ); - $oldNumDays = Product::getPriceCalculationApplicableDays( + $oldNumDays = Product::getServicePriceBillableDays( $serviceProduct['price_calculation_method'], $old_date_from, $old_date_to @@ -6589,7 +6589,7 @@ class AdminOrdersControllerCore extends AdminController $serviceOrderDetail = new OrderDetail($service['id_order_detail']); $cart_quantity = $service['quantity']; - $serviceApplicableDays = Product::getPriceCalculationApplicableDays( + $serviceApplicableDays = Product::getServicePriceBillableDays( $service['price_calculation_method'], $selectedAdditonalServices[$idHotelBooking]['date_from'], $selectedAdditonalServices[$idHotelBooking]['date_to'] @@ -7452,7 +7452,7 @@ class AdminOrdersControllerCore extends AdminController unset($serviceProducts[$key]); } else { - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $servProduct['price_calculation_method'], $dateFrom, $dateTo @@ -7637,7 +7637,7 @@ class AdminOrdersControllerCore extends AdminController $objServiceProductOrderDetail->quantity = $quantity; $objServiceProductOrderDetail->unit_price_tax_excl = $unitPrice; $objServiceProductOrderDetail->unit_price_tax_incl = $unitPrice * $oldTaxMultiplier; - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objOrderDetail->product_price_calculation_method, $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -7757,7 +7757,7 @@ class AdminOrdersControllerCore extends AdminController if ($objProduct->allow_multiple_quantity && Validate::isUnsignedInt($qty[$service])) { $finalQty = (int)$qty[$service]; - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($service), $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -7813,7 +7813,7 @@ class AdminOrdersControllerCore extends AdminController $this->context->cart = $cart; $this->context->customer = new Customer($order->id_customer); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($service['id']), $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -8133,7 +8133,7 @@ class AdminOrdersControllerCore extends AdminController $objRoomTypeServiceProductPrice = new RoomTypeServiceProductPrice(); $cartProductProcessed = 1; - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($objServiceProduct->id), $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to @@ -8369,7 +8369,7 @@ class AdminOrdersControllerCore extends AdminController if ($res &= $objServiceProductOrderDetail->delete()) { $order = new Order($objServiceProductOrderDetail->id_order); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objOrderDetail->product_price_calculation_method, $objHotelBookingDetail->date_from, $objHotelBookingDetail->date_to diff --git a/controllers/admin/AdminStatsController.php b/controllers/admin/AdminStatsController.php index 9886d86a1..0ade4a0e5 100644 --- a/controllers/admin/AdminStatsController.php +++ b/controllers/admin/AdminStatsController.php @@ -2421,9 +2421,9 @@ class AdminStatsControllerCore extends AdminStatsTabController IFNULL(SUM( CASE WHEN od.`purchase_supplier_price` <> "0.000000" - THEN (od.`purchase_supplier_price` / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1))) + THEN (od.`purchase_supplier_price` / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1))) WHEN od.`purchase_supplier_price` = "0.000000" - THEN ((od.`original_product_price` / o.`conversion_rate`) * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100) / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1)) + THEN ((od.`original_product_price` / o.`conversion_rate`) * '.(int)Configuration::get('CONF_AVERAGE_PRODUCT_MARGIN').' / 100) / (IF (od.`product_price_calculation_method` = '.Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY.', DATEDIFF(hbd.`date_to`, hbd.`date_from`), 1)) END ), 0) FROM `'._DB_PREFIX_.'service_product_order_detail` rtspod diff --git a/controllers/front/CartController.php b/controllers/front/CartController.php index 10df365a1..8e1937270 100644 --- a/controllers/front/CartController.php +++ b/controllers/front/CartController.php @@ -756,7 +756,7 @@ class CartControllerCore extends FrontController $this->errors[] = Tools::displayError('The quantity you\'ve entered is invalid.'); } else { $cartTotalQty = Cart::getProductQtyInCart((int)$this->context->cart->id,(int)$idServiceProduct); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objProduct->price_calculation_method, $objHotelCartBookingData->date_from, $objHotelCartBookingData->date_to diff --git a/controllers/front/ParentOrderController.php b/controllers/front/ParentOrderController.php index 573aea7f8..6048edfdc 100644 --- a/controllers/front/ParentOrderController.php +++ b/controllers/front/ParentOrderController.php @@ -324,9 +324,9 @@ class ParentOrderControllerCore extends FrontController $objServiceProductCartDetail = new ServiceProductCartDetail(); $hotelSellingPreferences = [ Product::SELLING_PREFERENCE_HOTEL_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ]; if ($hotelProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, @@ -353,9 +353,9 @@ class ParentOrderControllerCore extends FrontController $standaloneSellingPreferences = [ Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ]; $standaloneProducts = $objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, @@ -501,9 +501,9 @@ class ParentOrderControllerCore extends FrontController $objServiceProductCartDetail = new ServiceProductCartDetail(); $standaloneSellingPreferences = [ Product::SELLING_PREFERENCE_STANDALONE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE, - Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE, - Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE, + Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE, + Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE, ]; if (count($objServiceProductCartDetail->getServiceProductsInCart( $this->context->cart->id, diff --git a/modules/blockcart/ajax-cart.js b/modules/blockcart/ajax-cart.js index fccec2e4f..10b8df061 100644 --- a/modules/blockcart/ajax-cart.js +++ b/modules/blockcart/ajax-cart.js @@ -140,22 +140,22 @@ var ajaxCart = { case SELLING_PREFERENCE_HOTEL_STANDALONE: channels.with_hotel = true; break; - case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE: + case SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE: channels.with_room_type = true; channels.with_hotel = true; break; case SELLING_PREFERENCE_STANDALONE: channels.standalone = true; break; - case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE: + case SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE: channels.with_hotel = true; channels.standalone = true; break; - case SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE: + case SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE: channels.with_room_type = true; channels.standalone = true; break; - case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE: + case SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE: channels.with_room_type = true; channels.with_hotel = true; channels.standalone = true; diff --git a/modules/blockcart/blockcart.tpl b/modules/blockcart/blockcart.tpl index 6caf931e7..910a50f4a 100644 --- a/modules/blockcart/blockcart.tpl +++ b/modules/blockcart/blockcart.tpl @@ -405,10 +405,10 @@ {addJsDef SELLING_PREFERENCE_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_ROOM_TYPE} {addJsDef SELLING_PREFERENCE_STANDALONE=Product::SELLING_PREFERENCE_STANDALONE} {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE} - {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} - {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE} - {addJsDef SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE} - {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE} + {addJsDef SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE} + {addJsDef SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE} + {addJsDef SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE} + {addJsDef SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE} {addJsDefL name=customizationIdMessage}{l s='Customization #' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=removingLinkText}{l s='remove this product from my cart' mod='blockcart' js=1}{/addJsDefL} diff --git a/modules/hotelreservationsystem/classes/HotelHelper.php b/modules/hotelreservationsystem/classes/HotelHelper.php index 2cb844209..b8bea902b 100644 --- a/modules/hotelreservationsystem/classes/HotelHelper.php +++ b/modules/hotelreservationsystem/classes/HotelHelper.php @@ -2155,7 +2155,7 @@ class HotelHelper 'price' => '250', 'auto_add_to_cart' => 1, 'show_at_front' => 0, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Room Maintenance Fees', @@ -2187,7 +2187,7 @@ class HotelHelper 'price' => '250', 'auto_add_to_cart' => 1, 'show_at_front' => 0, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_INDEPENDENT, 'en' => array( 'name' => 'Internet Handling Charges', @@ -2220,7 +2220,7 @@ class HotelHelper 'price' => '50', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Airport Shuttle', @@ -2252,7 +2252,7 @@ class HotelHelper 'price' => '200', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Cab on Demand', @@ -2284,7 +2284,7 @@ class HotelHelper 'price' => '350', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Breakfast', @@ -2316,7 +2316,7 @@ class HotelHelper 'price' => '450', 'auto_add_to_cart' => 0, 'show_at_front' => 1, - 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY, + 'price_calculation_method' => Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY, 'price_addition_type' => Product::PRICE_ADDITION_TYPE_WITH_ROOM, 'en' => array( 'name' => 'Dinner', diff --git a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php index 512e12b6b..a7872d9a8 100644 --- a/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php +++ b/modules/hotelreservationsystem/classes/ServiceProductCartDetail.php @@ -90,7 +90,7 @@ class ServiceProductCartDetail extends ObjectModel )) { $updateQty = $product['quantity']; $objHotelCartBookingData = new HotelCartBookingData($htlCartBookingId); - $numdays = Product::getPriceCalculationApplicableDays( + $numdays = Product::getServicePriceBillableDays( Product::getProductPriceCalculation($product['id_product']), $objHotelCartBookingData->date_from, $objHotelCartBookingData->date_to @@ -251,7 +251,7 @@ class ServiceProductCartDetail extends ObjectModel $product['htl_cart_booking_id'] ); } else { - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objProduct->price_calculation_method, $product['date_from'], $product['date_to'] @@ -458,7 +458,7 @@ class ServiceProductCartDetail extends ObjectModel if ($objServiceProductCartDetail->save()) { if (Validate::isLoadedObject($objHotelCartBooking = new HotelCartBookingData($idHtlCartData))) { - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objProduct->price_calculation_method, $objHotelCartBooking->date_from, $objHotelCartBooking->date_to @@ -520,7 +520,7 @@ class ServiceProductCartDetail extends ObjectModel if ($updateQunatity) { if (Validate::isLoadedObject($objHotelCartBooking = new HotelCartBookingData($product['id_hotel_cart_booking']))) { $objProduct = new Product((int) $product['id_product']); - $numDays = Product::getPriceCalculationApplicableDays( + $numDays = Product::getServicePriceBillableDays( $objProduct->price_calculation_method, $objHotelCartBooking->date_from, $objHotelCartBooking->date_to diff --git a/modules/qlostatsserviceproducts/qlostatsserviceproducts.php b/modules/qlostatsserviceproducts/qlostatsserviceproducts.php index 684cf15f9..c36687ef1 100644 --- a/modules/qlostatsserviceproducts/qlostatsserviceproducts.php +++ b/modules/qlostatsserviceproducts/qlostatsserviceproducts.php @@ -182,11 +182,11 @@ class QloStatsServiceProducts extends ModuleGrid $numNightsSql = 'IFNULL(DATEDIFF(hbd.`date_to`, hbd.`date_from`), 0)'; $applicableDaysSql = 'CASE WHEN spod.`id_htl_booking_detail` IS NULL OR spod.`id_htl_booking_detail` = 0 THEN 1 - WHEN od.`product_price_calculation_method` IN ('.(int)Product::PRICE_CALCULATION_METHOD_ONLY_CHECKIN_DAY.', '.(int)Product::PRICE_CALCULATION_METHOD_ONLY_CHECKOUT_DAY.') THEN 1 - WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_ONLY_DURINGSTAY_DAY.' THEN GREATEST('.$numNightsSql.' - 1, 1) + WHEN od.`product_price_calculation_method` IN ('.(int)Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY.', '.(int)Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY.') THEN 1 + WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY.' THEN GREATEST('.$numNightsSql.' - 1, 1) WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY.' THEN 2 - WHEN od.`product_price_calculation_method` IN ('.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURINGSTAY.', '.(int)Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURINGSTAY.') THEN GREATEST('.$numNightsSql.', 1) - WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURINGSTAY.' THEN GREATEST('.$numNightsSql.' + 1, 1) + WHEN od.`product_price_calculation_method` IN ('.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY.', '.(int)Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY.') THEN GREATEST('.$numNightsSql.', 1) + WHEN od.`product_price_calculation_method` = '.(int)Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY.' THEN GREATEST('.$numNightsSql.' + 1, 1) ELSE GREATEST('.$numNightsSql.', 1) END'; diff --git a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl index 7f218e0c8..964cba5d8 100644 --- a/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl +++ b/themes/hotel-reservation-theme/_partials/cart_booking_demands.tpl @@ -153,7 +153,7 @@ {if ($product.show_price && !isset($restricted_country_mode)) || isset($groups)} {if !$priceDisplay}{convertPrice price=$product.price_tax_incl}{else}{convertPrice price=$product.price_tax_exc}{/if} - {if Product::getPriceCalculationApplicableDays( + {if Product::getServicePriceBillableDays( $product.price_calculation_method, $cartRoom.date_from|default:'', $cartRoom.date_to|default:'' diff --git a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl index 8df8fe516..c636e4129 100644 --- a/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl +++ b/themes/hotel-reservation-theme/_partials/service-products-list-row.tpl @@ -55,7 +55,7 @@
    {block name='service_product_price'} {if !$priceDisplay}{convertPrice price=$service_product.price_tax_incl}{else}{convertPrice price=$service_product.price_tax_exc}{/if} - {if Product::getPriceCalculationApplicableDays( + {if Product::getServicePriceBillableDays( $service_product.price_calculation_method, $service_product.date_from|default:$date_from|default:'', $service_product.date_to|default:$date_to|default:'' diff --git a/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js b/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js index 51978e8fe..7c2fa5f05 100644 --- a/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js +++ b/themes/hotel-reservation-theme/js/modules/blockcart/ajax-cart.js @@ -140,22 +140,22 @@ var ajaxCart = { case SELLING_PREFERENCE_HOTEL_STANDALONE: channels.with_hotel = true; break; - case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE: + case SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE: channels.with_room_type = true; channels.with_hotel = true; break; case SELLING_PREFERENCE_STANDALONE: channels.standalone = true; break; - case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE: + case SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE: channels.with_hotel = true; channels.standalone = true; break; - case SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE: + case SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE: channels.with_room_type = true; channels.standalone = true; break; - case SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE: + case SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE: channels.with_room_type = true; channels.with_hotel = true; channels.standalone = true; diff --git a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl index 47121ca96..fecff84c9 100644 --- a/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl +++ b/themes/hotel-reservation-theme/modules/blockcart/blockcart.tpl @@ -406,10 +406,10 @@ {addJsDef SELLING_PREFERENCE_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_ROOM_TYPE} {addJsDef SELLING_PREFERENCE_STANDALONE=Product::SELLING_PREFERENCE_STANDALONE} {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE} - {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE} - {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_STANDALONE} - {addJsDef SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_STANDALONE_AND_WITH_ROOM_TYPE} - {addJsDef SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_HOTEL_STANDALONE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE} + {addJsDef SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE} + {addJsDef SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE} + {addJsDef SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE=Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE} + {addJsDef SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE=Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE} {addJsDefL name=customizationIdMessage}{l s='Customization #' mod='blockcart' js=1}{/addJsDefL} {addJsDefL name=removingLinkText}{l s='remove this product from my cart' mod='blockcart' js=1}{/addJsDefL} From 412f43919b01bbc8ee590f05f3d40ef48ed5c604 Mon Sep 17 00:00:00 2001 From: Amit sharma Date: Fri, 29 May 2026 19:12:37 +0530 Subject: [PATCH 22/93] Fix: Incorrect selling type context during order validation for multi-preference service products --- .../normal_products/helpers/form/form.tpl | 6 +- .../normal_products/informations.tpl | 14 ++-- .../controllers/orders/helpers/view/view.tpl | 4 +- classes/Cart.php | 45 +++++------ classes/PaymentModule.php | 22 +++--- classes/Product.php | 36 ++++----- classes/order/Order.php | 4 +- classes/order/OrderInvoice.php | 4 +- classes/pdf/HTMLTemplateInvoice.php | 8 +- classes/pdf/HTMLTemplateOrderSlip.php | 4 +- .../WebserviceSpecificManagementBookings.php | 2 +- config/defines.inc.php | 2 +- .../admin/AdminNormalProductsController.php | 18 ++--- controllers/admin/AdminOrdersController.php | 32 ++++---- controllers/front/GuestTrackingController.php | 4 +- .../front/OrderConfirmationController.php | 8 +- controllers/front/OrderDetailController.php | 4 +- controllers/front/ParentOrderController.php | 14 ++-- js/admin/normal_products.js | 4 +- modules/blockcart/ajax-cart.js | 54 ++++---------- modules/blockcart/blockcart.tpl | 8 +- .../AdminHotelRoomsBookingController.php | 4 +- .../_partials/cart_booking_demands.tpl | 28 ++++++- ...e-calculation-info.tpl => htl-tooltip.tpl} | 24 ++---- .../_partials/order-extra-services.tpl | 28 ++++++- .../_partials/order-room-detail.tpl | 56 +++++++------- .../_partials/service-products-list-row.tpl | 28 ++++++- themes/hotel-reservation-theme/css/global.css | 67 ++++++++++------- themes/hotel-reservation-theme/js/global.js | 67 ++++++++--------- .../js/modules/blockcart/ajax-cart.js | 54 ++++---------- .../js/order-confirmation.js | 41 +--------- .../js/order-detail.js | 74 +------------------ .../hotel-reservation-theme/js/order-opc.js | 41 +--------- themes/hotel-reservation-theme/js/product.js | 2 +- .../modules/blockcart/blockcart.tpl | 8 +- .../order-confirmation.tpl | 56 +++++++------- .../hotel-reservation-theme/order-detail.tpl | 12 +-- .../shopping-cart-detail.tpl | 22 +++--- 38 files changed, 387 insertions(+), 522 deletions(-) rename themes/hotel-reservation-theme/_partials/{price-calculation-info.tpl => htl-tooltip.tpl} (59%) diff --git a/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl b/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl index 14b55a338..d1b79abc2 100644 --- a/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl +++ b/admin/themes/default/template/controllers/normal_products/helpers/form/form.tpl @@ -77,9 +77,9 @@ var product_type_simple = {Product::PTYPE_SIMPLE|intval}; var SELLING_PREFERENCE_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_WITH_ROOM_TYPE|intval}; - var SELLING_PREFERENCE_HOTEL_STANDALONE = {Product::SELLING_PREFERENCE_HOTEL_STANDALONE|intval}; - var SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE|intval}; - var SELLING_PREFERENCE_STANDALONE = {Product::SELLING_PREFERENCE_STANDALONE|intval}; + var SELLING_PREFERENCE_WITH_HOTEL = {Product::SELLING_PREFERENCE_WITH_HOTEL|intval}; + var SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE = {Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE|intval}; + var SELLING_PREFERENCE_WITH_STANDALONE = {Product::SELLING_PREFERENCE_WITH_STANDALONE|intval}; var price_addition_type_with_room = {Product::PRICE_ADDITION_TYPE_WITH_ROOM|intval}; var price_addition_type_independent = {Product::PRICE_ADDITION_TYPE_INDEPENDENT|intval}; diff --git a/admin/themes/default/template/controllers/normal_products/informations.tpl b/admin/themes/default/template/controllers/normal_products/informations.tpl index 7dcd57e42..3437c1d03 100644 --- a/admin/themes/default/template/controllers/normal_products/informations.tpl +++ b/admin/themes/default/template/controllers/normal_products/informations.tpl @@ -261,7 +261,7 @@
    -
    selling_preference_type != Product::SELLING_PREFERENCE_HOTEL_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE)}style="display:none;"{/if}> +
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE)}style="display:none;"{/if}>
    {include file="controllers/products/multishop/checkbox.tpl" field="category_box" type="category_box"}
    -
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0)}style="display:none;"{/if}> +
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0)}style="display:none;"{/if}>
    {include file="controllers/products/multishop/checkbox.tpl" field="category_box" type="category_box"}
    -
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTE_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0}style="display:none;"{/if}> +
    selling_preference_type != Product::SELLING_PREFERENCE_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE && $product->selling_preference_type != Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE && $product->selling_preference_type != 0}style="display:none;"{/if}>
    {$product['name']|escape:'html':'UTF-8'} - {include file='_partials/price-calculation-info.tpl' pcm=$product.price_calculation_method|default:0} + {assign var='priceCalcMethod' value=$product.price_calculation_method|default:0} + {capture name='htl_pcm_tooltip'} +
    +

    {l s='Applied on:'}

    +
      + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-in day'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='During-stay days'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-out day'}
    • + {/if} +
    +
    + {/capture} + {include file='_partials/htl-tooltip.tpl' tooltip_content=$smarty.capture.htl_pcm_tooltip allow_html=true} {if $product.allow_multiple_quantity}
    diff --git a/themes/hotel-reservation-theme/_partials/price-calculation-info.tpl b/themes/hotel-reservation-theme/_partials/htl-tooltip.tpl similarity index 59% rename from themes/hotel-reservation-theme/_partials/price-calculation-info.tpl rename to themes/hotel-reservation-theme/_partials/htl-tooltip.tpl index af5f05850..997e93fa7 100644 --- a/themes/hotel-reservation-theme/_partials/price-calculation-info.tpl +++ b/themes/hotel-reservation-theme/_partials/htl-tooltip.tpl @@ -20,24 +20,14 @@ * @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 *} -{* Required param: pcm — price_calculation_method integer value *} - + -
    diff --git a/themes/hotel-reservation-theme/_partials/order-room-detail.tpl b/themes/hotel-reservation-theme/_partials/order-room-detail.tpl index aaf47aa0c..35f3ac7c9 100644 --- a/themes/hotel-reservation-theme/_partials/order-room-detail.tpl +++ b/themes/hotel-reservation-theme/_partials/order-room-detail.tpl @@ -125,41 +125,35 @@ {displayWtPriceWithCurrency price=($rm_v.amount_tax_excl + $rm_v.extra_demands_price_te + $rm_v.additional_services_price_te + $rm_v.additional_services_price_auto_add_te) currency=$currency} {/if} {if (isset($rm_v.extra_demands) && $rm_v.extra_demands) || isset($rm_v.additional_services) && $rm_v.additional_services} - - - -
    {l s='Total rooms cost'} {if $use_taxes && $display_tax_label == 1}{if $priceDisplay == 1}{l s='(tax excl.)'}{elseif $priceDisplay == 0}{l s='(tax incl.)'}{/if} {/if}
    {$product['name']|escape:'html':'UTF-8'} - {include file='controllers/orders/modals/_partials/_price-calculation-info.tpl' pcm=$product['price_calculation_method']|default:0} + {capture name='room_type_service_tooltip_content'} + {assign var="priceCalcMethod" value=$product['price_calculation_method']|default:0} +
    +
    +
      + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-in day'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='During-stay days'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-out day'}
    • + {/if} +
    +
    + {/capture} + + {include file='helpers/tooltip.tpl' tooltip_content=$smarty.capture.room_type_service_tooltip_content allow_html=true}
    diff --git a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl index 65d1c2344..f98d22808 100644 --- a/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl +++ b/admin/themes/default/template/controllers/orders/modals/_extra_services_service_products_tab_content.tpl @@ -55,6 +55,35 @@
    {$service['name']|escape:'html':'UTF-8'} + {capture name='room_type_service_tooltip_content'} + {assign var="priceCalcMethod" value=$service['price_calculation_method']|default:0} +
    +
    +
      + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-in day'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='During-stay days'}
    • + {/if} + {if $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY + || $priceCalcMethod == Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY} +
    • {l s='Check-out day'}
    • + {/if} +
    +
    + {/capture} + + {include file='helpers/tooltip.tpl' tooltip_content=$smarty.capture.room_type_service_tooltip_content allow_html=true} +
    {$product['name']|escape:'html':'UTF-8'} - {include file='controllers/orders/modals/_partials/_price-calculation-info.tpl' pcm=$product['price_calculation_method']|default:0} - {if $product['auto_add_to_cart'] && $product['price_addition_type'] == Product::PRICE_ADDITION_TYPE_WITH_ROOM} {l s='Auto added'}
    @@ -296,8 +351,33 @@
    {$service['name']|escape:'html':'UTF-8'} - {include file='controllers/orders/modals/_partials/_price-calculation-info.tpl' pcm=$service.price_calculation_method|default:0} - {if $service['product_auto_add'] && $service['product_price_addition_type'] == Product::PRICE_ADDITION_TYPE_INDEPENDENT} {l s='Convenience fee'} diff --git a/admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl b/admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl deleted file mode 100644 index 00ad669f5..000000000 --- a/admin/themes/default/template/controllers/orders/modals/_partials/_price-calculation-info.tpl +++ /dev/null @@ -1,43 +0,0 @@ -{* -* NOTICE OF LICENSE -* -* This source file is subject to the Open Software License version 3.0 -* that is bundled with this package in the file LICENSE.md -* It is also available through the world-wide-web at this URL: -* https://opensource.org/license/osl-3-0-php -* If you did not receive a copy of the license and are unable to -* obtain it through the world-wide-web, please send an email -* to support@qloapps.com so we can send you a copy immediately. -* -* DISCLAIMER -* -* Do not edit or add to this file if you wish to upgrade this module to a 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 -* @license https://opensource.org/license/osl-3-0-php Open Software License version 3.0 -*} - -{* Required param: pcm — price_calculation_method integer value *} - - - - - diff --git a/admin/themes/default/template/controllers/normal_products/selected_option.tpl b/admin/themes/default/template/helpers/tooltip.tpl similarity index 59% rename from admin/themes/default/template/controllers/normal_products/selected_option.tpl rename to admin/themes/default/template/helpers/tooltip.tpl index 24156a9e1..8d38c8982 100644 --- a/admin/themes/default/template/controllers/normal_products/selected_option.tpl +++ b/admin/themes/default/template/helpers/tooltip.tpl @@ -21,13 +21,20 @@ *} -{capture name='options_list'} -
      - {foreach $selected_options as $opt} -
    • {$opt|escape:'html'}
    • - {/foreach} -
    -{/capture} - - {$selected_options|@count} Selected + + + + diff --git a/controllers/admin/AdminNormalProductsController.php b/controllers/admin/AdminNormalProductsController.php index 8978f4662..a9723fccc 100644 --- a/controllers/admin/AdminNormalProductsController.php +++ b/controllers/admin/AdminNormalProductsController.php @@ -200,13 +200,13 @@ class AdminNormalProductsControllerCore extends AdminController Product::PRICE_ADDITION_TYPE_INDEPENDENT => $this->l('Convenience Fee') ); $priceCalculationMethod = array( - Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY => $this->l('Only check-in day'), - Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY => $this->l('Only check-out day'), - Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY => $this->l('Only during-stay days'), - Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY => $this->l('Check-in and check-out days'), - Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY => $this->l('Check-in | during-stay days'), - Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY => $this->l('Check-out | during-stay days'), - Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY => $this->l('Check-in | check-out | during-stay days'), + Product::PRICE_CALCULATION_METHOD_ON_CHECKIN_DAY => $this->l('On Check-in day'), + Product::PRICE_CALCULATION_METHOD_ON_CHECKOUT_DAY => $this->l('On Check-out day'), + Product::PRICE_CALCULATION_METHOD_ON_DURING_STAY => $this->l('On During-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_DAY_AND_CHECKOUT_DAY => $this->l('Check-in day | Check-out days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_DURING_STAY => $this->l('Check-in day | During-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKOUT_AND_DURING_STAY => $this->l('Check-out day | During-stay days'), + Product::PRICE_CALCULATION_METHOD_CHECKIN_AND_CHECKOUT_AND_DURING_STAY => $this->l('Check-in day | During-stay days | Check-out day'), ); $this->_join .= ' @@ -331,12 +331,12 @@ class AdminNormalProductsControllerCore extends AdminController // Code For Standard product working $sellingPreferenceTypes = array( Product::SELLING_PREFERENCE_WITH_ROOM_TYPE => $this->l('With room type'), - Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE => $this->l('With hotel|room type'), - Product::SELLING_PREFERENCE_WITH_STANDALONE => $this->l('Standalone'), + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE => $this->l('With hotel | With room type'), + Product::SELLING_PREFERENCE_WITH_STANDALONE => $this->l('With Standalone'), Product::SELLING_PREFERENCE_WITH_HOTEL => $this->l('With hotel'), - Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE => $this->l('With hotel|standalone'), - Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE => $this->l('With room type|standalone'), - Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE => $this->l('With hotel|room type|standalone'), + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_STANDALONE => $this->l('With hotel | With standalone'), + Product::SELLING_PREFERENCE_WITH_STANDALONE_AND_WITH_ROOM_TYPE => $this->l('With room type | With standalone'), + Product::SELLING_PREFERENCE_WITH_HOTEL_AND_WITH_ROOM_TYPE_AND_WITH_STANDALONE => $this->l('With hotel | With room type | With standalone'), ); $this->fields_list['selling_preference_type'] = array( 'type' => 'select', @@ -435,27 +435,38 @@ class AdminNormalProductsControllerCore extends AdminController { $list = $this->fields_list['selling_preference_type']['list']; - if (!isset($list[$selling_preference_type])) { + if (empty($list[$selling_preference_type])) { return '--'; } - $this->context->smarty->assign('selected_options', array_map('trim', explode('|', $list[$selling_preference_type]))); + $options = array_map('trim', explode('|', $list[$selling_preference_type])); - return $this->context->smarty->fetch('controllers/normal_products/selected_option.tpl'); + $this->context->smarty->assign(array( + 'tooltip_items' => $options, + )); + + $tooltip = $this->context->smarty->fetch('helpers/tooltip.tpl'); + + return count($options) . ' ' . $this->l('Selected') . ' ' . $tooltip; } - public function getPriceCalculationMethod($txt, $row) + public function getPriceCalculationMethod($price_calculation_method, $row) { $list = $this->fields_list['price_calculation_method']['list']; - $method = (int)$row['price_calculation_method']; - if (!isset($list[$method])) { + if (empty($list[$price_calculation_method])) { return '--'; } - $this->context->smarty->assign('selected_options', array_map('trim', explode('|', $list[$method]))); + $options = array_map('trim', explode('|', $list[$price_calculation_method])); - return $this->context->smarty->fetch('controllers/normal_products/selected_option.tpl'); + $this->context->smarty->assign(array( + 'tooltip_items' => $options, + )); + + $tooltip = $this->context->smarty->fetch('helpers/tooltip.tpl'); + + return count($options) . ' ' . $this->l('Selected') . ' ' . $tooltip; } public function getHotelName($hotelName, $row) @@ -1543,7 +1554,6 @@ class AdminNormalProductsControllerCore extends AdminController _PS_CSS_DIR_.'ps-hotel-reservation.css', )); }else { - $this->addCSS(__PS_BASE_URI__.$this->admin_webpath.'/themes/default/css/admin-tooltip.css'); $this->addJqueryUI('ui.tooltip', 'base', true); } } @@ -2374,7 +2384,10 @@ class AdminNormalProductsControllerCore extends AdminController $this->errors[] = $this->l('Please select at least one buying option.'); } - if (!Tools::getValue('price_calculation_method')) { + $priceCalculationMethod = Tools::getValue('price_calculation_method'); + $id = Tools::getValue('id_'.$this->table); + + if (isset($priceCalculationMethod, $id) && empty($priceCalculationMethod) && !empty($id)) { $this->errors[] = $this->l('Please select at least one price calculation method.'); } diff --git a/controllers/admin/AdminOrdersController.php b/controllers/admin/AdminOrdersController.php index b6c9418a6..c42480eca 100644 --- a/controllers/admin/AdminOrdersController.php +++ b/controllers/admin/AdminOrdersController.php @@ -1379,7 +1379,6 @@ class AdminOrdersControllerCore extends AdminController $this->addJqueryUI('ui.datepicker'); $this->addJS(_PS_JS_DIR_.'vendor/d3.v3.min.js'); - $this->addCSS(__PS_BASE_URI__.$this->admin_webpath.'/themes/default/css/admin-tooltip.css'); $this->addJqueryUI(array('ui.tooltip'), 'base', true); if ($this->display == 'view') { diff --git a/js/admin/orders.js b/js/admin/orders.js index 567c9c164..981e75051 100644 --- a/js/admin/orders.js +++ b/js/admin/orders.js @@ -1466,15 +1466,7 @@ $(document).ready(function() { }, complete: function() { $(".loading_overlay").hide(); - initAdminTooltip({ - selector: '.price-calculation-info', - items: 'span', - tooltipClass: 'admin-info-tooltip', - skipIfInitialized: true, - getContent: function () { - return $(this).siblings('.price-calculation-info-container').html(); - } - }); + initTooltip(); } }); }); @@ -2546,15 +2538,7 @@ const EditRoomBookingModal = { // initialize datepickers EditRoomBookingModal.initDatePickers(); - initAdminTooltip({ - selector: '.price-calculation-info', - items: 'span', - tooltipClass: 'admin-info-tooltip', - skipIfInitialized: true, - getContent: function () { - return $(this).siblings('.price-calculation-info-container').html(); - } - }); + initTooltip(); $('#edit_product .extra-services-container #id_htl_booking').val(jsonProductLineData.id); $('#edit-room-booking-modal').modal('show'); } else { diff --git a/modules/hotelreservationsystem/views/js/admin/wk_refund_request.js b/modules/hotelreservationsystem/views/js/admin/wk_refund_request.js index 7bf27b61f..a74ad4bf1 100644 --- a/modules/hotelreservationsystem/views/js/admin/wk_refund_request.js +++ b/modules/hotelreservationsystem/views/js/admin/wk_refund_request.js @@ -41,45 +41,6 @@ $(document).ready(function() { $('#voucher_expiry').parent().removeClass('has-error'); }); - // initialize tootip for room price - if ($('#rooms_refund_info .price_info').length) { - $('#rooms_refund_info .price_info').each(function (i, element) { - $(this).find('img').tooltip({ - content: $(this).closest('td').find('.price_info_container').html(), - items: "span", - trigger : 'hover', - tooltipClass: "price_info-tooltip", - open: function(event, ui) - { - if (typeof(event.originalEvent) === 'undefined') - { - return false; - } - - var $id = $(ui.tooltip).attr('id'); - - if ($('div.ui-tooltip').not('#' + $id).length) { - return false; - } - }, - close: function(event, ui) - { - ui.tooltip.hover(function() - { - $(this).stop(true).fadeTo(400, 1); - }, - function() - { - $(this).fadeOut('400', function() - { - $(this).remove(); - }); - }); - } - }); - }); - } - $(document).on('change', '#refundTransactionAmount', function() { if ($(this).is(':checked')) { $(".refund_transaction_fields").show(200); diff --git a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl index 3a181b149..84faaa7a9 100644 --- a/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl +++ b/modules/hotelreservationsystem/views/templates/admin/order_refund_requests/helpers/view/view.tpl @@ -171,35 +171,23 @@
    {dateFormat date=$booking['date_from'] full=$is_full_date} {l s='To' mod='hotelreservationsystem'} {dateFormat date=$booking['date_to'] full=$is_full_date} {displayPrice price=($booking['total_price_tax_incl'] + $booking['extra_service_total_price_tax_incl']) currency=$orderCurrency['id']} - -   - - {displayPrice price=($booking['room_paid_amount'] + $booking['extra_service_total_paid_amount']) currency=$orderCurrency['id']} - -   - - diff --git a/themes/hotel-reservation-theme/product.tpl b/themes/hotel-reservation-theme/product.tpl index f9836c246..67f4a03fe 100644 --- a/themes/hotel-reservation-theme/product.tpl +++ b/themes/hotel-reservation-theme/product.tpl @@ -455,7 +455,7 @@ {/if}
    -

    {$demand['name']|escape:'html':'UTF-8'} {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}{convertPrice price = $demand['price']}{if $demand['price_calc_method'] == $WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/night'}{/if}{/if}

    +

    {$demand['name']|escape:'html':'UTF-8'} {if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}{convertPrice price = $demand['price']}{if $demand['price_calc_method'] == $WK_PRICE_CALC_METHOD_EACH_DAY}{l s='/Night'}{/if}{/if}

    {if isset($demand['adv_option']) && $demand['adv_option']}
    ab
    cd
    '; - -$html = '

    HTML TABLE:

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    #RIGHT alignLEFT align4A
    1A1 example link column span. One two tree four five six seven eight nine ten.
    line after br
    small text normal subscript normal superscript normal bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla bla
    1. first
      1. sublist
      2. sublist
    2. second
    small small small small small small small small small small small small small small small small small small small small
    4B
    '.$subtable.'A2 € € € & è è
    A2 € € € & è è
    Red Yellow BG4C
    1A2AA
    2AB
    2AC
    4D
    1B4E
    1C2C3C4F
    '; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// Print some HTML Cells - -$html = 'red green blue
    red green blue'; - -$pdf->setFillColor(255,255,0); - -$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 0, true, 'L', true); -$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 1, true, 'C', true); -$pdf->writeHTMLCell(0, 0, '', '', $html, 'LRTB', 1, 0, true, 'R', true); - -// reset pointer to the last page -$pdf->lastPage(); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print a table - -// add a page -$pdf->AddPage(); - -// create some HTML content -$html = '

    Image alignments on HTML table

    - - - - - - - - -
    '; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// create some HTML content -$html = '

    Embedded Images

    - - - -
    src="@..."
    src="data..."
    '; - -$data = base64_encode(file_get_contents("images/logo_example.png")); -$html = str_replace("@DATA1@", "@" . $data, $html); -$html = str_replace("@DATA2@", "data:image/png;base64," . $data, $html); - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// reset pointer to the last page -$pdf->lastPage(); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print all HTML colors - -// add a page -$pdf->AddPage(); - -$textcolors = '

    HTML Text Colors

    '; -$bgcolors = '

    HTML Background Colors

    '; - -foreach(TCPDF_COLORS::$webcolor as $k => $v) { - $textcolors .= ''.$v.' '; - $bgcolors .= ''.$v.' '; -} - -// output the HTML content -$pdf->writeHTML($textcolors, true, false, true, false, ''); -$pdf->writeHTML($bgcolors, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Test word-wrap - -// create some HTML content -$html = '
    -

    Various tests

    -link to page 2
    -thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword thisisanotherverylongword thisisaverylongword'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// Test fonts nesting -$html1 = 'Default Courier Helvetica Times dejavusans Times Helvetica Courier Default'; -$html2 = 'small text normal small text normal subscript normal superscript normal'; -$html3 = 'The quick brown fox jumps over the lazy dog.'; - -$html = $html1.'
    '.$html2.'
    '.$html3.'
    '.$html3.'
    '.$html2; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// test pre tag - -// add a page -$pdf->AddPage(); - -$html = << -Hello World!
    -Hello -
    -
    -int main() {
    -    printf("HelloWorld");
    -    return 0;
    -}
    -
    -Monospace font, normal font, monospace font, normal font. -
    -
    DIV LEVEL 1
    DIV LEVEL 2
    DIV LEVEL 1
    -
    -SPAN LEVEL 1 SPAN LEVEL 2 SPAN LEVEL 1 -EOF; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// test custom bullet points for list - -// add a page -$pdf->AddPage(); - -$html = <<Test custom bullet image for list items -
      -
    • test custom bullet image
    • -
    • test custom bullet image
    • -
    • test custom bullet image
    • -
    • test custom bullet image
    • -
        -EOF; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_006.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_007.php b/tools/tcpdf/examples/example_007.php deleted file mode 100644 index 8edeb08a9..000000000 --- a/tools/tcpdf/examples/example_007.php +++ /dev/null @@ -1,117 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 007'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 007', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 12); - -// add a page -$pdf->AddPage(); - -// create columns content -$left_column = 'LEFT COLUMN left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column'; - -$right_column = 'RIGHT COLUMN right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column'; - -// writeHTMLCell($w, $h, $x, $y, $html='', $border=0, $ln=0, $fill=0, $reseth=true, $align='', $autopadding=true) - -// get current vertical position -$y = $pdf->getY(); - -// set color for background -$pdf->setFillColor(255, 255, 200); - -// set color for text -$pdf->setTextColor(0, 63, 127); - -// write the first column -$pdf->writeHTMLCell(80, '', '', $y, $left_column, 1, 0, 1, true, 'J', true); - -// set color for background -$pdf->setFillColor(215, 235, 255); - -// set color for text -$pdf->setTextColor(127, 31, 0); - -// write the second column -$pdf->writeHTMLCell(80, '', '', '', $right_column, 1, 1, 1, true, 'J', true); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_007.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_008.php b/tools/tcpdf/examples/example_008.php deleted file mode 100644 index 2a3e716bd..000000000 --- a/tools/tcpdf/examples/example_008.php +++ /dev/null @@ -1,99 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 008'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 008', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set default font subsetting mode -$pdf->setFontSubsetting(true); - -// set font -$pdf->setFont('freeserif', '', 12); - -// add a page -$pdf->AddPage(); - -// get external file content -$utf8text = file_get_contents('data/utf8test.txt', false); - -// set color for text -$pdf->setTextColor(0, 63, 127); - -//Write($h, $txt, $link='', $fill=0, $align='', $ln=false, $stretch=0, $firstline=false, $firstblock=false, $maxh=0) - -// write the text -$pdf->Write(5, $utf8text, '', 0, '', false, 0, false, false, 0); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_008.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_009.php b/tools/tcpdf/examples/example_009.php deleted file mode 100644 index 1daf8ea7d..000000000 --- a/tools/tcpdf/examples/example_009.php +++ /dev/null @@ -1,148 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 009'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 009', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// ------------------------------------------------------------------- - -// add a page -$pdf->AddPage(); - -// set JPEG quality -$pdf->setJPEGQuality(75); - -// Image method signature: -// Image($file, $x='', $y='', $w=0, $h=0, $type='', $link='', $align='', $resize=false, $dpi=300, $palign='', $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false) - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Example of Image from data stream ('PHP rules') -$imgdata = base64_decode('iVBORw0KGgoAAAANSUhEUgAAABwAAAASCAMAAAB/2U7WAAAABlBMVEUAAAD///+l2Z/dAAAASUlEQVR4XqWQUQoAIAxC2/0vXZDrEX4IJTRkb7lobNUStXsB0jIXIAMSsQnWlsV+wULF4Avk9fLq2r8a5HSE35Q3eO2XP1A1wQkZSgETvDtKdQAAAABJRU5ErkJggg=='); - -// The '@' character is used to indicate that follows an image data stream and not an image file name -$pdf->Image('@'.$imgdata); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Image example with resizing -$pdf->Image('images/image_demo.jpg', 15, 140, 75, 113, 'JPG', 'http://www.tcpdf.org', '', true, 150, '', false, false, 1, false, false, false); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// test fitbox with all alignment combinations - -$horizontal_alignments = array('L', 'C', 'R'); -$vertical_alignments = array('T', 'M', 'B'); - -$x = 15; -$y = 35; -$w = 30; -$h = 30; -// test all combinations of alignments -for ($i = 0; $i < 3; ++$i) { - $fitbox = $horizontal_alignments[$i].' '; - $x = 15; - for ($j = 0; $j < 3; ++$j) { - $fitbox[1] = $vertical_alignments[$j]; - $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,128)); - $pdf->Image('images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); - $x += 32; // new column - } - $y += 32; // new row -} - -$x = 115; -$y = 35; -$w = 25; -$h = 50; -for ($i = 0; $i < 3; ++$i) { - $fitbox = $horizontal_alignments[$i].' '; - $x = 115; - for ($j = 0; $j < 3; ++$j) { - $fitbox[1] = $vertical_alignments[$j]; - $pdf->Rect($x, $y, $w, $h, 'F', array(), array(128,255,255)); - $pdf->Image('images/image_demo.jpg', $x, $y, $w, $h, 'JPG', '', '', false, 300, '', false, false, 0, $fitbox, false, false); - $x += 27; // new column - } - $y += 52; // new row -} - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Stretching, position and alignment example - -$pdf->setXY(110, 200); -$pdf->Image('images/image_demo.jpg', '', '', 40, 40, '', '', 'T', false, 300, '', false, false, 1, false, false, false); -$pdf->Image('images/image_demo.jpg', '', '', 40, 40, '', '', '', false, 300, '', false, false, 1, false, false, false); - -// ------------------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_009.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_010.php b/tools/tcpdf/examples/example_010.php deleted file mode 100644 index b99ca22b2..000000000 --- a/tools/tcpdf/examples/example_010.php +++ /dev/null @@ -1,152 +0,0 @@ -AddPage(); - // disable existing columns - $this->resetColumns(); - // print chapter title - $this->ChapterTitle($num, $title); - // set columns - $this->setEqualColumns(3, 57); - // print chapter body - $this->ChapterBody($file, $mode); - } - - /** - * Set chapter title - * @param int $num chapter number - * @param string $title chapter title - * @public - */ - public function ChapterTitle($num, $title) { - $this->setFont('helvetica', '', 14); - $this->setFillColor(200, 220, 255); - $this->Cell(180, 6, 'Chapter '.$num.' : '.$title, 0, 1, '', 1); - $this->Ln(4); - } - - /** - * Print chapter body - * @param string $file name of the file containing the chapter body - * @param boolean $mode if true the chapter body is in HTML, otherwise in simple text. - * @public - */ - public function ChapterBody($file, $mode=false) { - $this->selectColumn(); - // get esternal file content - $content = file_get_contents($file, false); - // set font - $this->setFont('times', '', 9); - $this->setTextColor(50, 50, 50); - // print content - if ($mode) { - // ------ HTML MODE ------ - $this->writeHTML($content, true, false, true, false, 'J'); - } else { - // ------ TEXT MODE ------ - $this->Write(0, $content, '', 0, 'J', true, 0, false, true, 0); - } - $this->Ln(); - } -} // end of extended class - -// --------------------------------------------------------- -// EXAMPLE -// --------------------------------------------------------- -// create new PDF document -$pdf = new MC_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 010'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 010', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// print TEXT -$pdf->PrintChapter(1, 'LOREM IPSUM [TEXT]', 'data/chapter_demo_1.txt', false); - -// print HTML -$pdf->PrintChapter(2, 'LOREM IPSUM [HTML]', 'data/chapter_demo_2.txt', true); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_010.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_011.php b/tools/tcpdf/examples/example_011.php deleted file mode 100644 index 8656eb9c9..000000000 --- a/tools/tcpdf/examples/example_011.php +++ /dev/null @@ -1,141 +0,0 @@ -setFillColor(255, 0, 0); - $this->setTextColor(255); - $this->setDrawColor(128, 0, 0); - $this->setLineWidth(0.3); - $this->setFont('', 'B'); - // Header - $w = array(40, 35, 40, 45); - $num_headers = count($header); - for($i = 0; $i < $num_headers; ++$i) { - $this->Cell($w[$i], 7, $header[$i], 1, 0, 'C', 1); - } - $this->Ln(); - // Color and font restoration - $this->setFillColor(224, 235, 255); - $this->setTextColor(0); - $this->setFont(''); - // Data - $fill = 0; - foreach($data as $row) { - $this->Cell($w[0], 6, $row[0], 'LR', 0, 'L', $fill); - $this->Cell($w[1], 6, $row[1], 'LR', 0, 'L', $fill); - $this->Cell($w[2], 6, number_format($row[2]), 'LR', 0, 'R', $fill); - $this->Cell($w[3], 6, number_format($row[3]), 'LR', 0, 'R', $fill); - $this->Ln(); - $fill=!$fill; - } - $this->Cell(array_sum($w), 0, '', 'T'); - } -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 011'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 011', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -// column titles -$header = array('Country', 'Capital', 'Area (sq km)', 'Pop. (thousands)'); - -// data loading -$data = $pdf->LoadData('data/table_data_demo.txt'); - -// print colored table -$pdf->ColoredTable($header, $data); - -// --------------------------------------------------------- - -// close and output PDF document -$pdf->Output('example_011.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_012.pdf b/tools/tcpdf/examples/example_012.pdf deleted file mode 100644 index eec8ee0cd916cb7a7fadbaa9e7a5c8d2581ca902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 13214 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 diff --git a/tools/tcpdf/examples/example_012.php b/tools/tcpdf/examples/example_012.php deleted file mode 100644 index b8c03f4f1..000000000 --- a/tools/tcpdf/examples/example_012.php +++ /dev/null @@ -1,207 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 012'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// disable header and footer -$pdf->setPrintHeader(false); -$pdf->setPrintFooter(false); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - -$style = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,20,5,10', 'phase' => 10, 'color' => array(255, 0, 0)); -$style2 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); -$style3 = array('width' => 1, 'cap' => 'round', 'join' => 'round', 'dash' => '2,10', 'color' => array(255, 0, 0)); -$style4 = array('L' => 0, - 'T' => array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => '20,10', 'phase' => 10, 'color' => array(100, 100, 255)), - 'R' => array('width' => 0.50, 'cap' => 'round', 'join' => 'miter', 'dash' => 0, 'color' => array(50, 50, 127)), - 'B' => array('width' => 0.75, 'cap' => 'square', 'join' => 'miter', 'dash' => '30,10,5,10')); -$style5 = array('width' => 0.25, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 64, 128)); -$style6 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => '10,10', 'color' => array(0, 128, 0)); -$style7 = array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 128, 0)); - -// Line -$pdf->Text(5, 4, 'Line examples'); -$pdf->Line(5, 10, 80, 30, $style); -$pdf->Line(5, 10, 5, 30, $style2); -$pdf->Line(5, 10, 80, 10, $style3); - -// Rect -$pdf->Text(100, 4, 'Rectangle examples'); -$pdf->Rect(100, 10, 40, 20, 'DF', $style4, array(220, 220, 200)); -$pdf->Rect(145, 10, 40, 20, 'D', array('all' => $style3)); - -// Curve -$pdf->Text(5, 34, 'Curve examples'); -$pdf->Curve(5, 40, 30, 55, 70, 45, 60, 75, '', $style6); -$pdf->Curve(80, 40, 70, 75, 150, 45, 100, 75, 'F', $style6); -$pdf->Curve(140, 40, 150, 55, 180, 45, 200, 75, 'DF', $style6, array(200, 220, 200)); - -// Circle and ellipse -$pdf->Text(5, 79, 'Circle and ellipse examples'); -$pdf->setLineStyle($style5); -$pdf->Circle(25,105,20); -$pdf->Circle(25,105,10, 90, 180, '', $style6); -$pdf->Circle(25,105,10, 270, 360, 'F'); -$pdf->Circle(25,105,10, 270, 360, 'C', $style6); - -$pdf->setLineStyle($style5); -$pdf->Ellipse(100,103,40,20); -$pdf->Ellipse(100,105,20,10, 0, 90, 180, '', $style6); -$pdf->Ellipse(100,105,20,10, 0, 270, 360, 'DF', $style6); - -$pdf->setLineStyle($style5); -$pdf->Ellipse(175,103,30,15,45); -$pdf->Ellipse(175,105,15,7.50, 45, 90, 180, '', $style6); -$pdf->Ellipse(175,105,15,7.50, 45, 270, 360, 'F', $style6, array(220, 200, 200)); - -// Polygon -$pdf->Text(5, 129, 'Polygon examples'); -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->Polygon(array(5,135,45,135,15,165)); -$pdf->Polygon(array(60,135,80,135,80,155,70,165,50,155), 'DF', array($style6, $style7, $style7, 0, $style6), array(220, 200, 200)); -$pdf->Polygon(array(120,135,140,135,150,155,110,155), 'D', array($style6, 0, $style7, $style6)); -$pdf->Polygon(array(160,135,190,155,170,155,200,160,160,165), 'DF', array('all' => $style6), array(220, 220, 220)); - -// Polygonal Line -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 164))); -$pdf->PolyLine(array(80,165,90,160,100,165,110,160,120,165,130,160,140,165), 'D', array(), array()); - -// Regular polygon -$pdf->Text(5, 169, 'Regular polygon examples'); -$pdf->setLineStyle($style5); -$pdf->RegularPolygon(20, 190, 15, 6, 0, 1, 'F'); -$pdf->RegularPolygon(55, 190, 15, 6); -$pdf->RegularPolygon(55, 190, 10, 6, 45, false, 'DF', array($style6, 0, $style7, 0, $style7, $style7)); -$pdf->RegularPolygon(90, 190, 15, 3, 0, true, 'DF', array('all' => $style5), array(200, 220, 200), 'F', array(255, 200, 200)); -$pdf->RegularPolygon(125, 190, 15, 4, 30, true, '', array('all' => $style5), array(), '', $style6); -$pdf->RegularPolygon(160, 190, 15, 10); - -// Star polygon -$pdf->Text(5, 209, 'Star polygon examples'); -$pdf->setLineStyle($style5); -$pdf->StarPolygon(20, 230, 15, 20, 3, 0, 1, 'F'); -$pdf->StarPolygon(55, 230, 15, 12, 5); -$pdf->StarPolygon(55, 230, 7, 12, 5, 45, false, 'DF', array('all' => $style7), array(220, 220, 200), 'F', array(255, 200, 200)); -$pdf->StarPolygon(90, 230, 15, 20, 6, 0, true, 'DF', array('all' => $style5), array(220, 220, 200), 'F', array(255, 200, 200)); -$pdf->StarPolygon(125, 230, 15, 5, 2, 30, true, '', array('all' => $style5), array(), '', $style6); -$pdf->StarPolygon(160, 230, 15, 10, 3); -$pdf->StarPolygon(160, 230, 7, 50, 26); - -// Rounded rectangle -$pdf->Text(5, 249, 'Rounded rectangle examples'); -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->RoundedRect(5, 255, 40, 30, 3.50, '1111', 'DF'); -$pdf->RoundedRect(50, 255, 40, 30, 6.50, '1000'); -$pdf->RoundedRect(95, 255, 40, 30, 10.0, '1111', '', $style6); -$pdf->RoundedRect(140, 255, 40, 30, 8.0, '0101', 'DF', $style6, array(200, 200, 200)); - -// Arrows -$pdf->Text(185, 249, 'Arrows'); -$pdf->setLineStyle($style5); -$pdf->setFillColor(255, 0, 0); -$pdf->Arrow(200, 280, 185, 266, 0, 5, 15); -$pdf->Arrow(200, 280, 190, 263, 1, 5, 15); -$pdf->Arrow(200, 280, 195, 261, 2, 5, 15); -$pdf->Arrow(200, 280, 200, 260, 3, 5, 15); - -// - . - . - . - . - . - . - . - . - . - . - . - . - . - . - - -// ellipse - -// add a page -$pdf->AddPage(); - -$pdf->Cell(0, 0, 'Arc of Ellipse'); - -// center of ellipse -$xc=100; -$yc=100; - -// X Y axis -$pdf->setDrawColor(200, 200, 200); -$pdf->Line($xc-50, $yc, $xc+50, $yc); -$pdf->Line($xc, $yc-50, $xc, $yc+50); - -// ellipse axis -$pdf->setDrawColor(200, 220, 255); -$pdf->Line($xc-50, $yc-50, $xc+50, $yc+50); -$pdf->Line($xc-50, $yc+50, $xc+50, $yc-50); - -// ellipse -$pdf->setDrawColor(200, 255, 200); -$pdf->Ellipse($xc, $yc, 30, 15, 45, 0, 360, 'D', array(), array(), 2); - -// ellipse arc -$pdf->setDrawColor(255, 0, 0); -$pdf->Ellipse($xc, $yc, 30, 15, 45, 45, 90, 'D', array(), array(), 2); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_012.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_013.php b/tools/tcpdf/examples/example_013.php deleted file mode 100644 index 0430e8f59..000000000 --- a/tools/tcpdf/examples/example_013.php +++ /dev/null @@ -1,231 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 013'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 013', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Graphic Transformations', '', 0, 'C', 1, 0, false, false, 0); - -// set font -$pdf->setFont('helvetica', '', 10); - -// --- Scaling --------------------------------------------- -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(50, 70, 40, 10, 'D'); -$pdf->Text(50, 66, 'Scale'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// Scale by 150% centered by (50,80) which is the lower left corner of the rectangle -$pdf->ScaleXY(150, 50, 80); -$pdf->Rect(50, 70, 40, 10, 'D'); -$pdf->Text(50, 66, 'Scale'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Translation ----------------------------------------- -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(125, 70, 40, 10, 'D'); -$pdf->Text(125, 66, 'Translate'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// Translate 7 to the right, 5 to the bottom -$pdf->Translate(7, 5); -$pdf->Rect(125, 70, 40, 10, 'D'); -$pdf->Text(125, 66, 'Translate'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Rotation -------------------------------------------- -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(70, 100, 40, 10, 'D'); -$pdf->Text(70, 96, 'Rotate'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// Rotate 20 degrees counter-clockwise centered by (70,110) which is the lower left corner of the rectangle -$pdf->Rotate(20, 70, 110); -$pdf->Rect(70, 100, 40, 10, 'D'); -$pdf->Text(70, 96, 'Rotate'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Skewing --------------------------------------------- -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(125, 100, 40, 10, 'D'); -$pdf->Text(125, 96, 'Skew'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// skew 30 degrees along the x-axis centered by (125,110) which is the lower left corner of the rectangle -$pdf->SkewX(30, 125, 110); -$pdf->Rect(125, 100, 40, 10, 'D'); -$pdf->Text(125, 96, 'Skew'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Mirroring horizontally ------------------------------ -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(70, 130, 40, 10, 'D'); -$pdf->Text(70, 126, 'MirrorH'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// mirror horizontally with axis of reflection at x-position 70 (left side of the rectangle) -$pdf->MirrorH(70); -$pdf->Rect(70, 130, 40, 10, 'D'); -$pdf->Text(70, 126, 'MirrorH'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Mirroring vertically -------------------------------- -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(125, 130, 40, 10, 'D'); -$pdf->Text(125, 126, 'MirrorV'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// mirror vertically with axis of reflection at y-position 140 (bottom side of the rectangle) -$pdf->MirrorV(140); -$pdf->Rect(125, 130, 40, 10, 'D'); -$pdf->Text(125, 126, 'MirrorV'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Point reflection ------------------------------------ -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(70, 160, 40, 10, 'D'); -$pdf->Text(70, 156, 'MirrorP'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -// Start Transformation -$pdf->StartTransform(); -// point reflection at the lower left point of rectangle -$pdf->MirrorP(70,170); -$pdf->Rect(70, 160, 40, 10, 'D'); -$pdf->Text(70, 156, 'MirrorP'); -// Stop Transformation -$pdf->StopTransform(); - -// --- Mirroring against a straigth line described by a point (120, 120) and an angle -20° -$angle=-20; -$px=120; -$py=170; - -// just for visualisation: the straight line to mirror against - -$pdf->setDrawColor(200); -$pdf->Line($px-1,$py-1,$px+1,$py+1); -$pdf->Line($px-1,$py+1,$px+1,$py-1); -$pdf->StartTransform(); -$pdf->Rotate($angle, $px, $py); -$pdf->Line($px-5, $py, $px+60, $py); -$pdf->StopTransform(); - -$pdf->setDrawColor(200); -$pdf->setTextColor(200); -$pdf->Rect(125, 160, 40, 10, 'D'); -$pdf->Text(125, 156, 'MirrorL'); -$pdf->setDrawColor(0); -$pdf->setTextColor(0); -//Start Transformation -$pdf->StartTransform(); -//mirror against the straight line -$pdf->MirrorL($angle, $px, $py); -$pdf->Rect(125, 160, 40, 10, 'D'); -$pdf->Text(125, 156, 'MirrorL'); -//Stop Transformation -$pdf->StopTransform(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_013.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_014.php b/tools/tcpdf/examples/example_014.php deleted file mode 100644 index eac3f6aaf..000000000 --- a/tools/tcpdf/examples/example_014.php +++ /dev/null @@ -1,197 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 014'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 014', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// IMPORTANT: disable font subsetting to allow users editing the document -$pdf->setFontSubsetting(false); - -// set font. 'helvetica' MUST be used to avoid a PHP notice from PHP 7.4+ -$pdf->setFont('helvetica', '', 10, '', false); - -// add a page -$pdf->AddPage(); - -/* -It is possible to create text fields, combo boxes, check boxes and buttons. -Fields are created at the current position and are given a name. -This name allows to manipulate them via JavaScript in order to perform some validation for instance. -*/ - -// set default form properties -$pdf->setFormDefaultProp(array('lineWidth'=>1, 'borderStyle'=>'solid', 'fillColor'=>array(255, 255, 200), 'strokeColor'=>array(255, 128, 128))); - -$pdf->setFont('helvetica', 'BI', 18); -$pdf->Cell(0, 5, 'Example of Form', 0, 1, 'C'); -$pdf->Ln(10); - -$pdf->setFont('helvetica', '', 12); - -// First name -$pdf->Cell(35, 5, 'First name:'); -$pdf->TextField('firstname', 50, 5); -$pdf->Ln(6); - -// Last name -$pdf->Cell(35, 5, 'Last name:'); -$pdf->TextField('lastname', 50, 5); -$pdf->Ln(6); - -// Gender -$pdf->Cell(35, 5, 'Gender:'); -$pdf->ComboBox('gender', 30, 5, array(array('', '-'), array('M', 'Male'), array('F', 'Female'))); -$pdf->Ln(6); - -// Drink -$pdf->Cell(35, 5, 'Drink:'); -//$pdf->RadioButton('drink', 5, array('readonly' => 'true'), array(), 'Water'); -$pdf->RadioButton('drink', 5, array(), array(), 'Water'); -$pdf->Cell(35, 5, 'Water'); -$pdf->Ln(6); -$pdf->Cell(35, 5, ''); -$pdf->RadioButton('drink', 5, array(), array(), 'Beer', true); -$pdf->Cell(35, 5, 'Beer'); -$pdf->Ln(6); -$pdf->Cell(35, 5, ''); -$pdf->RadioButton('drink', 5, array(), array(), 'Wine'); -$pdf->Cell(35, 5, 'Wine'); -$pdf->Ln(6); -$pdf->Cell(35, 5, ''); -$pdf->RadioButton('drink', 5, array(), array(), 'Milk'); -$pdf->Cell(35, 5, 'Milk'); -$pdf->Ln(10); - -// Newsletter -$pdf->Cell(35, 5, 'Newsletter:'); -$pdf->CheckBox('newsletter', 5, true, array(), array(), 'OK'); - -$pdf->Ln(10); -// Address -$pdf->Cell(35, 5, 'Address:'); -$pdf->TextField('address', 60, 18, array('multiline'=>true, 'lineWidth'=>0, 'borderStyle'=>'none'), array('v'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.', 'dv'=>'Lorem ipsum dolor sit amet, consectetur adipiscing elit.')); -$pdf->Ln(19); - -// Listbox -$pdf->Cell(35, 5, 'List:'); -$pdf->ListBox('listbox', 60, 15, array('', 'item1', 'item2', 'item3', 'item4', 'item5', 'item6', 'item7'), array('multipleSelection'=>'true')); -$pdf->Ln(20); - -// E-mail -$pdf->Cell(35, 5, 'E-mail:'); -$pdf->TextField('email', 50, 5); -$pdf->Ln(6); - -// Date of the day -$pdf->Cell(35, 5, 'Date:'); -$pdf->TextField('date', 30, 5, array(), array('v'=>date('Y-m-d'), 'dv'=>date('Y-m-d'))); -$pdf->Ln(10); - -$pdf->setX(50); - -// Button to validate and print -$pdf->Button('print', 30, 10, 'Print', 'Print()', array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); - -// Reset Button -$pdf->Button('reset', 30, 10, 'Reset', array('S'=>'ResetForm'), array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); - -// Submit Button -$pdf->Button('submit', 30, 10, 'Submit', array('S'=>'SubmitForm', 'F'=>'http://localhost/printvars.php', 'Flags'=>array('ExportFormat')), array('lineWidth'=>2, 'borderStyle'=>'beveled', 'fillColor'=>array(128, 196, 255), 'strokeColor'=>array(64, 64, 64))); - -// Form validation functions -$js = <<IncludeJS($js); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_014.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_015.php b/tools/tcpdf/examples/example_015.php deleted file mode 100644 index 416883bde..000000000 --- a/tools/tcpdf/examples/example_015.php +++ /dev/null @@ -1,164 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 015'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 015', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// Bookmark($txt, $level=0, $y=-1, $page='', $style='', $color=array(0,0,0)) - -// set font -$pdf->setFont('times', 'B', 20); - -// add a page -$pdf->AddPage(); - -// set a bookmark for the current position -$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); - -// print a line using Cell() -$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); - -$pdf->setFont('times', 'I', 14); -$pdf->Write(0, 'You can set PDF Bookmarks using the Bookmark() method. -You can set PDF Named Destinations using the setDestination() method.'); - -$pdf->setFont('times', 'B', 20); - -// add other pages and bookmarks - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(0,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(0,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,0,0)); -$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(0,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); - -$pdf->AddPage(); -// add a named destination so you can open this document at this page using the link: "example_015.pdf#chapter2" -$pdf->setDestination('chapter2', 0, ''); -// add a bookmark that points to a named destination -$pdf->Bookmark('Chapter 2', 0, 0, '', 'BI', array(128,0,0), -1, '#chapter2'); -$pdf->Cell(0, 10, 'Chapter 2', 0, 1, 'L'); -$pdf->setFont('times', 'I', 14); -$pdf->Write(0, 'Once saved, you can open this document at this page using the link: "example_015.pdf#chapter2".'); - -$pdf->AddPage(); -$pdf->setDestination('chapter3', 0, ''); -$pdf->setFont('times', 'B', 20); -$pdf->Bookmark('Chapter 3', 0, 0, '', 'B', array(0,64,128)); -$pdf->Cell(0, 10, 'Chapter 3', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->setDestination('chapter4', 0, ''); -$pdf->setFont('times', 'B', 20); -$pdf->Bookmark('Chapter 4', 0, 0, '', 'B', array(0,64,128)); -$pdf->Cell(0, 10, 'Chapter 4', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Chapter 5', 0, 0, '', 'B', array(0,128,0)); -$pdf->Cell(0, 10, 'Chapter 5', 0, 1, 'L'); -$txt = 'Example of File Attachment. -Double click on the icon to open the attached file.'; -$pdf->setFont('helvetica', '', 10); -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// attach an external file TXT file -$pdf->Annotation(20, 50, 5, 5, 'TXT file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'data/utf8test.txt')); - -// attach an external file -$pdf->Annotation(50, 50, 5, 5, 'PDF file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'example_012.pdf')); - -// add a bookmark that points to an embedded file -// NOTE: prefix the file name with the * character for generic file and with % character for PDF file -$pdf->Bookmark('TXT file', 0, 0, '', 'B', array(128,0,255), -1, '*utf8test.txt'); - -// add a bookmark that points to an embedded file -// NOTE: prefix the file name with the * character for generic file and with % character for PDF file -$pdf->Bookmark('PDF file', 0, 0, '', 'B', array(128,0,255), -1, '%example_012.pdf'); - -// add a bookmark that points to an external URL -$pdf->Bookmark('External URL', 0, 0, '', 'B', array(0,0,255), -1, 'http://www.tcpdf.org'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_015.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_016.php b/tools/tcpdf/examples/example_016.php deleted file mode 100644 index f54a7463c..000000000 --- a/tools/tcpdf/examples/example_016.php +++ /dev/null @@ -1,136 +0,0 @@ -setProtection(array('print', 'copy'), '', null, 0, null); - -// Example with public-key -// To open the document you need to install the private key (tcpdf.p12) on the Acrobat Reader. The password is: 1234 -//$pdf->setProtection($permissions=array('print', 'copy'), $user_pass='', $owner_pass=null, $mode=1, $pubkeys=array(array('c' => 'file://../config/cert/tcpdf.crt', 'p' => array('print')))); - -// ********************************************************* - - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 016'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 016', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array('helvetica', '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array('helvetica', '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 16); - -// add a page -$pdf->AddPage(); - -// set some text to print -$txt = <<Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_016.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_017.php b/tools/tcpdf/examples/example_017.php deleted file mode 100644 index 94f571b4d..000000000 --- a/tools/tcpdf/examples/example_017.php +++ /dev/null @@ -1,120 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 017'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 017', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of independent Multicell() columns', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -$pdf->setFont('times', '', 12); - -// create columns content -// create columns content -$left_column = '[LEFT COLUMN] left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column left column'."\n"; - -$right_column = '[RIGHT COLUMN] right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column right column'."\n"; - -// MultiCell($w, $h, $txt, $border=0, $align='J', $fill=0, $ln=1, $x='', $y='', $reseth=true, $stretch=0, $ishtml=false, $autopadding=true, $maxh=0) - -// set color for background -$pdf->setFillColor(255, 255, 200); - -// set color for text -$pdf->setTextColor(0, 63, 127); - -// write the first column -$pdf->MultiCell(80, 0, $left_column, 1, 'J', 1, 0, '', '', true, 0, false, true, 0); - -// set color for background -$pdf->setFillColor(215, 235, 255); - -// set color for text -$pdf->setTextColor(127, 31, 0); - -// write the second column -$pdf->MultiCell(80, 0, $right_column, 1, 'J', 1, 1, '', '', true, 0, false, true, 0); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_017.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_018.php b/tools/tcpdf/examples/example_018.php deleted file mode 100644 index bacc94aff..000000000 --- a/tools/tcpdf/examples/example_018.php +++ /dev/null @@ -1,130 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 018'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 018', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language dependent data: -$lg = Array(); -$lg['a_meta_charset'] = 'UTF-8'; -$lg['a_meta_dir'] = 'rtl'; -$lg['a_meta_language'] = 'fa'; -$lg['w_page'] = 'page'; - -// set some language-dependent strings (optional) -$pdf->setLanguageArray($lg); - -// --------------------------------------------------------- - -// set font -$pdf->setFont('dejavusans', '', 12); - -// add a page -$pdf->AddPage(); - -// Persian and English content -$htmlpersian = 'Persian example:
        سلام بالاخره مشکل PDF فارسی به طور کامل حل شد. اینم یک نمونش.
        مشکل حرف \"ژ\" در بعضی کلمات مانند کلمه ویژه نیز بر طرف شد.
        نگارش حروف لام و الف پشت سر هم نیز تصحیح شد.
        با تشکر از "Asuni Nicola" و محمد علی گل کار برای پشتیبانی زبان فارسی.'; -$pdf->WriteHTML($htmlpersian, true, 0, true, 0); - -// set LTR direction for english translation -$pdf->setRTL(false); - -$pdf->setFontSize(10); - -// print newline -$pdf->Ln(); - -// Persian and English content -$htmlpersiantranslation = 'Hi, At last Problem of Persian PDF Solved completely. This is a example for it.
        Problem of "jeh" letter in some word like "ویژه" (=special) fix too.
        The joining of laa and alf letter fix now.
        Special thanks to "Nicola Asuni" and "Mohamad Ali Golkar" for Persian support.
        '; -$pdf->WriteHTML($htmlpersiantranslation, true, 0, true, 0); - -// Restore RTL direction -$pdf->setRTL(true); - -// set font -$pdf->setFont('aefurat', '', 18); - -// print newline -$pdf->Ln(); - -// Arabic and English content -$pdf->Cell(0, 12, 'بِسْمِ اللهِ الرَّحْمنِ الرَّحِيمِ',0,1,'C'); -$htmlcontent = 'تمَّ بِحمد الله حلّ مشكلة الكتابة باللغة العربية في ملفات الـPDF مع دعم الكتابة من اليمين إلى اليسار والحركَات .
        تم الحل بواسطة صالح المطرفي و Asuni Nicola . '; -$pdf->WriteHTML($htmlcontent, true, 0, true, 0); - -// set LTR direction for english translation -$pdf->setRTL(false); - -// print newline -$pdf->Ln(); - -$pdf->setFont('aealarabiya', '', 18); - -// Arabic and English content -$htmlcontent2 = 'This is Arabic "العربية" Example With TCPDF.'; -$pdf->WriteHTML($htmlcontent2, true, 0, true, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_018.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_019.php b/tools/tcpdf/examples/example_019.php deleted file mode 100644 index f53a34eae..000000000 --- a/tools/tcpdf/examples/example_019.php +++ /dev/null @@ -1,100 +0,0 @@ -setDocInfoUnicode(true); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni [€]'); -$pdf->setTitle('TCPDF Example 019'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 019', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language dependent data: -$lg = Array(); -$lg['a_meta_charset'] = 'ISO-8859-1'; -$lg['a_meta_dir'] = 'ltr'; -$lg['a_meta_language'] = 'en'; -$lg['w_page'] = 'page'; - -// set some language-dependent strings (optional) -$pdf->setLanguageArray($lg); - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -// set color for background -$pdf->setFillColor(200, 255, 200); - -$txt = 'An alternative configuration file is used on this example. -Check the definition of the K_TCPDF_EXTERNAL_CONFIG constant on the source code.'; - -// print some text -$pdf->MultiCell(0, 0, $txt."\n", 1, 'J', 1, 1, '', '', true, 0, false, true, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_019.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_020.php b/tools/tcpdf/examples/example_020.php deleted file mode 100644 index 32c16eacb..000000000 --- a/tools/tcpdf/examples/example_020.php +++ /dev/null @@ -1,149 +0,0 @@ -getPage(); - $y_start = $this->GetY(); - - // write the left cell - $this->MultiCell(40, 0, $left, 1, 'R', 1, 2, '', '', true, 0); - - $page_end_1 = $this->getPage(); - $y_end_1 = $this->GetY(); - - $this->setPage($page_start); - - // write the right cell - $this->MultiCell(0, 0, $right, 1, 'J', 0, 1, $this->GetX() ,$y_start, true, 0); - - $page_end_2 = $this->getPage(); - $y_end_2 = $this->GetY(); - - // set the new row position by case - if (max($page_end_1,$page_end_2) == $page_start) { - $ynew = max($y_end_1, $y_end_2); - } elseif ($page_end_1 == $page_end_2) { - $ynew = max($y_end_1, $y_end_2); - } elseif ($page_end_1 > $page_end_2) { - $ynew = $y_end_1; - } else { - $ynew = $y_end_2; - } - - $this->setPage(max($page_end_1,$page_end_2)); - $this->setXY($this->GetX(),$ynew); - } - -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 020'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 020', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 20); -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of text layout using Multicell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -$pdf->setFont('times', '', 9); - -//$pdf->setCellPadding(0); -//$pdf->setLineWidth(2); - -// set color for background -$pdf->setFillColor(255, 255, 200); - -$text = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. - -Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.'; - -// print some rows just as example -for ($i = 0; $i < 10; ++$i) { - $pdf->MultiRow('Row '.($i+1), $text."\n"); -} - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_020.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_021.php b/tools/tcpdf/examples/example_021.php deleted file mode 100644 index 98ae49b1f..000000000 --- a/tools/tcpdf/examples/example_021.php +++ /dev/null @@ -1,93 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 021'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 021', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 9); - -// add a page -$pdf->AddPage(); - -// create some HTML content -$html = '

        Example of HTML text flow

        Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam, eaque ipsa quae ab illo inventore veritatis et quasi architecto beatae vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur magni dolores eos qui ratione voluptatem sequi nesciunt. Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, consectetur, adipisci velit, sed quia non numquam eius modi tempora incidunt ut labore et dolore magnam aliquam quaerat voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi consequatur? Quis autem vel eum iure reprehenderit qui in ea voluptate velit esse quam nihil molestiae consequatur, vel illum qui dolorem eum fugiat quo voluptas nulla pariatur?

        A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B    ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B ->    A + B = C    ->    C - B = A    ->    C - A = B

        BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined BoldItalicUnderlined'; - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_021.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_022.php b/tools/tcpdf/examples/example_022.php deleted file mode 100644 index 416108a96..000000000 --- a/tools/tcpdf/examples/example_022.php +++ /dev/null @@ -1,148 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 022'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 022', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// check also the following methods: -// setDrawColorArray() -// setFillColorArray() -// setTextColorArray() - -// set font -$pdf->setFont('helvetica', 'B', 18); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of CMYK, RGB and Grayscale colours', '', 0, 'L', true, 0, false, false, 0); - -// define style for border -$border_style = array('all' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'phase' => 0)); - -// --- CMYK ------------------------------------------------ - -$pdf->setDrawColor(50, 0, 0, 0); -$pdf->setFillColor(100, 0, 0, 0); -$pdf->setTextColor(100, 0, 0, 0); -$pdf->Rect(30, 60, 30, 30, 'DF', $border_style); -$pdf->Text(30, 92, 'Cyan'); - -$pdf->setDrawColor(0, 50, 0, 0); -$pdf->setFillColor(0, 100, 0, 0); -$pdf->setTextColor(0, 100, 0, 0); -$pdf->Rect(70, 60, 30, 30, 'DF', $border_style); -$pdf->Text(70, 92, 'Magenta'); - -$pdf->setDrawColor(0, 0, 50, 0); -$pdf->setFillColor(0, 0, 100, 0); -$pdf->setTextColor(0, 0, 100, 0); -$pdf->Rect(110, 60, 30, 30, 'DF', $border_style); -$pdf->Text(110, 92, 'Yellow'); - -$pdf->setDrawColor(0, 0, 0, 50); -$pdf->setFillColor(0, 0, 0, 100); -$pdf->setTextColor(0, 0, 0, 100); -$pdf->Rect(150, 60, 30, 30, 'DF', $border_style); -$pdf->Text(150, 92, 'Black'); - -// --- RGB ------------------------------------------------- - -$pdf->setDrawColor(255, 127, 127); -$pdf->setFillColor(255, 0, 0); -$pdf->setTextColor(255, 0, 0); -$pdf->Rect(30, 110, 30, 30, 'DF', $border_style); -$pdf->Text(30, 142, 'Red'); - -$pdf->setDrawColor(127, 255, 127); -$pdf->setFillColor(0, 255, 0); -$pdf->setTextColor(0, 255, 0); -$pdf->Rect(70, 110, 30, 30, 'DF', $border_style); -$pdf->Text(70, 142, 'Green'); - -$pdf->setDrawColor(127, 127, 255); -$pdf->setFillColor(0, 0, 255); -$pdf->setTextColor(0, 0, 255); -$pdf->Rect(110, 110, 30, 30, 'DF', $border_style); -$pdf->Text(110, 142, 'Blue'); - -// --- GRAY ------------------------------------------------ - -$pdf->setDrawColor(191); -$pdf->setFillColor(127); -$pdf->setTextColor(127); -$pdf->Rect(30, 160, 30, 30, 'DF', $border_style); -$pdf->Text(30, 192, 'Gray'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_022.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_023.php b/tools/tcpdf/examples/example_023.php deleted file mode 100644 index 5a509efd9..000000000 --- a/tools/tcpdf/examples/example_023.php +++ /dev/null @@ -1,115 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 023'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 023', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', 'BI', 14); - -// Start First Page Group -$pdf->startPageGroup(); - -// add a page -$pdf->AddPage(); - -// set some text to print -$txt = <<Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// add second page -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the second page of group 1', 0, 1, 'L'); - -// Start Second Page Group -$pdf->startPageGroup(); - -// add some pages -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the first page of group 2', 0, 1, 'L'); -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the second page of group 2', 0, 1, 'L'); -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the third page of group 2', 0, 1, 'L'); -$pdf->AddPage(); -$pdf->Cell(0, 10, 'This is the fourth page of group 2', 0, 1, 'L'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_023.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_024.php b/tools/tcpdf/examples/example_024.php deleted file mode 100644 index f786b1123..000000000 --- a/tools/tcpdf/examples/example_024.php +++ /dev/null @@ -1,142 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 024'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 024', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 18); - -// add a page -$pdf->AddPage(); - -/* - * setVisibility() allows to restrict the rendering of some - * elements to screen or printout. This can be useful, for - * instance, to put a background image or color that will - * show on screen but won't print. - */ - -$txt = 'You can limit the visibility of PDF objects to screen or printer by using the setVisibility() method. -Check the print preview of this document to display the alternative text.'; - -$pdf->Write(0, $txt, '', 0, '', true, 0, false, false, 0); - -// change font size -$pdf->setFontSize(40); - -// change text color -$pdf->setTextColor(0,63,127); - -// set visibility only for screen -$pdf->setVisibility('screen'); - -// write something only for screen -$pdf->Write(0, '[This line is for display]', '', 0, 'C', true, 0, false, false, 0); - -// set visibility only for print -$pdf->setVisibility('print'); - -// change text color -$pdf->setTextColor(127,0,0); - -// write something only for print -$pdf->Write(0, '[This line is for printout]', '', 0, 'C', true, 0, false, false, 0); - -// restore visibility -$pdf->setVisibility('all'); - -// --------------------------------------------------------- - -// LAYERS - -// start a new layer -$pdf->startLayer('layer1', true, true); - -// change font size -$pdf->setFontSize(18); - -// change text color -$pdf->setTextColor(0,127,0); - -$txt = 'Using the startLayer() method you can group PDF objects into layers. -This text is on "layer1".'; - -// write something -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// close the current layer -$pdf->endLayer(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_024.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_025.php b/tools/tcpdf/examples/example_025.php deleted file mode 100644 index 9e441be9e..000000000 --- a/tools/tcpdf/examples/example_025.php +++ /dev/null @@ -1,120 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 025'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 025', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -$txt = 'You can set the transparency of PDF objects using the setAlpha() method.'; -$pdf->Write(0, $txt, '', 0, '', true, 0, false, false, 0); - -/* - * setAlpha() gives transparency support. You can set the - * alpha channel from 0 (fully transparent) to 1 (fully - * opaque). It applies to all elements (text, drawings, - * images). - */ - -$pdf->setLineWidth(2); - -// draw opaque red square -$pdf->setFillColor(255, 0, 0); -$pdf->setDrawColor(127, 0, 0); -$pdf->Rect(30, 40, 60, 60, 'DF'); - -// set alpha to semi-transparency -$pdf->setAlpha(0.5); - -// draw green square -$pdf->setFillColor(0, 255, 0); -$pdf->setDrawColor(0, 127, 0); -$pdf->Rect(50, 60, 60, 60, 'DF'); - -// draw blue square -$pdf->setFillColor(0, 0, 255); -$pdf->setDrawColor(0, 0, 127); -$pdf->Rect(70, 80, 60, 60, 'DF'); - -// draw jpeg image -$pdf->Image('images/image_demo.jpg', 90, 100, 60, 60, '', 'http://www.tcpdf.org', '', true, 72); - -// restore full opacity -$pdf->setAlpha(1); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_025.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_026.php b/tools/tcpdf/examples/example_026.php deleted file mode 100644 index 8cde97130..000000000 --- a/tools/tcpdf/examples/example_026.php +++ /dev/null @@ -1,146 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 026'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 026', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 22); - -// add a page -$pdf->AddPage(); - -// set color for text stroke -$pdf->setDrawColor(255,0,0); - - -$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=false); -$pdf->Write(0, 'Fill text', '', 0, '', true, 0, false, false, 0); - -$pdf->setTextRenderingMode($stroke=0.2, $fill=false, $clip=false); -$pdf->Write(0, 'Stroke text', '', 0, '', true, 0, false, false, 0); - -$pdf->setTextRenderingMode($stroke=0.2, $fill=true, $clip=false); -$pdf->Write(0, 'Fill, then stroke text', '', 0, '', true, 0, false, false, 0); - -$pdf->setTextRenderingMode($stroke=0, $fill=false, $clip=false); -$pdf->Write(0, 'Neither fill nor stroke text (invisible)', '', 0, '', true, 0, false, false, 0); - - -// * * * CLIPPING MODES * * * * * * * * * * * * * * * * * * - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=true); -$pdf->Write(0, 'Fill text and add to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 65, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0.3, $fill=false, $clip=true); -$pdf->Write(0, 'Stroke text and add to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 75, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0.3, $fill=true, $clip=true); -$pdf->Write(0, 'Fill, then stroke text and add to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 85, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -$pdf->StartTransform(); -$pdf->setTextRenderingMode($stroke=0, $fill=false, $clip=true); -$pdf->Write(0, 'Add text to path for clipping', '', 0, '', true, 0, false, false, 0); -$pdf->Image('images/image_demo.jpg', 15, 95, 170, 10, '', '', '', true, 72); -$pdf->StopTransform(); - -// reset text rendering mode -$pdf->setTextRenderingMode($stroke=0, $fill=true, $clip=false); - -// * * * HTML MODE * * * * * * * * * * * * * * * * * * * * * - -// The following attributes were added to HTML: -// stroke : stroke width -// strokecolor : stroke color -// fill : true (default) to fill the font, false otherwise - - -// create some HTML content with text rendering modes -$html = 'HTML Fill text
        '; -$html .= 'HTML Stroke text
        '; -$html .= 'HTML Fill, then stroke text
        '; -$html .= 'HTML Neither fill nor stroke text (invisible)
        '; - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_026.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_027.php b/tools/tcpdf/examples/example_027.php deleted file mode 100644 index d7399844a..000000000 --- a/tools/tcpdf/examples/example_027.php +++ /dev/null @@ -1,420 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 027'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 027', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set a barcode on the page footer -$pdf->setBarcode(date('Y-m-d H:i:s')); - -// set font -$pdf->setFont('helvetica', '', 11); - -// add a page -$pdf->AddPage(); - -// print a message -$txt = "You can also export 1D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcodes directory.\n"; -$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false); -$pdf->setY(30); - -// ----------------------------------------------------------------------------- - -$pdf->setFont('helvetica', '', 10); - -// define barcode style -$style = array( - 'position' => '', - 'align' => 'C', - 'stretch' => false, - 'fitwidth' => true, - 'cellfitalign' => '', - 'border' => true, - 'hpadding' => 'auto', - 'vpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255), - 'text' => true, - 'font' => 'helvetica', - 'fontsize' => 8, - 'stretchtext' => 4 -); - -// PRINT VARIOUS 1D BARCODES - -// CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9. -$pdf->Cell(0, 0, 'CODE 39 - ANSI MH10.8M-1983 - USD-3 - 3 of 9', 0, 1); -$pdf->write1DBarcode('CODE 39', 'C39', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 39 + CHECKSUM -$pdf->Cell(0, 0, 'CODE 39 + CHECKSUM', 0, 1); -$pdf->write1DBarcode('CODE 39 +', 'C39+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 39 EXTENDED -$pdf->Cell(0, 0, 'CODE 39 EXTENDED', 0, 1); -$pdf->write1DBarcode('CODE 39 E', 'C39E', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 39 EXTENDED + CHECKSUM -$pdf->Cell(0, 0, 'CODE 39 EXTENDED + CHECKSUM', 0, 1); -$pdf->write1DBarcode('CODE 39 E+', 'C39E+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 93 - USS-93 -$pdf->Cell(0, 0, 'CODE 93 - USS-93', 0, 1); -$pdf->write1DBarcode('TEST93', 'C93', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Standard 2 of 5 -$pdf->Cell(0, 0, 'Standard 2 of 5', 0, 1); -$pdf->write1DBarcode('1234567', 'S25', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Standard 2 of 5 + CHECKSUM -$pdf->Cell(0, 0, 'Standard 2 of 5 + CHECKSUM', 0, 1); -$pdf->write1DBarcode('1234567', 'S25+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Interleaved 2 of 5 -$pdf->Cell(0, 0, 'Interleaved 2 of 5', 0, 1); -$pdf->write1DBarcode('1234567', 'I25', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// Interleaved 2 of 5 + CHECKSUM -$pdf->Cell(0, 0, 'Interleaved 2 of 5 + CHECKSUM', 0, 1); -$pdf->write1DBarcode('1234567', 'I25+', '', '', '', 18, 0.4, $style, 'N'); - - -// add a page ---------- -$pdf->AddPage(); - -// CODE 128 AUTO -$pdf->Cell(0, 0, 'CODE 128 AUTO', 0, 1); -$pdf->write1DBarcode('CODE 128 AUTO', 'C128', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 128 A -$pdf->Cell(0, 0, 'CODE 128 A', 0, 1); -$pdf->write1DBarcode('CODE 128 A', 'C128A', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 128 B -$pdf->Cell(0, 0, 'CODE 128 B', 0, 1); -$pdf->write1DBarcode('CODE 128 B', 'C128B', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 128 C -$pdf->Cell(0, 0, 'CODE 128 C', 0, 1); -$pdf->write1DBarcode('0123456789', 'C128C', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// EAN 8 -$pdf->Cell(0, 0, 'EAN 8', 0, 1); -$pdf->write1DBarcode('1234567', 'EAN8', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// EAN 13 -$pdf->Cell(0, 0, 'EAN 13', 0, 1); -$pdf->write1DBarcode('1234567890128', 'EAN13', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// UPC-A -$pdf->Cell(0, 0, 'UPC-A', 0, 1); -$pdf->write1DBarcode('12345678901', 'UPCA', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// UPC-E -$pdf->Cell(0, 0, 'UPC-E', 0, 1); -$pdf->write1DBarcode('04210000526', 'UPCE', '', '', '', 18, 0.4, $style, 'N'); - -// add a page ---------- -$pdf->AddPage(); - -// 5-Digits UPC-Based Extension -$pdf->Cell(0, 0, '5-Digits UPC-Based Extension', 0, 1); -$pdf->write1DBarcode('51234', 'EAN5', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// 2-Digits UPC-Based Extension -$pdf->Cell(0, 0, '2-Digits UPC-Based Extension', 0, 1); -$pdf->write1DBarcode('34', 'EAN2', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// MSI -$pdf->Cell(0, 0, 'MSI', 0, 1); -$pdf->write1DBarcode('80523', 'MSI', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// MSI + CHECKSUM (module 11) -$pdf->Cell(0, 0, 'MSI + CHECKSUM (module 11)', 0, 1); -$pdf->write1DBarcode('80523', 'MSI+', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODABAR -$pdf->Cell(0, 0, 'CODABAR', 0, 1); -$pdf->write1DBarcode('123456789', 'CODABAR', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// CODE 11 -$pdf->Cell(0, 0, 'CODE 11', 0, 1); -$pdf->write1DBarcode('123-456-789', 'CODE11', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// PHARMACODE -$pdf->Cell(0, 0, 'PHARMACODE', 0, 1); -$pdf->write1DBarcode('789', 'PHARMA', '', '', '', 18, 0.4, $style, 'N'); - -$pdf->Ln(); - -// PHARMACODE TWO-TRACKS -$pdf->Cell(0, 0, 'PHARMACODE TWO-TRACKS', 0, 1); -$pdf->write1DBarcode('105', 'PHARMA2T', '', '', '', 18, 2, $style, 'N'); - -// add a page ---------- -$pdf->AddPage(); - -// IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200 -$pdf->Cell(0, 0, 'IMB - Intelligent Mail Barcode - Onecode - USPS-B-3200', 0, 1); -$pdf->write1DBarcode('01234567094987654321-01234567891', 'IMB', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// POSTNET -$pdf->Cell(0, 0, 'POSTNET', 0, 1); -$pdf->write1DBarcode('98000', 'POSTNET', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// PLANET -$pdf->Cell(0, 0, 'PLANET', 0, 1); -$pdf->write1DBarcode('98000', 'PLANET', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code) -$pdf->Cell(0, 0, 'RMS4CC (Royal Mail 4-state Customer Code) - CBC (Customer Bar Code)', 0, 1); -$pdf->write1DBarcode('SN34RD1A', 'RMS4CC', '', '', '', 15, 0.6, $style, 'N'); - -$pdf->Ln(); - -// KIX (Klant index - Customer index) -$pdf->Cell(0, 0, 'KIX (Klant index - Customer index)', 0, 1); -$pdf->write1DBarcode('SN34RDX1A', 'KIX', '', '', '', 15, 0.6, $style, 'N'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// TEST BARCODE ALIGNMENTS - -// add a page -$pdf->AddPage(); - -// set a background color -$style['bgcolor'] = array(255,255,240); -$style['fgcolor'] = array(127,0,0); - -// Left position -$style['position'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center position -$style['position'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right position -$style['position'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -$style['fgcolor'] = array(0,127,0); -$style['position'] = ''; -$style['stretch'] = false; // disable stretch -$style['fitwidth'] = false; // disable fitwidth - -// Left alignment -$style['align'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center alignment -$style['align'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right alignment -$style['align'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -$style['fgcolor'] = array(0,64,127); -$style['position'] = ''; -$style['stretch'] = false; // disable stretch -$style['fitwidth'] = true; // disable fitwidth - -// Left alignment -$style['cellfitalign'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center alignment -$style['cellfitalign'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right alignment -$style['cellfitalign'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', 105, '', 90, 15, 0.4, $style, 'N'); - -$pdf->Ln(2); -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -$style['fgcolor'] = array(127,0,127); - -// Left alignment -$style['position'] = 'L'; -$pdf->write1DBarcode('LEFT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Center alignment -$style['position'] = 'C'; -$pdf->write1DBarcode('CENTER', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -$pdf->Ln(2); - -// Right alignment -$style['position'] = 'R'; -$pdf->write1DBarcode('RIGHT', 'C128A', '', '', '', 15, 0.4, $style, 'N'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// TEST BARCODE STYLE - -// define barcode style -$style = array( - 'position' => '', - 'align' => '', - 'stretch' => true, - 'fitwidth' => false, - 'cellfitalign' => '', - 'border' => true, - 'hpadding' => 'auto', - 'vpadding' => 'auto', - 'fgcolor' => array(0,0,128), - 'bgcolor' => array(255,255,128), - 'text' => true, - 'label' => 'CUSTOM LABEL', - 'font' => 'helvetica', - 'fontsize' => 8, - 'stretchtext' => 4 -); - -// CODE 39 EXTENDED + CHECKSUM -$pdf->Cell(0, 0, 'CODE 39 EXTENDED + CHECKSUM', 0, 1); -$pdf->setLineStyle(array('width' => 1, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->write1DBarcode('CODE 39 E+', 'C39E+', '', '', 120, 25, 0.4, $style, 'N'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_027.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_028.php b/tools/tcpdf/examples/example_028.php deleted file mode 100644 index 312de99ff..000000000 --- a/tools/tcpdf/examples/example_028.php +++ /dev/null @@ -1,140 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 028'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// remove default header/footer -$pdf->setPrintHeader(false); -$pdf->setPrintFooter(false); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(10, PDF_MARGIN_TOP, 10); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -$pdf->setDisplayMode('fullpage', 'SinglePage', 'UseNone'); - -// set font -$pdf->setFont('times', 'B', 20); - -$pdf->AddPage('P', 'A4'); -$pdf->Cell(0, 0, 'A4 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A4'); -$pdf->Cell(0, 0, 'A4 LANDSCAPE', 1, 1, 'C'); - -$pdf->AddPage('P', 'A5'); -$pdf->Cell(0, 0, 'A5 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A5'); -$pdf->Cell(0, 0, 'A5 LANDSCAPE', 1, 1, 'C'); - -$pdf->AddPage('P', 'A6'); -$pdf->Cell(0, 0, 'A6 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A6'); -$pdf->Cell(0, 0, 'A6 LANDSCAPE', 1, 1, 'C'); - -$pdf->AddPage('P', 'A7'); -$pdf->Cell(0, 0, 'A7 PORTRAIT', 1, 1, 'C'); - -$pdf->AddPage('L', 'A7'); -$pdf->Cell(0, 0, 'A7 LANDSCAPE', 1, 1, 'C'); - - -// --- test backward editing --- - - -$pdf->setPage(1, true); -$pdf->setY(50); -$pdf->Cell(0, 0, 'A4 test', 1, 1, 'C'); - -$pdf->setPage(2, true); -$pdf->setY(50); -$pdf->Cell(0, 0, 'A4 test', 1, 1, 'C'); - -$pdf->setPage(3, true); -$pdf->setY(50); -$pdf->Cell(0, 0, 'A5 test', 1, 1, 'C'); - -$pdf->setPage(4, true); -$pdf->setY(50); -$pdf->Cell(0, 0, 'A5 test', 1, 1, 'C'); - -$pdf->setPage(5, true); -$pdf->setY(50); -$pdf->Cell(0, 0, 'A6 test', 1, 1, 'C'); - -$pdf->setPage(6, true); -$pdf->setY(50); -$pdf->Cell(0, 0, 'A6 test', 1, 1, 'C'); - -$pdf->setPage(7, true); -$pdf->setY(40); -$pdf->Cell(0, 0, 'A7 test', 1, 1, 'C'); - -$pdf->setPage(8, true); -$pdf->setY(40); -$pdf->Cell(0, 0, 'A7 test', 1, 1, 'C'); - -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_028.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_029.php b/tools/tcpdf/examples/example_029.php deleted file mode 100644 index fd7b6d87e..000000000 --- a/tools/tcpdf/examples/example_029.php +++ /dev/null @@ -1,126 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 029'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 029', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set array for viewer preferences -$preferences = array( - 'HideToolbar' => true, - 'HideMenubar' => true, - 'HideWindowUI' => true, - 'FitWindow' => true, - 'CenterWindow' => true, - 'DisplayDocTitle' => true, - 'NonFullScreenPageMode' => 'UseNone', // UseNone, UseOutlines, UseThumbs, UseOC - 'ViewArea' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'ViewClip' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'PrintArea' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'PrintClip' => 'CropBox', // CropBox, BleedBox, TrimBox, ArtBox - 'PrintScaling' => 'AppDefault', // None, AppDefault - 'Duplex' => 'DuplexFlipLongEdge', // Simplex, DuplexFlipShortEdge, DuplexFlipLongEdge - 'PickTrayByPDFSize' => true, - 'PrintPageRange' => array(1,1,2,3), - 'NumCopies' => 2 -); - -// Check the example n. 60 for advanced page settings - -// set pdf viewer preferences -$pdf->setViewerPreferences($preferences); - -// set font -$pdf->setFont('times', '', 14); - -// add a page -$pdf->AddPage(); - -// print a line -$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 1', 1, 1, 'C'); - -$pdf->Ln(5); - -$pdf->Write(0, 'You can use the setViewerPreferences() method to change viewer preferences.', '', 0, 'L', true, 0, false, false, 0); - -// add a page -$pdf->AddPage(); -// print a line -$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 2', 0, 0, 'C'); - -// add a page -$pdf->AddPage(); -// print a line -$pdf->Cell(0, 12, 'DISPLAY PREFERENCES - PAGE 3', 0, 0, 'C'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_029.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_030.php b/tools/tcpdf/examples/example_030.php deleted file mode 100644 index 4b57b7ac3..000000000 --- a/tools/tcpdf/examples/example_030.php +++ /dev/null @@ -1,190 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 030'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 030', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// --- first page ------------------------------------------ - -// add a page -$pdf->AddPage(); - -$pdf->Cell(0, 0, 'TCPDF Gradients', 0, 1, 'C', 0, '', 0, false, 'T', 'M'); - -// set colors for gradients (r,g,b) or (grey 0-255) -$red = array(255, 0, 0); -$blue = array(0, 0, 200); -$yellow = array(255, 255, 0); -$green = array(0, 255, 0); -$white = array(255); -$black = array(0); - -// set the coordinates x1,y1,x2,y2 of the gradient (see linear_gradient_coords.jpg) -$coords = array(0, 0, 1, 0); - -// paint a linear gradient -$pdf->LinearGradient(20, 45, 80, 80, $red, $blue, $coords); - -// write label -$pdf->Text(20, 130, 'LinearGradient()'); - -// set the coordinates fx,fy,cx,cy,r of the gradient (see radial_gradient_coords.jpg) -$coords = array(0.5, 0.5, 1, 1, 1.2); - -// paint a radial gradient -$pdf->RadialGradient(110, 45, 80, 80, $white, $black, $coords); - -// write label -$pdf->Text(110, 130, 'RadialGradient()'); - -// paint a coons patch mesh with default coordinates -$pdf->CoonsPatchMesh(20, 155, 80, 80, $yellow, $blue, $green, $red); - -// write label -$pdf->Text(20, 240, 'CoonsPatchMesh()'); - -// set the coordinates for the cubic Bézier points x1,y1 ... x12, y12 of the patch (see coons_patch_mesh_coords.jpg) -$coords = array( - 0.00,0.00, 0.33,0.20, //lower left - 0.67,0.00, 1.00,0.00, 0.80,0.33, //lower right - 0.80,0.67, 1.00,1.00, 0.67,0.80, //upper right - 0.33,1.00, 0.00,1.00, 0.20,0.67, //upper left - 0.00,0.33); //lower left -$coords_min = 0; //minimum value of the coordinates -$coords_max = 1; //maximum value of the coordinates - -// paint a coons patch gradient with the above coordinates -$pdf->CoonsPatchMesh(110, 155, 80, 80, $yellow, $blue, $green, $red, $coords, $coords_min, $coords_max); - -// write label -$pdf->Text(110, 240, 'CoonsPatchMesh()'); - -// --- second page ----------------------------------------- -$pdf->AddPage(); - -// first patch: f = 0 -$patch_array[0]['f'] = 0; -$patch_array[0]['points'] = array( - 0.00,0.00, 0.33,0.00, - 0.67,0.00, 1.00,0.00, 1.00,0.33, - 0.8,0.67, 1.00,1.00, 0.67,0.8, - 0.33,1.80, 0.00,1.00, 0.00,0.67, - 0.00,0.33); -$patch_array[0]['colors'][0] = array('r' => 255, 'g' => 255, 'b' => 0); -$patch_array[0]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 255); -$patch_array[0]['colors'][2] = array('r' => 0, 'g' => 255,'b' => 0); -$patch_array[0]['colors'][3] = array('r' => 255, 'g' => 0,'b' => 0); - -// second patch - above the other: f = 2 -$patch_array[1]['f'] = 2; -$patch_array[1]['points'] = array( - 0.00,1.33, - 0.00,1.67, 0.00,2.00, 0.33,2.00, - 0.67,2.00, 1.00,2.00, 1.00,1.67, - 1.5,1.33); -$patch_array[1]['colors'][0]=array('r' => 0, 'g' => 0, 'b' => 0); -$patch_array[1]['colors'][1]=array('r' => 255, 'g' => 0, 'b' => 255); - -// third patch - right of the above: f = 3 -$patch_array[2]['f'] = 3; -$patch_array[2]['points'] = array( - 1.33,0.80, - 1.67,1.50, 2.00,1.00, 2.00,1.33, - 2.00,1.67, 2.00,2.00, 1.67,2.00, - 1.33,2.00); -$patch_array[2]['colors'][0] = array('r' => 0, 'g' => 255, 'b' => 255); -$patch_array[2]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 0); - -// fourth patch - below the above, which means left(?) of the above: f = 1 -$patch_array[3]['f'] = 1; -$patch_array[3]['points'] = array( - 2.00,0.67, - 2.00,0.33, 2.00,0.00, 1.67,0.00, - 1.33,0.00, 1.00,0.00, 1.00,0.33, - 0.8,0.67); -$patch_array[3]['colors'][0] = array('r' => 0, 'g' => 0, 'b' => 0); -$patch_array[3]['colors'][1] = array('r' => 0, 'g' => 0, 'b' => 255); - -$coords_min = 0; -$coords_max = 2; - -$pdf->CoonsPatchMesh(10, 45, 190, 200, '', '', '', '', $patch_array, $coords_min, $coords_max); - -// write label -$pdf->Text(10, 250, 'CoonsPatchMesh()'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_030.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_031.php b/tools/tcpdf/examples/example_031.php deleted file mode 100644 index 354ffcd76..000000000 --- a/tools/tcpdf/examples/example_031.php +++ /dev/null @@ -1,105 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 031'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 031', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of PieSector() method.'); - -$xc = 105; -$yc = 100; -$r = 50; - -$pdf->setFillColor(0, 0, 255); -$pdf->PieSector($xc, $yc, $r, 20, 120, 'FD', false, 0, 2); - -$pdf->setFillColor(0, 255, 0); -$pdf->PieSector($xc, $yc, $r, 120, 250, 'FD', false, 0, 2); - -$pdf->setFillColor(255, 0, 0); -$pdf->PieSector($xc, $yc, $r, 250, 20, 'FD', false, 0, 2); - -// write labels -$pdf->setTextColor(255,255,255); -$pdf->Text(105, 65, 'BLUE'); -$pdf->Text(60, 95, 'GREEN'); -$pdf->Text(120, 115, 'RED'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_031.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_032.php b/tools/tcpdf/examples/example_032.php deleted file mode 100644 index dbba89a03..000000000 --- a/tools/tcpdf/examples/example_032.php +++ /dev/null @@ -1,93 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 032'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 032', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 12); - -$pdf->AddPage(); - -$html = << -NOTE: Please use SVG format for a better vector support. -EOD; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); - -$pdf->ImageEps('images/tcpdf_box.ai', 10, 40, 150, '', 'http://www.tcpdf.org', true, '', '', 0, false); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_032.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_033.php b/tools/tcpdf/examples/example_033.php deleted file mode 100644 index 3696e5205..000000000 --- a/tools/tcpdf/examples/example_033.php +++ /dev/null @@ -1,107 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 033'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 033', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// add a page -$pdf->AddPage(); - -// set default font subsetting mode -$pdf->setFontSubsetting(false); - -$pdf->setFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Font Types', '', 0, 'C', 1, 0, false, false, 0); - -$pdf->Ln(10); - -$pdf->setFont('times', '', 10); - -$pdf->MultiCell(80, 0, "[Core font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); - -$pdf->Ln(2); - -$pdf->setFont('dejavusans', '', 10); - -$pdf->MultiCell(80, 0, "[True Type Unicode font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); - -$pdf->Ln(2); - -$pdf->setFont('cid0jp', '', 9); - -$pdf->MultiCell(80, 0, "[CID-0 font] : Cras eros leo, porttitor porta, accumsan fermentum, ornare ac, est. Praesent dui lorem, imperdiet at, cursus sed, facilisis aliquam, nibh. Nulla accumsan nonummy diam. Donec tempus. Etiam posuere. Proin lectus. Donec purus. Duis in sem pretium urna feugiat vehicula. Ut suscipit velit eget massa. Nam nonummy, enim commodo euismod placerat, tortor elit tempus lectus, quis suscipit metus lorem blandit turpis.\n", 1, 'J', 0, 1, '', '', true, 0); - - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_033.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_034.php b/tools/tcpdf/examples/example_034.php deleted file mode 100644 index 29b156398..000000000 --- a/tools/tcpdf/examples/example_034.php +++ /dev/null @@ -1,98 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 034'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 034', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Image Clipping using geometric functions', '', 0, 'C', 1, 0, false, false, 0); - -//Start Graphic Transformation -$pdf->StartTransform(); - -// set clipping mask -$pdf->StarPolygon(105, 100, 30, 10, 3, 0, 1, 'CNZ'); - -// draw jpeg image to be clipped -$pdf->Image('images/image_demo.jpg', 75, 70, 60, 60, '', 'http://www.tcpdf.org', '', true, 72); - -//Stop Graphic Transformation -$pdf->StopTransform(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_034.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_035.php b/tools/tcpdf/examples/example_035.php deleted file mode 100644 index 78cf99337..000000000 --- a/tools/tcpdf/examples/example_035.php +++ /dev/null @@ -1,113 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 035'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 035', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', 'BI', 16); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of SetLineStyle() method', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(); - -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 4, 'color' => array(255, 0, 0))); -$pdf->setFillColor(255,255,128); -$pdf->setTextColor(0,0,128); - -$text="DUMMY"; - -$pdf->Cell(0, 0, $text, 1, 1, 'L', 1, 0); - -$pdf->Ln(); - -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 255))); -$pdf->setFillColor(255,255,0); -$pdf->setTextColor(0,0,255); -$pdf->MultiCell(60, 4, $text, 1, 'C', 1, 0); - -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 255, 0))); -$pdf->setFillColor(0,0,255); -$pdf->setTextColor(255,255,0); -$pdf->MultiCell(60, 4, $text, 'TB', 'C', 1, 0); - -$pdf->setLineStyle(array('width' => 0.5, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 255))); -$pdf->setFillColor(0,255,0); -$pdf->setTextColor(255,0,255); -$pdf->MultiCell(60, 4, $text, 1, 'C', 1, 1); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_035.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_036.php b/tools/tcpdf/examples/example_036.php deleted file mode 100644 index 195d13993..000000000 --- a/tools/tcpdf/examples/example_036.php +++ /dev/null @@ -1,91 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 036'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 036', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 16); - -// add a page -$pdf->AddPage(); - -$txt = 'Example of Text Annotation. -Move your mouse over the yellow box or double click on it to display the annotation text.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// text annotation -$pdf->Annotation(83, 27, 10, 10, "Text annotation example\naccented letters test: àèéìòù", array('Subtype'=>'Text', 'Name' => 'Comment', 'T' => 'title example', 'Subj' => 'example', 'C' => array(255, 255, 0))); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_036.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_037.php b/tools/tcpdf/examples/example_037.php deleted file mode 100644 index af705b424..000000000 --- a/tools/tcpdf/examples/example_037.php +++ /dev/null @@ -1,149 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 037'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 037', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 11); - -// add a page -$pdf->AddPage(); - -$html = '

        Example of Spot Colors

        Spot colors are single ink colors, rather than colors produced by four (CMYK), six (CMYKOG) or more inks in the printing process (process colors). They can be obtained by special vendors, but often the printers have found their own way of mixing inks to match defined colors.

        As long as no open standard for spot colours exists, TCPDF users will have to buy a colour book by one of the colour manufacturers and insert the values and names of spot colours directly into the $spotcolor array in include/tcpdf_colors.php file, or define them using the AddSpotColor() method.

        Common industry standard spot colors are:
        ANPA-COLOR, DIC, FOCOLTONE, GCMI, HKS, PANTONE, TOYO, TRUMATCH.'; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, 'J', true); - - -$pdf->setFont('helvetica', '', 10); - -// Define some new spot colors -// $c, $m, $y and $k (2nd, 3rd, 4th and 5th parameter) are the CMYK color components. -// AddSpotColor($name, $c, $m, $y, $k) - -$pdf->AddSpotColor('My TCPDF Dark Green', 100, 50, 80, 45); -$pdf->AddSpotColor('My TCPDF Light Yellow', 0, 0, 55, 0); -$pdf->AddSpotColor('My TCPDF Black', 0, 0, 0, 100); -$pdf->AddSpotColor('My TCPDF Red', 30, 100, 90, 10); -$pdf->AddSpotColor('My TCPDF Green', 100, 30, 100, 0); -$pdf->AddSpotColor('My TCPDF Blue', 100, 60, 10, 5); -$pdf->AddSpotColor('My TCPDF Yellow', 0, 20, 100, 0); - -// Select the spot color -// $tint (the second parameter) is the intensity of the color (0-100). -// setTextSpotColor($name, $tint=100) -// setDrawSpotColor($name, $tint=100) -// setFillSpotColor($name, $tint=100) - -$pdf->setTextSpotColor('My TCPDF Black', 100); -$pdf->setDrawSpotColor('My TCPDF Black', 100); - -$starty = 100; - -// print some spot colors - -$pdf->setFillSpotColor('My TCPDF Dark Green', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Dark Green'); - -$starty += 24; -$pdf->setFillSpotColor('My TCPDF Light Yellow', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Light Yellow'); - - -// --- default values defined on spotcolors.php --- - -$starty += 24; -$pdf->setFillSpotColor('My TCPDF Red', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Red'); - -$starty += 24; -$pdf->setFillSpotColor('My TCPDF Green', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Green'); - -$starty += 24; -$pdf->setFillSpotColor('My TCPDF Blue', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Blue'); - -$starty += 24; -$pdf->setFillSpotColor('My TCPDF Yellow', 100); -$pdf->Rect(30, $starty, 40, 20, 'DF'); -$pdf->Text(73, $starty + 8, 'My TCPDF Yellow'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_037.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_038.php b/tools/tcpdf/examples/example_038.php deleted file mode 100644 index 568610aca..000000000 --- a/tools/tcpdf/examples/example_038.php +++ /dev/null @@ -1,94 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 038'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 038', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 20); - -// add a page -$pdf->AddPage(); - -$txt = 'Example of CID-0 CJK unembedded font. -To display extended text you must have CJK fonts installed for your PDF reader:'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// set font -$pdf->setFont('cid0jp', '', 40); - -$txt = 'こんにちは世界'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_038.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_039.php b/tools/tcpdf/examples/example_039.php deleted file mode 100644 index 0eabd0840..000000000 --- a/tools/tcpdf/examples/example_039.php +++ /dev/null @@ -1,106 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 039'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 039', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// add a page -$pdf->AddPage(); - -// set font -$pdf->setFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Example of HTML Justification', '', 0, 'L', true, 0, false, false, 0); - -// create some HTML content -$html = 'a abc abcdefghijkl (abcdef) abcdefg abcdefghi a ((abc)) abcd test alt attribute abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc \(abcd\) abcdef abcdefg abcdefghi a abc \\\(abcd\\\) abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg start a abc before yellow color after a abc abcd abcdef abcdefg abcdefghi a abc abcd end abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi a abc abcd abcdef abcdefg abcdefghi
        abcd abcdef abcdefg abcdefghi
        abcd abcde abcdef
        '; - -// set core font -$pdf->setFont('helvetica', '', 10); - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, true); - -$pdf->Ln(); - -// set UTF-8 Unicode font -$pdf->setFont('dejavusans', '', 10); - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, true); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_039.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_040.php b/tools/tcpdf/examples/example_040.php deleted file mode 100644 index 970370807..000000000 --- a/tools/tcpdf/examples/example_040.php +++ /dev/null @@ -1,118 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 040'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 040', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set display mode -$pdf->setDisplayMode($zoom='fullpage', $layout='TwoColumnRight', $mode='UseNone'); - -// set pdf viewer preferences -$pdf->setViewerPreferences(array('Duplex' => 'DuplexFlipLongEdge')); - -// set booklet mode -$pdf->setBooklet(true, 10, 30); - -// set core font -$pdf->setFont('helvetica', '', 18); - -// add a page (left page) -$pdf->AddPage(); - -$pdf->Write(0, 'Example of booklet mode', '', 0, 'L', true, 0, false, false, 0); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 1', 1, 1, 'C'); - - -// add a page (right page) -$pdf->AddPage(); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 2', 1, 1, 'C'); - - -// add a page (left page) -$pdf->AddPage(); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 3', 1, 1, 'C'); - -// add a page (right page) -$pdf->AddPage(); - -// print a line using Cell() -$pdf->Cell(0, 0, 'PAGE 4', 1, 1, 'C'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_040.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_041.php b/tools/tcpdf/examples/example_041.php deleted file mode 100644 index 68ba81c76..000000000 --- a/tools/tcpdf/examples/example_041.php +++ /dev/null @@ -1,93 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 041'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 041', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 16); - -// add a page -$pdf->AddPage(); - - -$txt = 'Example of File Attachment. -Double click on the icon to open the attached file.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// attach an external file -$pdf->Annotation(85, 27, 5, 5, 'text file', array('Subtype'=>'FileAttachment', 'Name' => 'PushPin', 'FS' => 'data/utf8test.txt')); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_041.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_042.php b/tools/tcpdf/examples/example_042.php deleted file mode 100644 index 039e3e1b8..000000000 --- a/tools/tcpdf/examples/example_042.php +++ /dev/null @@ -1,104 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 042'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 042', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set JPEG quality -//$pdf->setJPEGQuality(75); - -$pdf->setFont('helvetica', '', 18); - -// add a page -$pdf->AddPage(); - -// create background text -$background_text = str_repeat('TCPDF test PNG Alpha Channel ', 50); -$pdf->MultiCell(0, 5, $background_text, 0, 'J', 0, 2, '', '', true, 0, false); - -// --- Method (A) ------------------------------------------ -// the Image() method recognizes the alpha channel embedded on the image: - -$pdf->Image('images/image_with_alpha.png', 50, 50, 100, '', '', 'http://www.tcpdf.org', '', false, 300); - -// --- Method (B) ------------------------------------------ -// provide image + separate 8-bit mask - -// first embed mask image (w, h, x and y will be ignored, the image will be scaled to the target image's size) -$mask = $pdf->Image('images/alpha.png', 50, 140, 100, '', '', '', '', false, 300, '', true); - -// embed image, masked with previously embedded mask -$pdf->Image('images/img.png', 50, 140, 100, '', '', 'http://www.tcpdf.org', '', false, 300, '', false, $mask); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_042.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_043.php b/tools/tcpdf/examples/example_043.php deleted file mode 100644 index d73e46a5f..000000000 --- a/tools/tcpdf/examples/example_043.php +++ /dev/null @@ -1,87 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 043'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 043', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 16); - -// add a page -$pdf->AddPage(); - -// Multicell test -$pdf->MultiCell(0, 0, 'DISK CACHING TEST: check the parameters of the class constructor.', 1, 'L', 0, 0, '', '', true); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_043.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_044.php b/tools/tcpdf/examples/example_044.php deleted file mode 100644 index 668ccc5c8..000000000 --- a/tools/tcpdf/examples/example_044.php +++ /dev/null @@ -1,130 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 044'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 044', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 40); - -// print a line using Cell() -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: A', 0, 1, 'L'); - -// add some vertical space -$pdf->Ln(10); - -// print some text -$pdf->setFont('times', 'I', 16); -$txt = 'TCPDF allows you to Copy, Move and Delete pages.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -$pdf->setFont('helvetica', 'B', 40); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: B', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: D', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: E', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: E-2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: F', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: C', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: G', 0, 1, 'L'); - -// Move page 7 to page 3 -$pdf->movePage(7, 3); - -// Delete page 6 -$pdf->deletePage(6); - -$pdf->AddPage(); -$pdf->Cell(0, 10, 'PAGE: H', 0, 1, 'L'); - -// copy the second page -$pdf->copyPage(2); - -// NOTE: to insert a page to a previous position, you can add a new page to the end of document and then move it using movePage(). - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_044.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_045.php b/tools/tcpdf/examples/example_045.php deleted file mode 100644 index a7f613731..000000000 --- a/tools/tcpdf/examples/example_045.php +++ /dev/null @@ -1,143 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 045'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 045', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', 'B', 20); - -// add a page -$pdf->AddPage(); - -// set a bookmark for the current position -$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); - -// print a line using Cell() -$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); - -// Create a fixed link to the first page using the * character -$index_link = $pdf->AddLink(); -$pdf->setLink($index_link, 0, '*1'); -$pdf->Cell(0, 10, 'Link to INDEX', 0, 1, 'R', false, $index_link); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,128,0)); -$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); - -// fixed link to the first page using the * character -$html = 'link to INDEX (page 1)'; -$pdf->writeHTML($html, true, false, true, false, ''); - - -// add some pages and bookmarks -for ($i = 2; $i < 12; $i++) { - $pdf->AddPage(); - $pdf->Bookmark('Chapter '.$i, 0, 0, '', 'B', array(0,64,128)); - $pdf->Cell(0, 10, 'Chapter '.$i, 0, 1, 'L'); -} - -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -// add a new page for TOC -$pdf->addTOCPage(); - -// write the TOC title -$pdf->setFont('times', 'B', 16); -$pdf->MultiCell(0, 0, 'Table Of Content', 0, 'C', 0, 1, '', '', true, 0); -$pdf->Ln(); - -$pdf->setFont('dejavusans', '', 12); - -// add a simple Table Of Content at first page -// (check the example n. 59 for the HTML version) -$pdf->addTOC(1, 'courier', '.', 'INDEX', 'B', array(128,0,0)); - -// end of TOC page -$pdf->endTOCPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_045.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_046.php b/tools/tcpdf/examples/example_046.php deleted file mode 100644 index 1071b54f0..000000000 --- a/tools/tcpdf/examples/example_046.php +++ /dev/null @@ -1,125 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 046'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 046', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of Text Hyphenation', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(10); - -/* -Unicode Data for SHY: - Name : SOFT HYPHEN, commonly abbreviated as SHY - HTML Entity (decimal): ­ - HTML Entity (hex): ­ - HTML Entity (named): ­ - How to type in Microsoft Windows: [Alt +00AD] or [Alt 0173] - UTF-8 (hex): 0xC2 0xAD (c2ad) -*/ - -/* -// You can automatically add SOFT HYPHENS to your text using -// the hyphenateText() method, but this requires either an -// hyphenation pattern array of a hyphenation pattern TEX file. -// You can download hyphenation TEX patterns from: -// http://www.ctan.org/tex-archive/language/hyph-utf8/tex/generic/hyph-utf8/patterns/ - -// EXAMPLE: - -$html = 'On the other hand, we denounce with righteous indignation and dislike men who are so beguiled and demoralized by the charms of pleasure of the moment, so blinded by desire, that they cannot foresee the pain and trouble that are bound to ensue; and equal blame belongs to those who fail in their duty through weakness of will, which is the same as saying through shrinking from toil and pain. These cases are perfectly simple and easy to distinguish. In a free hour, when our power of choice is untrammelled and when nothing prevents our being able to do what we like best, every pleasure is to be welcomed and every pain avoided. But in certain circumstances and owing to the claims of duty or the obligations of business it will frequently occur that pleasures have to be repudiated and annoyances accepted. The wise man therefore always holds in these matters to this principle of selection: he rejects pleasures to secure other greater pleasures, or else he endures pains to avoid worse pains.'; - -$hyphen_patterns = $pdf->getHyphenPatternsFromTEX('hyphens/hyph-en-gb.tex'); - -$html = $pdf->hyphenateText($html, $hyphen_patterns, array(), 1, 2, 1, 8); -*/ - - -// HTML text with soft hyphens (­) -$html = 'On the other hand, we de­nounce with righ­teous in­dig­na­tion and dis­like men who are so be­guiled and de­mo­r­al­ized by the charms of plea­sure of the mo­ment, so blind­ed by de­sire, that they can­not fore­see the pain and trou­ble that are bound to en­sue; and equal blame be­longs to those who fail in their du­ty through weak­ness of will, which is the same as say­ing through shrink­ing from toil and pain. Th­ese cas­es are per­fect­ly sim­ple and easy to distin­guish. In a free hour, when our pow­er of choice is un­tram­melled and when noth­ing pre­vents our be­ing able to do what we like best, ev­ery plea­sure is to be wel­comed and ev­ery pain avoid­ed. But in cer­tain cir­cum­s­tances and ow­ing to the claims of du­ty or the obli­ga­tions of busi­ness it will fre­quent­ly oc­cur that plea­sures have to be re­pu­di­at­ed and an­noy­ances ac­cept­ed. The wise man there­fore al­ways holds in th­ese mat­ters to this prin­ci­ple of se­lec­tion: he re­jects plea­sures to se­cure other greater plea­sures, or else he en­dures pains to avoid worse pains.'; - -$pdf->setFont('times', '', 10); -$pdf->setDrawColor(255,0,0); -$pdf->setTextColor(0,63,127); - -// print a cell -$pdf->writeHTMLCell(50, 0, '', '', $html, 1, 1, 0, true, 'J'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_046.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_047.php b/tools/tcpdf/examples/example_047.php deleted file mode 100644 index a6bd1f528..000000000 --- a/tools/tcpdf/examples/example_047.php +++ /dev/null @@ -1,119 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 047'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 047', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 16); - -// add a page -$pdf->AddPage(); - -$txt = 'Example of Transactions. -TCPDF allows you to undo some operations using the Transactions. -Check the source code for further information.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -$pdf->setFont('times', '', 12); - -// start transaction -$pdf->startTransaction(); - -$pdf->Write(0, "LINE 1\n"); -$pdf->Write(0, "LINE 2\n"); - -// restarts transaction -$pdf->startTransaction(); - -$pdf->Write(0, "LINE 3\n"); -$pdf->Write(0, "LINE 4\n"); - -// rolls back to the last (re)start -$pdf = $pdf->rollbackTransaction(); - -$pdf->Write(0, "LINE 5\n"); -$pdf->Write(0, "LINE 6\n"); - -// start transaction -$pdf->startTransaction(); - -$pdf->Write(0, "LINE 7\n"); - -// commit transaction (actually just frees memory) -$pdf->commitTransaction(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_047.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_048.php b/tools/tcpdf/examples/example_048.php deleted file mode 100644 index b7226fe18..000000000 --- a/tools/tcpdf/examples/example_048.php +++ /dev/null @@ -1,316 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 048'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 048', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of HTML tables', '', 0, 'L', true, 0, false, false, 0); - -$pdf->setFont('helvetica', '', 8); - -// ----------------------------------------------------------------------------- - -$tbl = << -
    COL 1 - ROW 1
    COLSPAN 3
    COL 2 - ROW 1COL 3 - ROW 1
    COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line
    COL 3 - ROW 2
    COL 3 - ROW 3
    -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << -
    COL 1 - ROW 1
    COLSPAN 3
    text line
    text line
    text line
    text line
    text line
    text line
    COL 2 - ROW 1COL 3 - ROW 1
    COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line
    COL 3 - ROW 2
    COL 3 - ROW 3
    -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << -
    COL 1 - ROW 1
    COLSPAN 3
    text line
    text line
    text line
    text line
    text line
    text line
    COL 2 - ROW 1COL 3 - ROW 1
    COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line
    COL 3 - ROW 2
    text line
    text line
    COL 3 - ROW 3
    -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << -
    Left columnHeading Column Span 5Heading Column Span 9
    Rowspan 2
    This is some text that fills the table cell.
    span 2span 22 rowsColspan 8
    1a2a1b2b12345678
    -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// Table with rowspans and THEAD -$tbl = << -
    AXXXXXXXX XXXXXXXXXXXX
    BXXXXXXXX XXXXXXXXXXXX
    1.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXXXXXX
    XXXX
    2.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    RRRRRR
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    3.XXXX1
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    4.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// NON-BREAKING TABLE (nobr="true") - -$tbl = << - - NON-BREAKING TABLE - - - 1-1 - 1-2 - 1-3 - - - 2-1 - 3-2 - 3-3 - - - 3-1 - 3-2 - 3-3 - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// NON-BREAKING ROWS (nobr="true") - -$tbl = << - - NON-BREAKING ROWS - - - ROW 1
    COLUMN 1 - ROW 1
    COLUMN 2 - ROW 1
    COLUMN 3 - - - ROW 2
    COLUMN 1 - ROW 2
    COLUMN 2 - ROW 2
    COLUMN 3 - - - ROW 3
    COLUMN 1 - ROW 3
    COLUMN 2 - ROW 3
    COLUMN 3 - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_048.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_049.php b/tools/tcpdf/examples/example_049.php deleted file mode 100644 index c8a818662..000000000 --- a/tools/tcpdf/examples/example_049.php +++ /dev/null @@ -1,128 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 049'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 049', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - - -/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * - -IMPORTANT: -If you are printing user-generated content, the tcpdf tag should be considered unsafe. -This tag is disabled by default by the K_TCPDF_CALLS_IN_HTML constant on TCPDF configuration file. -Please use this feature only if you are in control of the HTML content and you are sure that it does not contain any harmful code. - -For security reasons, the content of the TCPDF tag must be prepared and encoded with the serializeTCPDFtag() method (see the example below). - - * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ - - -$html = '

    Test TCPDF Methods in HTML

    -

    IMPORTANT:

    -If you are using user-generated content, the tcpdf tag should be considered unsafe.
    -Please use this feature only if you are in control of the HTML content and you are sure that it does not contain any harmful code.
    -This feature is disabled by default by the K_TCPDF_CALLS_IN_HTML constant on TCPDF configuration file.
    -

    write1DBarcode method in HTML

    '; - -$data = $pdf->serializeTCPDFtag('write1DBarcode', array('CODE 39', 'C39', '', '', 80, 30, 0.4, array('position'=>'S', 'border'=>true, 'padding'=>4, 'fgcolor'=>array(0,0,0), 'bgcolor'=>array(255,255,255), 'text'=>true, 'font'=>'helvetica', 'fontsize'=>8, 'stretchtext'=>4), 'N')); -$html .= ''; - -$data = $pdf->serializeTCPDFtag('write1DBarcode', array('CODE 128', 'C128', '', '', 80, 30, 0.4, array('position'=>'S', 'border'=>true, 'padding'=>4, 'fgcolor'=>array(0,0,0), 'bgcolor'=>array(255,255,255), 'text'=>true, 'font'=>'helvetica', 'fontsize'=>8, 'stretchtext'=>4), 'N')); -$html .= ''; - -$data = $pdf->serializeTCPDFtag('AddPage'); -$html .= '

    Graphic Functions

    '; - -$data = $pdf->serializeTCPDFtag('SetDrawColor', array(0)); -$html .= ''; - -$data = $pdf->serializeTCPDFtag('Rect', array(50, 50, 40, 10, 'DF', array(), array(0,128,255))); -$html .= ''; - - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_049.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_050.php b/tools/tcpdf/examples/example_050.php deleted file mode 100644 index 6bbb299e2..000000000 --- a/tools/tcpdf/examples/example_050.php +++ /dev/null @@ -1,212 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 050'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 050', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// NOTE: 2D barcode algorithms must be implemented on 2dbarcode.php class file. - -// set font -$pdf->setFont('helvetica', '', 11); - -// add a page -$pdf->AddPage(); - -// print a message -$txt = "You can also export 2D barcodes in other formats (PNG, SVG, HTML). Check the examples inside the barcode directory.\n"; -$pdf->MultiCell(70, 50, $txt, 0, 'J', false, 1, 125, 30, true, 0, false, true, 0, 'T', false); - - -$pdf->setFont('helvetica', '', 10); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set style for barcode -$style = array( - 'border' => true, - 'vpadding' => 'auto', - 'hpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255) - 'module_width' => 1, // width of a single module in points - 'module_height' => 1 // height of a single module in points -); - -// write RAW 2D Barcode - -$code = '111011101110111,010010001000010,010011001110010,010010000010010,010011101110010'; -$pdf->write2DBarcode($code, 'RAW', 80, 30, 30, 20, $style, 'N'); - -// write RAW2 2D Barcode -$code = '[111011101110111][010010001000010][010011001110010][010010000010010][010011101110010]'; -$pdf->write2DBarcode($code, 'RAW2', 80, 60, 30, 20, $style, 'N'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set style for barcode -$style = array( - 'border' => 2, - 'vpadding' => 'auto', - 'hpadding' => 'auto', - 'fgcolor' => array(0,0,0), - 'bgcolor' => false, //array(255,255,255) - 'module_width' => 1, // width of a single module in points - 'module_height' => 1 // height of a single module in points -); - -// QRCODE,L : QR-CODE Low error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,L', 20, 30, 50, 50, $style, 'N'); -$pdf->Text(20, 25, 'QRCODE L'); - -// QRCODE,M : QR-CODE Medium error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,M', 20, 90, 50, 50, $style, 'N'); -$pdf->Text(20, 85, 'QRCODE M'); - -// QRCODE,Q : QR-CODE Better error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,Q', 20, 150, 50, 50, $style, 'N'); -$pdf->Text(20, 145, 'QRCODE Q'); - -// QRCODE,H : QR-CODE Best error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 20, 210, 50, 50, $style, 'N'); -$pdf->Text(20, 205, 'QRCODE H'); - -// ------------------------------------------------------------------- -// PDF417 (ISO/IEC 15438:2006) - -/* - - The $type parameter can be simple 'PDF417' or 'PDF417' followed by a - number of comma-separated options: - - 'PDF417,a,e,t,s,f,o0,o1,o2,o3,o4,o5,o6' - - Possible options are: - - a = aspect ratio (width/height); - e = error correction level (0-8); - - Macro Control Block options: - - t = total number of macro segments; - s = macro segment index (0-99998); - f = file ID; - o0 = File Name (text); - o1 = Segment Count (numeric); - o2 = Time Stamp (numeric); - o3 = Sender (text); - o4 = Addressee (text); - o5 = File Size (numeric); - o6 = Checksum (numeric). - - Parameters t, s and f are required for a Macro Control Block, all other parameters are optional. - To use a comma character ',' on text options, replace it with the character 255: "\xff". - -*/ - -$pdf->write2DBarcode('www.tcpdf.org', 'PDF417', 80, 90, 0, 30, $style, 'N'); -$pdf->Text(80, 85, 'PDF417 (ISO/IEC 15438:2006)'); - -// ------------------------------------------------------------------- -// DATAMATRIX (ISO/IEC 16022:2006) - -$pdf->write2DBarcode('http://www.tcpdf.org', 'DATAMATRIX', 80, 150, 50, 50, $style, 'N'); -$pdf->Text(80, 145, 'DATAMATRIX (ISO/IEC 16022:2006)'); - -// ------------------------------------------------------------------- - -// new style -$style = array( - 'border' => 2, - 'padding' => 'auto', - 'fgcolor' => array(0,0,255), - 'bgcolor' => array(255,255,64) -); - -// QRCODE,H : QR-CODE Best error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 80, 210, 50, 50, $style, 'N'); -$pdf->Text(80, 205, 'QRCODE H - COLORED'); - -// new style -$style = array( - 'border' => false, - 'padding' => 0, - 'fgcolor' => array(128,0,0), - 'bgcolor' => false -); - -// QRCODE,H : QR-CODE Best error correction -$pdf->write2DBarcode('www.tcpdf.org', 'QRCODE,H', 140, 210, 50, 50, $style, 'N'); -$pdf->Text(140, 205, 'QRCODE H - NO PADDING'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_050.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_051.php b/tools/tcpdf/examples/example_051.php deleted file mode 100644 index c3a9ce2f2..000000000 --- a/tools/tcpdf/examples/example_051.php +++ /dev/null @@ -1,148 +0,0 @@ -getBreakMargin(); - // get current auto-page-break mode - $auto_page_break = $this->AutoPageBreak; - // disable auto-page-break - $this->setAutoPageBreak(false, 0); - // set bacground image - $img_file = K_PATH_IMAGES.'image_demo.jpg'; - $this->Image($img_file, null, 0, 210, 297, '', '', '', false, 300, 'C', false, false, 0); - // restore auto-page-break status - $this->setAutoPageBreak($auto_page_break, $bMargin); - // set the starting point for the page content - $this->setPageMark(); - } -} - -// create new PDF document -$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 051'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(0); -$pdf->setFooterMargin(0); - -// remove default footer -$pdf->setPrintFooter(false); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 48); - -// add a page -$pdf->AddPage(); - -// Print a text -$html = ' PAGE 1  -

    You can set a full page background.

    '; -$pdf->writeHTML($html, true, false, true, false, ''); - - -// add a page -$pdf->AddPage(); - -// Print a text -$html = ' PAGE 2 '; -$pdf->writeHTML($html, true, false, true, false, ''); - -// --- example with background set on page --- - -// remove default header -$pdf->setPrintHeader(false); - -// add a page -$pdf->AddPage(); - - -// -- set new background --- - -// get the current page break margin -$bMargin = $pdf->getBreakMargin(); -// get current auto-page-break mode -$auto_page_break = $pdf->getAutoPageBreak(); -// disable auto-page-break -$pdf->setAutoPageBreak(false, 0); -// set bacground image -$img_file = K_PATH_IMAGES.'image_demo.jpg'; -$pdf->Image($img_file, null, 0, 210, 297, '', '', '', false, 300, 'C', false, false, 0); -// restore auto-page-break status -$pdf->setAutoPageBreak($auto_page_break, $bMargin); -// set the starting point for the page content -$pdf->setPageMark(); - - -// Print a text -$html = 'PAGE 3'; -$pdf->writeHTML($html, true, false, true, false, ''); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_051.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_052.php b/tools/tcpdf/examples/example_052.php deleted file mode 100644 index 10cfb2e4f..000000000 --- a/tools/tcpdf/examples/example_052.php +++ /dev/null @@ -1,123 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 052'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 052', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -/* -NOTES: - - To create self-signed signature: openssl req -x509 -nodes -days 365000 -newkey rsa:1024 -keyout tcpdf.crt -out tcpdf.crt - - To export crt to p12: openssl pkcs12 -export -in tcpdf.crt -out tcpdf.p12 - - To convert pfx certificate to pem: openssl pkcs12 -in tcpdf.pfx -out tcpdf.crt -nodes -*/ - -// set certificate file -$certificate = 'file://data/cert/tcpdf.crt'; - -// set additional information -$info = array( - 'Name' => 'TCPDF', - 'Location' => 'Office', - 'Reason' => 'Testing TCPDF', - 'ContactInfo' => 'http://www.tcpdf.org', - ); - -// set document signature -$pdf->setSignature($certificate, $certificate, 'tcpdfdemo', '', 2, $info); - -// set font. 'helvetica' MUST be used to avoid a PHP notice from PHP 7.4+ -$pdf->setFont('helvetica', '', 12); - -// add a page -$pdf->AddPage(); - -// print a line of text -$text = 'This is a digitally signed document using the default (example) tcpdf.crt certificate.
    To validate this signature you have to load the tcpdf.fdf on the Arobat Reader to add the certificate to List of Trusted Identities.

    For more information check the source code of this example and the source code documentation for the setSignature() method.

    www.tcpdf.org'; -$pdf->writeHTML($text, true, 0, true, 0); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// *** set signature appearance *** - -// create content for signature (image and/or text) -$pdf->Image('images/tcpdf_signature.png', 180, 60, 15, 15, 'PNG'); - -// define active area for signature appearance -$pdf->setSignatureAppearance(180, 60, 15, 15); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// *** set an empty signature appearance *** -$pdf->addEmptySignatureAppearance(180, 80, 15, 15); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_052.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_053.php b/tools/tcpdf/examples/example_053.php deleted file mode 100644 index dbeb67e25..000000000 --- a/tools/tcpdf/examples/example_053.php +++ /dev/null @@ -1,110 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 053'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 053', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('times', '', 14); - -// add a page -$pdf->AddPage(); - -// print a some of text -$text = 'This is an example of JavaScript usage on PDF documents.

    For more information check the source code of this example, the source code documentation for the IncludeJS() method and the JavaScript for Acrobat API Reference guide.

    www.tcpdf.org'; -$pdf->writeHTML($text, true, 0, true, 0); - -// write some JavaScript code -$js = <<IncludeJS($js); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_053.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_054.php b/tools/tcpdf/examples/example_054.php deleted file mode 100644 index 3a5011d49..000000000 --- a/tools/tcpdf/examples/example_054.php +++ /dev/null @@ -1,131 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 054'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 054', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// IMPORTANT: disable font subsetting to allow users editing the document -$pdf->setFontSubsetting(false); - -// set font. 'helvetica' MUST be used to avoid a PHP notice from PHP 7.4+ -$pdf->setFont('helvetica', '', 10, '', false); - -// add a page -$pdf->AddPage(); - -// create some HTML content -$html = <<XHTML Form Example - -
    -

    -

    -

    -
    -
    -

    - -

    - -


    -
    -
    -


    - - - - -
    - -EOD; - -// output the HTML content -$pdf->writeHTML($html, true, 0, true, 0); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_054.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_055.php b/tools/tcpdf/examples/example_055.php deleted file mode 100644 index 0f50da096..000000000 --- a/tools/tcpdf/examples/example_055.php +++ /dev/null @@ -1,118 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 055'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 055', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 14); - -// array of font names -$core_fonts = array('courier', 'courierB', 'courierI', 'courierBI', 'helvetica', 'helveticaB', 'helveticaI', 'helveticaBI', 'times', 'timesB', 'timesI', 'timesBI', 'symbol', 'zapfdingbats'); - -// set fill color -$pdf->setFillColor(221,238,255); - -// create one HTML table for each core font -foreach($core_fonts as $font) { - // add a page - $pdf->AddPage(); - - // Cell($w, $h=0, $txt='', $border=0, $ln=0, $align='', $fill=false, $link='', $stretch=0, $ignore_min_height=false, $calign='T', $valign='M') - - // set font for title - $pdf->setFont('helvetica', 'B', 16); - - // print font name - $pdf->Cell(0, 10, 'FONT: '.$font, 1, 1, 'C', true, '', 0, false, 'T', 'M'); - - // set font for chars - $pdf->setFont($font, '', 16); - - // print each character - for ($i = 0; $i < 256; ++$i) { - if (($i > 0) AND (($i % 16) == 0)) { - $pdf->Ln(); - } - $pdf->Cell(11.25, 11.25, TCPDF_FONTS::unichr($i), 1, 0, 'C', false, '', 0, false, 'T', 'M'); - } - - $pdf->Ln(20); - - // print a pangram - $pdf->Cell(0, 0, 'The quick brown fox jumps over the lazy dog', 0, 1, 'C', false, '', 0, false, 'T', 'M'); -} - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_055.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_056.php b/tools/tcpdf/examples/example_056.php deleted file mode 100644 index 40ef2508b..000000000 --- a/tools/tcpdf/examples/example_056.php +++ /dev/null @@ -1,135 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 056'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 056', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 18); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of Registration Marks, Crop Marks and Color Bars', '', 0, 'L', true, 0, false, false, 0); - -$pdf->Ln(5); - -// color registration bars - -// A,W,R,G,B,C,M,Y,K,RGB,CMYK,ALL,ALLSPOT, -$pdf->colorRegistrationBar(50, 70, 40, 40, true, false, 'A,R,G,B,C,M,Y,K'); -$pdf->colorRegistrationBar(90, 70, 40, 40, true, true, 'A,R,G,B,C,M,Y,K'); -$pdf->colorRegistrationBar(50, 115, 80, 5, false, true, 'A,W,R,G,B,C,M,Y,K,ALL'); -$pdf->colorRegistrationBar(135, 70, 5, 50, false, false, 'A,W,R,G,B,C,M,Y,K,ALL'); - -// corner crop marks - -$pdf->cropMark(50, 70, 10, 10, 'TL'); -$pdf->cropMark(140, 70, 10, 10, 'TR'); -$pdf->cropMark(50, 120, 10, 10, 'BL'); -$pdf->cropMark(140, 120, 10, 10, 'BR'); - -// various crop marks - -$pdf->cropMark(95, 65, 5, 5, 'LEFT,TOP,RIGHT', array(255,0,0)); -$pdf->cropMark(95, 125, 5, 5, 'LEFT,BOTTOM,RIGHT', array(255,0,0)); - -$pdf->cropMark(45, 95, 5, 5, 'TL,BL', array(0,255,0)); -$pdf->cropMark(145, 95, 5, 5, 'TR,BR', array(0,255,0)); - -$pdf->cropMark(95, 140, 5, 5, 'A,D', array(0,0,255)); - -// registration marks - -$pdf->registrationMark(40, 60, 5, false); -$pdf->registrationMark(150, 60, 5, true, array(0,0,0), array(255,255,0)); -$pdf->registrationMark(40, 130, 5, true, array(0,0,0), array(255,255,0)); -$pdf->registrationMark(150, 130, 5, false, array(100,100,100,100,'All'), array(0,0,0,0,'None')); - -// test registration bar with spot colors - -$pdf->AddSpotColor('My TCPDF Dark Green', 100, 50, 80, 45); -$pdf->AddSpotColor('My TCPDF Light Yellow', 0, 0, 55, 0); -$pdf->AddSpotColor('My TCPDF Black', 0, 0, 0, 100); -$pdf->AddSpotColor('My TCPDF Red', 30, 100, 90, 10); -$pdf->AddSpotColor('My TCPDF Green', 100, 30, 100, 0); -$pdf->AddSpotColor('My TCPDF Blue', 100, 60, 10, 5); -$pdf->AddSpotColor('My TCPDF Yellow', 0, 20, 100, 0); - -$pdf->colorRegistrationBar(50, 150, 80, 10, false, true, 'ALLSPOT'); - -// CMYK registration mark -$pdf->registrationMarkCMYK(150, 155, 8); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_056.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_057.php b/tools/tcpdf/examples/example_057.php deleted file mode 100644 index c0bbe4af3..000000000 --- a/tools/tcpdf/examples/example_057.php +++ /dev/null @@ -1,270 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 057'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 057', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of alignment options for Cell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->setFont('helvetica', '', 11); - -// set border width -$pdf->setLineWidth(0.7); - -// set color for cell border -$pdf->setDrawColor(0,128,255); - -$pdf->setCellHeightRatio(3); - -$pdf->setXY(15, 60); - -// text on center -$pdf->Cell(30, 0, 'Top-Center', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'C'); -$pdf->Cell(30, 0, 'Center-Center', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'C'); -$pdf->Cell(30, 0, 'Bottom-Center', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'C'); -$pdf->Cell(30, 0, 'Ascent-Center', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'C'); -$pdf->Cell(30, 0, 'Baseline-Center', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'C'); -$pdf->Cell(30, 0, 'Descent-Center', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'C'); - - -$pdf->setXY(15, 90); - -// text on top -$pdf->Cell(30, 0, 'Top-Top', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'T'); -$pdf->Cell(30, 0, 'Center-Top', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'T'); -$pdf->Cell(30, 0, 'Bottom-Top', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'T'); -$pdf->Cell(30, 0, 'Ascent-Top', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'T'); -$pdf->Cell(30, 0, 'Baseline-Top', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'T'); -$pdf->Cell(30, 0, 'Descent-Top', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'T'); - - -$pdf->setXY(15, 120); - -// text on bottom -$pdf->Cell(30, 0, 'Top-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'T', 'B'); -$pdf->Cell(30, 0, 'Center-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'C', 'B'); -$pdf->Cell(30, 0, 'Bottom-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'B', 'B'); -$pdf->Cell(30, 0, 'Ascent-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'A', 'B'); -$pdf->Cell(30, 0, 'Baseline-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'L', 'B'); -$pdf->Cell(30, 0, 'Descent-Bottom', 1, $ln=0, 'C', 0, '', 0, false, 'D', 'B'); - - -// draw some reference lines -$linestyle = array('width' => 0.1, 'cap' => 'butt', 'join' => 'miter', 'dash' => '', 'phase' => 0, 'color' => array(255, 0, 0)); -$pdf->Line(15, 60, 195, 60, $linestyle); -$pdf->Line(15, 90, 195, 90, $linestyle); -$pdf->Line(15, 120, 195, 120, $linestyle); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// Print an image to explain cell measures - -$pdf->Image('images/tcpdf_cell.png', 15, 160, 100, 100, 'PNG', '', '', false, 300, '', false, false, 0, false, false, false); -$legend = 'LEGEND: - -X: cell x top-left origin (top-right for RTL) -Y: cell y top-left origin (top-right for RTL) -CW: cell width -CH: cell height -LW: line width -NRL: normal line position -EXT: external line position -INT: internal line position -ML: margin left -MR: margin right -MT: margin top -MB: margin bottom -PL: padding left -PR: padding right -PT: padding top -PB: padding bottom -TW: text width -FA: font ascent -FB: font baseline -FD: font descent'; -$pdf->setFont('helvetica', '', 10); -$pdf->setCellHeightRatio(1.25); -$pdf->MultiCell(0, 0, $legend, 0, 'L', false, 1, 125, 160, true, 0, false, true, 0, 'T', false); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// CELL BORDERS - -// add a page -$pdf->AddPage(); - -$pdf->setFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Example of borders for Cell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->setFont('helvetica', '', 11); - -// set border width -$pdf->setLineWidth(0.508); - -// set color for cell border -$pdf->setDrawColor(0,128,255); - -// set filling color -$pdf->setFillColor(255,255,128); - -// set cell height ratio -$pdf->setCellHeightRatio(3); - -$pdf->Cell(30, 0, '1', 1, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LTRB', 'LTRB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LTR', 'LTR', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'TRB', 'TRB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LRB', 'LRB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LTB', 'LTB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LT', 'LT', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'TR', 'TR', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'RB', 'RB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LB', 'LB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'LR', 'LR', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'TB', 'TB', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'L', 'L', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'T', 'T', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'R', 'R', 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(2); -$pdf->Cell(30, 0, 'B', 'B', 1, 'C', 1, '', 0, false, 'T', 'C'); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// ADVANCED SETTINGS FOR CELL BORDERS - -// add a page -$pdf->AddPage(); - -$pdf->setFont('helvetica', 'B', 20); - -$pdf->Write(0, 'Example of advanced border settings for Cell()', '', 0, 'L', true, 0, false, false, 0); - -$pdf->setFont('helvetica', '', 11); - -// set border width -$pdf->setLineWidth(1); - -// set color for cell border -$pdf->setDrawColor(0,128,255); - -// set filling color -$pdf->setFillColor(255,255,128); - -$border = array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->Cell(30, 0, 'LTRB', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -$border = array( -'L' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)), -'R' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 255)), -'T' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 255, 0)), -'B' => array('width' => 2, 'cap' => 'square', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 255))); -$pdf->Cell(30, 0, 'LTRB', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -$border = array('mode' => 'ext', 'LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->Cell(30, 0, 'LTRB EXT', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -$border = array('mode' => 'int', 'LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0))); -$pdf->Cell(30, 0, 'LTRB INT', $border, 1, 'C', 1, '', 0, false, 'T', 'C'); -$pdf->Ln(5); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_057.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_058.php b/tools/tcpdf/examples/example_058.php deleted file mode 100644 index 583228bbc..000000000 --- a/tools/tcpdf/examples/example_058.php +++ /dev/null @@ -1,97 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 058'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 058', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - -// NOTE: Uncomment the following line to rasterize SVG image using the ImageMagick library. -//$pdf->setRasterizeVectorImages(true); - -$pdf->ImageSVG($file='images/testsvg.svg', $x=15, $y=30, $w='', $h='', $link='http://www.tcpdf.org', $align='', $palign='', $border=1, $fitonpage=false); - -$pdf->ImageSVG($file='images/tux.svg', $x=30, $y=100, $w='', $h=100, $link='', $align='', $palign='', $border=0, $fitonpage=false); - -$pdf->setFont('helvetica', '', 8); -$pdf->setY(195); -$txt = '© The copyright holder of the above Tux image is Larry Ewing, allows anyone to use it for any purpose, provided that the copyright holder is properly attributed. Redistribution, derivative work, commercial use, and all other use is permitted.'; -$pdf->Write(0, $txt, '', 0, 'L', true, 0, false, false, 0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_058.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_059.php b/tools/tcpdf/examples/example_059.php deleted file mode 100644 index 6f05b2e8e..000000000 --- a/tools/tcpdf/examples/example_059.php +++ /dev/null @@ -1,193 +0,0 @@ -tocpage) { - // *** replace the following parent::Header() with your code for TOC page - parent::Header(); - } else { - // *** replace the following parent::Header() with your code for normal pages - parent::Header(); - } - } - - /** - * Overwrite Footer() method. - * @public - */ - public function Footer() { - if ($this->tocpage) { - // *** replace the following parent::Footer() with your code for TOC page - parent::Footer(); - } else { - // *** replace the following parent::Footer() with your code for normal pages - parent::Footer(); - } - } - -} // end of class - -// create new PDF document -$pdf = new TOC_TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 059'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 059', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// set font -$pdf->setFont('helvetica', '', 10); - -// --------------------------------------------------------- - -// create some content ... - -// add a page -$pdf->AddPage(); - -// set a bookmark for the current position -$pdf->Bookmark('Chapter 1', 0, 0, '', 'B', array(0,64,128)); - -// print a line using Cell() -$pdf->Cell(0, 10, 'Chapter 1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.1', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.2', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.2', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Sub-Paragraph 1.2.1', 2, 0, '', 'I', array(0,128,0)); -$pdf->Cell(0, 10, 'Sub-Paragraph 1.2.1', 0, 1, 'L'); - -$pdf->AddPage(); -$pdf->Bookmark('Paragraph 1.3', 1, 0, '', '', array(128,0,0)); -$pdf->Cell(0, 10, 'Paragraph 1.3', 0, 1, 'L'); - -// add some pages and bookmarks -for ($i = 2; $i < 12; $i++) { - $pdf->AddPage(); - $pdf->Bookmark('Chapter '.$i, 0, 0, '', 'B', array(0,64,128)); - $pdf->Cell(0, 10, 'Chapter '.$i, 0, 1, 'L'); -} - - -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - - -// add a new page for TOC -$pdf->addTOCPage(); - -// write the TOC title and/or other elements on the TOC page -$pdf->setFont('times', 'B', 16); -$pdf->MultiCell(0, 0, 'Table Of Content', 0, 'C', 0, 1, '', '', true, 0); -$pdf->Ln(); -$pdf->setFont('helvetica', '', 10); - -// define styles for various bookmark levels -$bookmark_templates = array(); - -/* - * The key of the $bookmark_templates array represent the bookmark level (from 0 to n). - * The following templates will be replaced with proper content: - * #TOC_DESCRIPTION# this will be replaced with the bookmark description; - * #TOC_PAGE_NUMBER# this will be replaced with page number. - * - * NOTES: - * If you want to align the page number on the right you have to use a monospaced font like courier, otherwise you can left align using any font type. - * The following is just an example, you can get various styles by combining various HTML elements. - */ - -// A monospaced font for the page number is mandatory to get the right alignment -$bookmark_templates[0] = '
    #TOC_DESCRIPTION##TOC_PAGE_NUMBER#
    '; -$bookmark_templates[1] = '
     #TOC_DESCRIPTION##TOC_PAGE_NUMBER#
    '; -$bookmark_templates[2] = '
     #TOC_DESCRIPTION##TOC_PAGE_NUMBER#
    '; -// add other bookmark level templates here ... - -// add table of content at page 1 -// (check the example n. 45 for a text-only TOC -$pdf->addHTMLTOC(1, 'INDEX', $bookmark_templates, true, 'B', array(128,0,0)); - -// end of TOC page -$pdf->endTOCPage(); - -// . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_059.pdf', 'D'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_060.php b/tools/tcpdf/examples/example_060.php deleted file mode 100644 index dcdd9cc22..000000000 --- a/tools/tcpdf/examples/example_060.php +++ /dev/null @@ -1,110 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 060'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 060', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// set font -$pdf->setFont('helvetica', '', 20); - -// --------------------------------------------------------- - -// set page format (read source code documentation for further information) -$page_format = array( - 'MediaBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 210, 'ury' => 297), - 'CropBox' => array ('llx' => 0, 'lly' => 0, 'urx' => 210, 'ury' => 297), - 'BleedBox' => array ('llx' => 5, 'lly' => 5, 'urx' => 205, 'ury' => 292), - 'TrimBox' => array ('llx' => 10, 'lly' => 10, 'urx' => 200, 'ury' => 287), - 'ArtBox' => array ('llx' => 15, 'lly' => 15, 'urx' => 195, 'ury' => 282), - 'Dur' => 3, - 'trans' => array( - 'D' => 1.5, - 'S' => 'Split', - 'Dm' => 'V', - 'M' => 'O' - ), - 'Rotate' => 90, - 'PZ' => 1, -); - -// Check the example n. 29 for viewer preferences - -// add first page --- -$pdf->AddPage('P', $page_format, false, false); -$pdf->Cell(0, 12, 'First Page', 1, 1, 'C'); - -// add second page --- -$page_format['Rotate'] = 270; -$pdf->AddPage('P', $page_format, false, false); -$pdf->Cell(0, 12, 'Second Page', 1, 1, 'C'); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_060.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_061.php b/tools/tcpdf/examples/example_061.php deleted file mode 100644 index 607547dfc..000000000 --- a/tools/tcpdf/examples/example_061.php +++ /dev/null @@ -1,267 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 061'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 061', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 10); - -// add a page -$pdf->AddPage(); - -/* NOTE: - * ********************************************************* - * You can load external XHTML using : - * - * $html = file_get_contents('/path/to/your/file.html'); - * - * External CSS files will be automatically loaded. - * Sometimes you need to fix the path of the external CSS. - * ********************************************************* - */ - -// define some HTML content with style -$html = << - - -

    Example of XHTML + CSS

    - -

    Example of paragraph with class selector. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc.

    - -

    Example of paragraph with ID selector. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa.

    - -
    example of DIV with border and fill. -
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
    text-transform LOWERCASE Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
    text-transform uppercase Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
    text-transform cAPITALIZE Lorem ipsum dolor sit amet, consectetur adipiscing elit. -
    - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    No.XXXXXXXX XXXXXXXXXXXX
    1.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXXXXXX
    XXXX
    2.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    3.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    4.XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    XXXX
    -EOF; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// add a page -$pdf->AddPage(); - -$html = ' -

    HTML TIPS & TRICKS

    - -

    REMOVE CELL PADDING

    -
    $pdf->setCellPadding(0);
    -This is used to remove any additional vertical space inside a single cell of text. - -

    REMOVE TAG TOP AND BOTTOM MARGINS

    -
    $tagvs = array(\'p\' => array(0 => array(\'h\' => 0, \'n\' => 0), 1 => array(\'h\' => 0, \'n\' => 0)));
    -$pdf->setHtmlVSpace($tagvs);
    -Since the CSS margin command is not yet implemented on TCPDF, you need to set the spacing of block tags using the following method. - -

    SET LINE HEIGHT

    -
    $pdf->setCellHeightRatio(1.25);
    -You can use the following method to fine tune the line height (the number is a percentage relative to font height). - -

    CHANGE THE PIXEL CONVERSION RATIO

    -
    $pdf->setImageScale(0.47);
    -This is used to adjust the conversion ratio between pixels and document units. Increase the value to get smaller objects.
    -Since you are using pixel unit, this method is important to set theright zoom factor.

    -Suppose that you want to print a web page larger 1024 pixels to fill all the available page width.
    -An A4 page is larger 210mm equivalent to 8.268 inches, if you subtract 13mm (0.512") of margins for each side, the remaining space is 184mm (7.244 inches).
    -The default resolution for a PDF document is 300 DPI (dots per inch), so you have 7.244 * 300 = 2173.2 dots (this is the maximum number of points you can print at 300 DPI for the given width).
    -The conversion ratio is approximatively 1024 / 2173.2 = 0.47 px/dots
    -If the web page is larger 1280 pixels, on the same A4 page the conversion ratio to use is 1280 / 2173.2 = 0.59 pixels/dots'; - -// output the HTML content -$pdf->writeHTML($html, true, false, true, false, ''); - -// reset pointer to the last page -$pdf->lastPage(); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_061.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_062.php b/tools/tcpdf/examples/example_062.php deleted file mode 100644 index d0bf89fe9..000000000 --- a/tools/tcpdf/examples/example_062.php +++ /dev/null @@ -1,142 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 062'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 062', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'XObject Templates', '', 0, 'C', 1, 0, false, false, 0); - -/* - * An XObject Template is a PDF block that is a self-contained - * description of any sequence of graphics objects (including path - * objects, text objects, and sampled images). - * An XObject Template may be painted multiple times, either on - * several pages or at several locations on the same page and produces - * the same results each time, subject only to the graphics state at - * the time it is invoked. - */ - - -// start a new XObject Template and set transparency group option -$template_id = $pdf->startTemplate(60, 60, true); - -// create Template content -// ................................................................... -//Start Graphic Transformation -$pdf->StartTransform(); - -// set clipping mask -$pdf->StarPolygon(30, 30, 29, 10, 3, 0, 1, 'CNZ'); - -// draw jpeg image to be clipped -$pdf->Image('images/image_demo.jpg', 0, 0, 60, 60, '', '', '', true, 72, '', false, false, 0, false, false, false); - -//Stop Graphic Transformation -$pdf->StopTransform(); - -$pdf->setXY(0, 0); - -$pdf->setFont('times', '', 40); - -$pdf->setTextColor(255, 0, 0); - -// print a text -$pdf->Cell(60, 60, 'Template', 0, 0, 'C', false, '', 0, false, 'T', 'M'); -// ................................................................... - -// end the current Template -$pdf->endTemplate(); - - -// print the selected Template various times using various transparencies - -$pdf->setAlpha(0.4); -$pdf->printTemplate($template_id, 15, 50, 20, 20, '', '', false); - -$pdf->setAlpha(0.6); -$pdf->printTemplate($template_id, 27, 62, 40, 40, '', '', false); - -$pdf->setAlpha(0.8); -$pdf->printTemplate($template_id, 55, 85, 60, 60, '', '', false); - -$pdf->setAlpha(1); -$pdf->printTemplate($template_id, 95, 125, 80, 80, '', '', false); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_062.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_063.php b/tools/tcpdf/examples/example_063.php deleted file mode 100644 index f68f4f90a..000000000 --- a/tools/tcpdf/examples/example_063.php +++ /dev/null @@ -1,133 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 063'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 063', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 16); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of Text Stretching and Spacing (tracking)', '', 0, 'L', true, 0, false, false, 0); -$pdf->Ln(5); - -// create several cells to display all cases of stretching and spacing combinations. - -$fonts = array('times', 'dejavuserif'); -$alignments = array('L' => 'LEFT', 'C' => 'CENTER', 'R' => 'RIGHT', 'J' => 'JUSTIFY'); - - -// Test all cases using direct stretching/spacing methods -foreach ($fonts as $fkey => $font) { - $pdf->setFont($font, '', 14); - foreach ($alignments as $align_mode => $align_name) { - for ($stretching = 90; $stretching <= 110; $stretching += 10) { - for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { - $pdf->setFontStretching($stretching); - $pdf->setFontSpacing($spacing); - $txt = $align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm'; - $pdf->Cell(0, 0, $txt, 1, 1, $align_mode); - } - } - } - $pdf->AddPage(); -} - - -// Test all cases using CSS stretching/spacing properties -foreach ($fonts as $fkey => $font) { - $pdf->setFont($font, '', 11); - foreach ($alignments as $align_mode => $align_name) { - for ($stretching = 90; $stretching <= 110; $stretching += 10) { - for ($spacing = -0.254; $spacing <= 0.254; $spacing += 0.254) { - $html = ''.$align_name.' | Stretching = '.$stretching.'% | Spacing = '.sprintf('%+.3F', $spacing).'mm
    Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos.
    '; - $pdf->writeHTMLCell(0, 0, '', '', $html, 1, 1, false, true, $align_mode, false); - } - } - if (!(($fkey == 1) AND ($align_mode == 'J'))) { - $pdf->AddPage(); - } - } -} - - -// reset font stretching -$pdf->setFontStretching(100); - -// reset font spacing -$pdf->setFontSpacing(0); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_063.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_064.php b/tools/tcpdf/examples/example_064.php deleted file mode 100644 index 8efaf4fea..000000000 --- a/tools/tcpdf/examples/example_064.php +++ /dev/null @@ -1,178 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 064'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 064', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', '', 8); - - -// define some html content for testing -$txt = '

    TEST PAGE REGIONS: A no-write region is a portion of the page with a rectangular or trapezium shape that will not be covered when writing text or html code. A region is always aligned on the left or right side of the page ad is defined using a vertical segment. You can set multiple regions for the same page. You can combine several adjacent regions to approximate curved shapes. Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. -Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. -Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. -Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. -Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.

    '; - - -// add a page -$pdf->AddPage(); - -// print some graphic content -$pdf->Image('images/image_demo.jpg', 155, 30, 40, 40, 'JPG', '', '', true); -$pdf->Image('images/image_demo.jpg', 15, 230, 40, 40, 'JPG', '', '', true); - -// define some graphic styles -$styleA = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(255, 0, 0)); -$styleB = array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 3, 'color' => array(127, 127, 127)); -$pdf->setFillColor(220, 255, 220); - -// write a trapezoid with some information about no-write page regions -$pdf->Polygon(array(15,90, 57,90, 67,140, 15,140), 'DF', array($styleB, $styleA, $styleB, $styleB)); -$pdf->setXY(15, 90); -$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'R', false, '', 0, false, 'T', 'T'); -$pdf->setXY(15, 140); -$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'R', false, '', 0, false, 'B', 'B'); -$pdf->setXY(15, 115); -$pdf->Cell(40, 0, 'side', 0, 0, 'R', false, '', 0, false, 'B', 'B'); -$pdf->setLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->Arrow(60, 115, 35, 115, 2, 5, 15); - -// write a trapezoid with some information about no-write page regions -$pdf->Polygon(array(145,130, 195,130, 195,180, 155,180), 'DF', array($styleB, $styleB, $styleB, $styleA)); -$pdf->setXY(145, 130); -$pdf->Cell(42, 0, 'xt,yt', 0, 0, 'L', false, '', 0, false, 'T', 'T'); -$pdf->setXY(155, 180); -$pdf->Cell(52, 0, 'xb,yb', 0, 0, 'L', false, '', 0, false, 'B', 'B'); -$pdf->setXY(160, 155); -$pdf->Cell(30, 0, 'side', 0, 0, 'L', false, '', 0, false, 'B', 'B'); -$pdf->setLineStyle(array('width' => 0.254, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))); -$pdf->Arrow(155, 155, 180, 155, 2, 5, 15); - -// reset x,y position -$pdf->setXY(15, 30); - - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// define no-write page regions to avoid text overlapping images -/* - 'page' => page number or empy for current page - 'xt' => X top - 'yt' => Y top - 'yb' => Y bottom - 'side' => page side ('L' = left or 'R' = right) -*/ -$regions = array( -array('page' => '', 'xt' => 153, 'yt' => 30, 'xb' => 153, 'yb' => 70, 'side' => 'R'), -array('page' => '', 'xt' => 60, 'yt' => 90, 'xb' => 70, 'yb' => 140, 'side' => 'L'), -array('page' => '', 'xt' => 143, 'yt' => 130, 'xb' => 153, 'yb' => 180, 'side' => 'R'), -array('page' => '', 'xt' => 58, 'yt' => 230, 'xb' => 58, 'yb' => 270, 'side' => 'L') -); - -// set page regions, check also getPageRegions(), addPageRegion() and removePageRegion() -$pdf->setPageRegions($regions); - -// write html text -$pdf->writeHTML($txt, true, false, true, false, ''); - - -// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -// set a circular no-write region on the second page -$regions = array( -array('page' => 2, 'xt' => 195, 'yt' => 110, 'xb' => 179.693, 'yb' => 113.045, 'side' => 'R'), -array('page' => 2, 'xt' => 179.693, 'yt' => 113.045, 'xb' => 166.716, 'yb' => 121.716, 'side' => 'R'), -array('page' => 2, 'xt' => 166.716, 'yt' => 121.716, 'xb' => 158.045, 'yb' => 134.693, 'side' => 'R'), -array('page' => 2, 'xt' => 158.045, 'yt' => 134.693, 'xb' => 155, 'yb' => 150, 'side' => 'R'), -array('page' => 2, 'xt' => 155, 'yt' => 150, 'xb' => 158.045, 'yb' => 165.307, 'side' => 'R'), -array('page' => 2, 'xt' => 158.045, 'yt' => 165.307, 'xb' => 166.716, 'yb' => 178.284, 'side' => 'R'), -array('page' => 2, 'xt' => 166.716, 'yt' => 178.284, 'xb' => 179.693, 'yb' => 186.955, 'side' => 'R'), -array('page' => 2, 'xt' => 179.693, 'yt' => 186.955, 'xb' => 195, 'yb' => 190, 'side' => 'R') -); -$pdf->setPageRegions($regions); - -$pdf->Polygon(array(195,110, 179.693,113.045, 166.716,121.716, 158.045,134.693, 155,150, 158.045,165.307, 166.716,178.284, 179.693,186.955, 195,190), 'DF'); - -$pdf->Ln(15); - -// define some html content for testing -$txt = 'Lorem ipsum dolor sit amet, consectetur adipiscing elit. In sed imperdiet lectus. Phasellus quis velit velit, non condimentum quam. Sed neque urna, ultrices ac volutpat vel, laoreet vitae augue. Sed vel velit erat. Class aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. Cras eget velit nulla, eu sagittis elit. Nunc ac arcu est, in lobortis tellus. Praesent condimentum rhoncus sodales. In hac habitasse platea dictumst. Proin porta eros pharetra enim tincidunt dignissim nec vel dolor. Cras sapien elit, ornare ac dignissim eu, ultricies ac eros. Maecenas augue magna, ultrices a congue in, mollis eu nulla. Nunc venenatis massa at est eleifend faucibus. Vivamus sed risus lectus, nec interdum nunc. Fusce et felis vitae diam lobortis sollicitudin. Aenean tincidunt accumsan nisi, id vehicula quam laoreet elementum. Phasellus egestas interdum erat, et viverra ipsum ultricies ac. Praesent sagittis augue at augue volutpat eleifend. Cras nec orci neque. Mauris bibendum posuere blandit. Donec feugiat mollis dui sit amet pellentesque. Sed a enim justo. Donec tincidunt, nisl eget elementum aliquam, odio ipsum ultrices quam, eu porttitor ligula urna at lorem. Donec varius, eros et convallis laoreet, ligula tellus consequat felis, ut ornare metus tellus sodales velit. Duis sed diam ante. Ut rutrum malesuada massa, vitae consectetur ipsum rhoncus sed. Suspendisse potenti. Pellentesque a congue massa. Integer non sem eget neque mattis accumsan. Maecenas eu nisl mauris, sit amet interdum ipsum. In pharetra erat vel lectus venenatis elementum. Nulla non elit ligula, sit amet mollis urna. Morbi ut gravida est. Mauris tincidunt sem et turpis molestie malesuada. Curabitur vel nulla risus, sed mollis erat. Suspendisse vehicula accumsan purus nec varius. Donec fermentum lorem id felis sodales dictum. Quisque et dolor ipsum. Nam luctus consectetur dui vitae fermentum. Curabitur sodales consequat augue, id ultricies augue tempor ac. Aliquam ac magna id ipsum vehicula bibendum. Sed elementum congue tristique. Phasellus vel lorem eu lectus porta sodales. Etiam neque tortor, sagittis id pharetra quis, laoreet vel arcu. Cras quam mi, ornare laoreet laoreet vel, vehicula at lacus. Maecenas a lacus accumsan augue convallis sagittis sed quis odio. Morbi sit amet turpis diam, dictum convallis urna. Cras eget interdum augue. Cras eu nisi sit amet dolor faucibus porttitor. Suspendisse potenti. Nunc vitae dolor risus, at cursus libero. Suspendisse bibendum tellus non nibh hendrerit tristique. Mauris eget orci elit. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Nam porta libero non ante laoreet semper. Proin volutpat sodales mi, ac fermentum erat sagittis in. Vivamus at viverra felis. Ut pretium facilisis ante et pharetra. Nulla facilisi. Cras varius quam eget libero aliquam vitae tincidunt leo rutrum. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Pellentesque a nisl massa, quis pretium urna. Proin vel porttitor tortor. Cras rhoncus congue velit in bibendum. Donec pharetra semper augue id lacinia. Quisque magna quam, hendrerit eu aliquam et, pellentesque ut tellus. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Maecenas nulla quam, rutrum eu feugiat at, elementum eu libero. Maecenas ullamcorper leo et turpis rutrum ac laoreet eros faucibus. Phasellus condimentum lorem quis neque imperdiet quis molestie enim iaculis. Phasellus risus est, vestibulum ut convallis ultrices, dignissim nec erat. Etiam congue lobortis laoreet. Nulla ut neque sed velit dapibus semper. Quisque nec dolor id nibh eleifend iaculis. Vivamus vitae fermentum odio. Etiam malesuada quam in nulla aliquam sed convallis dui feugiat.'."\n"; - -// write text -$pdf->MultiCell(0, 0, $txt, 0, 'J', false, 1, '', '', true, 0, false, true, 0, 'T', false); - -// --------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_064.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_065.php b/tools/tcpdf/examples/example_065.php deleted file mode 100644 index 90794804c..000000000 --- a/tools/tcpdf/examples/example_065.php +++ /dev/null @@ -1,100 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 065'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 065', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set default font subsetting mode -$pdf->setFontSubsetting(true); - -// Set font -$pdf->setFont('helvetica', '', 14, '', true); - -// Add a page -// This method has several options, check the source code documentation for more information. -$pdf->AddPage(); - -// Set some content to print -$html = <<Example of  TCPDF  document in PDF/A-1b mode. -This document conforms to the standard PDF/A-1b (ISO 19005-1:2005). -

    Please check the source code documentation and other examples for further information (http://www.tcpdf.org).

    -

    TO IMPROVE AND EXPAND TCPDF I NEED YOUR SUPPORT, PLEASE MAKE A DONATION!

    -EOD; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); - -// --------------------------------------------------------- - -// Close and output PDF document -// This method has several options, check the source code documentation for more information. -$pdf->Output('example_065.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/example_066.php b/tools/tcpdf/examples/example_066.php deleted file mode 100644 index 41b8b4729..000000000 --- a/tools/tcpdf/examples/example_066.php +++ /dev/null @@ -1,88 +0,0 @@ - - * @license LGPL-3.0 - */ - -/** - * Creates an example PDF/A-1b document using TCPDF - * - * @abstract TCPDF - Example: PDF/A-1b mode - * @author Nicola Asuni - * @since 2021-03-26 - * @group A-1b - * @group pdf - */ - -// Include the main TCPDF library (search for installation path). -require_once('tcpdf_include.php'); - -// create new PDF document -$pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false, true); - -// set document information -$pdf->setCreator(PDF_CREATOR); -$pdf->setAuthor('Nicola Asuni'); -$pdf->setTitle('TCPDF Example 066'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE . ' 066', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(true, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(__DIR__ . '/lang/eng.php')) { - require_once __DIR__ . '/lang/eng.php'; - - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set default font subsetting mode -$pdf->setFontSubsetting(true); - -// Set font -$pdf->setFont('helvetica', '', 14, '', true); - -// Add a page -// This method has several options, check the source code documentation for more information. -$pdf->AddPage(); - -// Set some content to print -$html = <<Example of  TCPDF  document in PDF/A-1b mode. -This document conforms to the standard PDF/A-1b (ISO 19005-1:2005). -

    Please check the source code documentation and other examples for further information (http://www.tcpdf.org).

    -HTML; - -// Print text using writeHTMLCell() -$pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true); - -// --------------------------------------------------------- - -// Close and output PDF document -// This method has several options, check the source code documentation for more information. -$pdf->Output('example_066.pdf', 'I'); diff --git a/tools/tcpdf/examples/example_067.php b/tools/tcpdf/examples/example_067.php deleted file mode 100644 index e0262bfde..000000000 --- a/tools/tcpdf/examples/example_067.php +++ /dev/null @@ -1,223 +0,0 @@ -setCreator(PDF_CREATOR); -$pdf->setAuthor('Owen Leibman'); -$pdf->setTitle('TCPDF Example 067'); -$pdf->setSubject('TCPDF Tutorial'); -$pdf->setKeywords('TCPDF, PDF, example, test, guide'); - -// set default header data -$pdf->setHeaderData(PDF_HEADER_LOGO, PDF_HEADER_LOGO_WIDTH, PDF_HEADER_TITLE.' 067', PDF_HEADER_STRING); - -// set header and footer fonts -$pdf->setHeaderFont(Array(PDF_FONT_NAME_MAIN, '', PDF_FONT_SIZE_MAIN)); -$pdf->setFooterFont(Array(PDF_FONT_NAME_DATA, '', PDF_FONT_SIZE_DATA)); - -// set default monospaced font -$pdf->setDefaultMonospacedFont(PDF_FONT_MONOSPACED); - -// set margins -$pdf->setMargins(PDF_MARGIN_LEFT, PDF_MARGIN_TOP, PDF_MARGIN_RIGHT); -$pdf->setHeaderMargin(PDF_MARGIN_HEADER); -$pdf->setFooterMargin(PDF_MARGIN_FOOTER); - -// set auto page breaks -$pdf->setAutoPageBreak(TRUE, PDF_MARGIN_BOTTOM); - -// set image scale factor -$pdf->setImageScale(PDF_IMAGE_SCALE_RATIO); - -// set some language-dependent strings (optional) -if (@file_exists(dirname(__FILE__).'/lang/eng.php')) { - require_once(dirname(__FILE__).'/lang/eng.php'); - $pdf->setLanguageArray($l); -} - -// --------------------------------------------------------- - -// set font -$pdf->setFont('helvetica', 'B', 20); - -// add a page -$pdf->AddPage(); - -$pdf->Write(0, 'Example of HTML tables', '', 0, 'L', true, 0, false, false, 0); - -$pdf->setFont('helvetica', '', 8); - -// ----------------------------------------------------------------------------- - -$tbl = << - - COL 1 - ROW 1
    COLSPAN 3 - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line - COL 3 - ROW 2 - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << - - COL 1 - ROW 1
    COLSPAN 3 - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line - COL 3 - ROW 2 - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << - - COL 1 - ROW 1
    COLSPAN 3 - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line - COL 3 - ROW 2 - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << - - COL 1 - ROW 1
    COLSPAN 3 - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line - COL 3 - ROW 2 - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -$tbl = << - - COL 1 - ROW 1
    COLSPAN 3 - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line - COL 3 - ROW 2 - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); - -// ----------------------------------------------------------------------------- - -// At medium thickness, which is what you get with only one -// setting for style, everything looks the same. -// Included just for completeness. -$tbl = << - - COL 1 - ROW 1
    COLSPAN 3 - COL 2 - ROW 1 - COL 3 - ROW 1 - - - COL 2 - ROW 2 - COLSPAN 2
    text line
    text line
    text line
    text line - COL 3 - ROW 2 - - - COL 3 - ROW 3 - - - -EOD; - -$pdf->writeHTML($tbl, true, false, false, false, ''); -// ----------------------------------------------------------------------------- - -//Close and output PDF document -$pdf->Output('example_067.pdf', 'I'); - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/examples/images/_blank.png b/tools/tcpdf/examples/images/_blank.png deleted file mode 100644 index 38f7b2fa56ab08499e0d6f848af9b91c14963aa1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 137 zcmeAS@N?(olHy`uVBq!ia0vp^j3CUx3?$;uu;>Cg%mF?juK)l4Uw%aT1W2wV$S;_| z;n|HeAcwQSBeIx*fm;ZK886+f`vVdzag8W(&d<$F%`0JG=+x?E0}66^x;TbZ%t=lF YvY8kdJ=QNN1hN=BUHx3vIVCg!07t?hGXMYp diff --git a/tools/tcpdf/examples/images/alpha.png b/tools/tcpdf/examples/images/alpha.png deleted file mode 100644 index 4980117ded8358282314bc2c5af51cb2a9498cd7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 23862 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 IJ8jYb*|WvFi2wiq diff --git a/tools/tcpdf/examples/images/image_with_alpha.png b/tools/tcpdf/examples/images/image_with_alpha.png deleted file mode 100644 index f87dc9a1b2dc7d356e76ef3b485d450c636fc57d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 243788 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

    Hsk~n0u#`(y;CzaIbzoL^nKdv()Lb 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 diff --git a/tools/tcpdf/examples/images/img.png b/tools/tcpdf/examples/images/img.png deleted file mode 100644 index 2461637e3cae7b8c83bc38eab1ea2b51243547f2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 194711 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 diff --git a/tools/tcpdf/examples/images/logo_example.gif b/tools/tcpdf/examples/images/logo_example.gif deleted file mode 100644 index 010b487d9383f988fd960f7858c6c25743700cae..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 21022 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 diff --git a/tools/tcpdf/examples/images/logo_example.jpg b/tools/tcpdf/examples/images/logo_example.jpg deleted file mode 100644 index 6d9b8fd807682a1a66b404caa61d5db8719afa60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 32732 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�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 I!{3$v2faPUy#N3J diff --git a/tools/tcpdf/examples/images/logo_example.png b/tools/tcpdf/examples/images/logo_example.png deleted file mode 100644 index a57be4ce96ccfb5350cfc58dc40b76a6a94de4c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 17829 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 diff --git a/tools/tcpdf/examples/images/tcpdf_box.ai b/tools/tcpdf/examples/images/tcpdf_box.ai deleted file mode 100644 index 0c1484614..000000000 --- a/tools/tcpdf/examples/images/tcpdf_box.ai +++ /dev/null @@ -1,214 +0,0 @@ -%!PS-Adobe-3.0 EPSF -%%Creator: Adobe Illustrator -%%BoundingBox: -7 0 487 327 -%%HiResBoundingBox: -6.66162 2.44007e-05 486.662 326.648 -%AI5_FileFormat 3 -%%EndComments -%%BeginProlog -%%EndProlog -%%BeginSetup -%%EndSetup -1 XR -%AI5_BeginLayer -1 1 1 1 0 0 -1 49 80 161 Lb -(New Layer) Ln -0.620000 0.580000 0.435000 0.996000 K -[] 0 d -1.402287 w -0 j -0 J -0.263000 0.290000 0.898000 0.263000 k -72.7885 255.643 m -277.08 286.778 L -425.478 260.993 L -408.269 190.301 L -113.504 181.247 L -113.504 181.247 72.9813 241.769 72.7885 255.643 C -b -0.620000 0.580000 0.435000 0.996000 K -1 j -0.094000 0.102000 0.369000 0.016000 k -423.247 259.914 m -240.217 207.097 L -240.635 0.701168 L -397.776 116.053 L -423.247 259.914 L -b -0.620000 0.580000 0.435000 0.996000 K -0.133000 0.141000 0.541000 0.035000 k -72.1745 254.207 m -240.217 207.097 L -240.561 0.783816 L -101.054 87.946 L -72.1745 254.207 L -b -0.047000 0.059000 0.184000 0.004000 k -423.247 259.914 m -308.187 51.1553 L -396.862 116.972 L -423.247 259.914 L -f -0.620000 0.580000 0.435000 0.996000 K -0 j -0.047000 0.059000 0.184000 0.004000 k -479.312 250.415 m -423.613 260.243 L -240.385 206.966 L -314.061 186.394 L -479.312 250.415 L -b -0.620000 0.580000 0.435000 0.996000 K -0.047000 0.059000 0.184000 0.004000 k -69.9121 254.273 m -237.965 207.131 L -163.618 164.537 L -0.687544 234.686 L -69.9121 254.273 L -b -0.620000 0.580000 0.435000 0.996000 K -0.047000 0.059000 0.184000 0.004000 k -242.971 319.299 m -275.613 286.233 L -72.5703 254.295 L -16.555 296.161 L -242.971 319.299 L -b -0.620000 0.580000 0.435000 0.996000 K -0.133000 0.141000 0.541000 0.035000 k -423.496 260.684 m -275.426 286.441 L -307.326 316.69 L -462.053 292.606 L -423.496 260.684 L -b -0.196000 0.227000 0.871000 0.106000 k -75.26 254.037 m -274.806 285.371 L -227.928 211.257 L -163.396 228.836 130.937 238.701 75.26 254.037 C -f -0.620000 0.580000 0.435000 0.996000 K -1 j -0.169000 0.314000 0.424000 0.094000 k -275.528 286.329 m -274.75 216.78 L -275.528 286.329 L -b -0.031000 0.949000 0.745000 0.729000 k -285.929 160.982 m -285.929 160.982 285.078 139.734 285.078 139.734 C -285.078 139.734 275.378 135.096 275.378 135.096 C -275.378 135.096 273.058 57.6061 273.058 57.6061 C -273.058 57.6061 257.133 47.3536 257.133 47.3536 C -257.133 47.3536 258.059 126.816 258.059 126.816 C -258.059 126.816 247.186 121.618 247.186 121.618 C -247.186 121.618 247.186 144.26 247.186 144.26 C -247.186 144.26 285.929 160.982 285.929 160.982 C -F -0.031000 0.949000 0.745000 0.729000 k -320.884 135.342 m -320.884 135.342 307.279 128.129 307.279 128.129 C -307.279 128.129 308.36 144.944 308.36 144.944 C -308.681 149.948 308.724 153.011 308.483 154.097 C -308.268 155.24 307.632 155.567 306.572 155.073 C -305.368 154.512 304.553 153.381 304.135 151.687 C -303.718 149.995 303.36 146.608 303.063 141.565 C -303.063 141.565 300.477 97.6864 300.477 97.6864 C -300.22 93.3298 300.208 90.6032 300.439 89.4791 C -300.668 88.3599 301.318 88.1316 302.385 88.7881 C -303.403 89.4149 304.103 90.4684 304.487 91.9528 C -304.894 93.4524 305.253 96.6211 305.567 101.497 C -305.567 101.497 306.297 112.86 306.297 112.86 C -306.297 112.86 319.718 120.438 319.718 120.438 C -319.718 120.438 319.446 116.964 319.446 116.964 C -318.734 107.862 317.873 101.293 316.856 97.1389 C -315.864 93.0164 314.026 88.8059 311.329 84.474 C -308.636 80.1307 305.421 76.743 301.646 74.2975 C -297.651 71.7096 294.365 70.7251 291.812 71.3887 C -289.213 72.064 287.545 74.2699 286.838 78.0362 C -286.121 81.8925 285.954 88.3297 286.349 97.4441 C -286.349 97.4441 287.575 125.751 287.575 125.751 C -287.89 133.007 288.277 138.586 288.737 142.421 C -289.202 146.323 290.251 150.369 291.883 154.544 C -293.54 158.732 295.716 162.4 298.394 165.529 C -301.078 168.689 304.052 170.959 307.296 172.342 C -311.621 174.188 315.02 174.154 317.521 172.296 C -319.974 170.473 321.427 167.541 321.911 163.514 C -322.39 159.578 322.275 153.119 321.579 144.225 C -321.579 144.225 320.884 135.342 320.884 135.342 C -F -0.031000 0.949000 0.745000 0.729000 k -*u -329.084 179.607 m -329.084 179.607 342.074 185.214 342.074 185.214 C -345.446 186.669 347.94 187.235 349.586 186.932 C -351.233 186.642 352.374 185.695 353.019 184.1 C -353.677 182.527 353.999 180.418 353.991 177.777 C -354.005 175.2 353.703 171.072 353.088 165.429 C -353.088 165.429 352.244 157.683 352.244 157.683 C -351.634 152.084 350.908 147.89 350.063 145.056 C -349.22 142.228 347.957 139.718 346.265 137.514 C -344.583 135.308 342.474 133.487 339.919 132.046 C -339.919 132.046 336.736 130.25 336.736 130.25 C -336.736 130.25 333.512 96.527 333.512 96.527 C -333.512 96.527 321.545 88.8222 321.545 88.8222 C -321.545 88.8222 329.084 179.607 329.084 179.607 C -F -340.42 168.795 m -340.42 168.795 338.184 145.407 338.184 145.407 C -338.526 145.552 338.82 145.69 339.068 145.822 C -340.172 146.404 340.98 147.319 341.498 148.568 C -342.038 149.863 342.473 152.174 342.805 155.518 C -342.805 155.518 343.55 163.014 343.55 163.014 C -343.863 166.167 343.82 168.111 343.416 168.832 C -343.011 169.557 342.015 169.547 340.42 168.795 C -F -*U -0.031000 0.949000 0.745000 0.729000 k -*u -359.204 192.607 m -359.204 192.607 367.556 196.212 367.556 196.212 C -372.753 198.454 376.114 199.414 377.734 199.14 C -379.351 198.877 380.446 197.777 381.03 195.854 C -381.608 193.948 381.815 191.642 381.655 188.934 C -381.502 186.28 380.88 180.934 379.804 172.981 C -379.804 172.981 375.968 144.653 375.968 144.653 C -375.021 137.654 374.236 132.926 373.604 130.399 C -372.993 127.921 372.216 125.786 371.268 123.986 C -370.323 122.215 369.243 120.698 368.023 119.43 C -366.801 118.187 365.012 116.807 362.638 115.279 C -362.638 115.279 349.593 106.88 349.593 106.88 C -349.593 106.88 359.204 192.607 359.204 192.607 C -F -368.395 181.985 m -368.395 181.985 361.644 126.918 361.644 126.918 C -363.113 127.815 364.084 128.947 364.566 130.32 C -365.053 131.727 365.629 135.077 366.301 140.416 C -366.301 140.416 370.368 172.752 370.368 172.752 C -370.86 176.666 371.12 179.163 371.145 180.223 C -371.168 181.285 371.006 181.972 370.654 182.282 C -370.306 182.629 369.555 182.531 368.395 181.985 C -F -*U -0.031000 0.949000 0.745000 0.729000 k -387.58 204.854 m -387.58 204.854 403.348 211.659 403.348 211.659 C -403.348 211.659 400.803 195.062 400.803 195.062 C -400.803 195.062 394.579 192.087 394.579 192.087 C -394.579 192.087 392.296 176.619 392.296 176.619 C -392.296 176.619 397.801 179.482 397.801 179.482 C -397.801 179.482 395.533 164.634 395.533 164.634 C -395.533 164.634 390.075 161.574 390.075 161.574 C -390.075 161.574 385.406 129.937 385.406 129.937 C -385.406 129.937 376.374 124.122 376.374 124.122 C -376.374 124.122 387.58 204.854 387.58 204.854 C -F -LB -%AI5_EndLayer-- -%AI5_BeginLayer -1 1 1 1 0 0 -1 49 80 161 Lb -(MasterLayer 1) Ln -LB -%AI5_EndLayer-- -%%Trailer -%%EOF diff --git a/tools/tcpdf/examples/images/tcpdf_box.svg b/tools/tcpdf/examples/images/tcpdf_box.svg deleted file mode 100644 index 8c29e64ab..000000000 --- a/tools/tcpdf/examples/images/tcpdf_box.svg +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/tools/tcpdf/examples/images/tcpdf_cell.png b/tools/tcpdf/examples/images/tcpdf_cell.png deleted file mode 100644 index 2e3e92ccb5fef32377017eb11b5b6c96eb079b0a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38367 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 L%PbHD-7owf_cIG8 diff --git a/tools/tcpdf/examples/images/tcpdf_signature.png b/tools/tcpdf/examples/images/tcpdf_signature.png deleted file mode 100644 index 64caa51feced2b5be6b50a076b4aa546b1732a87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67764 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 diff --git a/tools/tcpdf/examples/images/testsvg.svg b/tools/tcpdf/examples/images/testsvg.svg deleted file mode 100644 index fd8314e34..000000000 --- a/tools/tcpdf/examples/images/testsvg.svg +++ /dev/null @@ -1,328 +0,0 @@ - - - - - TCPDF SVG EXAMPLE - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - www.tcpdf.org - - - - - - - - SVG - diff --git a/tools/tcpdf/examples/images/tux.svg b/tools/tcpdf/examples/images/tux.svg deleted file mode 100644 index de8c86968..000000000 --- a/tools/tcpdf/examples/images/tux.svg +++ /dev/null @@ -1,1487 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/tools/tcpdf/examples/index.php b/tools/tcpdf/examples/index.php deleted file mode 100644 index d865689b1..000000000 --- a/tools/tcpdf/examples/index.php +++ /dev/null @@ -1,117 +0,0 @@ -'; -?> - - - - - -TCPDF Examples - - - - - - - - -

    TCPDF Examples

    - -

    PDF

    - -
      -
    1. Simple PDF with default Header and Footer: [PDF]
    2. -
    3. Simple PDF without Header and Footer: [PDF]
    4. -
    5. Custom Header and Footer: [PDF]
    6. -
    7. Cell stretching: [PDF]
    8. -
    9. Multicell: [PDF]
    10. -
    11. WriteHTML and RTL support: [PDF]
    12. -
    13. Independent columns with WriteHTMLCell: [PDF]
    14. -
    15. External UTF-8 text file: [PDF]
    16. -
    17. Image: [PDF]
    18. -
    19. Multiple columns: [PDF]
    20. -
    21. Colored Tables: [PDF]
    22. -
    23. Graphic Functions: [PDF]
    24. -
    25. Graphic Transformations: [PDF]
    26. -
    27. Javascript and Forms: [PDF]
    28. -
    29. Bookmarks (Table of Content): [PDF]
    30. -
    31. Document Encryption: [PDF]
    32. -
    33. Independent columns with MultiCell: [PDF]
    34. -
    35. Persian and Arabic language on RTL document: [PDF]
    36. -
    37. Non unicode / Alternative config file: [PDF]
    38. -
    39. Multicell complex alignment: [PDF]
    40. -
    41. writeHTML alignment: [PDF]
    42. -
    43. CMYK colors: [PDF]
    44. -
    45. Page Groups: [PDF]
    46. -
    47. Object Visibility and Layers: [PDF]
    48. -
    49. Object Transparency: [PDF]
    50. -
    51. Text Rendering Modes and Text Clipping: [PDF]
    52. -
    53. 1D Barcodes: [PDF]
    54. -
    55. Multiple page formats: [PDF]
    56. -
    57. Set PDF viewer display preferences: [PDF]
    58. -
    59. Colour gradients: [PDF]
    60. -
    61. Pie Chart Graphic: [PDF]
    62. -
    63. EPS/AI vectorial image: [PDF]
    64. -
    65. Mixed font types (TrueType Unicode, core, CID-0): [PDF]
    66. -
    67. Clipping masks: [PDF]
    68. -
    69. Line styles with cells and multicells: [PDF]
    70. -
    71. Text Annotations: [PDF]
    72. -
    73. Spot Colors: [PDF]
    74. -
    75. NON-embedded CID-0 CJK font: [PDF]
    76. -
    77. HTML Justification: [PDF]
    78. -
    79. Booklet (double-sided pages): [PDF]
    80. -
    81. File attachment: [PDF]
    82. -
    83. Image with Alpha Channel Transparency: [PDF]
    84. -
    85. Disk caching: [PDF]
    86. -
    87. Move, Copy and Delete page: [PDF]
    88. -
    89. Table Of Content with Bookmarks: [PDF]
    90. -
    91. Text hyphenation: [PDF]
    92. -
    93. Transactions and UNDO: [PDF]
    94. -
    95. Table header and rowspan: [PDF]
    96. -
    97. TCPDF methods in HTML: [PDF]
    98. -
    99. 2D Barcode (QR-Code, Datamatrix ECC200 and PDF417): [PDF]
    100. -
    101. Full page background: [PDF]
    102. -
    103. Digital Signature Certification: [PDF]
    104. -
    105. Javascript functions: [PDF]
    106. -
    107. XHTML Form: [PDF]
    108. -
    109. Font Dump: [PDF]
    110. -
    111. Crop Marks and Registration Marks: [PDF]
    112. -
    113. Cell vertical alignments and borders: [PDF]
    114. -
    115. SVG Image: [PDF]
    116. -
    117. Table Of Content with HTML templates: [PDF]
    118. -
    119. Advanced page settings: [PDF]
    120. -
    121. XHTML + CSS: [PDF]
    122. -
    123. XObject Templates: [PDF]
    124. -
    125. Text stretching and spacing (tracking/kerning): [PDF]
    126. -
    127. No-write page regions: [PDF]
    128. -
    129. PDF/A-1b (ISO 19005-1:2005) document: [PDF]
    130. -
    131. Using WriteHTMLCell: [PDF]
    132. -
    133. Shorthand border styles including !important: [PDF]
    134. -
    - -

    Barcodes

    - -
      -
    1. 1D barcode HTML format [HTML]
    2. -
    3. 1D barcode PNG format [PNG]
    4. -
    5. 1D barcode SVG format [SVG]
    6. -
    7. 1D barcode SVG INLINE format [SVG INLINE]
    8. - -
    9. 2D datamatrix barcode HTML format [HTML]
    10. -
    11. 2D datamatrix barcode PNG format [PNG]
    12. -
    13. 2D datamatrix barcode SVG format [SVG]
    14. -
    15. 2D datamatrix barcode SVG INLINE format [SVG INLINE]
    16. - -
    17. 2D pdf417 barcode HTML format [HTML]
    18. -
    19. 2D pdf417 barcode PNG format [PNG]
    20. -
    21. 2D pdf417 barcode SVG format [SVG]
    22. -
    23. 2D pdf417 barcode SVG INLINE format [SVG INLINE]
    24. - -
    25. 2D qrcode barcode HTML format [HTML]
    26. -
    27. 2D qrcode barcode PNG format [PNG]
    28. -
    29. 2D qrcode barcode SVG format [SVG]
    30. -
    31. 2D qrcode barcode SVG INLINE format [SVG INLINE]
    32. -
    - - - diff --git a/tools/tcpdf/examples/lang/afr.php b/tools/tcpdf/examples/lang/afr.php deleted file mode 100644 index 367b7e87f..000000000 --- a/tools/tcpdf/examples/lang/afr.php +++ /dev/null @@ -1,44 +0,0 @@ - + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/tools/tcpdf/fonts/freefont-20100919/CREDITS b/tools/tcpdf/fonts/freefont-20100919/CREDITS index 0b69784b5..e4a8b634e 100644 --- a/tools/tcpdf/fonts/freefont-20100919/CREDITS +++ b/tools/tcpdf/fonts/freefont-20100919/CREDITS @@ -331,7 +331,7 @@ a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) under the GNU General Public License (GPL). You can download the fonts from the Free Software Foundation of India WWW site -(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. +(https://www.gnu.org.in/akruti-fonts/) or from the Akruti website. For any further information or assistance regarding these fonts, please contact mssridhar AT vsnl.com. diff --git a/tools/tcpdf/fonts/freefont-20120503/COPYING b/tools/tcpdf/fonts/freefont-20120503/COPYING index 94a9ed024..ae0725d80 100644 --- a/tools/tcpdf/fonts/freefont-20120503/COPYING +++ b/tools/tcpdf/fonts/freefont-20120503/COPYING @@ -1,7 +1,7 @@ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @@ -645,7 +645,7 @@ the "copyright" line and a pointer to where the full notice is found. GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program. If not, see . + along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. @@ -664,11 +664,11 @@ might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see -. +. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read -. +. diff --git a/tools/tcpdf/fonts/freefont-20120503/CREDITS b/tools/tcpdf/fonts/freefont-20120503/CREDITS index f4430ecf9..bc078aacc 100644 --- a/tools/tcpdf/fonts/freefont-20120503/CREDITS +++ b/tools/tcpdf/fonts/freefont-20120503/CREDITS @@ -336,7 +336,7 @@ a set of TTF fonts for nine Indian scripts (Devanagari, Gujarati, Telugu, Tamil, Malayalam, Kannada, Bengali, Oriya, and Gurumukhi) under the GNU General Public License (GPL). You can download the fonts from the Free Software Foundation of India WWW site -(http://www.gnu.org.in/akruti-fonts/) or from the Akruti website. +(https://www.gnu.org.in/akruti-fonts/) or from the Akruti website. For any further information or assistance regarding these fonts, please contact mssridhar AT vsnl.com. diff --git a/tools/tcpdf/fonts/freefont-20120503/README b/tools/tcpdf/fonts/freefont-20120503/README index d83f4a945..daf679e67 100644 --- a/tools/tcpdf/fonts/freefont-20120503/README +++ b/tools/tcpdf/fonts/freefont-20120503/README @@ -30,7 +30,7 @@ FreeFont covers the following character ranges * geometrical shapes, box drawing * musical symbols, gaming symbols, miscellaneous symbols etc. -For more detail see +For more detail see Editing ------- @@ -108,7 +108,7 @@ Further information ------------------- Home page of GNU FreeFont: - http://www.gnu.org/software/freefont/ + https://www.gnu.org/software/freefont/ More information is at the main project page of Free UCS scalable fonts: http://savannah.gnu.org/projects/freefont/ diff --git a/tools/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING b/tools/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING index a7af22255..0639198ac 100644 --- a/tools/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING +++ b/tools/tcpdf/fonts/freefont-20120503/TROUBLESHOOTING @@ -27,7 +27,7 @@ a different font. First double-check that the font in question really contains the character in question. If you don't have font development software, this can be tricky. In the case of FreeFont, you can check if a given character -range is supported: +range is supported: Next double-check that your application (web browser, text editor, etc) has indeed been properly instructed to use the font. diff --git a/tools/tcpdf/include/barcodes/datamatrix.php b/tools/tcpdf/include/barcodes/datamatrix.php index d1cc6d2a9..77822fdf1 100644 --- a/tools/tcpdf/include/barcodes/datamatrix.php +++ b/tools/tcpdf/include/barcodes/datamatrix.php @@ -5,9 +5,9 @@ // Begin : 2010-06-07 // Last Update : 2014-05-06 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2010-2014 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2010-2014 2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- diff --git a/tools/tcpdf/include/barcodes/pdf417.php b/tools/tcpdf/include/barcodes/pdf417.php index bda24822f..4c9a4b3d1 100644 --- a/tools/tcpdf/include/barcodes/pdf417.php +++ b/tools/tcpdf/include/barcodes/pdf417.php @@ -5,9 +5,9 @@ // Begin : 2010-06-03 // Last Update : 2014-04-25 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2010-2013 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2010-2013 2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- diff --git a/tools/tcpdf/include/barcodes/qrcode.php b/tools/tcpdf/include/barcodes/qrcode.php index 1a64a4cb5..72cbf15e8 100644 --- a/tools/tcpdf/include/barcodes/qrcode.php +++ b/tools/tcpdf/include/barcodes/qrcode.php @@ -5,9 +5,9 @@ // Begin : 2010-03-22 // Last Update : 2012-07-25 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2010-2012 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2010-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- diff --git a/tools/tcpdf/include/tcpdf_colors.php b/tools/tcpdf/include/tcpdf_colors.php index 5a51594c3..fc5aeb08f 100644 --- a/tools/tcpdf/include/tcpdf_colors.php +++ b/tools/tcpdf/include/tcpdf_colors.php @@ -5,9 +5,9 @@ // Begin : 2002-04-09 // Last Update : 2014-04-25 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2002-2013 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2002-2013 2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- @@ -275,7 +275,7 @@ class TCPDF_COLORS { $color = strtolower($color); // check for javascript color array syntax if (strpos($color, '[') !== false) { - if (preg_match('/[\[][\"\'](t|g|rgb|cmyk)[\"\'][\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\]]/', $color, $m) > 0) { + if (preg_match('/[\[][\"\'](t|g|rgba|rgb|cmyk)[\"\'][\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\,]?([0-9\.]*+)[\]]/', $color, $m) > 0) { $returncolor = array(); switch ($m[1]) { case 'cmyk': { @@ -286,7 +286,8 @@ class TCPDF_COLORS { $returncolor['K'] = max(0, min(100, (floatval($m[5]) * 100))); break; } - case 'rgb': { + case 'rgb': + case 'rgba': { // RGB $returncolor['R'] = max(0, min(255, (floatval($m[2]) * 255))); $returncolor['G'] = max(0, min(255, (floatval($m[3]) * 255))); @@ -317,6 +318,25 @@ class TCPDF_COLORS { if (strlen($color) == 0) { return $defcol; } + // RGBA ARRAY + if (substr($color, 0, 4) == 'rgba') { + $codes = substr($color, 5); + $codes = str_replace(')', '', $codes); + $returncolor = explode(',', $codes); + // remove alpha component + array_pop($returncolor); + foreach ($returncolor as $key => $val) { + if (strpos($val, '%') > 0) { + // percentage + $returncolor[$key] = (255 * intval($val) / 100); + } else { + $returncolor[$key] = intval($val); /* floatize */ + } + // normalize value + $returncolor[$key] = max(0, min(255, $returncolor[$key])); + } + return $returncolor; + } // RGB ARRAY if (substr($color, 0, 3) == 'rgb') { $codes = substr($color, 4); diff --git a/tools/tcpdf/include/tcpdf_filters.php b/tools/tcpdf/include/tcpdf_filters.php index 3009cff7c..96be66f5d 100644 --- a/tools/tcpdf/include/tcpdf_filters.php +++ b/tools/tcpdf/include/tcpdf_filters.php @@ -5,9 +5,9 @@ // Begin : 2011-05-23 // Last Update : 2014-04-25 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2011-2013 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2011-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // diff --git a/tools/tcpdf/include/tcpdf_font_data.php b/tools/tcpdf/include/tcpdf_font_data.php index 974e72ec7..d7eae2f30 100644 --- a/tools/tcpdf/include/tcpdf_font_data.php +++ b/tools/tcpdf/include/tcpdf_font_data.php @@ -5,9 +5,9 @@ // Begin : 2008-01-01 // Last Update : 2013-04-01 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2008-2013 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2008-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- diff --git a/tools/tcpdf/include/tcpdf_fonts.php b/tools/tcpdf/include/tcpdf_fonts.php index f4518d9ef..1fc24f5af 100644 --- a/tools/tcpdf/include/tcpdf_fonts.php +++ b/tools/tcpdf/include/tcpdf_fonts.php @@ -1,13 +1,13 @@ . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- @@ -42,7 +42,7 @@ * @class TCPDF_FONTS * Font methods for TCPDF library. * @package com.tecnick.tcpdf - * @version 1.1.0 + * @version 1.1.1 * @author Nicola Asuni - info@tecnick.com */ class TCPDF_FONTS { @@ -191,29 +191,30 @@ class TCPDF_FONTS { fclose($fp); // get font info $fmetric['Flags'] = $flags; - preg_match ('#/FullName[\s]*\(([^\)]*)#', $font, $matches); + preg_match ('#/FullName[\s]*+\(([^\)]*+)#', $font, $matches); $fmetric['name'] = preg_replace('/[^a-zA-Z0-9_\-]/', '', $matches[1]); - preg_match('#/FontBBox[\s]*{([^}]*)#', $font, $matches); - $fmetric['bbox'] = trim($matches[1]); - $bv = explode(' ', $fmetric['bbox']); - $fmetric['Ascent'] = intval($bv[3]); - $fmetric['Descent'] = intval($bv[1]); - preg_match('#/ItalicAngle[\s]*([0-9\+\-]*)#', $font, $matches); + preg_match('#/FontBBox[\s]*+{([^}]*+)#', $font, $matches); + $rawbvl = explode(' ', trim($matches[1])); + $bvl = [(int) $rawbvl[0], (int) $rawbvl[1], (int) $rawbvl[2], (int) $rawbvl[3]]; + $fmetric['bbox'] = implode(' ', $bvl); + $fmetric['Ascent'] = $bvl[3]; + $fmetric['Descent'] = $bvl[1]; + preg_match('#/ItalicAngle[\s]*+([0-9\+\-]*+)#', $font, $matches); $fmetric['italicAngle'] = intval($matches[1]); if ($fmetric['italicAngle'] != 0) { $fmetric['Flags'] |= 64; } - preg_match('#/UnderlinePosition[\s]*([0-9\+\-]*)#', $font, $matches); + preg_match('#/UnderlinePosition[\s]*+([0-9\+\-]*+)#', $font, $matches); $fmetric['underlinePosition'] = intval($matches[1]); - preg_match('#/UnderlineThickness[\s]*([0-9\+\-]*)#', $font, $matches); + preg_match('#/UnderlineThickness[\s]*+([0-9\+\-]*+)#', $font, $matches); $fmetric['underlineThickness'] = intval($matches[1]); - preg_match('#/isFixedPitch[\s]*([^\s]*)#', $font, $matches); + preg_match('#/isFixedPitch[\s]*+([^\s]*+)#', $font, $matches); if ($matches[1] == 'true') { $fmetric['Flags'] |= 1; } // get internal map $imap = array(); - if (preg_match_all('#dup[\s]([0-9]+)[\s]*/([^\s]*)[\s]put#sU', $font, $fmap, PREG_SET_ORDER) > 0) { + if (preg_match_all('#dup[\s]([0-9]+)[\s]*+/([^\s]*+)[\s]put#sU', $font, $fmap, PREG_SET_ORDER) > 0) { foreach ($fmap as $v) { $imap[$v[2]] = $v[1]; } @@ -229,22 +230,22 @@ class TCPDF_FONTS { $eplain .= chr($chr ^ ($r >> 8)); $r = ((($chr + $r) * $c1 + $c2) % 65536); } - if (preg_match('#/ForceBold[\s]*([^\s]*)#', $eplain, $matches) > 0) { + if (preg_match('#/ForceBold[\s]*+([^\s]*+)#', $eplain, $matches) > 0) { if ($matches[1] == 'true') { $fmetric['Flags'] |= 0x40000; } } - if (preg_match('#/StdVW[\s]*\[([^\]]*)#', $eplain, $matches) > 0) { + if (preg_match('#/StdVW[\s]*+\[([^\]]*+)#', $eplain, $matches) > 0) { $fmetric['StemV'] = intval($matches[1]); } else { $fmetric['StemV'] = 70; } - if (preg_match('#/StdHW[\s]*\[([^\]]*)#', $eplain, $matches) > 0) { + if (preg_match('#/StdHW[\s]*+\[([^\]]*+)#', $eplain, $matches) > 0) { $fmetric['StemH'] = intval($matches[1]); } else { $fmetric['StemH'] = 30; } - if (preg_match('#/BlueValues[\s]*\[([^\]]*)#', $eplain, $matches) > 0) { + if (preg_match('#/BlueValues[\s]*+\[([^\]]*+)#', $eplain, $matches) > 0) { $bv = explode(' ', $matches[1]); if (count($bv) >= 6) { $v1 = intval($bv[2]); @@ -265,7 +266,7 @@ class TCPDF_FONTS { $fmetric['CapHeight'] = 700; } // get the number of random bytes at the beginning of charstrings - if (preg_match('#/lenIV[\s]*([0-9]*)#', $eplain, $matches) > 0) { + if (preg_match('#/lenIV[\s]*+([\d]*+)#', $eplain, $matches) > 0) { $lenIV = intval($matches[1]); } else { $lenIV = 4; @@ -273,7 +274,7 @@ class TCPDF_FONTS { $fmetric['Leading'] = 0; // get charstring data $eplain = substr($eplain, (strpos($eplain, '/CharStrings') + 1)); - preg_match_all('#/([A-Za-z0-9\.]*)[\s][0-9]+[\s]RD[\s](.*)[\s]ND#sU', $eplain, $matches, PREG_SET_ORDER); + preg_match_all('#/([A-Za-z0-9\.]*+)[\s][0-9]+[\s]RD[\s](.*)[\s]ND#sU', $eplain, $matches, PREG_SET_ORDER); if (!empty($enc) AND isset(TCPDF_FONT_DATA::$encmap[$enc])) { $enc_map = TCPDF_FONT_DATA::$encmap[$enc]; } else { @@ -1383,7 +1384,7 @@ class TCPDF_FONTS { } // set checkSumAdjustment on head table $checkSumAdjustment = 0xB1B0AFBA - self::_getTTFtableChecksum($font, strlen($font)); - $font = substr($font, 0, $table['head']['offset'] + $offset + 8).pack('N', $checkSumAdjustment).substr($font, $table['head']['offset'] + $offset + 12); + $font = substr($font, 0, $table['head']['offset'] + $offset + 4).pack('N', $checkSumAdjustment).substr($font, $table['head']['offset'] + $offset + 8); return $font; } diff --git a/tools/tcpdf/include/tcpdf_images.php b/tools/tcpdf/include/tcpdf_images.php index 6f2860c60..2d8b96e62 100644 --- a/tools/tcpdf/include/tcpdf_images.php +++ b/tools/tcpdf/include/tcpdf_images.php @@ -5,9 +5,9 @@ // Begin : 2002-08-03 // Last Update : 2014-11-15 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2002-2014 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2002-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -126,7 +126,9 @@ class TCPDF_IMAGES { // create temporary PNG image imagepng($image, $tempfile); // remove image from memory - imagedestroy($image); + if (PHP_VERSION_ID < 80000) { + imagedestroy($image); + } // get PNG image data $retvars = self::_parsepng($tempfile); // tidy up by removing temporary image @@ -145,7 +147,9 @@ class TCPDF_IMAGES { */ public static function _toJPEG($image, $quality, $tempfile) { imagejpeg($image, $tempfile, $quality); - imagedestroy($image); + if (PHP_VERSION_ID < 80000) { + imagedestroy($image); + } $retvars = self::_parsejpeg($tempfile); // tidy up by removing temporary image unlink($tempfile); @@ -270,12 +274,12 @@ class TCPDF_IMAGES { return 'pngalpha'; } if (ord(fread($f, 1)) != 0) { - // Unknown compression method + // Unknownn compression method fclose($f); return false; } if (ord(fread($f, 1)) != 0) { - // Unknown filter method + // Unknownn filter method fclose($f); return false; } @@ -327,7 +331,7 @@ class TCPDF_IMAGES { } // get compression method if (ord(fread($f, 1)) != 0) { - // Unknown filter method + // Unknownn filter method fclose($f); return false; } diff --git a/tools/tcpdf/include/tcpdf_static.php b/tools/tcpdf/include/tcpdf_static.php index 16828944c..86dbad577 100644 --- a/tools/tcpdf/include/tcpdf_static.php +++ b/tools/tcpdf/include/tcpdf_static.php @@ -1,13 +1,13 @@ * @package com.tecnick.tcpdf * @author Nicola Asuni - * @version 1.1.2 + * @version 1.1.5 */ /** @@ -46,7 +46,7 @@ * Static methods used by the TCPDF class. * @package com.tecnick.tcpdf * @brief PHP class for generating PDF documents without requiring external extensions. - * @version 1.1.1 + * @version 1.1.5 * @author Nicola Asuni - info@tecnick.com */ class TCPDF_STATIC { @@ -55,7 +55,7 @@ class TCPDF_STATIC { * Current TCPDF version. * @private static */ - private static $tcpdf_version = '6.7.8'; + private static $tcpdf_version = '6.11.3'; /** * String alias for total number of pages. @@ -106,6 +106,31 @@ class TCPDF_STATIC { */ public static $pageboxes = array('MediaBox', 'CropBox', 'BleedBox', 'TrimBox', 'ArtBox'); + /** + * Array of default cURL options for curl_setopt_array. + * + * @var array cURL options. + */ + protected const CURLOPT_DEFAULT = [ + CURLOPT_CONNECTTIMEOUT => 5, + CURLOPT_MAXREDIRS => 5, + CURLOPT_PROTOCOLS => CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS, + CURLOPT_SSL_VERIFYHOST => 2, + CURLOPT_SSL_VERIFYPEER => true, + CURLOPT_TIMEOUT => 30, + CURLOPT_USERAGENT => 'tcpdf', + ]; + + /** + * Array of fixed cURL options for curl_setopt_array. + * + * @var array cURL options. + */ + protected const CURLOPT_FIXED = [ + CURLOPT_FAILONERROR => true, + CURLOPT_RETURNTRANSFER => true, + ]; + // - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - /** @@ -467,7 +492,7 @@ class TCPDF_STATIC { * @param string $last_enc_key_c Reference to last RC4 computed key. * @return string encrypted text * @since 2.0.000 (2008-01-02) - * @author Klemen Vodopivec, Nicola Asuni + * @author Klemen Vodopivec,2026 Nicola Asuni * @public static */ public static function _RC4($key, $text, &$last_enc_key, &$last_enc_key_c) { @@ -1823,26 +1848,24 @@ class TCPDF_STATIC { */ public static function url_exists($url) { $crs = curl_init(); - // encode query params in URL to get right response form the server - $url = self::encodeUrlQuery($url); - curl_setopt($crs, CURLOPT_URL, $url); - curl_setopt($crs, CURLOPT_NOBODY, true); - curl_setopt($crs, CURLOPT_FAILONERROR, true); - if ((ini_get('open_basedir') == '') && (!ini_get('safe_mode'))) { - curl_setopt($crs, CURLOPT_FOLLOWLOCATION, true); - } - curl_setopt($crs, CURLOPT_CONNECTTIMEOUT, 5); - curl_setopt($crs, CURLOPT_TIMEOUT, 30); - curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file'); - curl_setopt($crs, CURLOPT_MAXREDIRS, 5); - if (defined('CURLOPT_PROTOCOLS')) { - curl_setopt($crs, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS); - } + $curlopts = []; + if ( + (ini_get('open_basedir') == '') + && (ini_get('safe_mode') === '' + || ini_get('safe_mode') === false) + ) { + $curlopts[CURLOPT_FOLLOWLOCATION] = true; + } + $curlopts = array_replace($curlopts, self::CURLOPT_DEFAULT); + $curlopts = array_replace($curlopts, K_CURLOPTS); + $curlopts = array_replace($curlopts, self::CURLOPT_FIXED); + $curlopts[CURLOPT_URL] = $url; + curl_setopt_array($crs, $curlopts); curl_exec($crs); $code = curl_getinfo($crs, CURLINFO_HTTP_CODE); - curl_close($crs); + if (PHP_VERSION_ID < 80000) { + curl_close($crs); + } return ($code == 200); } @@ -1960,23 +1983,23 @@ class TCPDF_STATIC { ) { // try to get remote file data using cURL $crs = curl_init(); - curl_setopt($crs, CURLOPT_URL, $path); - curl_setopt($crs, CURLOPT_FAILONERROR, true); - curl_setopt($crs, CURLOPT_RETURNTRANSFER, true); - if ((ini_get('open_basedir') == '') && (!ini_get('safe_mode'))) { - curl_setopt($crs, CURLOPT_FOLLOWLOCATION, true); - } - curl_setopt($crs, CURLOPT_CONNECTTIMEOUT, 5); - curl_setopt($crs, CURLOPT_TIMEOUT, 30); - curl_setopt($crs, CURLOPT_SSL_VERIFYPEER, false); - curl_setopt($crs, CURLOPT_SSL_VERIFYHOST, false); - curl_setopt($crs, CURLOPT_USERAGENT, 'tc-lib-file'); - curl_setopt($crs, CURLOPT_MAXREDIRS, 5); - if (defined('CURLOPT_PROTOCOLS')) { - curl_setopt($crs, CURLOPT_PROTOCOLS, CURLPROTO_HTTPS | CURLPROTO_HTTP | CURLPROTO_FTP | CURLPROTO_FTPS); + $curlopts = []; + if ( + (ini_get('open_basedir') == '') + && (ini_get('safe_mode') === '' + || ini_get('safe_mode') === false) + ) { + $curlopts[CURLOPT_FOLLOWLOCATION] = true; } + $curlopts = array_replace($curlopts, self::CURLOPT_DEFAULT); + $curlopts = array_replace($curlopts, K_CURLOPTS); + $curlopts = array_replace($curlopts, self::CURLOPT_FIXED); + $curlopts[CURLOPT_URL] = $url; + curl_setopt_array($crs, $curlopts); $ret = curl_exec($crs); - curl_close($crs); + if (PHP_VERSION_ID < 80000) { + curl_close($crs); + } if ($ret !== false) { return $ret; } @@ -2633,7 +2656,6 @@ class TCPDF_STATIC { return $page_mode; } - } // END OF TCPDF_STATIC CLASS //============================================================+ diff --git a/tools/tcpdf/tcpdf.php b/tools/tcpdf/tcpdf.php index 3404c52b3..b369532dc 100644 --- a/tools/tcpdf/tcpdf.php +++ b/tools/tcpdf/tcpdf.php @@ -1,13 +1,13 @@ * @package com.tecnick.tcpdf * @author Nicola Asuni - * @version 6.7.8 + * @version 6.11.3 */ // TCPDF configuration @@ -128,7 +128,7 @@ require_once(dirname(__FILE__).'/include/tcpdf_static.php'); * TCPDF project (http://www.tcpdf.org) has been originally derived in 2002 from the Public Domain FPDF class by Olivier Plathey (http://www.fpdf.org), but now is almost entirely rewritten.
    * @package com.tecnick.tcpdf * @brief PHP class for generating PDF documents without requiring external extensions. - * @version 6.7.8 + * @version 6.11.3 * @author Nicola Asuni - info@tecnick.com * @IgnoreAnnotation("protected") * @IgnoreAnnotation("public") @@ -1131,7 +1131,7 @@ class TCPDF { protected $opencell = true; /** - * Array of files to embedd. + * Array of files to embed. * @protected * @since 4.4.000 (2008-12-07) */ @@ -1810,6 +1810,13 @@ class TCPDF { */ protected $custom_xmp_rdf = ''; + /** + * Custom XMP RDF pdfaextension data. + * @protected + * @since 6.9.0 (2025-02-11) + */ + protected $custom_xmp_rdf_pdfaExtension = ''; + /** * Overprint mode array. * (Check the "Entries in a Graphics State Parameter Dictionary" on PDF 32000-1:2008). @@ -2900,14 +2907,7 @@ class TCPDF { * @since 1.4 */ public function setCompression($compress=true) { - $this->compress = false; - if (function_exists('gzcompress')) { - if ($compress) { - if ( !$this->pdfa_mode) { - $this->compress = true; - } - } - } + $this->compress = ($compress && function_exists('gzcompress')); } /** @@ -3007,6 +3007,7 @@ class TCPDF { public function Error($msg) { // unset all class variables $this->_destroy(true); + $msg = htmlspecialchars($msg, ENT_QUOTES, 'UTF-8'); if (defined('K_TCPDF_THROW_EXCEPTION_ERROR') AND !K_TCPDF_THROW_EXCEPTION_ERROR) { die('TCPDF ERROR: '.$msg); } else { @@ -4251,7 +4252,7 @@ class TCPDF { * @param string $style Font style. Possible values are (case insensitive):
    • empty string: regular (default)
    • B: bold
    • I: italic
    • BI or IB: bold italic
    * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. * @return array|false array containing the font data, or false in case of error. - * @param mixed $subset if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. + * @param mixed $subset if true embed only a subset of the font (stores only the information related to the used characters); if false embed full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. * @public * @since 1.5 * @see SetFont(), setFontSubsetting() @@ -4431,7 +4432,7 @@ class TCPDF { $this->Error('All fonts must be embedded in PDF/A mode!'); } } else { - $this->Error('Unknow font type: '.$type.''); + $this->Error('Unknown font type: '.$type.''); } // set name if unset if (empty($name)) { @@ -4521,7 +4522,7 @@ class TCPDF { * @param string $style Font style. Possible values are (case insensitive):
    • empty string: regular
    • B: bold
    • I: italic
    • U: underline
    • D: line through
    • O: overline
    or any combination. The default value is regular. Bold and italic styles do not apply to Symbol and ZapfDingbats basic fonts or other fonts when not defined. * @param float|null $size Font size in points. The default value is the current size. If no size has been specified since the beginning of the document, the value taken is 12 * @param string $fontfile The font definition file. By default, the name is built from the family and style, in lower case with no spaces. - * @param mixed $subset if true embedd only a subset of the font (stores only the information related to the used characters); if false embedd full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. + * @param mixed $subset if true embed only a subset of the font (stores only the information related to the used characters); if false embed full font; if 'default' uses the default value set using setFontSubsetting(). This option is valid only for TrueTypeUnicode fonts. If you want to enable users to change the document, set this parameter to false. If you subset the font, the person who receives your PDF would need to have your same font in order to make changes to your PDF. The file size of the PDF would also be smaller because you are embedding only part of a font. * @param boolean $out if true output the font size command, otherwise only set the font properties. * @author Nicola Asuni * @public @@ -4931,6 +4932,32 @@ class TCPDF { } } + /** + * Embed the attached files. + * @since 6.9.000 (2025-02-11) + * @public + */ + public function EmbedFile($opt) { + if (!$this->pdfa_mode || ($this->pdfa_mode && $this->pdfa_version == 3)) { + if ((($opt['Subtype'] == 'FileAttachment')) AND (!TCPDF_STATIC::empty_string($opt['FS'])) + AND (@TCPDF_STATIC::file_exists($opt['FS']) OR TCPDF_STATIC::isValidURL($opt['FS'])) + AND (!isset($this->embeddedfiles[basename($opt['FS'])]))) { + $this->embeddedfiles[basename($opt['FS'])] = array('f' => ++$this->n, 'n' => ++$this->n, 'file' => $opt['FS']); + } + } + } + + /** + * Embed the attached files. + * @since 6.9.000 (2025-02-11) + * @public + */ + public function EmbedFileFromString($filename, $content) { + if (!$this->pdfa_mode || ($this->pdfa_mode && $this->pdfa_version == 3)) { + $this->embeddedfiles[$filename] = array('f' => ++$this->n, 'n' => ++$this->n, 'content' => $content ); + } + } + /** * Embedd the attached files. * @since 4.4.000 (2008-12-07) @@ -4944,7 +4971,12 @@ class TCPDF { } reset($this->embeddedfiles); foreach ($this->embeddedfiles as $filename => $filedata) { - $data = $this->getCachedFileContents($filedata['file']); + $data = false; + if (isset($filedata['file']) && !empty($filedata['file'])) { + $data = $this->getCachedFileContents($filedata['file']); + } elseif ($filedata['content'] && !empty($filedata['content'])) { + $data = $filedata['content']; + } if ($data !== FALSE) { $rawsize = strlen($data); if ($rawsize > 0) { @@ -4962,11 +4994,10 @@ class TCPDF { $filter = ''; if ($this->compress) { $data = gzcompress($data); - $filter = ' /Filter /FlateDecode'; + $filter .= ' /Filter /FlateDecode'; } - if ($this->pdfa_version == 3) { - $filter = ' /Subtype /text#2Fxml'; + $filter .= ' /Subtype /text#2Fxml'; } $stream = $this->_getrawstream($data, $filedata['n']); @@ -6232,7 +6263,7 @@ class TCPDF { * @param array|null $cellpadding Internal cell padding, if empty uses default cell padding. * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) * @return float Return the minimal height needed for multicell method for printing the $txt param. - * @author Alexander Escalona Fern\E1ndez, Nicola Asuni + * @author Alexander Escalona Fern\E1ndez,2026 Nicola Asuni * @public * @since 4.5.011 */ @@ -6428,7 +6459,7 @@ class TCPDF { // replacement for SHY character (minus symbol) $shy_replacement = 45; $shy_replacement_char = TCPDF_FONTS::unichr($shy_replacement, $this->isunicode); - // widht for SHY replacement + // width for SHY replacement $shy_replacement_width = $this->GetCharWidth($shy_replacement); // page width $pw = $w = $this->w - $this->lMargin - $this->rMargin; @@ -6886,8 +6917,8 @@ class TCPDF { // fallback to avoid division by zero $h = $h == 0 ? 1 : $h; $ratio_wh = ($w / $h); - if (($y + $h) > $this->PageBreakTrigger) { - $h = $this->PageBreakTrigger - $y; + if (($y + $h) > $this->PageBreakTrigger + $this->bMargin) { + $h = $this->PageBreakTrigger + $this->bMargin - $y; $w = ($h * $ratio_wh); } if ((!$this->rtl) AND (($x + $w) > ($this->w - $this->rMargin))) { @@ -6988,7 +7019,7 @@ class TCPDF { unset($imgdata); $imsize = @getimagesize($file); if ($imsize === FALSE) { - unlink($file); + $this->_unlink($file); $file = $original_file; } } @@ -7221,7 +7252,7 @@ class TCPDF { $tempname = TCPDF_STATIC::getObjFilename('img', $this->file_id); $img->writeImage($tempname); $info = TCPDF_IMAGES::_parsejpeg($tempname); - unlink($tempname); + $this->_unlink($tempname); $img->destroy(); } catch(Exception $e) { $info = false; @@ -7401,12 +7432,16 @@ class TCPDF { } } imagepng($imgalpha, $tempfile_alpha); - imagedestroy($imgalpha); + if (PHP_VERSION_ID < 80000) { + imagedestroy($imgalpha); + } // extract image without alpha channel $imgplain = imagecreatetruecolor($wpx, $hpx); imagecopy($imgplain, $img, 0, 0, 0, 0, $wpx, $hpx); imagepng($imgplain, $tempfile_plain); - imagedestroy($imgplain); + if (PHP_VERSION_ID < 80000) { + imagedestroy($imgplain); + } $parsed = true; } catch (Exception $e) { // GD fails @@ -7848,7 +7883,7 @@ class TCPDF { * @since 4.5.016 (2009-02-24) */ public function _destroy($destroyall=false, $preserve_objcopy=false) { - if (isset(self::$cleaned_ids[$this->file_id])) { + if (isset($this->file_id) && isset(self::$cleaned_ids[$this->file_id])) { $destroyall = false; } if ($destroyall AND !$preserve_objcopy && isset($this->file_id)) { @@ -7857,15 +7892,16 @@ class TCPDF { if ($handle = @opendir(K_PATH_CACHE)) { while ( false !== ( $file_name = readdir( $handle ) ) ) { if (strpos($file_name, '__tcpdf_'.$this->file_id.'_') === 0) { - unlink(K_PATH_CACHE.$file_name); + $this->_unlink(K_PATH_CACHE.$file_name); } } closedir($handle); } if (isset($this->imagekeys)) { foreach($this->imagekeys as $file) { - if (strpos($file, K_PATH_CACHE) === 0 && TCPDF_STATIC::file_exists($file)) { - @unlink($file); + if ((strpos($file, K_PATH_CACHE.'__tcpdf_'.$this->file_id.'_') === 0) + && TCPDF_STATIC::file_exists($file)) { + $this->_unlink($file); } } } @@ -8310,15 +8346,15 @@ class TCPDF { break; } case 'locked': { - $fval += 1 << 8; + $fval += 1 << 7; break; } case 'togglenoview': { - $fval += 1 << 9; + $fval += 1 << 8; break; } case 'lockedcontents': { - $fval += 1 << 10; + $fval += 1 << 9; break; } default: { @@ -8895,7 +8931,7 @@ class TCPDF { $this->_out('<< /Type /Encoding /BaseEncoding /WinAnsiEncoding /Differences ['.$diff.'] >>'."\n".'endobj'); } foreach ($this->FontFiles as $file => $info) { - // search and get font file to embedd + // search and get font file to embed $fontfile = TCPDF_FONTS::getFontFullPath($file, $info['fontdir']); if (!TCPDF_STATIC::empty_string($fontfile)) { $font = file_get_contents($fontfile); @@ -9110,9 +9146,9 @@ class TCPDF { $this->_newobj(); // Embed CIDToGIDMap // A specification of the mapping from CIDs to glyph indices - // search and get CTG font file to embedd + // search and get CTG font file to embed $ctgfile = strtolower($font['ctg']); - // search and get ctg font file to embedd + // search and get ctg font file to embed $fontfile = TCPDF_FONTS::getFontFullPath($ctgfile, $fontdir); if (TCPDF_STATIC::empty_string($fontfile)) { $this->Error('Font file not found: '.$ctgfile); @@ -9137,7 +9173,7 @@ class TCPDF { * A Type 0 CIDFont contains glyph descriptions based on the Adobe Type 1 font format * @param array $font font data * @protected - * @author Andrew Whitehead, Nicola Asuni, Yukihiro Nakadaira + * @author Andrew Whitehead,2026 Nicola Asuni, Yukihiro Nakadaira * @since 3.2.000 (2008-06-23) */ protected function _putcidfont0($font) { @@ -9628,6 +9664,17 @@ class TCPDF { $this->custom_xmp_rdf = $xmp; } + /** + * Set additional XMP data to be added to the default XMP data for PDF/A extensions. + * IMPORTANT: This data is added as-is without controls, so you have to validate your data before using this method! + * @param string $xmp Custom XMP RDF data. + * @since 6.9.0 (2025-02-14) + * @public + */ + public function setExtraXMPPdfaextension($xmp) { + $this->custom_xmp_rdf_pdfaExtension = $xmp; + } + /** * Put XMP data object and return ID. * @return int The object ID. @@ -9762,6 +9809,7 @@ class TCPDF { $xmp .= "\t\t\t\t\t\t\t".''."\n"; $xmp .= "\t\t\t\t\t\t".''."\n"; $xmp .= "\t\t\t\t\t".''."\n"; + $xmp .= $this->custom_xmp_rdf_pdfaExtension; $xmp .= "\t\t\t\t".''."\n"; $xmp .= "\t\t\t".''."\n"; $xmp .= "\t\t".''."\n"; @@ -9800,7 +9848,11 @@ class TCPDF { } // start catalog $oid = $this->_newobj(); - $out = '<< /Type /Catalog'; + $out = '<< '; + if (!empty($this->efnames)) { + $out .= ' /AF [ '. implode(' ', $this->efnames) .' ]'; + } + $out .= ' /Type /Catalog'; $out .= ' /Version /'.$this->PDFVersion; //$out .= ' /Extensions <<>>'; $out .= ' /Pages 1 0 R'; @@ -12275,7 +12327,7 @@ class TCPDF { * @param int $head_style (0 = draw only arrowhead arms, 1 = draw closed arrowhead, but no fill, 2 = closed and filled arrowhead, 3 = filled arrowhead) * @param float $arm_size length of arrowhead arms * @param int $arm_angle angle between an arm and the shaft - * @author Piotr Galecki, Nicola Asuni, Andy Meier + * @author Piotr Galecki,2026 Nicola Asuni, Andy Meier * @since 4.6.018 (2009-07-10) */ public function Arrow($x0, $y0, $x1, $y1, $head_style=0, $arm_size=5, $arm_angle=15) { @@ -12340,7 +12392,7 @@ class TCPDF { * @param float $x X position in user units of the destiantion on the selected page (default = -1 = current position;). * @return string|false Stripped named destination identifier or false in case of error. * @public - * @author Christian Deligant, Nicola Asuni + * @author Christian Deligant,2026 Nicola Asuni * @since 5.9.097 (2011-06-23) */ public function setDestination($name, $y=-1, $page='', $x=-1) { @@ -12393,7 +12445,7 @@ class TCPDF { /** * Insert Named Destinations. * @protected - * @author Johannes G\FCntert, Nicola Asuni + * @author Johannes G\FCntert,2026 Nicola Asuni * @since 5.9.098 (2011-06-23) */ protected function _putdests() { @@ -12502,7 +12554,7 @@ class TCPDF { /** * Create a bookmark PDF string. * @protected - * @author Olivier Plathey, Nicola Asuni + * @author Olivier Plathey,2026 Nicola Asuni * @since 2.1.002 (2008-02-12) */ protected function _putbookmarks() { @@ -12628,7 +12680,7 @@ class TCPDF { * Adds a javascript * @param string $script Javascript code * @public - * @author Johannes G\FCntert, Nicola Asuni + * @author Johannes G\FCntert,2026 Nicola Asuni * @since 2.1.002 (2008-02-12) */ public function IncludeJS($script) { @@ -12657,7 +12709,7 @@ class TCPDF { /** * Create a javascript PDF string. * @protected - * @author Johannes G\FCntert, Nicola Asuni + * @author Johannes G\FCntert,2026 Nicola Asuni * @since 2.1.002 (2008-02-12) */ protected function _putjavascript() { @@ -12715,7 +12767,7 @@ class TCPDF { * @param int $h height * @param array $prop javascript field properties. Possible values are described on official Javascript for Acrobat API reference. * @protected - * @author Denis Van Nuffelen, Nicola Asuni + * @author Denis Van Nuffelen,2026 Nicola Asuni * @since 2.1.002 (2008-02-12) */ protected function _addfield($type, $name, $x, $y, $w, $h, $prop) { @@ -14448,7 +14500,7 @@ class TCPDF { * @param array $col1 first color (Grayscale, RGB or CMYK components). * @param array $col2 second color (Grayscale, RGB or CMYK components). * @param array $coords array of the form (x1, y1, x2, y2) which defines the gradient vector (see linear_gradient_coords.jpg). The default value is from left to right (x1=0, y1=0, x2=1, y2=0). - * @author Andreas W\FCrmser, Nicola Asuni + * @author Andreas W\FCrmser,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @public */ @@ -14466,7 +14518,7 @@ class TCPDF { * @param array $col1 first color (Grayscale, RGB or CMYK components). * @param array $col2 second color (Grayscale, RGB or CMYK components). * @param array $coords array of the form (fx, fy, cx, cy, r) where (fx, fy) is the starting point of the gradient with color1, (cx, cy) is the center of the circle with color2, and r is the radius of the circle (see radial_gradient_coords.jpg). (fx, fy) should be inside the circle, otherwise some areas will not be defined. - * @author Andreas W\FCrmser, Nicola Asuni + * @author Andreas W\FCrmser,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @public */ @@ -14489,7 +14541,7 @@ class TCPDF { * @param array $coords_min minimum value used by the coordinates. If a coordinate's value is smaller than this it will be cut to coords_min. default: 0 * @param array $coords_max maximum value used by the coordinates. If a coordinate's value is greater than this it will be cut to coords_max. default: 1 * @param boolean $antialias A flag indicating whether to filter the shading function to prevent aliasing artifacts. - * @author Andreas W\FCrmser, Nicola Asuni + * @author Andreas W\FCrmser,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @public */ @@ -14581,7 +14633,7 @@ class TCPDF { * @param float $y ordinate of the top left corner of the rectangle. * @param float $w width of the rectangle. * @param float $h height of the rectangle. - * @author Andreas W\FCrmser, Nicola Asuni + * @author Andreas W\FCrmser,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @protected */ @@ -14907,7 +14959,7 @@ class TCPDF { * @param string $style Style of rendering. See the getPathPaintOperator() function for more information. * @param float $cw indicates whether to go clockwise (default: true). * @param float $o origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). Default: 90. - * @author Maxime Delorme, Nicola Asuni + * @author Maxime Delorme,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @public */ @@ -14928,7 +14980,7 @@ class TCPDF { * @param float $cw indicates whether to go clockwise. * @param float $o origin of angles (0 for 3 o'clock, 90 for noon, 180 for 9 o'clock, 270 for 6 o'clock). * @param integer $nc Number of curves used to draw a 90 degrees portion of arc. - * @author Maxime Delorme, Nicola Asuni + * @author Maxime Delorme,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @public */ @@ -14972,7 +15024,7 @@ class TCPDF { * @param mixed $border Indicates if borders must be drawn around the cell. The value can be a number:
    • 0: no border (default)
    • 1: frame
    or a string containing some or all of the following characters (in any order):
    • L: left
    • T: top
    • R: right
    • B: bottom
    or an array of line styles for each border group - for example: array('LTRB' => array('width' => 2, 'cap' => 'butt', 'join' => 'miter', 'dash' => 0, 'color' => array(0, 0, 0))) * @param boolean $fitonpage if true the image is resized to not exceed page dimensions. * @param boolean $fixoutvals if true remove values outside the bounding box. - * @author Valentin Schmidt, Nicola Asuni + * @author Valentin Schmidt,2026 Nicola Asuni * @since 3.1.000 (2008-06-09) * @public */ @@ -16396,7 +16448,7 @@ class TCPDF { * @since 3.2.000 (2008-06-20) */ protected function getHtmlDomArray($html) { - // set inheritable properties fot the first void element + // set inheritable properties for the first void element // possible inheritable properties are: azimuth, border-collapse, border-spacing, caption-side, color, cursor, direction, empty-cells, font, font-family, font-stretch, font-size, font-size-adjust, font-style, font-variant, font-weight, letter-spacing, line-height, list-style, list-style-image, list-style-position, list-style-type, orphans, page, page-break-inside, quotes, speak, speak-header, text-align, text-indent, text-transform, volume, white-space, widows, word-spacing $dom = array( array( @@ -16862,7 +16914,7 @@ class TCPDF { $dom[$key]['height'] = $dom[$key]['style']['height']; } // check for text alignment - if (isset($dom[$key]['style']['text-align'])) { + if (isset($dom[$key]['style']['text-align'][0])) { $dom[$key]['align'] = strtoupper($dom[$key]['style']['text-align'][0]); } // check for CSS border properties @@ -17259,7 +17311,7 @@ class TCPDF { $hlen = intval(substr($data, 0, $hpos)); $hash = substr($data, $hpos + 1, $hlen); $encoded = substr($data, $hpos + 2 + $hlen); - if ($hash != $this->hashTCPDFtag($encoded)) { + if (!hash_equals( $this->hashTCPDFtag($encoded), $hash)) { $this->Error('Invalid parameters'); } return json_decode(urldecode($encoded), true); @@ -17425,6 +17477,9 @@ class TCPDF { } } if ($key == $maxel) break; + if ($dom[$key]['tag'] AND $dom[$key]['opening'] AND !empty($dom[$key]['attribute']['id'])) { + $this->setDestination($dom[$key]['attribute']['id']); + } if ($dom[$key]['tag'] AND isset($dom[$key]['attribute']['pagebreak'])) { // check for pagebreak if (($dom[$key]['attribute']['pagebreak'] == 'true') OR ($dom[$key]['attribute']['pagebreak'] == 'left') OR ($dom[$key]['attribute']['pagebreak'] == 'right')) { @@ -18867,6 +18922,29 @@ class TCPDF { unset($dom); } + /** + * Check if the path is relative. + * @param string $path path to check + * @return boolean true if the path is relative + * @protected + * @since 6.9.1 + */ + protected function isRelativePath($path) { + return (strpos(str_ireplace('%2E', '.', $this->unhtmlentities($path)), '..') !== false); + } + + /** + * Check if it contains a non-allowed external protocol. + * @param string $path path to check + * @return boolean true if the protocol is not allowed. + * @protected + * @since 6.9.3 + */ + protected function hasExtForbiddenProtocol($path) { + return ((strpos($path, '://') !== false) + && (preg_match('|^https?://|', $path) !== 1)); + } + /** * Process opening tags. * @param array $dom html dom array @@ -19059,13 +19137,15 @@ class TCPDF { } else if (preg_match('@^data:image/([^;]*);base64,(.*)@', $imgsrc, $reg)) { $imgsrc = '@'.base64_decode($reg[2]); $type = $reg[1]; - } elseif (strpos($imgsrc, '../') !== false) { + } elseif ($this->isRelativePath($imgsrc)) { // accessing parent folders is not allowed break; } elseif ( $this->allowLocalFiles && substr($imgsrc, 0, 7) === 'file://') { // get image type from a local file path $imgsrc = substr($imgsrc, 7); $type = TCPDF_IMAGES::getImageFileType($imgsrc); + } elseif ($this->hasExtForbiddenProtocol($imgsrc)) { + break; } else { if (($imgsrc[0] === '/') AND !empty($_SERVER['DOCUMENT_ROOT']) AND ($_SERVER['DOCUMENT_ROOT'] != '/')) { // fix image path @@ -19124,7 +19204,7 @@ class TCPDF { $imglink = ''; if (isset($this->HREF['url']) AND !TCPDF_STATIC::empty_string($this->HREF['url'])) { $imglink = $this->HREF['url']; - if ($imglink[0] == '#') { + if ($imglink[0] == '#' AND isset($imglink[1]) AND is_numeric($imglink[1])) { // convert url to internal link $lnkdata = explode(',', $imglink); if (isset($lnkdata[0])) { @@ -19985,7 +20065,7 @@ class TCPDF { } } if (!$in_table_head) { // we are not inside a thead section - $this->cell_padding = isset($table_el['old_cell_padding']) ? $table_el['old_cell_padding'] : null; + $this->cell_padding = isset($table_el['old_cell_padding']) ? $table_el['old_cell_padding'] : array('T' => 0, 'R' => 0, 'B' => 0, 'L' => 0); // reset row height $this->resetLastH(); if (($this->page == ($this->numpages - 1)) AND ($this->pageopen[$this->numpages])) { @@ -23184,8 +23264,11 @@ class TCPDF { $error_message = sprintf('SVG Error: %s at line %d', xml_error_string(xml_get_error_code($parser)), xml_get_current_line_number($parser)); $this->Error($error_message); } - // free this XML parser - xml_parser_free($parser); + + // free this XML parser (does nothing in PHP >= 8.0) + if (function_exists('xml_parser_free') && PHP_VERSION_ID < 80000) { + xml_parser_free($parser); + } // >= PHP 7.0.0 "explicitly unset the reference to parser to avoid memory leaks" unset($parser); @@ -23416,7 +23499,8 @@ class TCPDF { $gradient['coords'][4] /= $w; } elseif ($gradient['mode'] == 'percentage') { foreach($gradient['coords'] as $key => $val) { - $gradient['coords'][$key] = (intval($val) / 100); + $val = floatval($val) / 100; + $gradient['coords'][$key] = $val; if ($val < 0) { $gradient['coords'][$key] = 0; } elseif ($val > 1) { @@ -23452,6 +23536,8 @@ class TCPDF { $fill_color = TCPDF_COLORS::convertHTMLColorToDec($svgstyle['fill'], $this->spot_colors); if ($svgstyle['fill-opacity'] != 1) { $this->setAlpha($this->alpha['CA'], 'Normal', $svgstyle['fill-opacity'], false); + } elseif (preg_match('/rgba\(\d+%?,\s*\d+%?,\s*\d+%?,\s*(\d+(?:\.\d+)?)\)/i', $svgstyle['fill'], $rgba_matches)) { + $this->setAlpha($this->alpha['CA'], 'Normal', $rgba_matches[1], false); } $this->setFillColorArray($fill_color); if ($svgstyle['fill-rule'] == 'evenodd') { @@ -23485,7 +23571,7 @@ class TCPDF { if (preg_match('/font-family[\s]*:[\s]*([^\;\"]*)/si', $svgstyle['font'], $regs)) { $font_family = $this->getFontFamilyName($regs[1]); } else { - $font_family = $svgstyle['font-family']; + $font_family = $this->getFontFamilyName($svgstyle['font-family']); } if (preg_match('/font-size[\s]*:[\s]*([^\s\;\"]*)/si', $svgstyle['font'], $regs)) { $font_size = trim($regs[1]); @@ -23639,9 +23725,11 @@ class TCPDF { } $params = array(); if (isset($val[2])) { - // get curve parameters - preg_match_all('/-?\d*\.?\d+/', trim($val[2]), $matches); - $rawparams = $matches[0]; + // get curve parameters, see https://github.com/tecnickcom/TCPDF/issues/767 + $rawparams = preg_split('/([\,\s]+)/si', trim($val[2])); + $rawparams = array_filter($rawparams, function($p) { + return trim($p) != ''; + }); $params = array(); foreach ($rawparams as $ck => $cp) { $params[$ck] = $this->getHTMLUnitToUnits($cp, 0, $this->svgunit, false); @@ -24338,6 +24426,7 @@ class TCPDF { } $this->StopTransform(); } + break; } case 'ellipse': { @@ -24466,6 +24555,9 @@ class TCPDF { $img = '@'.base64_decode(substr($img, strlen($m[0]))); } else { // fix image path + if ($this->isRelativePath($img) || $this->hasExtForbiddenProtocol($img)) { + break; + } if (!TCPDF_STATIC::empty_string($this->svgdir) AND (($img[0] == '.') OR (basename($img) == $img))) { // replace relative path with full server path $img = $this->svgdir.'/'.$img; @@ -24648,7 +24740,7 @@ class TCPDF { */ protected function endSVGElementHandler($parser, $name) { $name = $this->removeTagNamespace($name); - if ($this->svgdefsmode AND !in_array($name, array('defs', 'clipPath', 'linearGradient', 'radialGradient', 'stop'))) {; + if ($this->svgdefsmode AND !in_array($name, array('defs', 'clipPath', 'linearGradient', 'radialGradient', 'stop'))) { if (end($this->svgdefs) !== FALSE) { $last_svgdefs_id = key($this->svgdefs); if (isset($this->svgdefs[$last_svgdefs_id]['attribs']['child_elements'])) { @@ -24786,6 +24878,20 @@ class TCPDF { return TCPDF_STATIC::file_exists($file); } + /** + * Wrapper for unlink with disabled protocols. + * @param string $file + * @return bool + */ + protected function _unlink($file) + { + if ((strpos($file, '://') !== false) && ((substr($file, 0, 7) !== 'file://') || (!$this->allowLocalFiles))) { + // forbidden protocol + return false; + } + return @unlink($file); + } + } // END OF TCPDF CLASS //============================================================+ diff --git a/tools/tcpdf/tcpdf_autoconfig.php b/tools/tcpdf/tcpdf_autoconfig.php index 2bcfccb82..dd1404e09 100644 --- a/tools/tcpdf/tcpdf_autoconfig.php +++ b/tools/tcpdf/tcpdf_autoconfig.php @@ -3,11 +3,11 @@ // File name : tcpdf_autoconfig.php // Version : 1.1.1 // Begin : 2013-05-16 -// Last Update : 2014-12-18 +// Last Update : 2025-04-18 // Authors : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2011-2014 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2011-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -37,9 +37,14 @@ * @file * Try to automatically configure some TCPDF constants if not defined. * @package com.tecnick.tcpdf - * @version 1.1.1 + * @version 1.2.1 */ +// Disable phar stream wrapper globally. +// if (in_array('phar', stream_get_wrappers(), true)) { +// stream_wrapper_unregister('phar'); +// } + // DOCUMENT_ROOT fix for IIS Webserver if ((!isset($_SERVER['DOCUMENT_ROOT'])) OR (empty($_SERVER['DOCUMENT_ROOT']))) { if(isset($_SERVER['SCRIPT_FILENAME'])) { @@ -149,7 +154,7 @@ if (!defined('PDF_HEADER_TITLE')) { } if (!defined('PDF_HEADER_STRING')) { - define ('PDF_HEADER_STRING', "by Nicola Asuni - Tecnick.com\nwww.tcpdf.org"); + define ('PDF_HEADER_STRING', "by2026 Nicola Asuni - Tecnick.com\nwww.tcpdf.org"); } if (!defined('PDF_UNIT')) { @@ -201,7 +206,7 @@ if (!defined('PDF_FONT_MONOSPACED')) { } if (!defined('PDF_IMAGE_SCALE_RATIO')) { - define ('PDF_IMAGE_SCALE_RATIO', 1.25); + define ('PDF_IMAGE_SCALE_RATIO', 96/72); } if (!defined('HEAD_MAGNIFICATION')) { @@ -240,6 +245,11 @@ if (!defined('K_TIMEZONE')) { define('K_TIMEZONE', @date_default_timezone_get()); } +// Custom cURL options for curl_setopt_array. +if (!defined('K_CURLOPTS')) { + define('K_CURLOPTS', array()); +} + //============================================================+ // END OF FILE //============================================================+ diff --git a/tools/tcpdf/tcpdf_barcodes_1d.php b/tools/tcpdf/tcpdf_barcodes_1d.php index 45d35616c..34cb6da17 100644 --- a/tools/tcpdf/tcpdf_barcodes_1d.php +++ b/tools/tcpdf/tcpdf_barcodes_1d.php @@ -5,9 +5,9 @@ // Begin : 2008-06-09 // Last Update : 2014-10-20 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2008-2014 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2008-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- @@ -234,7 +234,9 @@ class TCPDFBarcode { ob_start(); imagepng($png); $imagedata = ob_get_clean(); - imagedestroy($png); + if (PHP_VERSION_ID < 80000) { + imagedestroy($png); + } return $imagedata; } } diff --git a/tools/tcpdf/tcpdf_barcodes_2d.php b/tools/tcpdf/tcpdf_barcodes_2d.php index 730361bd8..0e1163653 100644 --- a/tools/tcpdf/tcpdf_barcodes_2d.php +++ b/tools/tcpdf/tcpdf_barcodes_2d.php @@ -5,9 +5,9 @@ // Begin : 2009-04-07 // Last Update : 2014-05-20 // Author : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2009-2014 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2009-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // @@ -22,7 +22,7 @@ // See the GNU Lesser General Public License for more details. // // You should have received a copy of the GNU Lesser General Public License -// along with TCPDF. If not, see . +// along with TCPDF. If not, see . // // See LICENSE.TXT file for more information. // ------------------------------------------------------------------- @@ -238,7 +238,9 @@ class TCPDF2DBarcode { ob_start(); imagepng($png); $imagedata = ob_get_clean(); - imagedestroy($png); + if (PHP_VERSION_ID < 80000) { + imagedestroy($png); + } return $imagedata; } } diff --git a/tools/tcpdf/tcpdf_import.php b/tools/tcpdf/tcpdf_import.php deleted file mode 100644 index 57f9f4f4b..000000000 --- a/tools/tcpdf/tcpdf_import.php +++ /dev/null @@ -1,104 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : This is a PHP class extension of the TCPDF library to -// import existing PDF documents. -// -//============================================================+ - -/** - * @file - * !!! THIS CLASS IS UNDER DEVELOPMENT !!! - * This is a PHP class extension of the TCPDF (http://www.tcpdf.org) library to import existing PDF documents.
    - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.001 - */ - -// include the TCPDF class -require_once(dirname(__FILE__).'/tcpdf.php'); -// include PDF parser class -require_once(dirname(__FILE__).'/tcpdf_parser.php'); - -/** - * @class TCPDF_IMPORT - * !!! THIS CLASS IS UNDER DEVELOPMENT !!! - * PHP class extension of the TCPDF (http://www.tcpdf.org) library to import existing PDF documents.
    - * @package com.tecnick.tcpdf - * @brief PHP class extension of the TCPDF library to import existing PDF documents. - * @version 1.0.001 - * @author Nicola Asuni - info@tecnick.com - */ -class TCPDF_IMPORT extends TCPDF { - - /** - * Import an existing PDF document - * @param string $filename Filename of the PDF document to import. - * @return void - * @public - * @since 1.0.000 (2011-05-24) - */ - public function importPDF($filename) { - // load document - $rawdata = file_get_contents($filename); - if ($rawdata === false) { - $this->Error('Unable to get the content of the file: '.$filename); - } - // configuration parameters for parser - $cfg = array( - 'die_for_errors' => false, - 'ignore_filter_decoding_errors' => true, - 'ignore_missing_filter_decoders' => true, - ); - try { - // parse PDF data - $pdf = new TCPDF_PARSER($rawdata, $cfg); - } catch (Exception $e) { - die($e->getMessage()); - } - // get the parsed data - $data = $pdf->getParsedData(); - // release some memory - unset($rawdata); - - // ... - - - print_r($data); // DEBUG - - - unset($pdf); - } - -} // END OF CLASS - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/tcpdf_parser.php b/tools/tcpdf/tcpdf_parser.php deleted file mode 100644 index 4156230a3..000000000 --- a/tools/tcpdf/tcpdf_parser.php +++ /dev/null @@ -1,815 +0,0 @@ -. -// -// See LICENSE.TXT file for more information. -// ------------------------------------------------------------------- -// -// Description : This is a PHP class for parsing PDF documents. -// -//============================================================+ - -/** - * @file - * This is a PHP class for parsing PDF documents.
    - * @package com.tecnick.tcpdf - * @author Nicola Asuni - * @version 1.0.15 - */ - -// include class for decoding filters -require_once(dirname(__FILE__).'/include/tcpdf_filters.php'); - -/** - * @class TCPDF_PARSER - * This is a PHP class for parsing PDF documents.
    - * @package com.tecnick.tcpdf - * @brief This is a PHP class for parsing PDF documents.. - * @version 1.0.15 - * @author Nicola Asuni - info@tecnick.com - */ -class TCPDF_PARSER { - - /** - * Raw content of the PDF document. - * @private - */ - private $pdfdata = ''; - - /** - * XREF data. - * @protected - */ - protected $xref = array(); - - /** - * Array of PDF objects. - * @protected - */ - protected $objects = array(); - - /** - * Class object for decoding filters. - * @private - */ - private $FilterDecoders; - - /** - * Array of configuration parameters. - * @private - */ - private $cfg = array( - 'die_for_errors' => false, - 'ignore_filter_decoding_errors' => true, - 'ignore_missing_filter_decoders' => true, - ); - -// ----------------------------------------------------------------------------- - - /** - * Parse a PDF document an return an array of objects. - * @param string $data PDF data to parse. - * @param array $cfg Array of configuration parameters: - * 'die_for_errors' : if true termitate the program execution in case of error, otherwise thows an exception; - * 'ignore_filter_decoding_errors' : if true ignore filter decoding errors; - * 'ignore_missing_filter_decoders' : if true ignore missing filter decoding errors. - * @public - * @since 1.0.000 (2011-05-24) - */ - public function __construct($data, $cfg=array()) { - if (empty($data)) { - $this->Error('Empty PDF data.'); - } - // find the pdf header starting position - if (($trimpos = strpos($data, '%PDF-')) === FALSE) { - $this->Error('Invalid PDF data: missing %PDF header.'); - } - // get PDF content string - $this->pdfdata = substr($data, $trimpos); - // get length - $pdflen = strlen($this->pdfdata); - // set configuration parameters - $this->setConfig($cfg); - // get xref and trailer data - $this->xref = $this->getXrefData(); - // parse all document objects - $this->objects = array(); - foreach ($this->xref['xref'] as $obj => $offset) { - if (!isset($this->objects[$obj]) AND ($offset > 0)) { - // decode objects with positive offset - $this->objects[$obj] = $this->getIndirectObject($obj, $offset, true); - } - } - // release some memory - unset($this->pdfdata); - $this->pdfdata = ''; - } - - /** - * Set the configuration parameters. - * @param array $cfg Array of configuration parameters: - * 'die_for_errors' : if true termitate the program execution in case of error, otherwise thows an exception; - * 'ignore_filter_decoding_errors' : if true ignore filter decoding errors; - * 'ignore_missing_filter_decoders' : if true ignore missing filter decoding errors. - * @public - */ - protected function setConfig($cfg) { - if (isset($cfg['die_for_errors'])) { - $this->cfg['die_for_errors'] = !!$cfg['die_for_errors']; - } - if (isset($cfg['ignore_filter_decoding_errors'])) { - $this->cfg['ignore_filter_decoding_errors'] = !!$cfg['ignore_filter_decoding_errors']; - } - if (isset($cfg['ignore_missing_filter_decoders'])) { - $this->cfg['ignore_missing_filter_decoders'] = !!$cfg['ignore_missing_filter_decoders']; - } - } - - /** - * Return an array of parsed PDF document objects. - * @return array Array of parsed PDF document objects. - * @public - * @since 1.0.000 (2011-06-26) - */ - public function getParsedData() { - return array($this->xref, $this->objects); - } - - /** - * Get Cross-Reference (xref) table and trailer data from PDF document data. - * @param int $offset xref offset (if know). - * @param array $xref previous xref array (if any). - * @return array containing xref and trailer data. - * @protected - * @since 1.0.000 (2011-05-24) - */ - protected function getXrefData($offset=0, $xref=array()) { - if ($offset == 0) { - // find last startxref - if (preg_match_all('/[\r\n]startxref[\s]*[\r\n]+([0-9]+)[\s]*[\r\n]+%%EOF/i', $this->pdfdata, $matches, PREG_SET_ORDER, $offset) == 0) { - $this->Error('Unable to find startxref'); - } - $matches = array_pop($matches); - $startxref = $matches[1]; - } elseif (strpos($this->pdfdata, 'xref', $offset) == $offset) { - // Already pointing at the xref table - $startxref = $offset; - } elseif (preg_match('/([0-9]+[\s][0-9]+[\s]obj)/i', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset)) { - // Cross-Reference Stream object - $startxref = $offset; - } elseif (preg_match('/[\r\n]startxref[\s]*[\r\n]+([0-9]+)[\s]*[\r\n]+%%EOF/i', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset)) { - // startxref found - $startxref = $matches[1][0]; - } else { - $this->Error('Unable to find startxref'); - } - // check xref position - if (strpos($this->pdfdata, 'xref', $startxref) == $startxref) { - // Cross-Reference - $xref = $this->decodeXref($startxref, $xref); - } else { - // Cross-Reference Stream - $xref = $this->decodeXrefStream($startxref, $xref); - } - if (empty($xref)) { - $this->Error('Unable to find xref'); - } - return $xref; - } - - /** - * Decode the Cross-Reference section - * @param int $startxref Offset at which the xref section starts (position of the 'xref' keyword). - * @param array $xref Previous xref array (if any). - * @return array containing xref and trailer data. - * @protected - * @since 1.0.000 (2011-06-20) - */ - protected function decodeXref($startxref, $xref=array()) { - $startxref += 4; // 4 is the length of the word 'xref' - // skip initial white space chars: \x00 null (NUL), \x09 horizontal tab (HT), \x0A line feed (LF), \x0C form feed (FF), \x0D carriage return (CR), \x20 space (SP) - $offset = $startxref + strspn($this->pdfdata, "\x00\x09\x0a\x0c\x0d\x20", $startxref); - // initialize object number - $obj_num = 0; - // search for cross-reference entries or subsection - while (preg_match('/([0-9]+)[\x20]([0-9]+)[\x20]?([nf]?)(\r\n|[\x20]?[\r\n])/', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { - if ($matches[0][1] != $offset) { - // we are on another section - break; - } - $offset += strlen($matches[0][0]); - if ($matches[3][0] == 'n') { - // create unique object index: [object number]_[generation number] - $index = $obj_num.'_'.intval($matches[2][0]); - // check if object already exist - if (!isset($xref['xref'][$index])) { - // store object offset position - $xref['xref'][$index] = intval($matches[1][0]); - } - ++$obj_num; - } elseif ($matches[3][0] == 'f') { - ++$obj_num; - } else { - // object number (index) - $obj_num = intval($matches[1][0]); - } - } - // get trailer data - if (preg_match('/trailer[\s]*<<(.*)>>/isU', $this->pdfdata, $matches, PREG_OFFSET_CAPTURE, $offset) > 0) { - $trailer_data = $matches[1][0]; - if (!isset($xref['trailer']) OR empty($xref['trailer'])) { - // get only the last updated version - $xref['trailer'] = array(); - // parse trailer_data - if (preg_match('/Size[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) { - $xref['trailer']['size'] = intval($matches[1]); - } - if (preg_match('/Root[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { - $xref['trailer']['root'] = intval($matches[1]).'_'.intval($matches[2]); - } - if (preg_match('/Encrypt[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { - $xref['trailer']['encrypt'] = intval($matches[1]).'_'.intval($matches[2]); - } - if (preg_match('/Info[\s]+([0-9]+)[\s]+([0-9]+)[\s]+R/i', $trailer_data, $matches) > 0) { - $xref['trailer']['info'] = intval($matches[1]).'_'.intval($matches[2]); - } - if (preg_match('/ID[\s]*[\[][\s]*[<]([^>]*)[>][\s]*[<]([^>]*)[>]/i', $trailer_data, $matches) > 0) { - $xref['trailer']['id'] = array(); - $xref['trailer']['id'][0] = $matches[1]; - $xref['trailer']['id'][1] = $matches[2]; - } - } - if (preg_match('/Prev[\s]+([0-9]+)/i', $trailer_data, $matches) > 0) { - // get previous xref - $xref = $this->getXrefData(intval($matches[1]), $xref); - } - } else { - $this->Error('Unable to find trailer'); - } - return $xref; - } - - /** - * Decode the Cross-Reference Stream section - * @param int $startxref Offset at which the xref section starts. - * @param array $xref Previous xref array (if any). - * @return array containing xref and trailer data. - * @protected - * @since 1.0.003 (2013-03-16) - */ - protected function decodeXrefStream($startxref, $xref=array()) { - // try to read Cross-Reference Stream - $xrefobj = $this->getRawObject($startxref); - $xrefcrs = $this->getIndirectObject($xrefobj[1], $startxref, true); - if (!isset($xref['trailer']) OR empty($xref['trailer'])) { - // get only the last updated version - $xref['trailer'] = array(); - $filltrailer = true; - } else { - $filltrailer = false; - } - if (!isset($xref['xref'])) { - $xref['xref'] = array(); - } - $valid_crs = false; - $columns = 0; - $sarr = $xrefcrs[0][1]; - if (!is_array($sarr)) { - $sarr = array(); - } - foreach ($sarr as $k => $v) { - if (($v[0] == '/') AND ($v[1] == 'Type') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == '/') AND ($sarr[($k +1)][1] == 'XRef'))) { - $valid_crs = true; - } elseif (($v[0] == '/') AND ($v[1] == 'Index') AND (isset($sarr[($k +1)]))) { - // first object number in the subsection - $index_first = intval($sarr[($k +1)][1][0][1]); - // number of entries in the subsection - $index_entries = intval($sarr[($k +1)][1][1][1]); - } elseif (($v[0] == '/') AND ($v[1] == 'Prev') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'numeric'))) { - // get previous xref offset - $prevxref = intval($sarr[($k +1)][1]); - } elseif (($v[0] == '/') AND ($v[1] == 'W') AND (isset($sarr[($k +1)]))) { - // number of bytes (in the decoded stream) of the corresponding field - $wb = array(); - $wb[0] = intval($sarr[($k +1)][1][0][1]); - $wb[1] = intval($sarr[($k +1)][1][1][1]); - $wb[2] = intval($sarr[($k +1)][1][2][1]); - } elseif (($v[0] == '/') AND ($v[1] == 'DecodeParms') AND (isset($sarr[($k +1)][1]))) { - $decpar = $sarr[($k +1)][1]; - foreach ($decpar as $kdc => $vdc) { - if (($vdc[0] == '/') AND ($vdc[1] == 'Columns') AND (isset($decpar[($kdc +1)]) AND ($decpar[($kdc +1)][0] == 'numeric'))) { - $columns = intval($decpar[($kdc +1)][1]); - } elseif (($vdc[0] == '/') AND ($vdc[1] == 'Predictor') AND (isset($decpar[($kdc +1)]) AND ($decpar[($kdc +1)][0] == 'numeric'))) { - $predictor = intval($decpar[($kdc +1)][1]); - } - } - } elseif ($filltrailer) { - if (($v[0] == '/') AND ($v[1] == 'Size') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'numeric'))) { - $xref['trailer']['size'] = $sarr[($k +1)][1]; - } elseif (($v[0] == '/') AND ($v[1] == 'Root') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'objref'))) { - $xref['trailer']['root'] = $sarr[($k +1)][1]; - } elseif (($v[0] == '/') AND ($v[1] == 'Info') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'objref'))) { - $xref['trailer']['info'] = $sarr[($k +1)][1]; - } elseif (($v[0] == '/') AND ($v[1] == 'Encrypt') AND (isset($sarr[($k +1)]) AND ($sarr[($k +1)][0] == 'objref'))) { - $xref['trailer']['encrypt'] = $sarr[($k +1)][1]; - } elseif (($v[0] == '/') AND ($v[1] == 'ID') AND (isset($sarr[($k +1)]))) { - $xref['trailer']['id'] = array(); - $xref['trailer']['id'][0] = $sarr[($k +1)][1][0][1]; - $xref['trailer']['id'][1] = $sarr[($k +1)][1][1][1]; - } - } - } - // decode data - if ($valid_crs AND isset($xrefcrs[1][3][0])) { - // number of bytes in a row - $rowlen = ($columns + 1); - // convert the stream into an array of integers - $sdata = unpack('C*', $xrefcrs[1][3][0]); - // split the rows - $sdata = array_chunk($sdata, $rowlen); - // initialize decoded array - $ddata = array(); - // initialize first row with zeros - $prev_row = array_fill (0, $rowlen, 0); - // for each row apply PNG unpredictor - foreach ($sdata as $k => $row) { - // initialize new row - $ddata[$k] = array(); - // get PNG predictor value - $predictor = (10 + $row[0]); - // for each byte on the row - for ($i=1; $i<=$columns; ++$i) { - // new index - $j = ($i - 1); - $row_up = $prev_row[$j]; - if ($i == 1) { - $row_left = 0; - $row_upleft = 0; - } else { - $row_left = $row[($i - 1)]; - $row_upleft = $prev_row[($j - 1)]; - } - switch ($predictor) { - case 10: { // PNG prediction (on encoding, PNG None on all rows) - $ddata[$k][$j] = $row[$i]; - break; - } - case 11: { // PNG prediction (on encoding, PNG Sub on all rows) - $ddata[$k][$j] = (($row[$i] + $row_left) & 0xff); - break; - } - case 12: { // PNG prediction (on encoding, PNG Up on all rows) - $ddata[$k][$j] = (($row[$i] + $row_up) & 0xff); - break; - } - case 13: { // PNG prediction (on encoding, PNG Average on all rows) - $ddata[$k][$j] = (($row[$i] + (($row_left + $row_up) / 2)) & 0xff); - break; - } - case 14: { // PNG prediction (on encoding, PNG Paeth on all rows) - // initial estimate - $p = ($row_left + $row_up - $row_upleft); - // distances - $pa = abs($p - $row_left); - $pb = abs($p - $row_up); - $pc = abs($p - $row_upleft); - $pmin = min($pa, $pb, $pc); - // return minimum distance - switch ($pmin) { - case $pa: { - $ddata[$k][$j] = (($row[$i] + $row_left) & 0xff); - break; - } - case $pb: { - $ddata[$k][$j] = (($row[$i] + $row_up) & 0xff); - break; - } - case $pc: { - $ddata[$k][$j] = (($row[$i] + $row_upleft) & 0xff); - break; - } - } - break; - } - default: { // PNG prediction (on encoding, PNG optimum) - $this->Error('Unknown PNG predictor'); - break; - } - } - } - $prev_row = $ddata[$k]; - } // end for each row - // complete decoding - $sdata = array(); - // for every row - foreach ($ddata as $k => $row) { - // initialize new row - $sdata[$k] = array(0, 0, 0); - if ($wb[0] == 0) { - // default type field - $sdata[$k][0] = 1; - } - $i = 0; // count bytes in the row - // for every column - for ($c = 0; $c < 3; ++$c) { - // for every byte on the column - for ($b = 0; $b < $wb[$c]; ++$b) { - if (isset($row[$i])) { - $sdata[$k][$c] += ($row[$i] << (($wb[$c] - 1 - $b) * 8)); - } - ++$i; - } - } - } - $ddata = array(); - // fill xref - if (isset($index_first)) { - $obj_num = $index_first; - } else { - $obj_num = 0; - } - foreach ($sdata as $k => $row) { - switch ($row[0]) { - case 0: { // (f) linked list of free objects - break; - } - case 1: { // (n) objects that are in use but are not compressed - // create unique object index: [object number]_[generation number] - $index = $obj_num.'_'.$row[2]; - // check if object already exist - if (!isset($xref['xref'][$index])) { - // store object offset position - $xref['xref'][$index] = $row[1]; - } - break; - } - case 2: { // compressed objects - // $row[1] = object number of the object stream in which this object is stored - // $row[2] = index of this object within the object stream - $index = $row[1].'_0_'.$row[2]; - $xref['xref'][$index] = -1; - break; - } - default: { // null objects - break; - } - } - ++$obj_num; - } - } // end decoding data - if (isset($prevxref)) { - // get previous xref - $xref = $this->getXrefData($prevxref, $xref); - } - return $xref; - } - - /** - * Get object type, raw value and offset to next object - * @param int $offset Object offset. - * @return array containing object type, raw value and offset to next object - * @protected - * @since 1.0.000 (2011-06-20) - */ - protected function getRawObject($offset=0) { - $objtype = ''; // object type to be returned - $objval = ''; // object value to be returned - // skip initial white space chars: \x00 null (NUL), \x09 horizontal tab (HT), \x0A line feed (LF), \x0C form feed (FF), \x0D carriage return (CR), \x20 space (SP) - $offset += strspn($this->pdfdata, "\x00\x09\x0a\x0c\x0d\x20", $offset); - // get first char - $char = $this->pdfdata[$offset]; - // get object type - switch ($char) { - case '%': { // \x25 PERCENT SIGN - // skip comment and search for next token - $next = strcspn($this->pdfdata, "\r\n", $offset); - if ($next > 0) { - $offset += $next; - return $this->getRawObject($offset); - } - break; - } - case '/': { // \x2F SOLIDUS - // name object - $objtype = $char; - ++$offset; - if (preg_match('/^([^\x00\x09\x0a\x0c\x0d\x20\s\x28\x29\x3c\x3e\x5b\x5d\x7b\x7d\x2f\x25]+)/', substr($this->pdfdata, $offset, 256), $matches) == 1) { - $objval = $matches[1]; // unescaped value - $offset += strlen($objval); - } - break; - } - case '(': // \x28 LEFT PARENTHESIS - case ')': { // \x29 RIGHT PARENTHESIS - // literal string object - $objtype = $char; - ++$offset; - $strpos = $offset; - if ($char == '(') { - $open_bracket = 1; - while ($open_bracket > 0) { - if (!isset($this->pdfdata[$strpos])) { - break; - } - $ch = $this->pdfdata[$strpos]; - switch ($ch) { - case '\\': { // REVERSE SOLIDUS (5Ch) (Backslash) - // skip next character - ++$strpos; - break; - } - case '(': { // LEFT PARENHESIS (28h) - ++$open_bracket; - break; - } - case ')': { // RIGHT PARENTHESIS (29h) - --$open_bracket; - break; - } - } - ++$strpos; - } - $objval = substr($this->pdfdata, $offset, ($strpos - $offset - 1)); - $offset = $strpos; - } - break; - } - case '[': // \x5B LEFT SQUARE BRACKET - case ']': { // \x5D RIGHT SQUARE BRACKET - // array object - $objtype = $char; - ++$offset; - if ($char == '[') { - // get array content - $objval = array(); - do { - // get element - $element = $this->getRawObject($offset); - $offset = $element[2]; - $objval[] = $element; - } while ($element[0] != ']'); - // remove closing delimiter - array_pop($objval); - } - break; - } - case '<': // \x3C LESS-THAN SIGN - case '>': { // \x3E GREATER-THAN SIGN - if (isset($this->pdfdata[($offset + 1)]) AND ($this->pdfdata[($offset + 1)] == $char)) { - // dictionary object - $objtype = $char.$char; - $offset += 2; - if ($char == '<') { - // get array content - $objval = array(); - do { - // get element - $element = $this->getRawObject($offset); - $offset = $element[2]; - $objval[] = $element; - } while ($element[0] != '>>'); - // remove closing delimiter - array_pop($objval); - } - } else { - // hexadecimal string object - $objtype = $char; - ++$offset; - if (($char == '<') AND (preg_match('/^([0-9A-Fa-f\x09\x0a\x0c\x0d\x20]+)>/iU', substr($this->pdfdata, $offset), $matches) == 1)) { - // remove white space characters - $objval = strtr($matches[1], "\x09\x0a\x0c\x0d\x20", ''); - $offset += strlen($matches[0]); - } elseif (($endpos = strpos($this->pdfdata, '>', $offset)) !== FALSE) { - $offset = $endpos + 1; - } - } - break; - } - default: { - if (substr($this->pdfdata, $offset, 6) == 'endobj') { - // indirect object - $objtype = 'endobj'; - $offset += 6; - } elseif (substr($this->pdfdata, $offset, 4) == 'null') { - // null object - $objtype = 'null'; - $offset += 4; - $objval = 'null'; - } elseif (substr($this->pdfdata, $offset, 4) == 'true') { - // boolean true object - $objtype = 'boolean'; - $offset += 4; - $objval = 'true'; - } elseif (substr($this->pdfdata, $offset, 5) == 'false') { - // boolean false object - $objtype = 'boolean'; - $offset += 5; - $objval = 'false'; - } elseif (substr($this->pdfdata, $offset, 6) == 'stream') { - // start stream object - $objtype = 'stream'; - $offset += 6; - if (preg_match('/^([\r]?[\n])/isU', substr($this->pdfdata, $offset), $matches) == 1) { - $offset += strlen($matches[0]); - if (preg_match('/(endstream)[\x09\x0a\x0c\x0d\x20]/isU', substr($this->pdfdata, $offset), $matches, PREG_OFFSET_CAPTURE) == 1) { - $objval = substr($this->pdfdata, $offset, $matches[0][1]); - $offset += $matches[1][1]; - } - } - } elseif (substr($this->pdfdata, $offset, 9) == 'endstream') { - // end stream object - $objtype = 'endstream'; - $offset += 9; - } elseif (preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+R/iU', substr($this->pdfdata, $offset, 33), $matches) == 1) { - // indirect object reference - $objtype = 'objref'; - $offset += strlen($matches[0]); - $objval = intval($matches[1]).'_'.intval($matches[2]); - } elseif (preg_match('/^([0-9]+)[\s]+([0-9]+)[\s]+obj/iU', substr($this->pdfdata, $offset, 33), $matches) == 1) { - // object start - $objtype = 'obj'; - $objval = intval($matches[1]).'_'.intval($matches[2]); - $offset += strlen ($matches[0]); - } elseif (($numlen = strspn($this->pdfdata, '+-.0123456789', $offset)) > 0) { - // numeric object - $objtype = 'numeric'; - $objval = substr($this->pdfdata, $offset, $numlen); - $offset += $numlen; - } - break; - } - } - return array($objtype, $objval, $offset); - } - - /** - * Get content of indirect object. - * @param string $obj_ref Object number and generation number separated by underscore character. - * @param int $offset Object offset. - * @param boolean $decoding If true decode streams. - * @return array containing object data. - * @protected - * @since 1.0.000 (2011-05-24) - */ - protected function getIndirectObject($obj_ref, $offset=0, $decoding=true) { - $obj = explode('_', $obj_ref); - if (($obj === false) OR (count($obj) != 2)) { - $this->Error('Invalid object reference: '.$obj); - return; - } - $objref = $obj[0].' '.$obj[1].' obj'; - // ignore leading zeros - $offset += strspn($this->pdfdata, '0', $offset); - if (strpos($this->pdfdata, $objref, $offset) != $offset) { - // an indirect reference to an undefined object shall be considered a reference to the null object - return array('null', 'null', $offset); - } - // starting position of object content - $offset += strlen($objref); - // get array of object content - $objdata = array(); - $i = 0; // object main index - do { - $oldoffset = $offset; - // get element - $element = $this->getRawObject($offset); - $offset = $element[2]; - // decode stream using stream's dictionary information - if ($decoding AND ($element[0] == 'stream') AND (isset($objdata[($i - 1)][0])) AND ($objdata[($i - 1)][0] == '<<')) { - $element[3] = $this->decodeStream($objdata[($i - 1)][1], $element[1]); - } - $objdata[$i] = $element; - ++$i; - } while (($element[0] != 'endobj') AND ($offset != $oldoffset)); - // remove closing delimiter - array_pop($objdata); - // return raw object content - return $objdata; - } - - /** - * Get the content of object, resolving indect object reference if necessary. - * @param string $obj Object value. - * @return array containing object data. - * @protected - * @since 1.0.000 (2011-06-26) - */ - protected function getObjectVal($obj) { - if ($obj[0] == 'objref') { - // reference to indirect object - if (isset($this->objects[$obj[1]])) { - // this object has been already parsed - return $this->objects[$obj[1]]; - } elseif (isset($this->xref[$obj[1]])) { - // parse new object - $this->objects[$obj[1]] = $this->getIndirectObject($obj[1], $this->xref[$obj[1]], false); - return $this->objects[$obj[1]]; - } - } - return $obj; - } - - /** - * Decode the specified stream. - * @param array $sdic Stream's dictionary array. - * @param string $stream Stream to decode. - * @return array containing decoded stream data and remaining filters. - * @protected - * @since 1.0.000 (2011-06-22) - */ - protected function decodeStream($sdic, $stream) { - // get stream length and filters - $slength = strlen($stream); - if ($slength <= 0) { - return array('', array()); - } - $filters = array(); - foreach ($sdic as $k => $v) { - if ($v[0] == '/') { - if (($v[1] == 'Length') AND (isset($sdic[($k + 1)])) AND ($sdic[($k + 1)][0] == 'numeric')) { - // get declared stream length - $declength = intval($sdic[($k + 1)][1]); - if ($declength < $slength) { - $stream = substr($stream, 0, $declength); - $slength = $declength; - } - } elseif (($v[1] == 'Filter') AND (isset($sdic[($k + 1)]))) { - // resolve indirect object - $objval = $this->getObjectVal($sdic[($k + 1)]); - if ($objval[0] == '/') { - // single filter - $filters[] = $objval[1]; - } elseif ($objval[0] == '[') { - // array of filters - foreach ($objval[1] as $flt) { - if ($flt[0] == '/') { - $filters[] = $flt[1]; - } - } - } - } - } - } - // decode the stream - $remaining_filters = array(); - foreach ($filters as $filter) { - if (in_array($filter, TCPDF_FILTERS::getAvailableFilters())) { - try { - $stream = TCPDF_FILTERS::decodeFilter($filter, $stream); - } catch (Exception $e) { - $emsg = $e->getMessage(); - if ((($emsg[0] == '~') AND !$this->cfg['ignore_missing_filter_decoders']) - OR (($emsg[0] != '~') AND !$this->cfg['ignore_filter_decoding_errors'])) { - $this->Error($e->getMessage()); - } - } - } else { - // add missing filter to array - $remaining_filters[] = $filter; - } - } - return array($stream, $remaining_filters); - } - - /** - * Throw an exception or print an error message and die if the K_TCPDF_PARSER_THROW_EXCEPTION_ERROR constant is set to true. - * @param string $msg The error message - * @public - * @since 1.0.000 (2011-05-23) - */ - public function Error($msg) { - if ($this->cfg['die_for_errors']) { - die('TCPDF_PARSER ERROR: '.$msg); - } else { - throw new Exception('TCPDF_PARSER ERROR: '.$msg); - } - } - -} // END OF TCPDF_PARSER CLASS - -//============================================================+ -// END OF FILE -//============================================================+ diff --git a/tools/tcpdf/tools/tcpdf_addfont.php b/tools/tcpdf/tools/tcpdf_addfont.php index 2937c7564..e1a2b32e5 100755 --- a/tools/tcpdf/tools/tcpdf_addfont.php +++ b/tools/tcpdf/tools/tcpdf_addfont.php @@ -7,9 +7,9 @@ // Last Update : 2013-08-05 // Authors : Nicola Asuni - Tecnick.com LTD - www.tecnick.com - info@tecnick.com // Remi Collet -// License : GNU-LGPL v3 (http://www.gnu.org/copyleft/lesser.html) +// License : GNU-LGPL v3 (https://www.gnu.org/copyleft/lesser.html) // ------------------------------------------------------------------- -// Copyright (C) 2011-2013 Nicola Asuni - Tecnick.com LTD +// Copyright (C) 2011-2026 Nicola Asuni - Tecnick.com LTD // // This file is part of TCPDF software library. // From ee5832d569f5c595e3bc2b38d0a41682a2fe8d74 Mon Sep 17 00:00:00 2001 From: amit sharma Date: Tue, 23 Jun 2026 10:32:51 +0530 Subject: [PATCH 27/93] =?UTF-8?q?Fixed:=20handle=20PDO=20buffered=20query?= =?UTF-8?q?=20constant=20compatibility=20for=20PHP=208.1=E2=80=938.5?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- classes/db/DbPDO.php | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/classes/db/DbPDO.php b/classes/db/DbPDO.php index 3be1c4326..3b5ffccad 100644 --- a/classes/db/DbPDO.php +++ b/classes/db/DbPDO.php @@ -60,8 +60,13 @@ class DbPDOCore extends Db } else { $dsn .= 'host='.$host; } - - return new PDO($dsn, $user, $password, array(PDO::ATTR_TIMEOUT => $timeout, PDO::MYSQL_ATTR_USE_BUFFERED_QUERY => true)); + if(class_exists('Pdo\\Mysql')){ + $bufferedQueryAttr = \Pdo\Mysql::ATTR_USE_BUFFERED_QUERY; + }else{ + $bufferedQueryAttr = PDO::MYSQL_ATTR_USE_BUFFERED_QUERY;; + } + + return new PDO($dsn, $user, $password, array(PDO::ATTR_TIMEOUT => $timeout, $bufferedQueryAttr => true)); } /** From 2b31f5fc151c915234fe06bd3304650d7adad1e5 Mon Sep 17 00:00:00 2001 From: amit sharma Date: Wed, 8 Jul 2026 12:24:33 +0530 Subject: [PATCH 28/93] fix: remove unused destructor function --- modules/qlopaypalcommerce/libs/Helpers/HttpHelper.php | 4 ---- 1 file changed, 4 deletions(-) diff --git a/modules/qlopaypalcommerce/libs/Helpers/HttpHelper.php b/modules/qlopaypalcommerce/libs/Helpers/HttpHelper.php index b1b75eccb..5164ea3ce 100644 --- a/modules/qlopaypalcommerce/libs/Helpers/HttpHelper.php +++ b/modules/qlopaypalcommerce/libs/Helpers/HttpHelper.php @@ -30,10 +30,6 @@ class HttpHelper { $this->_initCurl(); } - public function __destruct() - { - } - private function _initCurl() { if(!function_exists('curl_version')) { trigger_error("Curl not available", E_USER_ERROR); From de2ae4a8fca0790e3c353d67e401b3998be4624f Mon Sep 17 00:00:00 2001 From: amit sharma Date: Mon, 13 Jul 2026 13:39:02 +0530 Subject: [PATCH 29/93] Fixed undefined const variable Co-authored-by: Name --- classes/pdf/HTMLTemplateBookingVoucher.php | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/classes/pdf/HTMLTemplateBookingVoucher.php b/classes/pdf/HTMLTemplateBookingVoucher.php index c4e5d17df..4fda12658 100644 --- a/classes/pdf/HTMLTemplateBookingVoucher.php +++ b/classes/pdf/HTMLTemplateBookingVoucher.php @@ -301,8 +301,8 @@ class HTMLTemplateBookingVoucherCore extends HTMLTemplate if (!empty($idsOrderDetail)) { $footer['room_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, true, null, null, null, $idsOrderDetail) + $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM, $idsOrderDetail); $roomsCostTaxIncl = $this->order->getTotalProductsWithTaxes(false, true, null, null, null, $idsOrderDetail) + $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_WITH_ROOM, $idsOrderDetail); - $footer['service_products_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE, false, false, $idsOrderDetail) + $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE, false, false, $idsOrderDetail); - $serviceProductsCostTaxIncl = $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_STANDALONE, false, false, $idsOrderDetail) + $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_HOTEL_STANDALONE, false, false, $idsOrderDetail); + $footer['service_products_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_STANDALONE, false, false, $idsOrderDetail) + $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_HOTEL, false, false, $idsOrderDetail); + $serviceProductsCostTaxIncl = $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_STANDALONE, false, false, $idsOrderDetail) + $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_HOTEL, false, false, $idsOrderDetail); $footer['additional_service_price_tax_excl'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0, null, $idsOrderDetail) + $totalDemandsPriceTE; $additionalServicesCostTaxIncl = $this->order->getTotalProductsWithTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 0, null, $idsOrderDetail) + $totalDemandsPriceTI; $footer['total_convenience_fee_te'] = $this->order->getTotalProductsWithoutTaxes(false, false, Product::SELLING_PREFERENCE_WITH_ROOM_TYPE, 1, Product::PRICE_ADDITION_TYPE_INDEPENDENT, $idsOrderDetail); From 9e85622b0b4531e29b62d226c83df860ace7897d Mon Sep 17 00:00:00 2001 From: amit sharma Date: Mon, 20 Jul 2026 13:16:19 +0530 Subject: [PATCH 30/93] Fixed: remove room type-wise booking methods feature Co-authored-by: Name --- .../orders/_current_cart_details_data.tpl | 14 ++---- .../controllers/products/informations.tpl | 45 ------------------- classes/Product.php | 44 ------------------ controllers/admin/AdminCartsController.php | 5 +++ controllers/admin/AdminOrdersController.php | 6 +++ controllers/admin/AdminProductsController.php | 15 ------- controllers/front/CartController.php | 5 ++- controllers/front/CategoryController.php | 7 --- .../front/OrderConfirmationController.php | 1 - controllers/front/OrderDetailController.php | 2 - controllers/front/ProductController.php | 18 +++----- install/data/db_structure.sql | 1 - js/admin.js | 12 ----- js/admin/ppreferences.js | 6 ++- modules/blockcart/ajax-cart.js | 2 - modules/blockcart/blockcart.php | 8 ++-- .../classes/HotelCartBookingData.php | 21 +++++---- .../AdminHotelRoomsBookingController.php | 20 ++++----- .../views/js/admin/hotel_rooms_booking.js | 16 ++----- .../helpers/view/_partials/booking-rooms.tpl | 16 +++---- .../_partials/room_type_list.tpl | 4 +- .../js/modules/blockcart/ajax-cart.js | 2 - .../shopping-cart-detail.tpl | 2 +- 23 files changed, 72 insertions(+), 200 deletions(-) diff --git a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl index f5e1a9b5d..b48493073 100644 --- a/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl +++ b/admin/themes/default/template/controllers/orders/_current_cart_details_data.tpl @@ -37,7 +37,9 @@ {l s='Stay Image'} {l s='Room Type'} {l s='Duration'} - {l s='Occupancy / Quantity'} + {if $occupancy_required_for_booking} + {l s='Occupancy'} + {/if} {l s='Unit Price (tax excl)'} {l s='Extra Services / Fees (tax excl)'} {* {l s='Total Stays Price (tax excl)'} *} @@ -56,11 +58,7 @@ {assign var="is_full_date" value=($show_full_date && ($data['date_from']|date_format:'%D' == $data['date_to']|date_format:'%D'))} {dateFormat date=$data.date_from full=$is_full_date} - {dateFormat date=$data.date_to full=$is_full_date} - {assign var=room_occ_required value=false} - {if isset($data.occupancy_required_for_booking)} - {assign var=room_occ_required value=$data.occupancy_required_for_booking} - {/if} - {if $room_occ_required} + {if $occupancy_required_for_booking}
    - {else} - - 1 - {/if} {assign var=shown_room_type_price value=$data.feature_price_tax_excl} diff --git a/admin/themes/default/template/controllers/products/informations.tpl b/admin/themes/default/template/controllers/products/informations.tpl index 356e0b258..b4cae49b3 100644 --- a/admin/themes/default/template/controllers/products/informations.tpl +++ b/admin/themes/default/template/controllers/products/informations.tpl @@ -482,51 +482,6 @@
    {/if} - - {assign var="has_booking_method" value=(isset($selected_booking_method) && $selected_booking_method)} -
    -
    - -
    - - - - - - - -

    - {l s='Disabled state uses the,'} {l s='global booking search type '} {l s='setting is used.'} -

    -
    -
    - -
    - -
    -
    - -
    -
    -