Merge branch 'Qloapps:develop' into gli-3286

This commit is contained in:
Shazar Rahman
2026-10-19 13:46:40 +05:30
committed by GitHub
52 changed files with 571 additions and 321 deletions

View File

@@ -220,39 +220,37 @@
</div>
{/if}
{if $hotels.unselected|@count + $hotels.selected|@count > 1}
<p class="checkbox">
<label>
<input type="checkbox" id="hotel_restriction" name="hotel_restriction" value="1" {if $hotels.unselected|@count}checked="checked"{/if} />
{l s='Hotel selection'}
</label>
</p>
<div id="hotel_restriction_div">
<br />
<table class="table">
<tr>
<td>
<p>{l s='Unselected hotels'}</p>
<select id="hotel_select_1" class="input-large" multiple>
{foreach from=$hotels.unselected item='hotel'}
<option value="{$hotel.id_hotel|intval}">&nbsp;{$hotel.hotel_name|escape}</option>
{/foreach}
</select>
<a id="hotel_select_add" class="btn btn-default btn-block clearfix" >{l s='Add'} <i class="icon-arrow-right"></i></a>
</td>
<td>
<p>{l s='Selected hotels'}</p>
<select name="hotel_select[]" class="input-large" id="hotel_select_2" multiple>
{foreach from=$hotels.selected item='hotel'}
<option value="{$hotel.id_hotel|intval}">&nbsp;{$hotel.hotel_name|escape}</option>
{/foreach}
</select>
<a id="hotel_select_remove" class="btn btn-default btn-block clearfix" ><i class="icon-arrow-left"></i> {l s='Remove'}</a>
</td>
</tr>
</table>
</div>
{/if}
<p class="checkbox">
<label>
<input type="checkbox" id="hotel_restriction" name="hotel_restriction" value="1" {if $hotels.unselected|@count}checked="checked"{/if} />
{l s='Property selection'}
</label>
</p>
<div id="hotel_restriction_div">
<br />
<table class="table">
<tr>
<td>
<p>{l s='Unselected Properties'}</p>
<select id="hotel_select_1" class="input-large" multiple>
{foreach from=$hotels.unselected item='hotel'}
<option value="{$hotel.id_hotel|intval}">&nbsp;{$hotel.hotel_name|escape}</option>
{/foreach}
</select>
<a id="hotel_select_add" class="btn btn-default btn-block clearfix" >{l s='Add'} <i class="icon-arrow-right"></i></a>
</td>
<td>
<p>{l s='Selected Properties'}</p>
<select name="hotel_select[]" class="input-large" id="hotel_select_2" multiple>
{foreach from=$hotels.selected item='hotel'}
<option value="{$hotel.id_hotel|intval}">&nbsp;{$hotel.hotel_name|escape}</option>
{/foreach}
</select>
<a id="hotel_select_remove" class="btn btn-default btn-block clearfix" ><i class="icon-arrow-left"></i> {l s='Remove'}</a>
</td>
</tr>
</table>
</div>
{if $cart_rules.unselected|@count + $cart_rules.selected|@count > 0}
<p class="checkbox">

View File

@@ -24,21 +24,118 @@
room table (_rooms_informaion_table.tpl) and/or a products table (_hotel_service_products_table.tpl /
_standalone_service_products_table.tpl) with tourism tax columns is rendered. *}
{assign var='ttExemptRooms' value=[]}
{if isset($use_tourism_tax) && $use_tourism_tax && isset($order_detail_data) && $order_detail_data}
{foreach from=$order_detail_data item=ttRoom}
{if isset($ttRoom.tourism_tax_status) && $ttRoom.tourism_tax_status == $tourism_tax_status_applied && $ttRoom.id_status != $ROOM_STATUS_CANCELLED && !$ttRoom.is_refunded}
{append var='ttExemptRooms' value=$ttRoom}
{/if}
{/foreach}
{/if}
{assign var='ttExemptProducts' value=[]}
{if isset($use_tourism_tax) && $use_tourism_tax}
{if isset($hotel_service_products) && $hotel_service_products}
{foreach from=$hotel_service_products item=ttProduct}
{if isset($ttProduct.tourism_tax_status) && $ttProduct.tourism_tax_status == $tourism_tax_status_applied && !$ttProduct.is_refunded && !$ttProduct.is_cancelled}
{append var='ttExemptProducts' value=$ttProduct}
{/if}
{/foreach}
{/if}
{if isset($standalone_service_products) && $standalone_service_products}
{foreach from=$standalone_service_products item=ttProduct}
{if isset($ttProduct.tourism_tax_status) && $ttProduct.tourism_tax_status == $tourism_tax_status_applied && !$ttProduct.is_refunded && !$ttProduct.is_cancelled}
{append var='ttExemptProducts' value=$ttProduct}
{/if}
{/foreach}
{/if}
{/if}
<div class="modal fade" id="exempt-tourism-tax-modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-dialog modal-md order_detail_modal" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><i class="icon-remove-sign"></i></button>
<h4 class="modal-title"><i class="icon-ban"></i> {l s='Exempt Tourism Tax'}</h4>
</div>
<div class="modal-body">
<div class="form-group" id="tt-exempt-targets-group">
<label class="control-label" id="tt-exempt-targets-label"><b>{l s='Rooms to be exempted'}</b></label>
<ul id="tt-exempt-targets-list" style="max-height:150px; overflow-y:auto; margin-bottom:0; padding-left:18px;"></ul>
</div>
{if $ttExemptRooms|count > 0 && $ttExemptProducts|count > 0}
<ul class="nav nav-tabs" role="tablist" id="tt-exempt-tabs">
<li role="presentation" class="active">
<a href="#tt_exempt_rooms_tab" role="tab" data-toggle="tab">{l s='Rooms'}</a>
</li>
<li role="presentation">
<a href="#tt_exempt_products_tab" role="tab" data-toggle="tab">{l s='Products'}</a>
</li>
</ul>
{/if}
{if $ttExemptRooms|count > 0 && $ttExemptProducts|count > 0}
<div class="form-group tab-content clearfix">
{/if}
{if $ttExemptRooms|count}
<div id="tt_exempt_rooms_tab" class="form-group table-responsive tab-pane active">
<table class="table" id="tt-exempt-rooms-table">
<thead>
<tr>
<th class="tt-select-col"></th>
<th>{l s='Room No.'}</th>
<th>{l s='Room Type'}</th>
<th>{l s='Duration'}</th>
<th>{l s='Tourism Tax'}</th>
<th>{l s='Total Price (Tax incl.)'}</th>
</tr>
</thead>
<tbody>
{foreach from=$ttExemptRooms item=ttRoom}
<tr class="tt-exempt-row" data-id_htl_booking="{$ttRoom.id|intval}">
<td class="tt-select-col">
<input type="checkbox" name="tt_exempt_id_htl_booking[]" value="{$ttRoom.id|intval}" checked="checked"/>
</td>
<td><b>{$ttRoom.room_num|escape:'html':'UTF-8'}</b></td>
<td>{$ttRoom.room_type_name|escape:'html':'UTF-8'}</td>
{assign var="is_full_date" value=($show_full_date && ($ttRoom['date_from']|date_format:'%D' == $ttRoom['date_to']|date_format:'%D'))}
<td>{dateFormat date=$ttRoom.date_from full=$is_full_date} - {dateFormat date=$ttRoom.date_to full=$is_full_date}</td>
<td>{convertPriceWithCurrency price=$ttRoom.tourism_tax_total currency=$currency->id}</td>
<td>{convertPriceWithCurrency price=$ttRoom.total_room_price_ti currency=$currency->id}</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/if}
{if $ttExemptProducts|count}
<div id="tt_exempt_products_tab" class="form-group table-responsive tab-pane{if !$ttExemptRooms|count} active{/if}">
<table class="table" id="tt-exempt-products-table">
<thead>
<tr>
<th class="tt-select-col"></th>
<th>{l s='Name'}</th>
<th>{l s='Quantity'}</th>
<th>{l s='Tourism Tax'}</th>
<th>{l s='Total Price (Tax incl.)'}</th>
</tr>
</thead>
<tbody>
{foreach from=$ttExemptProducts item=ttProduct}
<tr class="tt-exempt-row" data-id_service_product_order_detail="{$ttProduct.id_service_product_order_detail|intval}">
<td class="tt-select-col">
<input type="checkbox" name="tt_exempt_id_service_product_order_detail[]" value="{$ttProduct.id_service_product_order_detail|intval}" checked="checked"/>
</td>
<td><b>{$ttProduct.name|escape:'html':'UTF-8'}{if $ttProduct.option_name} : {$ttProduct.option_name|escape:'html':'UTF-8'}{/if}</b></td>
<td>{if $ttProduct.allow_multiple_quantity}{$ttProduct.quantity|escape:'html':'UTF-8'}{else}--{/if}</td>
<td>{convertPriceWithCurrency price=$ttProduct.tourism_tax_total currency=$currency->id}</td>
<td>{convertPriceWithCurrency price=$ttProduct.total_price_tax_incl currency=$currency->id}</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/if}
{if $ttExemptRooms|count > 0 && $ttExemptProducts|count > 0}
</div>
{/if}
<div class="form-group">
<label class="control-label">{l s='Reason for Exemption'}</label>
<textarea rows="3" class="textarea-autosize" id="tt-exempt-note"></textarea>
<textarea rows="2" id="tt-exempt-note"></textarea>
</div>
</div>
<div class="modal-footer">
@@ -50,9 +147,124 @@
</div>
</div>
{assign var='ttApplyRooms' value=[]}
{if isset($use_tourism_tax) && $use_tourism_tax && isset($order_detail_data) && $order_detail_data}
{foreach from=$order_detail_data item=ttApplyRoom}
{if isset($ttApplyRoom.tourism_tax_status) && $ttApplyRoom.tourism_tax_status != $tourism_tax_status_applied && $ttApplyRoom.tourism_tax_status != $tourism_tax_status_not_applicable && $ttApplyRoom.id_status != $ROOM_STATUS_CANCELLED && !$ttApplyRoom.is_refunded}
{append var='ttApplyRooms' value=$ttApplyRoom}
{/if}
{/foreach}
{/if}
{assign var='ttApplyProducts' value=[]}
{if isset($use_tourism_tax) && $use_tourism_tax}
{if isset($hotel_service_products) && $hotel_service_products}
{foreach from=$hotel_service_products item=ttApplyProduct}
{if isset($ttApplyProduct.tourism_tax_status) && $ttApplyProduct.tourism_tax_status != $tourism_tax_status_applied && $ttApplyProduct.tourism_tax_status != $tourism_tax_status_not_applicable && !$ttApplyProduct.is_refunded && !$ttApplyProduct.is_cancelled}
{append var='ttApplyProducts' value=$ttApplyProduct}
{/if}
{/foreach}
{/if}
{if isset($standalone_service_products) && $standalone_service_products}
{foreach from=$standalone_service_products item=ttApplyProduct}
{if isset($ttApplyProduct.tourism_tax_status) && $ttApplyProduct.tourism_tax_status != $tourism_tax_status_applied && $ttApplyProduct.tourism_tax_status != $tourism_tax_status_not_applicable && !$ttApplyProduct.is_refunded && !$ttApplyProduct.is_cancelled}
{append var='ttApplyProducts' value=$ttApplyProduct}
{/if}
{/foreach}
{/if}
{/if}
<div class="modal fade" id="apply-tourism-tax-modal" tabindex="-1" role="dialog">
<div class="modal-dialog modal-md order_detail_modal" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal"><i class="icon-remove-sign"></i></button>
<h4 class="modal-title"><i class="icon-check"></i> {l s='Apply Tourism Tax'}</h4>
</div>
<div class="modal-body">
{if $ttApplyRooms|count > 0 && $ttApplyProducts|count > 0}
<ul class="nav nav-tabs" role="tablist" id="tt-apply-tabs">
<li role="presentation" class="active">
<a href="#tt_apply_rooms_tab" role="tab" data-toggle="tab">{l s='Rooms'}</a>
</li>
<li role="presentation">
<a href="#tt_apply_products_tab" role="tab" data-toggle="tab">{l s='Products'}</a>
</li>
</ul>
{/if}
{if $ttApplyRooms|count > 0 && $ttApplyProducts|count > 0}
<div class="form-group tab-content clearfix">
{/if}
{if $ttApplyRooms|count}
<div id="tt_apply_rooms_tab" class="form-group table-responsive tab-pane active">
<table class="table" id="tt-apply-rooms-table">
<thead>
<tr>
<th class="tt-select-col"></th>
<th>{l s='Room No.'}</th>
<th>{l s='Room Type'}</th>
<th>{l s='Duration'}</th>
<th>{l s='Total Price (Tax incl.)'}</th>
</tr>
</thead>
<tbody>
{foreach from=$ttApplyRooms item=ttApplyRoom}
<tr class="tt-apply-row" data-id_htl_booking="{$ttApplyRoom.id|intval}">
<td class="tt-select-col">
<input type="checkbox" name="tt_apply_id_htl_booking[]" value="{$ttApplyRoom.id|intval}" checked="checked"/>
</td>
<td><b>{$ttApplyRoom.room_num|escape:'html':'UTF-8'}</b></td>
<td>{$ttApplyRoom.room_type_name|escape:'html':'UTF-8'}</td>
{assign var="is_full_date" value=($show_full_date && ($ttApplyRoom['date_from']|date_format:'%D' == $ttApplyRoom['date_to']|date_format:'%D'))}
<td>{dateFormat date=$ttApplyRoom.date_from full=$is_full_date} - {dateFormat date=$ttApplyRoom.date_to full=$is_full_date}</td>
<td>{convertPriceWithCurrency price=$ttApplyRoom.total_room_price_ti currency=$currency->id}</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/if}
{if $ttApplyProducts|count}
<div id="tt_apply_products_tab" class="form-group table-responsive tab-pane{if !$ttApplyRooms|count} active{/if}">
<table class="table" id="tt-apply-products-table">
<thead>
<tr>
<th class="tt-select-col"></th>
<th>{l s='Name'}</th>
<th>{l s='Quantity'}</th>
<th>{l s='Total Price (Tax incl.)'}</th>
</tr>
</thead>
<tbody>
{foreach from=$ttApplyProducts item=ttApplyProduct}
<tr class="tt-apply-row" data-id_service_product_order_detail="{$ttApplyProduct.id_service_product_order_detail|intval}">
<td class="tt-select-col">
<input type="checkbox" name="tt_apply_id_service_product_order_detail[]" value="{$ttApplyProduct.id_service_product_order_detail|intval}" checked="checked"/>
</td>
<td><b>{$ttApplyProduct.name|escape:'html':'UTF-8'}{if $ttApplyProduct.option_name} : {$ttApplyProduct.option_name|escape:'html':'UTF-8'}{/if}</b></td>
<td>{if $ttApplyProduct.allow_multiple_quantity}{$ttApplyProduct.quantity|escape:'html':'UTF-8'}{else}--{/if}</td>
<td>{convertPriceWithCurrency price=$ttApplyProduct.total_price_tax_incl currency=$currency->id}</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/if}
{if $ttApplyRooms|count > 0 && $ttApplyProducts|count > 0}
</div>
{/if}
</div>
<div class="modal-footer">
<button type="button" class="btn btn-primary" id="tt-apply-confirm">
<i class="icon-check"></i> {l s='Apply Tourism Tax'}
</button>
</div>
</div>
</div>
</div>
<script>
$(document).ready(function () {
function ttAjax(action, data) {
function ttAjax(action, data, $button) {
$.ajax({
type: 'POST',
url: admin_order_tab_link,
@@ -60,6 +272,9 @@ $(document).ready(function () {
dataType: 'json',
beforeSend: function () {
$('#page-loader').show();
if ($button) {
$button.prop('disabled', true);
}
},
success: function (resp) {
if (resp.hasError && resp.errors && resp.errors.length) {
@@ -73,72 +288,129 @@ $(document).ready(function () {
},
complete: function () {
$('#page-loader').hide();
if ($button) {
$button.prop('disabled', false);
}
}
});
}
$(document).on('click', '.tt-apply-booking', function (e) {
e.preventDefault();
ttAjax('ApplyTourismTax', { id_htl_booking: $(this).data('id_htl_booking') });
});
$(document).on('click', '.tt-apply-all-bookings', function (e) {
e.preventDefault();
ttAjax('ApplyTourismTax', { id_order: $(this).data('id_order') });
});
$(document).on('click', '.tt-apply-service-line', function (e) {
e.preventDefault();
ttAjax('ApplyTourismTax', { id_service_product_order_detail: $(this).data('id_service_product_order_detail') });
});
var ttExemptTarget = null;
var ttRoomsToBeExemptedLabel = '{l s='Rooms to be exempted' js=1}';
var ttProductsToBeExemptedLabel = '{l s='Products to be exempted' js=1}';
function ttShowExemptModal(labels, hasRooms) {
var $list = $('#tt-exempt-targets-list');
$list.empty();
$.each(labels, function (i, label) {
$list.append($('<li>').addClass('message-item-text').text(label));
});
$('#tt-exempt-targets-label b').text(hasRooms ? ttRoomsToBeExemptedLabel : ttProductsToBeExemptedLabel);
function ttShowExemptModal(onlyRow) {
var $modal = $('#exempt-tourism-tax-modal');
var $rows = $modal.find('.tt-exempt-row');
$rows.show().find('input[type=checkbox]').prop('checked', true);
$modal.find('.tt-select-col').toggle(!onlyRow);
if (onlyRow) {
$rows.each(function () {
var $row = $(this);
var isTarget = (onlyRow.id_htl_booking && $row.data('id_htl_booking') == onlyRow.id_htl_booking)
|| (onlyRow.id_service_product_order_detail && $row.data('id_service_product_order_detail') == onlyRow.id_service_product_order_detail);
if (!isTarget) {
$row.hide().find('input[type=checkbox]').prop('checked', false);
}
});
}
// show the tab holding the picked row, and hide the tab bar when a single row was picked
var $tabs = $('#tt-exempt-tabs');
if ($tabs.length) {
$tabs.toggle(!onlyRow);
var activeTab = (onlyRow && onlyRow.id_service_product_order_detail) ? '#tt_exempt_products_tab' : '#tt_exempt_rooms_tab';
$tabs.find('a[href="' + activeTab + '"]').tab('show');
}
$('#tt-exempt-note').val('');
$('#exempt-tourism-tax-modal').modal('show');
$modal.modal('show');
}
$(document).on('click', '.tt-exempt-booking', function (e) {
e.preventDefault();
ttExemptTarget = { id_htl_booking: $(this).data('id_htl_booking') };
ttShowExemptModal([$(this).data('label')], true);
ttShowExemptModal({ id_htl_booking: $(this).data('id_htl_booking') });
});
$(document).on('click', '.tt-exempt-all-bookings', function (e) {
e.preventDefault();
ttExemptTarget = { id_order: $(this).data('id_order') };
var labels = [];
var hasRooms = $('.tt-exempt-booking').length > 0;
$('.tt-exempt-booking').each(function () {
labels.push($(this).data('label'));
});
$('.tt-exempt-service-line').each(function () {
labels.push($(this).data('label'));
});
ttShowExemptModal(labels, hasRooms);
ttShowExemptModal(null);
});
$(document).on('click', '.tt-exempt-service-line', function (e) {
e.preventDefault();
ttExemptTarget = { id_service_product_order_detail: $(this).data('id_service_product_order_detail') };
ttShowExemptModal([$(this).data('label')], false);
ttShowExemptModal({ id_service_product_order_detail: $(this).data('id_service_product_order_detail') });
});
$(document).on('click', '#tt-exempt-confirm', function (e) {
if (!ttExemptTarget) {
var idsHtlBooking = $('#exempt-tourism-tax-modal input[name="tt_exempt_id_htl_booking[]"]:checked').map(function () {
return $(this).val();
}).get();
var idsServiceLine = $('#exempt-tourism-tax-modal input[name="tt_exempt_id_service_product_order_detail[]"]:checked').map(function () {
return $(this).val();
}).get();
if (!idsHtlBooking.length && !idsServiceLine.length) {
showErrorMessage('{l s='No booking/products has been selected.' js=1}');
return;
}
$('#exempt-tourism-tax-modal').modal('hide');
ttAjax('ExemptTourismTax', $.extend({ note: $('#tt-exempt-note').val() }, ttExemptTarget));
ttAjax('ExemptTourismTax', {
id_order: id_order,
id_htl_booking: idsHtlBooking,
id_service_product_order_detail: idsServiceLine,
note: $('#tt-exempt-note').val()
}, $(this));
});
function ttShowApplyModal(onlyRow) {
var $modal = $('#apply-tourism-tax-modal');
var $rows = $modal.find('.tt-apply-row');
$rows.show().find('input[type=checkbox]').prop('checked', true);
$modal.find('.tt-select-col').toggle(!onlyRow);
if (onlyRow) {
$rows.each(function () {
var $row = $(this);
var isTarget = (onlyRow.id_htl_booking && $row.data('id_htl_booking') == onlyRow.id_htl_booking)
|| (onlyRow.id_service_product_order_detail && $row.data('id_service_product_order_detail') == onlyRow.id_service_product_order_detail);
if (!isTarget) {
$row.hide().find('input[type=checkbox]').prop('checked', false);
}
});
}
// show the tab holding the picked row, and hide the tab bar when a single row was picked
var $tabs = $('#tt-apply-tabs');
if ($tabs.length) {
$tabs.toggle(!onlyRow);
var activeTab = (onlyRow && onlyRow.id_service_product_order_detail) ? '#tt_apply_products_tab' : '#tt_apply_rooms_tab';
$tabs.find('a[href="' + activeTab + '"]').tab('show');
}
$modal.modal('show');
}
$(document).on('click', '.tt-apply-booking', function (e) {
e.preventDefault();
ttShowApplyModal({ id_htl_booking: $(this).data('id_htl_booking') });
});
$(document).on('click', '.tt-apply-all-bookings', function (e) {
e.preventDefault();
ttShowApplyModal(null);
});
$(document).on('click', '.tt-apply-service-line', function (e) {
e.preventDefault();
ttShowApplyModal({ id_service_product_order_detail: $(this).data('id_service_product_order_detail') });
});
$(document).on('click', '#tt-apply-confirm', function (e) {
var idsHtlBooking = $('#apply-tourism-tax-modal input[name="tt_apply_id_htl_booking[]"]:checked').map(function () {
return $(this).val();
}).get();
var idsServiceLine = $('#apply-tourism-tax-modal input[name="tt_apply_id_service_product_order_detail[]"]:checked').map(function () {
return $(this).val();
}).get();
if (!idsHtlBooking.length && !idsServiceLine.length) {
showErrorMessage('{l s='No booking/products has been selected.' js=1}');
return;
}
ttAjax('ApplyTourismTax', {
id_order: id_order,
id_htl_booking: idsHtlBooking,
id_service_product_order_detail: idsServiceLine
}, $(this));
});
});
</script>

View File

@@ -1663,15 +1663,16 @@ abstract class ModuleCore
if (!in_array($modaddons->name, $modulesOnDisk)) {
if (isset($modaddons->img)) {
if (!file_exists(_PS_TMP_IMG_DIR_.md5((int)$modaddons->id.'-'.$modaddons->name).'.jpg')) {
if (!file_put_contents(_PS_TMP_IMG_DIR_.md5((int)$modaddons->id.'-'.$modaddons->name).'.jpg', Tools::file_get_contents($modaddons->img))) {
copy(_PS_IMG_DIR_.'404.gif', _PS_TMP_IMG_DIR_.md5((int)$modaddons->id.'-'.$modaddons->name).'.jpg');
$imgFile = md5((int)$modaddons->id.'-'.$modaddons->name).'.jpg';
if (!file_exists(_PS_TMP_IMG_DIR_.$imgFile)) {
$imgContent = Tools::file_get_contents($modaddons->img);
if ($imgContent) {
file_put_contents(_PS_TMP_IMG_DIR_.$imgFile, $imgContent);
}
}
if (file_exists(_PS_TMP_IMG_DIR_.md5((int)$modaddons->id.'-'.$modaddons->name).'.jpg')) {
$item->image = '../img/tmp/'.md5((int)$modaddons->id.'-'.$modaddons->name).'.jpg';
}
// Show 404 image without caching it, so the download is retried next time
$item->image = file_exists(_PS_TMP_IMG_DIR_.$imgFile) ? '../img/tmp/'.$imgFile : '../img/404.gif';
}
}

View File

@@ -1258,21 +1258,25 @@ class OrderTaxDetailCore extends ObjectModel
}
/**
* Exempt tourism tax for every booking (room + attached services) and every standalone service line
* of an order; returns only the failing entries.
* Exempt tourism tax for the bookings (room + attached services) and standalone service lines
* of an order — every one of them by default, or only the given ids; returns only the failing entries.
*
* @param int $idOrder
* @param int $idEmployee
* @param string|null $note Reason for exemption, applied to every booking/line in the order
* @param string|null $autoMsgLabel Pre-translated "Tourism Tax Exempted" label — null skips the Order Notes entry entirely, for every booking/line in the order
* @param string $remarkLabel Pre-translated "Remark" label
* @param int[]|null $idsHtlBooking Only these bookings are exempted (ids that don't belong to the order are ignored); null = every booking
* @param int[]|null $idsServiceLines Only these standalone service lines are exempted (ids that don't belong to the order are ignored); null = every line
* @return array [{'id_htl_booking' => int, 'result' => int}, ...] plus
* [{'id_service_product_order_detail' => int, 'result' => int}, ...] — failures only
*/
public static function exemptForOrder($idOrder, $idEmployee = 0, $note = null, $autoMsgLabel = null, $remarkLabel = 'Remark')
public static function exemptForOrder($idOrder, $idEmployee = 0, $note = null, $autoMsgLabel = null, $remarkLabel = 'Remark', $idsHtlBooking = null, $idsServiceLines = null)
{
$idOrder = (int) $idOrder;
$failures = array();
$selectedBookingIds = ($idsHtlBooking !== null) ? array_flip(array_map('intval', $idsHtlBooking)) : null;
$selectedServiceLineIds = ($idsServiceLines !== null) ? array_flip(array_map('intval', $idsServiceLines)) : null;
$objBookingDetail = new HotelBookingDetail();
$bookings = $objBookingDetail->getBookingDataByOrderId($idOrder);
if ($bookings) {
@@ -1284,6 +1288,9 @@ class OrderTaxDetailCore extends ObjectModel
if (isset($refundedIds[$booking['id']]) || $booking['id_status'] == HotelBookingDetail::STATUS_CANCELLED) {
continue;
}
if ($selectedBookingIds !== null && !isset($selectedBookingIds[(int) $booking['id']])) {
continue;
}
$result = self::exemptBooking($booking['id'], $idEmployee, $note, $autoMsgLabel, $remarkLabel);
if ($result !== self::EXEMPT_OK) {
$failures[] = array('id_htl_booking' => (int) $booking['id'], 'result' => $result);
@@ -1291,6 +1298,9 @@ class OrderTaxDetailCore extends ObjectModel
}
}
foreach (ServiceProductOrderDetail::getActiveStandaloneIdsByOrder($idOrder) as $idServiceLine) {
if ($selectedServiceLineIds !== null && !isset($selectedServiceLineIds[$idServiceLine])) {
continue;
}
$result = self::exemptServiceLine($idServiceLine, $idEmployee, $note, $autoMsgLabel, $remarkLabel);
if ($result !== self::EXEMPT_OK) {
$failures[] = array('id_service_product_order_detail' => $idServiceLine, 'result' => $result);
@@ -1300,21 +1310,25 @@ class OrderTaxDetailCore extends ObjectModel
}
/**
* Apply tourism tax for every booking and every standalone service line of an order; returns only
* the failing entries. A booking/line with nothing applicable (neither the room nor any attached
* Apply tourism tax for the bookings and standalone service lines of an order — every one of them by
* default, or only the given ids; returns only the failing entries. A booking/line with nothing applicable (neither the room nor any attached
* service, or the standalone line itself, has a tourism tax rule) is not a failure — it's silently
* skipped, same as if it had simply been left alone.
*
* @param int $idOrder
* @param int $idEmployee PS employee id (0 = resolved from Context)
* @param string|null $autoMsgLabel Pre-translated "Tourism Tax Applied" label — null skips the Order Notes entry entirely, for every booking/line in the order
* @param int[]|null $idsHtlBooking Only these bookings are applied (ids that don't belong to the order are ignored); null = every booking
* @param int[]|null $idsServiceLines Only these standalone service lines are applied (ids that don't belong to the order are ignored); null = every line
* @return array [{'id_htl_booking' => int, 'result' => int}, ...] plus
* [{'id_service_product_order_detail' => int, 'result' => int}, ...] — failures only
*/
public static function applyForOrder($idOrder, $idEmployee = 0, $autoMsgLabel = null)
public static function applyForOrder($idOrder, $idEmployee = 0, $autoMsgLabel = null, $idsHtlBooking = null, $idsServiceLines = null)
{
$idOrder = (int) $idOrder;
$failures = array();
$selectedBookingIds = ($idsHtlBooking !== null) ? array_flip(array_map('intval', $idsHtlBooking)) : null;
$selectedServiceLineIds = ($idsServiceLines !== null) ? array_flip(array_map('intval', $idsServiceLines)) : null;
$objBookingDetail = new HotelBookingDetail();
$bookings = $objBookingDetail->getBookingDataByOrderId($idOrder);
if ($bookings) {
@@ -1326,6 +1340,9 @@ class OrderTaxDetailCore extends ObjectModel
if (isset($refundedIds[$booking['id']]) || $booking['id_status'] == HotelBookingDetail::STATUS_CANCELLED) {
continue;
}
if ($selectedBookingIds !== null && !isset($selectedBookingIds[(int) $booking['id']])) {
continue;
}
$result = self::applyBooking($booking['id'], $idEmployee, $autoMsgLabel);
if ($result !== self::APPLY_OK && $result !== self::APPLY_ERROR_NOT_APPLICABLE) {
$failures[] = array('id_htl_booking' => (int) $booking['id'], 'result' => $result);
@@ -1333,6 +1350,9 @@ class OrderTaxDetailCore extends ObjectModel
}
}
foreach (ServiceProductOrderDetail::getActiveStandaloneIdsByOrder($idOrder) as $idServiceLine) {
if ($selectedServiceLineIds !== null && !isset($selectedServiceLineIds[$idServiceLine])) {
continue;
}
$result = self::applyServiceLine($idServiceLine, $idEmployee, $autoMsgLabel);
if ($result !== self::APPLY_OK && $result !== self::APPLY_ERROR_NOT_APPLICABLE) {
$failures[] = array('id_service_product_order_detail' => $idServiceLine, 'result' => $result);

View File

@@ -214,7 +214,7 @@ class PDFGeneratorCore extends TCPDF
{
$this->SetHeaderMargin(5);
$this->SetFooterMargin(21);
$this->setMargins(10, 40, 10);
$this->setMargins(10, 45, 10);
$this->AddPage();
$this->writeHTML($this->content, true, false, true, false, '');
}

View File

@@ -3672,7 +3672,9 @@ class AdminOrdersControllerCore extends AdminController
$orderTourismTaxHasUnapplied = false;
if ($useTourismTax && $order_detail_data) {
foreach ($order_detail_data as $bookingRow) {
if (!empty($bookingRow['is_cancelled']) || !empty($bookingRow['is_refunded'])) {
if (!empty($bookingRow['is_cancelled']) || !empty($bookingRow['is_refunded'])
|| $bookingRow['id_status'] == HotelBookingDetail::STATUS_CANCELLED
) {
continue;
}
if (isset($bookingRow['tourism_tax_status'])) {
@@ -9252,15 +9254,22 @@ class AdminOrdersControllerCore extends AdminController
}
/**
* Apply tourism tax to a booking (id_htl_booking), a standalone service line
* (id_service_product_order_detail), or every booking of a whole order (id_order) —
* see OrderTaxDetail::applyBooking()/applyServiceLine().
* Apply tourism tax to the rooms (id_htl_booking[]) and/or standalone service lines
* (id_service_product_order_detail[]) selected in the apply modal of an order (id_order) —
* see OrderTaxDetail::applyForOrder().
*/
public function ajaxProcessApplyTourismTax()
{
$idHtlBooking = (int) Tools::getValue('id_htl_booking', 0);
$idServiceProductOrderDetail = (int) Tools::getValue('id_service_product_order_detail', 0);
if ($this->tabAccess['edit'] !== 1) {
die(Tools::jsonEncode(array(
'hasError' => true,
'errors' => array(Tools::displayError('You do not have permission to edit this order.')),
)));
}
$idOrder = (int) Tools::getValue('id_order', 0);
$idsHtlBooking = array_filter(array_map('intval', (array) Tools::getValue('id_htl_booking', array())));
$idsServiceProductOrderDetail = array_filter(array_map('intval', (array) Tools::getValue('id_service_product_order_detail', array())));
$idEmployee = (int) Context::getContext()->employee->id;
$autoMsgLabel = $this->l('Tourism Tax Applied');
$errors = array();
@@ -9269,20 +9278,15 @@ class AdminOrdersControllerCore extends AdminController
OrderTaxDetail::APPLY_ERROR_NOT_APPLICABLE => $this->l('Tourism tax is not applicable for this booking.'),
);
if ($idHtlBooking) {
$result = OrderTaxDetail::applyBooking($idHtlBooking, $idEmployee, $autoMsgLabel);
if (isset($messagesByResult[$result])) {
$errors[] = $messagesByResult[$result];
}
} elseif ($idServiceProductOrderDetail) {
$result = OrderTaxDetail::applyServiceLine($idServiceProductOrderDetail, $idEmployee, $autoMsgLabel);
if (isset($messagesByResult[$result])) {
$errors[] = $messagesByResult[$result];
}
} elseif ($idOrder) {
$errors = self::tourismTaxErrorsFromResults(OrderTaxDetail::applyForOrder($idOrder, $idEmployee, $autoMsgLabel), $messagesByResult);
} else {
if (!Validate::isLoadedObject(new Order($idOrder))) {
$errors[] = $this->l('Invalid request parameters.');
} elseif (!$idsHtlBooking && !$idsServiceProductOrderDetail) {
$errors[] = Tools::displayError('No booking/products has been selected.');
} else {
$errors = self::tourismTaxErrorsFromResults(
OrderTaxDetail::applyForOrder($idOrder, $idEmployee, $autoMsgLabel, $idsHtlBooking, $idsServiceProductOrderDetail),
$messagesByResult
);
}
die(Tools::jsonEncode(array(
@@ -9292,15 +9296,22 @@ class AdminOrdersControllerCore extends AdminController
}
/**
* Exempt tourism tax for a booking (id_htl_booking), a standalone service line
* (id_service_product_order_detail), or every booking of a whole order (id_order) —
* see OrderTaxDetail::exemptBooking()/exemptServiceLine().
* Exempt tourism tax for the rooms (id_htl_booking[]) and/or standalone service lines
* (id_service_product_order_detail[]) selected in the exemption modal of an order (id_order) —
* see OrderTaxDetail::exemptForOrder().
*/
public function ajaxProcessExemptTourismTax()
{
$idHtlBooking = (int) Tools::getValue('id_htl_booking', 0);
$idServiceProductOrderDetail = (int) Tools::getValue('id_service_product_order_detail', 0);
if ($this->tabAccess['edit'] !== 1) {
die(Tools::jsonEncode(array(
'hasError' => true,
'errors' => array(Tools::displayError('You do not have permission to edit this order.')),
)));
}
$idOrder = (int) Tools::getValue('id_order', 0);
$idsHtlBooking = array_filter(array_map('intval', (array) Tools::getValue('id_htl_booking', array())));
$idsServiceProductOrderDetail = array_filter(array_map('intval', (array) Tools::getValue('id_service_product_order_detail', array())));
$idEmployee = (int) Context::getContext()->employee->id;
$note = trim((string) Tools::getValue('note', ''));
$note = ($note !== '') ? $note : null;
@@ -9312,20 +9323,15 @@ class AdminOrdersControllerCore extends AdminController
OrderTaxDetail::EXEMPT_ERROR_SAVE => $this->l('Could not exempt tourism tax.'),
);
if ($idHtlBooking) {
$result = OrderTaxDetail::exemptBooking($idHtlBooking, $idEmployee, $note, $autoMsgLabel, $remarkLabel);
if (isset($messagesByResult[$result])) {
$errors[] = $messagesByResult[$result];
}
} elseif ($idServiceProductOrderDetail) {
$result = OrderTaxDetail::exemptServiceLine($idServiceProductOrderDetail, $idEmployee, $note, $autoMsgLabel, $remarkLabel);
if (isset($messagesByResult[$result])) {
$errors[] = $messagesByResult[$result];
}
} elseif ($idOrder) {
$errors = self::tourismTaxErrorsFromResults(OrderTaxDetail::exemptForOrder($idOrder, $idEmployee, $note, $autoMsgLabel, $remarkLabel), $messagesByResult);
} else {
if (!Validate::isLoadedObject(new Order($idOrder))) {
$errors[] = $this->l('Invalid request parameters.');
} elseif (!$idsHtlBooking && !$idsServiceProductOrderDetail) {
$errors[] = Tools::displayError('No booking/products has been selected.');
} else {
$errors = self::tourismTaxErrorsFromResults(
OrderTaxDetail::exemptForOrder($idOrder, $idEmployee, $note, $autoMsgLabel, $remarkLabel, $idsHtlBooking, $idsServiceProductOrderDetail),
$messagesByResult
);
}
die(Tools::jsonEncode(array(

View File

@@ -138,7 +138,7 @@ class AdminThemesControllerCore extends AdminController
'icon' => 'icon-html5',
'tabs' => array(
'logo' => $this->l('Logo'),
'logo2' => $this->l('Invoice & Email Logos'),
'logo2' => $this->l('Documents & Email Logos'),
'icons' => $this->l('Icons'),
'mobile' => $this->l('Mobile'),
),

View File

@@ -101,6 +101,9 @@ class ContactControllerCore extends FrontController
$id_order,
$id_contact,
' AND a.`status` !='. CustomerThread::QLO_CUSTOMER_THREAD_STATUS_CLOSED
.' AND a.`user_name` = \''.pSQL($userName).'\''
.' AND a.`phone` = \''.pSQL($phone).'\''
.' AND a.`subject` = \''.pSQL($subject).'\''
);
}

View File

@@ -129,7 +129,6 @@ class OurPropertiesControllerCore extends FrontController
'hotelsInfo' => $hotelsInfo,
'hotelLocationArray' => $hotelLocationArray,
'displayHotelMap' => $displayHotelMap,
'WK_HTL_SHORT_DESC' => Configuration::get('WK_HTL_SHORT_DESC', $this->context->language->id),
'currentIndex' => $this->context->link->getPageLink('our-properties')
)
);

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Credit slip</title>

View File

@@ -131,10 +131,10 @@
<url_rewrite>order-slip</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>আমাদের সম্পত্তিসমূহ</title>
<title>সম্পত্তিসমূহ</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id='order' id_shop='1'>
<title>অর্ডার </title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>acompanhar-meu-pedido</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Nossas propriedades</title>
<title>Propriedades</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>propriedades</url_rewrite>
</meta>
<meta id='order-slip' id_shop='1'>
<title>Nota do pedido</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Naše nemovitosti</title>
<title>Nemovitosti</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>nemovitosti</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Dobropis</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>bestellungsverfolgung</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Unsere Immobilien</title>
<title>Immobilien</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>immobilien</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Bestellschein</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Credit slip</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>seguimiento-pedido</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Nuestras propiedades</title>
<title>Propiedades</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>propiedades</url_rewrite>
</meta>
<meta id='order-slip' id_shop='1'>
<title>Albarán</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>املاک ما</title>
<title>املاک</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>رسید سفارش</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>suivi-commande</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Nos propriétés</title>
<title>Propriétés</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>proprietes</url_rewrite>
</meta>
<meta id='order-slip' id_shop='1'>
<title>Avoirs</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>מעקב-הזמנות</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>הנכסים שלנו</title>
<title>נכסים</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>נכסים</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>שוברי הזמנה</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Credit slip</title>

View File

@@ -131,10 +131,10 @@
<url_rewrite>order-slip</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order" id_shop="1">
<title>Order</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>pantau-order</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Properti kami</title>
<title>Properti</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properti</url_rewrite>
</meta>
<meta id='order-slip' id_shop='1'>
<title>Slip order</title>

View File

@@ -131,10 +131,10 @@
<url_rewrite>buono-ordine</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Le nostre proprietà</title>
<title>Proprietà</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>proprieta</url_rewrite>
</meta>
<meta id='order' id_shop='1'>
<title>Ordine</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Credit slip</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Order slip</title>

View File

@@ -178,4 +178,10 @@
<url_rewrite>product-vergelijking</url_rewrite>
</meta>
-->
<meta id='our-properties' id_shop='1'>
<title>Eigendommen</title>
<description/>
<keywords/>
<url_rewrite>eigendommen</url_rewrite>
</meta>
</entity_meta>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Order slip</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>sledzenie-zamowienia</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Nasze nieruchomości</title>
<title>Nieruchomości</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>nieruchomosci</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Pokwitowania</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>acompanhar-encomenda</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Nossas propriedades</title>
<title>Propriedades</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>propriedades</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Nota de Encomenda</title>

View File

@@ -178,4 +178,10 @@
<url_rewrite>comparaison-produits</url_rewrite>
</meta>
-->
<meta id='our-properties' id_shop='1'>
<title>Propriétés</title>
<description/>
<keywords/>
<url_rewrite>proprietes</url_rewrite>
</meta>
</entity_meta>

View File

@@ -125,10 +125,10 @@
<url_rewrite>returnari</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Proprietățile noastre</title>
<title>Proprietăți</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>proprietati</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Bon de comandă</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Наши объекты</title>
<title>Объекты</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Бланк заказа</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Credit slip</title>

View File

@@ -119,10 +119,10 @@
<url_rewrite>my-account</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-follow" id_shop="1">
<title>Order follow</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Credit slip</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>我們的物業</title>
<title>物業</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>訂購單</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Các bất động sản của chúng tôi</title>
<title>Bất động sản</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Phiếu tín dụng</title>

View File

@@ -125,10 +125,10 @@
<url_rewrite>order-follow</url_rewrite>
</meta>
<meta id='our-properties' id_shop='1'>
<title>Our Properties</title>
<title>Properties</title>
<description/>
<keywords/>
<url_rewrite>our-properties</url_rewrite>
<url_rewrite>properties</url_rewrite>
</meta>
<meta id="order-slip" id_shop="1">
<title>Order slip</title>

View File

@@ -273,7 +273,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Total Rooms Cost in cart' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}
@@ -292,7 +292,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Total Product Cost in cart' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}
@@ -331,7 +331,7 @@
{/if} -->
<!-- <div class="layer_cart_row">
<strong class="dark{if $shipping_cost_float == 0 && (!isset($cart->id_address_delivery) || !$cart->id_address_delivery)} unvisible{/if}">
{l s='Total shipping' mod='blockcart'}&nbsp;{if $display_tax_label}{if $priceDisplay == 1}{l s='(tax excl.)' mod='blockcart'}{else}{l s='(tax incl.)' mod='blockcart'}{/if}{/if}
{l s='Total shipping' mod='blockcart'}&nbsp;{if $use_taxes && $display_tax_label}{if $priceDisplay == 1}{l s='(tax excl.)' mod='blockcart'}{else}{l s='(tax incl.)' mod='blockcart'}{/if}{/if}
</strong>
<span class="ajax_cart_shipping_cost{if $shipping_cost_float == 0 && (!isset($cart->id_address_delivery) || !$cart->id_address_delivery)} unvisible{/if}">
{if $shipping_cost_float == 0}
@@ -346,7 +346,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Convenience Fees' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}
@@ -386,7 +386,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Total' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}

View File

@@ -193,7 +193,7 @@ class WkCustomNavigationLink extends ObjectModel
'link' => 'index',
),
array(
'name' => 'Our Properties',
'name' => 'Properties',
'id_cms' => 0,
'show_at_navigation' => 1,
'show_at_footer' => 0,

View File

@@ -766,7 +766,7 @@ class HotelBookingDetail extends ObjectModel
$excludeRoomId = array();
$excludeRoomId['checked_out'] = 'SELECT `id_room`
FROM `'._DB_PREFIX_.'htl_booking_detail`
WHERE `id_hotel` = '.(int)$idHotel.' AND `is_back_order` = 0 AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND IF(`id_status` = '. self::STATUS_CHECKED_OUT.',
WHERE `id_hotel` = '.(int)$idHotel.' AND `is_back_order` = 0 AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `id_status` NOT IN ('.HotelBookingDetail::STATUS_CANCELLED.', '.HotelBookingDetail::STATUS_NO_SHOW.') AND IF(`id_status` = '. HotelBookingDetail::STATUS_CHECKED_OUT.',
IF('.(int) $hourlyBooking.', 1, (DATE_FORMAT(`check_out`, "%Y-%m-%d") != DATE_FORMAT(\''.pSQL($dateFrom).'\', "%Y-%m-%d")) AND (`check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.PSQL($dateTo).'\')) AND (
(`date_from` <= \''.pSQL($dateFrom).'\' AND `check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.PSQL($dateTo).'\') OR
(`date_from` >= \''.pSQL($dateFrom).'\' AND `check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.pSQL($dateTo).'\') OR
@@ -1096,7 +1096,7 @@ class HotelBookingDetail extends ObjectModel
FROM `'._DB_PREFIX_.'htl_booking_detail` AS bd
INNER JOIN `'._DB_PREFIX_.'htl_room_information` AS rf ON (rf.`id` = bd.`id_room`)
INNER JOIN `'._DB_PREFIX_.'htl_room_type` AS hrt ON (hrt.`id_product` = rf.`id_product`)
WHERE bd.`id_hotel`='.(int)$idHotel.' AND rf.`id_status` != '. HotelRoomInformation::STATUS_INACTIVE .' AND bd.`is_back_order` = 0 AND bd.`id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND IF(bd.`id_status` = '. self::STATUS_CHECKED_OUT .', IF('.(int) $hourlyBooking.', 1, (DATE_FORMAT(`check_out`, "%Y-%m-%d") != DATE_FORMAT(\''.pSQL($dateFrom).'\', "%Y-%m-%d")) AND (`check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.PSQL($dateTo).'\')) AND (
WHERE bd.`id_hotel`='.(int)$idHotel.' AND rf.`id_status` != '. HotelRoomInformation::STATUS_INACTIVE .' AND bd.`is_back_order` = 0 AND bd.`id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND bd.`id_status` NOT IN ('.HotelBookingDetail::STATUS_CANCELLED.', '.HotelBookingDetail::STATUS_NO_SHOW.') AND IF(bd.`id_status` = '. HotelBookingDetail::STATUS_CHECKED_OUT .', IF('.(int) $hourlyBooking.', 1, (DATE_FORMAT(`check_out`, "%Y-%m-%d") != DATE_FORMAT(\''.pSQL($dateFrom).'\', "%Y-%m-%d")) AND (`check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.PSQL($dateTo).'\')) AND (
(bd.`date_from` <= \''.pSQL($dateFrom).'\' AND bd.`check_out` > \''.pSQL($dateFrom).'\' AND bd.`check_out` < \''.pSQL($dateTo).'\') OR
(bd.`date_from` > \''.pSQL($dateFrom).'\' AND bd.`date_from` < \''.pSQL($dateTo).'\' AND bd.`check_out` >= \''.pSQL($dateTo).'\') OR
(bd.`date_from` > \''.pSQL($dateFrom).'\' AND bd.`date_from` < \''.pSQL($dateTo).'\' AND bd.`check_out` > \''.pSQL($dateFrom).'\' AND bd.`check_out` < \''.pSQL($dateTo).'\')
@@ -1429,7 +1429,7 @@ class HotelBookingDetail extends ObjectModel
$selectBookedRoomSearch = 'SELECT `id`, `id_order`, `id_product`, `id_room`, `id_hotel`, `id_customer`, `booking_type`, `id_status` AS booking_status, `comment`, `room_num`, `date_from`, IF(`id_status` = '. self::STATUS_CHECKED_OUT.', `check_out`,`date_to`) AS `date_to`, `check_in`, `check_out`, `date_to` AS `booking_date_to`';
$joinBookedRoomSearch = '';
$whereBookedRoomSearch = 'WHERE `id_hotel` = '.(int)$idHotel.' AND `is_back_order` = 0 AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND IF(`id_status` = '. self::STATUS_CHECKED_OUT.', (
$whereBookedRoomSearch = 'WHERE `id_hotel` = '.(int)$idHotel.' AND `is_back_order` = 0 AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `id_status` NOT IN ('.HotelBookingDetail::STATUS_CANCELLED.', '.HotelBookingDetail::STATUS_NO_SHOW.') AND IF(`id_status` = '. HotelBookingDetail::STATUS_CHECKED_OUT.', (
(`date_from` <= \''.pSQL($dateFrom).'\' AND `check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.PSQL($dateTo).'\') OR
(`date_from` >= \''.pSQL($dateFrom).'\' AND `check_out` > \''.pSQL($dateFrom).'\' AND `check_out` <= \''.pSQL($dateTo).'\') OR
(`date_from` >= \''.pSQL($dateFrom).'\' AND `date_from` < \''.pSQL($dateTo).'\' AND `check_out` >= \''.pSQL($dateTo).'\') OR
@@ -1502,7 +1502,7 @@ class HotelBookingDetail extends ObjectModel
$sql = 'SELECT `id`, `id_product`, `id_order`, `id_cart`, `id_room`, `id_hotel`, `id_customer`,
`check_out`, `check_in`, `id_status`
FROM `'._DB_PREFIX_.'htl_booking_detail` WHERE `id_room` = '.(int)$id_room.
' AND `is_back_order` = 0 AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND ((date_from <= \''.pSQL($date_from).'\' AND date_to > \''.
' AND `is_back_order` = 0 AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `id_status` NOT IN ('.HotelBookingDetail::STATUS_CANCELLED.', '.HotelBookingDetail::STATUS_NO_SHOW.') AND ((date_from <= \''.pSQL($date_from).'\' AND date_to > \''.
pSQL($date_from).'\' AND date_to <= \''.pSQL($date_to).'\') OR (date_from > \''.pSQL($date_from).
'\' AND date_to < \''.pSQL($date_to).'\') OR (date_from >= \''.pSQL($date_from).'\' AND date_from < \''.
pSQL($date_to).'\' AND date_to >= \''.pSQL($date_to).'\') OR (date_from < \''.pSQL($date_from).
@@ -1968,7 +1968,7 @@ class HotelBookingDetail extends ObjectModel
FROM `'._DB_PREFIX_.'htl_booking_detail`
WHERE `id_hotel` = '.(int)$hotel_id.' AND `id_product` = '.(int)$id_room_type.'
AND `date_from` = \''.pSQL($date_from).'\' AND `date_to` = \''.pSQL($date_to).'\'
AND `id_room`!='.(int)$id_room.' AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `is_back_order` = 0';
AND `id_room`!='.(int)$id_room.' AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `id_status` NOT IN ('.HotelBookingDetail::STATUS_CANCELLED.', '.HotelBookingDetail::STATUS_NO_SHOW.') AND `is_back_order` = 0';
return Db::getInstance()->executeS($sql);
}
@@ -2743,7 +2743,7 @@ class HotelBookingDetail extends ObjectModel
`date_to` != \''.pSQL($old_date_to).'\' AND `date_to` > \''.pSQL($new_date_from).'\',
`check_out` != \''.pSQL($old_date_to).'\' AND `check_out` > \''.pSQL($new_date_from).'\'
)
AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `is_back_order`=0';
AND `id` NOT IN ('.OrderReturn::getRefundedBookingIdsSubquery().') AND `id_status` NOT IN ('.HotelBookingDetail::STATUS_CANCELLED.', '.HotelBookingDetail::STATUS_NO_SHOW.') AND `is_back_order`=0';
return Db::getInstance()->executeS($sql);
}

View File

@@ -1126,14 +1126,6 @@ class HotelHelper
// lang fields
$languages = Language::getLanguages(false);
$htlShortDescLang = array(
'en' => 'We offer elegant rooms, gourmet dining, and attentive service for a memorable stay.',
'nl' => 'Wij bieden elegante kamers, gastronomisch dineren en attente service voor een onvergetelijk verblijf.',
'fr' => 'Nous proposons des chambres élégantes, une cuisine gastronomique et un service attentionné pour un séjour mémorable.',
'de' => 'Wir bieten elegante Zimmer, Gourmet-Restaurants und aufmerksamen Service für einen unvergesslichen Aufenthalt.',
'ru' => 'Мы предлагаем элегантные номера, изысканную кухню и внимательное обслуживание для незабываемого отдыха.',
'es' => 'Ofrecemos habitaciones elegantes, comidas gourmet y un servicio atento para una estadía inolvidable.',
);
$defaultDimensionUnitLang = array(
'en' => 'ft',
'nl' => 'ft',
@@ -1142,23 +1134,15 @@ class HotelHelper
'ru' => 'фут',
'es' => 'ft',
);
$WK_HTL_CHAIN_NAME = array();
$WK_HTL_SHORT_DESC = array();
$defaultDimensionUnit = array();
foreach ($languages as $lang) {
if (isset($htlShortDescLang[$lang['iso_code']])) {
$WK_HTL_SHORT_DESC[$lang['id_lang']] = $htlShortDescLang[$lang['iso_code']];
$WK_HTL_CHAIN_NAME[$lang['id_lang']] = $homeBannerTitleLang[$lang['iso_code']];
if (isset($defaultDimensionUnitLang[$lang['iso_code']])) {
$defaultDimensionUnit[$lang['id_lang']] = $defaultDimensionUnitLang[$lang['iso_code']];
} else {
$defaultDimensionUnit[$lang['id_lang']] = $defaultDimensionUnitLang['en'];
$WK_HTL_CHAIN_NAME[$lang['id_lang']] = $homeBannerTitleLang['en'];
$WK_HTL_SHORT_DESC[$lang['id_lang']] = $htlShortDescLang['en'];
}
}
Configuration::updateValue('WK_HTL_CHAIN_NAME', $WK_HTL_CHAIN_NAME);
Configuration::updateValue('WK_HTL_SHORT_DESC', $WK_HTL_SHORT_DESC);
Configuration::updateValue('WK_DIMENSION_UNIT', $defaultDimensionUnit);
// Search Fields

View File

@@ -124,39 +124,15 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
'generalsetting' => array(
'title' => $this->l('Website Configuration'),
'fields' => array(
'WK_HTL_CHAIN_NAME' => array(
'title' => $this->l('Property Brand Name'),
'type' => 'textLang',
'lang' => true,
'required' => true,
'validation' => 'isGenericName',
'hint' => $this->l('Enter Property name in case of single property or enter your properties chain name in case of multiple properties.'),
),
'WK_HTL_SHORT_DESC' => array(
'title' => $this->l('Property Short Description'),
'type' => 'textareaLang',
'lang' => true,
'required' => true,
'rows' => '4',
'cols' => '2',
'validation' => 'isGenericName',
'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 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,
),
'WK_HTL_ESTABLISHMENT_YEAR' => array(
'title' => $this->l('Website Launch Year'),
'hint' => $this->l('The year when your hotel site was launched.'),
'type' => 'text',
'class' => 'fixed-width-xxl',
),
'WK_DISPLAY_PROPERTIES_LINK_IN_HEADER' => array(
'title' => $this->l('Display Our Properties link in Header'),
'title' => $this->l('Display Properties link in Header'),
'cast' => 'intval',
'type' => 'bool',
'default' => '0',
@@ -170,7 +146,7 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
'value' => 0,
),
),
'hint' => $this->l('Display Our Properties link in header in the front office'),
'hint' => $this->l('Display Properties link in header in the front office'),
),
'WK_DISPLAY_CONTACT_PAGE_HOTEL_LIST' => array(
'title' => $this->l('Display Contact Page Hotel List'),
@@ -232,6 +208,12 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
'required' => true,
'type' => 'text'
),
'WK_HTL_ESTABLISHMENT_YEAR' => array(
'title' => $this->l('Website Launch Year'),
'hint' => $this->l('The year when your hotel site was launched.'),
'type' => 'text',
'class' => 'fixed-width-xxl',
),
'PS_SHOP_PHONE' => array(
'title' => $this->l('Phone'),
'validation' => 'isGenericName',
@@ -423,7 +405,7 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
'hint' => $this->l('If yes, only active hotels will be displayed on map.'),
),
'WK_DISPLAY_PROPERTIES_PAGE_GOOGLE_MAP' => array(
'title' => $this->l('Display Our Properties page Google map'),
'title' => $this->l('Display Properties page Google map'),
'cast' => 'intval',
'type' => 'bool',
'default' => '0',
@@ -437,7 +419,7 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
'value' => 0,
),
),
'hint' => $this->l('Enable to display map with hotels locations on the our properties page.'),
'hint' => $this->l('Enable to display map with hotels locations on the properties page.'),
),
'WK_DISPLAY_CONTACT_PAGE_GOOLGE_MAP' => array(
'title' => $this->l('Display Contact Us page Google map'),
@@ -540,29 +522,6 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
$this->errors[] = $this->l('Property name search threshold field is invalid.');
}
if (!trim(Tools::getValue('WK_HTL_CHAIN_NAME_'.$defaultLangId))) {
$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 property chain name in ').$lang['name'];
}
}
}
}
if (!trim(Tools::getValue('WK_HTL_SHORT_DESC_'.$defaultLangId))) {
$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 property short description in ').$lang['name'];
}
}
}
}
if (!Validate::isUnsignedInt(Tools::getValue('WK_ADVANCED_PAYMENT_GLOBAL_MIN_AMOUNT'))) {
$this->errors[] = $this->l('Invalid minimum partial payment percentage.');
} elseif (Tools::getValue('WK_ADVANCED_PAYMENT_GLOBAL_MIN_AMOUNT') <= 0) {
@@ -604,20 +563,6 @@ class AdminHotelGeneralSettingsController extends ModuleAdminController
$_POST['WK_HOTEL_NAME_ENABLE'] = 1;
}
}
foreach ($languages as $lang) {
// if lang fileds are at least in default language and not available in other languages then
// set empty fields value to default language value
if (!trim(Tools::getValue('WK_HTL_CHAIN_NAME_'.$lang['id_lang']))) {
$_POST['WK_HTL_CHAIN_NAME_'.$lang['id_lang']] = trim(
Tools::getValue('WK_HTL_CHAIN_NAME_'.$defaultLangId)
);
}
if (!trim(Tools::getValue('WK_HTL_SHORT_DESC_'.$lang['id_lang']))) {
$_POST['WK_HTL_SHORT_DESC_'.$lang['id_lang']] = trim(
Tools::getValue('WK_HTL_SHORT_DESC_'.$defaultLangId)
);
}
}
parent::postProcess();
if (empty($this->errors)) {
Tools::redirectAdmin(self::$currentIndex.'&conf=6&token='.$this->token);

View File

@@ -48,7 +48,6 @@ class HotelReservationSystem extends Module
$resources = array(
'hotels' => array('description' => 'Hotel Branch Information','class' => 'HotelBranchInformation'),
'hotel_room_types' => array('description' => 'Hotel room types','class' => 'HotelRoomType'),
'property_types' => array('description' => 'Hotel property types', 'class' => 'HotelPropertyType'),
'hotel_amenities' => array('description' => 'The hotel amenities', 'class' => 'HotelAmenities'),
'hotel_refund_rules' => array('description' => 'The hotel refund rules','class' => 'HotelOrderRefundRules'),
'hotel_rooms' => array('description' => 'The hotel rooms','class' => 'HotelRoomInformation'),
@@ -358,7 +357,7 @@ class HotelReservationSystem extends Module
$this->context->smarty->assign(
array(
'WK_HTL_ESTABLISHMENT_YEAR' => Configuration::get('WK_HTL_ESTABLISHMENT_YEAR'),
'WK_HTL_CHAIN_NAME' => Configuration::get('WK_HTL_CHAIN_NAME', $this->context->language->id),
'WK_HTL_CHAIN_NAME' => Configuration::get('PS_SHOP_NAME'),
)
);
return $this->display(__FILE__, 'copyRight.tpl');
@@ -452,12 +451,6 @@ class HotelReservationSystem extends Module
//If Admin update new language when we do entry in module all lang tables.
HotelHelper::updateLangTables($newIdLang, $langTables);
// update configuration keys
$configKeys = array(
'WK_HTL_CHAIN_NAME',
'WK_HTL_SHORT_DESC',
);
HotelHelper::updateConfigurationLangKeys($newIdLang, $configKeys);
}
}
@@ -600,6 +593,7 @@ class HotelReservationSystem extends Module
'WK_ROOM_LEFT_WARNING_NUMBER',
'WK_HTL_ESTABLISHMENT_YEAR',
'WK_HTL_CHAIN_NAME',
'WK_HTL_SHORT_DESC',
'WK_HTL_TAG_LINE',
'WK_TITLE_HEADER_BLOCK',
'WK_CONTENT_HEADER_BLOCK',

View File

@@ -214,4 +214,18 @@
.js-header-media-next {
right: 15px;
}
}
/* ===== copyRight.tpl (footer copyright) ===== */
.copyRightWrapper {
background-color: #242424;
padding: 30px;
width: 100%;
}
.copyRightWrapper .copyRight {
color: #868686;
font-size: 16px;
font-weight: 400;
margin: 0;
text-align: center;
line-height: 23px;
}

View File

@@ -1,5 +1,5 @@
<div class="copyRightWrapper">
<p class="copyRight">
&copy;{if isset($WK_HTL_ESTABLISHMENT_YEAR) && $WK_HTL_ESTABLISHMENT_YEAR} {$WK_HTL_ESTABLISHMENT_YEAR}-{'Y'|date}&nbsp;{/if}<a href="{$base_dir}">&nbsp;{$WK_HTL_CHAIN_NAME}</a>.&nbsp;{l s=' All rights reserved. | Powered by' mod='hotelreservationsystem'} <a href="https://qloapps.com/" target="_blank">QloApps</a>
&copy;{if isset($WK_HTL_ESTABLISHMENT_YEAR) && $WK_HTL_ESTABLISHMENT_YEAR} {$WK_HTL_ESTABLISHMENT_YEAR}-{'Y'|date}&nbsp;{/if}<a href="{$base_dir}">&nbsp;{$WK_HTL_CHAIN_NAME|escape:'html':'UTF-8'}</a>.&nbsp;{l s=' All rights reserved. | Powered by' mod='hotelreservationsystem'} <a href="https://qloapps.com/" target="_blank">QloApps</a>
</p>
</div>

View File

@@ -693,6 +693,7 @@ class QloCleaner extends Module
array('htl_room_type_feature_pricing_group', 'id_group', 'group', 'id_group'),
array('htl_booking_detail', 'id_product', 'product', 'id_product'),
array('htl_booking_detail', 'id_order', 'orders', 'id_order'),
array('htl_booking_status_history', 'id_htl_booking', 'htl_booking_detail', 'id'),
array('htl_cart_booking_data', 'id_order', 'orders', 'id_order'),
array('htl_cart_booking_data', 'id_customer', 'customer', 'id_customer'),
array('htl_branch_amenity', 'id_hotel', 'htl_branch_info', 'id'),
@@ -866,6 +867,7 @@ class QloCleaner extends Module
//Qlo modules order tables
'htl_cart_booking_data',
'htl_booking_detail',
'htl_booking_status_history',
'service_product_order_detail',
'service_product_cart_detail',
'order_customer_guest_detail',

View File

@@ -26,12 +26,12 @@
<p>
<span>
{l s='Total rooms cost'}
{if $display_tax_label}
{if $use_taxes && $priceDisplay == 0}
{l s='(tax incl)'}
{else}
{l s='(tax excl)'}
{/if}
{if $display_tax_label && $use_taxes}
{if $priceDisplay == 0}
{l s='(tax incl)'}
{else}
{l s='(tax excl)'}
{/if}
{/if}
</span>
<span class="cart_total_values">
@@ -48,8 +48,8 @@
<p>
<span>
{l s='Total products'}
{if $display_tax_label}
{if $use_taxes && $priceDisplay == 0}
{if $display_tax_label && $use_taxes}
{if $priceDisplay == 0}
{l s='(tax incl)'}
{else}
{l s='(tax excl)'}
@@ -69,8 +69,8 @@
<p>
<span>
{l s='Convenience Fees'}
{if $display_tax_label}
{if $use_taxes && $priceDisplay == 0}
{if $display_tax_label && $use_taxes}
{if $priceDisplay == 0}
{l s='(tax incl)'}
{else}
{l s='(tax excl)'}
@@ -108,8 +108,8 @@
{/if}
<p class="total_discount_block {if $total_discounts == 0}unvisible{/if}">
<span>
{if $display_tax_label}
{if $use_taxes && $priceDisplay == 0}
{if $display_tax_label && $use_taxes}
{if $priceDisplay == 0}
{l s='Total Discount (tax incl)'}
{else}
{l s='Total Discount (tax excl)'}

View File

@@ -180,7 +180,7 @@
{/block}
{if isset($WK_DISPLAY_PROPERTIES_LINK_IN_HEADER) && $WK_DISPLAY_PROPERTIES_LINK_IN_HEADER}
<div>
<a href="{$link->getPageLink('our-properties')}" class="our_properties_link">{l s='Our Properties'}</a>
<a href="{$link->getPageLink('our-properties')}" class="our_properties_link">{l s='Properties'}</a>
</div>
{/if}
</div>

View File

@@ -274,7 +274,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Total Rooms Cost in cart' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}
@@ -293,7 +293,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Total Product Cost in cart' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}
@@ -332,7 +332,7 @@
{/if} -->
<!-- <div class="layer_cart_row">
<strong class="dark{if $shipping_cost_float == 0 && (!isset($cart->id_address_delivery) || !$cart->id_address_delivery)} unvisible{/if}">
{l s='Total shipping' mod='blockcart'}&nbsp;{if $display_tax_label}{if $priceDisplay == 1}{l s='(tax excl.)' mod='blockcart'}{else}{l s='(tax incl.)' mod='blockcart'}{/if}{/if}
{l s='Total shipping' mod='blockcart'}&nbsp;{if $use_taxes && $display_tax_label}{if $priceDisplay == 1}{l s='(tax excl.)' mod='blockcart'}{else}{l s='(tax incl.)' mod='blockcart'}{/if}{/if}
</strong>
<span class="ajax_cart_shipping_cost{if $shipping_cost_float == 0 && (!isset($cart->id_address_delivery) || !$cart->id_address_delivery)} unvisible{/if}">
{if $shipping_cost_float == 0}
@@ -347,7 +347,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Convenience Fees' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}
@@ -391,7 +391,7 @@
<div class="layer_cart_row">
<strong class="dark">
{l s='Total' mod='blockcart'}
{if $display_tax_label}
{if $use_taxes && $display_tax_label}
{if $priceDisplay == 1}
{l s='(tax excl.)' mod='blockcart'}
{else}

View File

@@ -21,13 +21,13 @@
*}
{block name='our_properties'}
{capture name=path}{l s='Our Properties'}{/capture}
{capture name=path}{l s='Properties'}{/capture}
{if isset($hotelsInfo) && $hotelsInfo}
{block name='our_properties_list_title'}
<div class="title-container">
<h1 class="text-center our-properties-header">{l s='Our Properties'}</h1>
<h1 class="text-center our-properties-header">{l s='Properties'}</h1>
<div class="text-center our-properties-desc">
<p>{$WK_HTL_SHORT_DESC|escape:'html':'UTF-8'}</p>
<p>{l s='Enjoy a welcoming atmosphere, essential comforts, and a pleasant stay.'}</p>
</div>
</div>
{/block}

View File

@@ -146,7 +146,7 @@
{/if}
</div>
<p class="total_price_detial">
{l s='Total %s price' sprintf=$data_v['selling_object_plural_name']|escape:'html':'UTF-8'} {if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
{l s='Total %s price' sprintf=$data_v['selling_object_plural_name']|escape:'html':'UTF-8'} {if $use_taxes && $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
</p>
</div>
</div>
@@ -178,7 +178,7 @@
</span>
</p>
<p class="total_price_detial">
{l s='Total price for'} {$rm_v['num_days']} {l s='Night(s) stay'}{if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.'}{/if} {l s='all taxes.)'}{/if}
{l s='Total price for'} {$rm_v['num_days']} {l s='Night(s) stay'}{if $use_taxes && $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.'}{/if} {l s='all taxes.)'}{/if}
</p>
</div>
</div>
@@ -260,7 +260,7 @@
</span>
</p>
<p class="total_price_detial">
{l s='Unit price'} {if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
{l s='Unit price'} {if $use_taxes && $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
</p>
</div>
{if $product.allow_multiple_quantity}
@@ -292,7 +292,7 @@
</span>
</p>
<p class="total_price_detial">
{l s='Total price'} {if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
{l s='Total price'} {if $use_taxes && $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
</p>
</div>
</div>
@@ -351,7 +351,7 @@
</span>
</p>
<p class="total_price_detial">
{l s='Unit price'} {if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
{l s='Unit price'} {if $use_taxes && $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
</p>
</div>
{if $product.allow_multiple_quantity}
@@ -384,7 +384,7 @@
</span>
</p>
<p class="total_price_detial">
{l s='Total price'} {if $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
{l s='Total price'} {if $use_taxes && $display_tax_label}{if $priceDisplay} {l s='(Excl.'} {else}{l s='(Incl.)'}{/if} {l s='all taxes.)'}{/if}
</p>
</div>
</div>