V1.4.1 released: Hotel wise permissions, order confirmation mail management, Pricing variants in upselling feature

This commit is contained in:
Rohit Jain
2020-01-23 19:19:52 +05:30
parent cc66435e3a
commit 0d274a6044
542 changed files with 12719 additions and 13426 deletions

View File

@@ -1,3 +1,50 @@
####################################
# V1.4.1
####################################
## Added Features:
[+] BO : Hotel wise employee permission management is added. now admin can give permission to his employees according to the specific hotel selections
[+] BO : Additional facility : functionality is added at backoffice order creation process also.
[+] BO : Additional facility : Tax can be applied on additional facilities.
[+] BO : Additional facility : Per day price calculation option is added.[Price will be calculated on per day basis of the booking or for entire date range of the booking]
[+] BO : Order Confirmation Email : Now admin can set to whom order confirmation email will be sent from Preferences -> orders tab.
[+] CO : displayNavigationBottomHook hook added "hotelcommerce/modules/blockuserinfo/nav-xs.tpl".
## Improved/changed features:
[*] FO : Address details on Order details page is changed. Only details (name, email and mobile number) will be shown which we are showing to the customer at checkout page
[*] FO : Address will not be shown to the customer while checkout process. edit link also removed from "Guest Information" section at checkout page.
[*] BO : Option to delete one room in two default created rows in while saving rooms of the room type.
[*] BO : unit price fields removed from backoffice room type creation page.
[*] CO : blocknavigationmenu : Navigaion menu improved. All links are dynamic now.
[*] CO : wkfooterexploreblock module is removed. All functionalities are merged with blocknavigationmenu module.
[*] CO : Orders will be splitted now hotelwise. A new order will be created for each hotel.
[*] CO : Trademark and powered by changed to webkul (from presatshop).
[*] CO : Correct single quotes and double quotes of Class HotelBookingDetail.php
[*] CO : Installed paypal module by prestashop by default while QloApps installation.
[*] CO : Translations are improved.
## Bug/Issues Resolved:
[-] BO : Resolved : Room does not free even after room status set to checkout.
[-] BO : Resolved : Infinite loop on Room type page while loading Booking Information tab.
[-] BO : Resolved : Book now page showing error when current date is last date of the month.
[-] BO : Resolved : Image is not showing while feature update (Catalog->features) and issue while updating feature.
[-] CO : Resolved : As theme name was "hotel-theme". So on saving theme translations a new theme directory "hotel-theme" is created and translations are saved in this directory. now "hotel-theme" is replaced with "hotel-reservation-theme".
[-] CO : Resolved : Feature price plans not working. [ Create two plans one for sunday and other for saturday. At the moment it's only showing the change/increase on Saturdays not Sundays. If I unable Saturdays it is showing the price change on Sundays and not Saturdays.
[-] CO : Resolved : Order status is 'Payment Error' if payment is done by advance payment with real payment gateways.
[-] FO : Resolved : blockcart and blocknavigationmenu modules swaps randomly at displayTop hook.
[-] FO : Resolved : Disable dates of last room will be saved for all previous rooms while saving rooms of a room type.
[-] FO : Resolved : Rooms are not visible when changing minimum price in filter by price.
[-] FO : Resolved : Null quantity issue when check-in date and check-out dates are the same. When the date_from and the date_to passed in the URL parameter are identical they are accepted in the entries (Check-In Date & Check-out Date) on the room type detail page. Once we click on Book now pop up with "Null quantity" message appears.
####################################
# V1.4.0
####################################
@@ -134,7 +181,7 @@
[-] CO : Resolved :: hotelreservationsystem - Parent:: replaced with parent:: in classes/hotelHotelBranchInformation.php which was creating problems in installation.
[-] CO : Resolved :: RecursiveDirectoryIterator::__construct(/var/www/html/themes/hotel-theme/): failed to open dir While installation.
[-] CO : Resolved :: RecursiveDirectoryIterator::__construct(/var/www/html/themes/hotel-reservation-theme/): failed to open dir While installation.
[-] BO : Resolved :: hotelreservationsystem:: Hotel images not saved while saving hotel details.
[-] BO : Resolved :: hotelreservationsystem - $max_phone_digit is undefined issue resolved on hotel creation form.

File diff suppressed because one or more lines are too long

View File

@@ -474,4 +474,9 @@ $(document).ready(function() {
//scroll_if_anchor(window.location.hash);
$("body").on("click", "a.anchor", scroll_if_anchor);
// Unselect the room types when room types with no hotel access are selected.
$('.no-htl-access-option').on('click', function() {
$(this).prop('selected', false);
});
}); //end dom ready

View File

@@ -24,10 +24,10 @@
*}
<script type="text/javascript">
$(document).ready(function() {
var id_tab_parentmodule = {$id_tab_parentmodule|intval};
var id_tab_module = {$id_tab_module|intval};
$('tr.child-'+id_tab_parentmodule+' > td > input.view.'+id_tab_module).change( function () {
if (!$(this).prop('checked'))
@@ -37,7 +37,7 @@
$('#table_module_2 thead th:eq(1) input').trigger('click');
}
});
$('tr.child-'+id_tab_parentmodule+' > td > input.edit.'+id_tab_module).change( function () {
if (!$(this).prop('checked'))
@@ -47,7 +47,7 @@
$('#table_module_2 thead th:eq(2) input').trigger('click');
}
});
$('div.productTabs').find('a').each(function() {
$(this).attr('href', '#');
});
@@ -187,6 +187,49 @@
});
});
// Change Accesses of hotels
$(".changeHotelAccess").change(function(){
var tout = $(this).data('rel').split('||');
var id_hotel = tout[0];
var id_profile = tout[2];
var enabled = $(this).is(':checked') ? 1 : 0;
var enabled_attr = $(this).is(':checked') ? true : false;
var table = 'table#table_hotel_'+id_profile;
if (id_hotel == -1) {
$(table+' .ajax-htl-all').attr("checked", enabled_attr);
}
$.ajax({
url: "{$link->getAdminLink('AdminAccess')|addslashes}",
cache: false,
data : {
ajaxMode: '1',
id_hotel: id_hotel,
enabled: enabled,
id_profile: id_profile,
submitAddHotelAccess: '1',
action: 'updateHotelAccess',
ajax: '1',
token: '{getAdminToken tab='AdminAccess'}'
},
success : function(res,textStatus,jqXHR)
{
try {
if (res == 'ok') {
showSuccessMessage("{l s='Update successful'}");
} else {
showErrorMessage("{l s='Update error'}");
}
}
catch(e)
{
jAlert('Technical error');
}
}
});
});
});
</script>
{if $show_toolbar}
@@ -213,9 +256,42 @@
{/foreach}
{foreach $profiles as $profile}
<div class="profile-{$profile.id_profile} tab-profile" style="display:{if $profile.id_profile != $current_profile}none{/if}">
<div class="row">
<div class="row">
{if $profile.id_profile != $admin_profile}
<div class="col-lg-6">
<div class="col-lg-6">
{if isset($hotels) && $hotels}
<div class="panel">
<h3>{l s='Hotel Permissions'}</h3>
<table class="table" id="table_hotel_{$profile.id_profile}">
<thead>
<tr>
<th>{l s='Hotel'}</th>
<th>
<input type="checkbox"{if $access_edit == 1} class="changeHotelAccess" data-rel="-1||all||{$profile.id_profile}"{else} disabled="disabled"{/if}/>
{l s='All'}
</th>
</tr>
</thead>
<tbody>
{if !count($hotels)}
<tr>
<td colspan="6">{l s='No menu'}</td>
</tr>
{else}
{foreach $hotels as $hotelInfo}
{assign var=result_accesses value=0}
<tr class="parentTr">
<td>{$hotelInfo['hotel_name']|escape:'html':'UTF-8'}</td>
<td>
<input type="checkbox"{if $access_edit == 1} data-rel="{$hotelInfo['id']}||specific||{$profile.id_profile|escape:'html':'UTF-8'}||all" class="changeHotelAccess ajax-htl-all"{else} class="all" disabled="disabled"{/if}{if isset($hotelAccess[$profile.id_profile][$hotelInfo.id]['access']) && $hotelAccess[$profile.id_profile][$hotelInfo.id]['access']} checked="checked"{/if}/>
</td>
</tr>
{/foreach}
{/if}
</tbody>
</table>
</div>
{/if}
<div class="panel">
<h3>{l s='Menu'}</h3>
<table class="table" id="table_{$profile.id_profile}">
@@ -255,8 +331,8 @@
{if !$tab.id_parent OR $tab.id_parent == -1}
{assign var=is_child value=false}
{assign var=result_accesses value=0}
<tr{if !$is_child} class="parent"{/if}>
<td{if !$is_child} class="bold"{/if}>{if $is_child} &raquo; {/if}<strong>{$tab.name}</strong></td>
<tr {if !$is_child} class="parent"{/if}>
<td {if !$is_child} class="bold"{/if}>{if $is_child} &raquo; {/if}<strong>{$tab.name}</strong></td>
{foreach $perms as $perm}
{if $access_edit == 1}
<td>

View File

@@ -73,14 +73,60 @@ function toggleCartRuleFilter(id)
function removeCartRuleOption(item)
{
var error = 0;
var id = $(item).attr('id').replace('_remove', '');
$('#' + id + '_2 option:selected').remove().appendTo('#' + id + '_1');
var selectedOpt = $('#' + id + '_2 option:selected');
var notAlloedRooms = [];
// validate if rooms with no hotel access are selected
$.each( selectedOpt, function( key, val ) {
if ($(this).attr('data-htl_access') == 0) {
notAlloedRooms.push($(this).text());
error = 1;
}
});
if (error == 0) {
selectedOpt.remove().appendTo('#' + id + '_1');;
} else {
var errorHtml = '';
errorHtml += room_access_err;
if (notAlloedRooms.length) {
errorHtml += '<br />' + room_rmv_txt + '<ul>';
$.each( notAlloedRooms, function( key, val ) {
errorHtml += '<li>' + val + '</li>';
});
errorHtml += '</ul>';
}
showErrorMessage(errorHtml);
}
}
function addCartRuleOption(item)
{
var error = 0;
var id = $(item).attr('id').replace('_add', '');
$('#' + id + '_1 option:selected').remove().appendTo('#' + id + '_2');
var selectedOpt = $('#' + id + '_1 option:selected');
var notAlloedRooms = [];
// validate if rooms with no hotel access are selected
$.each( selectedOpt, function( key, val ) {
if ($(this).attr('data-htl_access') == 0) {
notAlloedRooms.push($(this).text());
error = 1;
}
});
if (error == 0) {
selectedOpt.remove().appendTo('#' + id + '_2');
} else {
var errorHtml = '';
errorHtml += room_access_err;
if (notAlloedRooms.length) {
errorHtml += '<br />' + room_rmv_txt + '<ul>';
$.each( notAlloedRooms, function( key, val ) {
errorHtml += '<li>' + val + '</li>';
});
errorHtml += '</ul>';
}
showErrorMessage(errorHtml);
}
}
function updateProductRuleShortDescription(item)

View File

@@ -41,7 +41,7 @@
var timeText = '{l s='Time' js=1}';
var hourText = '{l s='Hour' js=1}';
var minuteText = '{l s='Minute' js=1}';
var languages = new Array();
{foreach from=$languages item=language key=k}
languages[{$k}] = {

View File

@@ -1,34 +1,42 @@
<div class="col-lg-12 bootstrap">
<div class="col-lg-6">
<div class="col-lg-6 select-options-div">
{l s='Unselected'}
<select multiple size="10" id="product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_1">
{foreach from=$product_rule_itemlist.unselected item='item'}
<option value="{$item.id|intval}" title="{$item.name}">&nbsp;{$item.name}</option>
<option {if !$item.htl_access}class="no-htl-access-option"{/if} data-htl_access="{$item.htl_access|intval}" value="{$item.id|intval}" title="{$item.name}">&nbsp;{$item.name}</option>
{/foreach}
</select>
<div class="clearfix">&nbsp;</div>
<a id="product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_add" class="btn btn-default btn-block" >
<a id="product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_add" class="btn btn-default btn-block add-select-options" >
{l s='Add'}
<i class="icon-arrow-right"></i>
</a>
</div>
<div class="col-lg-6">
<div class="col-lg-6 select-options-div">
{l s='Selected'}
<select multiple size="10" name="product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}[]" id="product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_2" class="product_rule_toselect" >
{foreach from=$product_rule_itemlist.selected item='item'}
<option value="{$item.id|intval}" title="{$item.name}">&nbsp;{$item.name}</option>
<option data-htl_access="{$item.htl_access|intval}" {if !$item.htl_access}class="no-htl-access-option"{/if} value="{$item.id|intval}" title="{$item.name}">&nbsp;{$item.name}</option>
{/foreach}
</select>
<div class="clearfix">&nbsp;</div>
<a id="product_rule_select_{$product_rule_group_id}_{$product_rule_id}_remove" class="btn btn-default btn-block" >
<a id="product_rule_select_{$product_rule_group_id}_{$product_rule_id}_remove" class="btn btn-default btn-block add-select-options" >
<i class="icon-arrow-left"></i>
{l s='Remove'}
</a>
</div>
</div>
<script type="text/javascript">
$('#product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_remove').click(function() { removeCartRuleOption(this); updateProductRuleShortDescription(this); });
$('#product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_add').click(function() { addCartRuleOption(this); updateProductRuleShortDescription(this); });
$(document).ready(function() { updateProductRuleShortDescription($('#product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_add')); });
$('#product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_remove').click(function() {
removeCartRuleOption(this);
updateProductRuleShortDescription(this);
});
$('#product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_add').click(function() {
addCartRuleOption(this);
updateProductRuleShortDescription(this);
});
$(document).ready(function() {
updateProductRuleShortDescription($('#product_rule_select_{$product_rule_group_id|intval}_{$product_rule_id|intval}_add'));
});
</script>

View File

@@ -135,7 +135,7 @@
{hook h="displayAdminLogin"}
<div id="login-footer">
<p class="text-center text-muted">
<a href="https://webkul.com/" onclick="return !window.open(this.href);">
<a href="https://webkul.com" onclick="return !window.open(this.href);">
&copy; Webkul&#8482; 2015-{$smarty.now|date_format:"%Y"} - All rights reserved
</a>
</p>

View File

@@ -0,0 +1,71 @@
{*
* 2010-2019 Webkul.
*
* NOTICE OF LICENSE
*
* All right is reserved,
* Please go through this link for complete license : https://store.webkul.com/license.html
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade this module to newer
* versions in the future. If you wish to customize this module for your
* needs please refer to https://store.webkul.com/customisation-guidelines/ for more information.
*
* @author Webkul IN <support@webkul.com>
* @copyright 2010-2019 Webkul IN
* @license https://store.webkul.com/license.html
*}
{if isset($selectedRoomDemands) && $selectedRoomDemands}
{assign var=roomCount value=1}
{foreach $selectedRoomDemands as $key => $roomDemand}
<div class="row room_demands_container">
<div class="col-sm-12 demand_header">
<span>
<i class="icon-bed"></i>
{if isset($roomDemand['room_num']) && $roomDemand['room_num']}
{l s='Room'} {$roomDemand['room_num']|escape:'html':'UTF-8'}
{else}
{l s='Room'} {$roomCount|escape:'html':'UTF-8'}
{/if}
</span>
</div>
<div class="col-sm-12 room_demand_detail">
{if isset($roomTypeDemands) && $roomTypeDemands}
{foreach $roomTypeDemands as $idGlobalDemand => $demand}
<div class="row room_demand_block">
<div class="col-xs-6">
<div class="row">
<div class="col-xs-2">
<input id_cart_booking="{$roomDemand['id']}" value="{$idGlobalDemand|escape:'html':'UTF-8'}" type="checkbox" class="id_room_type_demand" {if isset($roomDemand['selected_global_demands']) && $roomDemand['selected_global_demands'] && ($idGlobalDemand|in_array:$roomDemand['selected_global_demands'])}checked{/if} />
</div>
<div class="col-xs-10 demand_adv_option_block">
<p>{$demand['name']|escape:'html':'UTF-8'}</p>
{if isset($demand['adv_option']) && $demand['adv_option']}
<select class="id_option">
{foreach $demand['adv_option'] as $idOption => $option}
{assign var=demand_key value="`$idGlobalDemand`-`$idOption`"}
<option optionPrice="{$option['price']|escape:'html':'UTF-8'}" value="{$idOption|escape:'html':'UTF-8'}" {if isset($roomDemand['extra_demands'][$demand_key])}selected{/if} key="{$demand_key}">{$option['name']}</option>
{if isset($roomDemand['extra_demands'][$demand_key])}
{assign var=selected_adv_option value="$idOption"}
{/if}
{/foreach}
</select>
{else}
<input type="hidden" class="id_option" value="0" />
{/if}
</div>
</div>
</div>
<div class="col-xs-6">
<p><span class="pull-right extra_demand_option_price">{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}</span></p>
</div>
</div>
{/foreach}
{/if}
</div>
</div>
{assign var=roomCount value=$roomCount+1}
{/foreach}
{/if}

View File

@@ -0,0 +1,278 @@
{*
* 2010-2019 Webkul.
*
* NOTICE OF LICENSE
*
* All right is reserved,
* Please go through this link for complete license : https://store.webkul.com/license.html
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade this module to newer
* versions in the future. If you wish to customize this module for your
* needs please refer to https://store.webkul.com/customisation-guidelines/ for more information.
*
* @author Webkul IN <support@webkul.com>
* @copyright 2010-2019 Webkul IN
* @license https://store.webkul.com/license.html
*}
<div class="panel form-horizontal" id="customer_cart_details">
<div class="panel-heading">
<i class="icon-shopping-cart"></i>
{l s='Cart Details'}
</div>
<div class="row">
<div class="col-lg-12">
<table class="table" id="customer_cart_details_table">
<thead>
<tr>
<th><span class="title_box">{l s='Room No.'}</span></th>
<th><span class="title_box">{l s='Room Image'}</th>
<th><span class="title_box">{l s='Room Type'}</span></th>
<th><span class="title_box">{l s='Duration'}</span></th>
<th><span class="title_box">{l s='Unit Price (tax excl)'}</span></th>
<th><span class="title_box">{l s='Additinal Facilities (tax excl)'}</span></th>
<th><span class="title_box">{l s='Total Rooms Price (tax excl)'}</span></th>
<th><span class="title_box">{l s='Total Price (tax excl)'}</span></th>
<th></th>
</tr>
</thead>
<tbody>
{if isset($cart_detail_data) && $cart_detail_data}
{assign var=curr_id value=$cart->id_currency|intval}
{foreach from=$cart_detail_data item=data}
<tr>
<td>{$data.room_num|escape:'html':'UTF-8'}</td>
<td><img src="{$data.image_link|escape:'html':'UTF-8'}" title="Room image" /></td>
<td>
<p>{$data.room_type|escape:'html':'UTF-8'}</p>
{if isset($data.selected_demands) && $data.selected_demands}
<ul class="extra-demand-list">
{foreach $data.selected_demands as $selDemand}
<li>
{$selDemand.name|escape:'html':'UTF-8'}
</li>
{/foreach}
</ul>
{/if}
</td>
<td>{$data.date_from|escape:'html':'UTF-8'|date_format:"%d-%m-%Y"}&nbsp;-&nbsp; {$data.date_to|escape:'html':'UTF-8'|date_format:"%d-%m-%Y"}</td>
<td id="cart_detail_data_unit_price_{$data.id|escape:'html':'UTF-8'}">
<span class="product_original_price {if $data.feature_price_diff > 0}room_type_old_price{/if}" {if $data.feature_price_diff < 0} style="display:none;"{/if}>
{displayPrice price=$data.product_price_tax_excl|escape:'html':'UTF-8'}
</span>&nbsp;
<span class="room_type_current_price" {if !$data.feature_price_diff}style="display:none;"{/if}>
{displayPrice price=$data.feature_price_tax_excl|escape:'html':'UTF-8'}
</span>
</td>
<td>
{if isset($data.extra_demands) && $data.extra_demands}
{displayPrice price=$data.demand_price|escape:'html':'UTF-8'}
{else}
{displayPrice price=0}
{/if}
</td>
<td id="cart_detail_data_price_{$data.id|escape:'html':'UTF-8'}">{displayPrice price=$data.amt_with_qty}</td>
<td>
{if isset($data.extra_demands) && $data.extra_demands}
{displayPrice price=$data.amt_with_qty|escape:'html':'UTF-8'+$data.demand_price|escape:'html':'UTF-8'}
{else}
{displayPrice price=$data.amt_with_qty|escape:'html':'UTF-8'}
{/if}
</td>
<td>
<button class="delete_hotel_cart_data btn btn-danger" data-id_room={$data.id_room|escape:'html':'UTF-8'} data-id_product={$data.id_product|escape:'html':'UTF-8'} data-id = {$data.id|escape:'html':'UTF-8'} data-id_cart = {$data.id_cart|escape:'html':'UTF-8'} data-date_to = {$data.date_to|escape:'html':'UTF-8'} data-date_from = {$data.date_from|escape:'html':'UTF-8'}>
<i class="icon-trash"></i>&nbsp;{l s='Delete'}
</button>
{if isset($data.extra_demands) && $data.extra_demands}
<br />
<a href="#" id_room={$data.id_room|escape:'html':'UTF-8'} date_from="{$data.date_from|escape:'html':'UTF-8'}" date_to="{$data.date_to|escape:'html':'UTF-8'}" id_product="{$data.id_product|escape:'html':'UTF-8'}" id_cart="{$data.id_cart|escape:'html':'UTF-8'}" class="open_rooms_extra_demands btn btn-success" title="{l s='Click here to add or remove the additinal facilities of this room type.'}">
<i class="icon-plus"></i>&nbsp;{l s='Facilities'}
</a>
{/if}
</td>
</tr>
{/foreach}
{else}
<tr>
<td>{l s='No Room Found in the cart.'}</td>
</tr>
{/if}
</tbody>
</table>
</div>
</div>
</div>
{* Modal for extra demands *}
<div class="modal" tabindex="-1" role="dialog" id="rooms_type_extra_demands">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h3 class="modal-title">{l s='Additional Facilities'}</h3>
</div>
<div class="modal-body" id="rooms_extra_demands">
<div class="rooms_extra_demands_head">
<p class="rooms_extra_demands_text">{l s='Add below additional facilities to the room for better hotel experience'}</p>
</div>
<div id="room_type_demands_desc"></div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">{l s='Close'}</button>
</div>
</div>
</div>
</div>
{strip}
{addJsDefL name=txtExtraDemandSucc}{l s='Updated Successfully' js=1}{/addJsDefL}
{addJsDefL name=txtExtraDemandErr}{l s='Some error occurred while updating demands' js=1}{/addJsDefL}
{/strip}
{* Css for handling extra demands changes *}
<style type="text/css">
#customer_cart_details .extra-demand-list {
padding-left:15px;}
#customer_cart_details .delete_hotel_cart_data {
margin-bottom:2px !important;}
#customer_cart_details .room_type_old_price {
text-decoration: line-through;
color:#979797;
font-size:12px;}
/*Extra demands CSS*/
#rooms_extra_demands {
font-size: 16px;}
#rooms_extra_demands .room_demands_container {
border: 1px solid #ddd;}
#rooms_extra_demands .demand_header {
padding: 10px;
color: #333;
border-bottom: 1px solid #ddd;}
#rooms_extra_demands .rooms_extra_demands_head {
margin-bottom: 18px;}
#rooms_extra_demands .room_demand_block {
margin-bottom: 15px;
color: #333;
font-size: 14px;}
#rooms_extra_demands .room_demand_detail {
padding: 15px 15px 0px 15px;}
</style>
{* JS for handling extra demands changes *}
<script type="text/javascript">
$(document).ready(function() {
// modalbox for extra bed requirement
$('body').on('click', '.open_rooms_extra_demands', function() {
var idProduct = $(this).attr('id_product');
var idCart = $(this).attr('id_cart');
var idRoom = $(this).attr('id_room');
var dateFrom = $(this).attr('date_from');
var dateTo = $(this).attr('date_to');
$.ajax({
type: 'POST',
headers: {
"cache-control": "no-cache"
},
url: "{$link->getAdminLink('AdminOrders')|addslashes}",
cache: false,
data: {
date_from: dateFrom,
date_to: dateTo,
id_room: idRoom,
id_cart: idCart,
id_product: idProduct,
action: 'getRoomTypeCartDemands',
ajax: true
},
success: function(result) {
$('#rooms_type_extra_demands').find('#room_type_demands_desc').html('');
$('#rooms_type_extra_demands').find('#room_type_demands_desc').append(result);
$('#rooms_type_extra_demands').modal('show');
},
});
});
$('#rooms_type_extra_demands').on('hidden.bs.modal', function (e) {
// reload so that changes prices will reflect everywhere
location.reload();
});
// select/unselect extra demand
$(document).on('click', '.id_room_type_demand', function() {
var roomDemands = [];
// get the selected extra demands by customer
$(this).closest('.room_demand_detail').find('input:checkbox.id_room_type_demand:checked').each(function () {
roomDemands.push({
'id_global_demand':$(this).val(),
'id_option': $(this).closest('.room_demand_block').find('.id_option').val()
});
});
var idBookingCart = $(this).attr('id_cart_booking');
$.ajax({
type: 'POST',
headers: {
"cache-control": "no-cache"
},
url: "{$link->getAdminLink('AdminOrders')|addslashes}",
dataType: 'JSON',
cache: false,
data: {
id_cart_booking: idBookingCart,
room_demands: JSON.stringify(roomDemands),
action: 'changeRoomDemands',
ajax: true
},
success: function(result) {
if (result == 1) {
showSuccessMessage(txtExtraDemandSucc);
} else {
showErrorMessage(txtExtraDemandErr);
}
}
});
});
// change advance option of extra demand
$(document).on('change', '.demand_adv_option_block .id_option', function(e) {
var option_selected = $(this).find('option:selected');
var extra_demand_price = option_selected.attr("optionPrice")
extra_demand_price = parseFloat(extra_demand_price);
extra_demand_price = formatCurrency(extra_demand_price, currency_format, currency_sign, currency_blank);
$(this).closest('.room_demand_block').find('.extra_demand_option_price').text(extra_demand_price);
var roomDemands = [];
// get the selected extra demands by customer
$(this).closest('.room_demand_detail').find('input:checkbox.id_room_type_demand:checked').each(function () {
roomDemands.push({
'id_global_demand':$(this).val(),
'id_option': $(this).closest('.room_demand_block').find('.id_option').val()
});
});
var idBookingCart = $(this).closest('.room_demand_block').find('.id_room_type_demand').attr('id_cart_booking');
$.ajax({
type: 'POST',
headers: {
"cache-control": "no-cache"
},
url: "{$link->getAdminLink('AdminOrders')|addslashes}",
dataType: 'JSON',
cache: false,
data: {
id_cart_booking: idBookingCart,
room_demands: JSON.stringify(roomDemands),
action: 'changeRoomDemands',
ajax: true
},
success: function(result) {
if (result == 1) {
showSuccessMessage(txtExtraDemandSucc);
} else {
showErrorMessage(txtExtraDemandErr);
}
}
});
});
});
</script>

View File

@@ -39,7 +39,7 @@
</a>
</p>
<p>
{convertPriceWithCurrency price=$data['extra_demands_price'] currency=$currency->id}
{convertPriceWithCurrency price=$data['extra_demands_price_ti'] currency=$currency->id}
</p>
{/if}
</td>

View File

@@ -9,7 +9,7 @@
{foreach $roomDemand['extra_demands'] as $demand}
<p>
<span>{$demand['name']}</span>
<span class="pull-right">{displayPrice price=$demand['price'] currency=$orderCurrency}</span>
<span class="pull-right">{displayPrice price=$demand['total_price_tax_incl'] currency=$orderCurrency}</span>
</p>
{/foreach}
</div>

View File

@@ -1,60 +0,0 @@
<div class="panel form-horizontal" id="customer_cart_details">
<div class="panel-heading">
<i class="icon-shopping-cart"></i>
{l s='Cart Details'}
</div>
<div class="row">
<div class="col-lg-12">
<table class="table" id="customer_cart_details_table">
<thead>
<tr>
<th><span class="title_box">{l s='Room No.'}</span></th>
<th><span class="title_box">{l s='Room Image'}</th>
<th><span class="title_box">{l s='Room Type'}</span></th>
<th><span class="title_box">{l s='Duration'}</span></th>
<th><span class="title_box">{l s='Unit Price (Tax incl.)'}</span></th>
<th><span class="title_box">{l s='Price (Tax excl.)'}</span></th>
<th><span class="title_box">{l s='Action'}</span></th>
</tr>
</thead>
<tbody>
{if isset($cart_detail_data) && $cart_detail_data}
{assign var=curr_id value=$cart->id_currency|intval}
{foreach from=$cart_detail_data item=data}
<tr>
<td>{$data.room_num}</td>
<td><img src="{$data.image_link}" title="Room image" /></td>
<td>{$data.room_type}</td>
<td>{$data.date_from|date_format:"%d-%m-%Y"}&nbsp-&nbsp {$data.date_to|date_format:"%d-%m-%Y"}</td>
<td id="cart_detail_data_unit_price_{$data.id}">
<span class="product_original_price {if $data.feature_price_diff > 0}room_type_old_price{/if}" {if $data.feature_price_diff < 0} style="display:none;"{/if}>
{displayPrice price=$data.product_price}
</span>&nbsp;
<span class="room_type_current_price" {if !$data.feature_price_diff}style="display:none;"{/if}>
{displayPrice price=$data.feature_price}
</span>
</td>
<td id="cart_detail_data_price_{$data.id}">{displayPrice price=$data.amt_with_qty}</td>
<td>
<button class="btn btn-primary delete_hotel_cart_data" data-id_room={$data.id_room} data-id_product={$data.id_product} data-id = {$data.id} data-id_cart = {$data.id_cart} data-date_to = {$data.date_to} data-date_from = {$data.date_from}><i class="icon-trash"></i>&nbsp{l s='Delete'}</button>
</td>
</tr>
{/foreach}
{else}
<tr>
<td>{l s='No Room Found in the cart.'}</td>
</tr>
{/if}
</tbody>
</table>
</div>
</div>
</div>
<style type="text/css">
.room_type_old_price {
text-decoration: line-through;
color:#979797;
font-size:12px;
}
</style>

View File

@@ -912,6 +912,7 @@
$('#total_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_tax), currency_format, currency_sign, currency_blank));
$('#total_without_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_price_without_tax), currency_format, currency_sign, currency_blank));
$('#total_with_taxes').html(formatCurrency(parseFloat(jsonSummary.summary.total_price), currency_format, currency_sign, currency_blank));
$('#total_extra_demands').html(formatCurrency(parseFloat(jsonSummary.summary.total_extra_demands_tax_exc), currency_format, currency_sign, currency_blank));
$('#total_products').html(formatCurrency(parseFloat(jsonSummary.summary.total_products), currency_format, currency_sign, currency_blank));
id_currency = jsonSummary.cart.id_currency;
$('#id_currency option').removeAttr('selected');
@@ -1181,7 +1182,7 @@
</script>
<div class="leadin">{block name="leadin"}{/block}</div>
{include file='controllers/orders/current_cart_details_data.tpl'}
{include file='controllers/orders/_current_cart_details_data.tpl'}
<div class="panel form-horizontal" id="customer_part" {if isset($is_order_created) && $is_order_created}style="display:none;"{/if}>
<div class="panel-heading">
<i class="icon-user"></i>
@@ -1571,34 +1572,34 @@
<div class="row">
<div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total products'}</span><br/>
<span>{l s='Total rooms (Tax excl.)'}</span><br/>
<span id="total_products" class="size_l text-success"></span>
</div>
</div>
<div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total additinal facilties (Tax excl.)'}</span><br/>
<span id="total_extra_demands" class="size_l text-success"></span>
</div>
</div>
<div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total vouchers (Tax excl.)'}</span><br/>
<span id="total_vouchers" class="size_l text-danger"></span>
</div>
</div>
<!-- <div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total shipping (Tax excl.)'}</span><br/>
<span id="total_shipping" class="size_l"></span>
</div>
</div> --><!-- by webkul to hide unnessesary content -->
<div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total taxes'}</span><br/>
<span id="total_taxes" class="size_l"></span>
</div>
</div>
<div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total (Tax excl.)'}</span><br/>
<span id="total_without_taxes" class="size_l"></span>
</div>
</div>
<div class="col-lg-2">
<div class="data-focus">
<span>{l s='Total taxes'}</span><br/>
<span id="total_taxes" class="size_l"></span>
</div>
</div>
<div class="col-lg-2">
<div class="data-focus data-focus-primary">
<span>{l s='Total (Tax incl.)'}</span><br/>

View File

@@ -1166,26 +1166,37 @@
{assign var=order_shipping_price value=$order->total_shipping_tax_incl}
{/if}
<tr id="total_products">
<td class="text-right"><strong>{l s='Total Rooms Cost'}</strong></td>
<td class="text-right"><strong>{l s='Total Rooms Cost (tax excl.)'}</strong></td>
<td class="amount text-right nowrap">
<strong>{displayPrice price=$totalRoomsCostTE currency=$currency->id}</strong>
</td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
<tr id="total_products">
<td class="text-right"><strong>{l s='Total Additional Facilities Cost'}</strong></td>
<td class="amount text-right nowrap">
<strong>{displayPrice price=$totalDemandsPrice currency=$currency->id}</strong>
</td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
{if isset($totalDemandsPriceTE) && $totalDemandsPriceTE > 0}
<tr id="total_products">
<td class="text-right"><strong>{l s='Additional Facilities Cost (tax excl.)'}</strong></td>
<td class="amount text-right nowrap">
<strong>{displayPrice price=$totalDemandsPriceTE currency=$currency->id}</strong>
</td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
{/if}
<tr id="total_tax_order">
<td class="text-right"><strong>{l s='Total Tax'}</strong></td>
<td class="text-right"><strong>{l s='Total Rooms Tax'}</strong></td>
<td class="text-right nowrap">
<strong>{displayPrice price=$total_tax_in_order currency=$currency->id}</strong>
<strong>{displayPrice price=$total_room_tax currency=$currency->id}</strong>
</td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
{if isset($totalDemandsPriceTE) && $totalDemandsPriceTE > 0}
<tr id="total_tax_order">
<td class="text-right"><strong>{l s='Additional Facilities Tax'}</strong></td>
<td class="text-right nowrap">
<strong>{displayPrice price=($totalDemandsPriceTI - $totalDemandsPriceTE) currency=$currency->id}</strong>
</td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
{/if}
<tr id="total_discounts" {if $order->total_discounts_tax_incl == 0}style="display: none;"{/if}>
<td class="text-right">{l s='Discounts'}</td>
<td class="amount text-right nowrap">
@@ -1216,15 +1227,7 @@
</div>
<p class="help-block"><i class="icon-warning-sign"></i> {l s='(%s)' sprintf=$smarty.capture.TaxMethod}</p>
</td>
</tr>
{if ($order->getTaxCalculationMethod() == $smarty.const.PS_TAX_EXC)}
<tr id="total_taxes">
<td class="text-right">{l s='Taxes'}</td>
<td class="amount text-right nowrap" >{displayPrice price=($order->total_paid_tax_incl-$order->total_paid_tax_excl) currency=$currency->id}</td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
{/if} <!-- by webkul to hide unnessary things in the page-->
*}
</tr>*}
{if isset($order_adv_dtl)}
<tr>
@@ -1244,11 +1247,17 @@
</td>
</tr>
{/if}
{if ($order->getTaxCalculationMethod() == $smarty.const.PS_TAX_EXC)}
<tr id="total_taxes">
<td class="text-right"><strong>{l s='Total Taxes'}</strong></td>
<td class="amount text-right nowrap" ><strong>{displayPrice price=($order->total_paid_tax_incl-$order->total_paid_tax_excl) currency=$currency->id}</strong></td>
<td class="partial_refund_fields current-edit" style="display:none;"></td>
</tr>
{/if}
{assign var=order_total_price value=$order->total_paid_tax_incl}
<tr id="total_order">
<td class="text-right"><strong>{l s='Total'}</strong></td>
<td class="text-right"><strong>{l s='Final Order Total'}</strong></td>
<td class="amount text-right nowrap">
<strong>{displayPrice price=$order_total_price currency=$currency->id}</strong>
</td>
@@ -1458,7 +1467,7 @@
</ul>
<div class="tab-content panel active">
<div role="tabpanel" class="tab-pane active" id="reallocate_room_tab">
<form method="post" action="">
<form method="post" action="{$link->getAdminLink('AdminOrders')|escape:'html':'UTF-8'}&amp;vieworder&amp;id_order={$order->id|intval}">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="realloc_myModalLabel">{l s='Reallocate Rooms'}</h4>
@@ -1497,7 +1506,7 @@
</form>
</div>
<div role="tabpanel" class="tab-pane" id="swap_room_tab">
<form method="post" action="">
<form method="post" action="{$link->getAdminLink('AdminOrders')|escape:'html':'UTF-8'}&amp;vieworder&amp;id_order={$order->id|intval}">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
<h4 class="modal-title" id="swap_myModalLabel">{l s='Swap Rooms'}</h4>

View File

@@ -1,12 +1,12 @@
{if isset($product->id) && isset($htl_config)}
<div id="product-configuration" class="panel product-tab">
<input type="hidden" name="submitted_tabs[]" value="Booking"/>
<h3 class="tab"> <i class="icon-info"></i> {l s='Booking Information' mod='hotelreservationsystem'}</h3>
<h3 class="tab"> <i class="icon-info"></i> {l s='Booking Information'}</h3>
<div class="form-group">
<div class="col-sm-1"></div>
<label for="from_date" class="control-label col-sm-1 required">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Booking Date starts from'}">{l s='From' mod='hotelreservationsystem'}</span>
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Booking date starts from'}">{l s='From'}</span>
</label>
<div class="col-sm-2">
<input type="hidden" id="checkTabClick" value="0" name="checkTabClick">
@@ -14,7 +14,7 @@
</div>
<label for="to_date" class="control-label col-sm-1 required">
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Booking Date upto'}">{l s='To' mod='hotelreservationsystem'}</span>
<span title="" data-toggle="tooltip" class="label-tooltip" data-original-title="{l s='Booking date upto'}">{l s='To'}</span>
</label>
<div class="col-sm-2">
<input type="text" name="to_date" class="form-control" id="to_date" value="{$date_to}">
@@ -50,7 +50,7 @@
<div class="col-sm-6">
<div class="row">
<div class="col-sm-12 htl_room_cat_data">
<p class="room_cat_header">{l s='Total Rooms' mod='hotelreservationsystem'}</p>
<p class="room_cat_header">{l s='Total Rooms'}</p>
<p class="room_cat_data">{$booking_data['stats']['total_rooms']}</p>
</div>
</div>
@@ -59,7 +59,7 @@
<div class="col-sm-6">
<div class="row">
<div class="col-sm-12 htl_room_cat_data no_border">
<p class="room_cat_header">{l s='Partially Available' mod='hotelreservationsystem'}</p>
<p class="room_cat_header">{l s='Partially Available'}</p>
<p class="room_cat_data">{$booking_data['stats']['num_part_avai']}</p>
</div>
</div>
@@ -70,7 +70,7 @@
<div class="col-sm-6">
<div class="row">
<div class="col-sm-12 htl_room_cat_data">
<p class="room_cat_header">{l s='Available Rooms' mod='hotelreservationsystem'}</p>
<p class="room_cat_header">{l s='Available Rooms'}</p>
<p class="room_cat_data">{$booking_data['stats']['num_avail']}</p>
</div>
</div>
@@ -79,7 +79,7 @@
<div class="col-sm-6">
<div class="row">
<div class="col-sm-12 htl_room_cat_data no_border">
<p class="room_cat_header">{l s='Booked Rooms' mod='hotelreservationsystem'}</p>
<p class="room_cat_header">{l s='Booked Rooms'}</p>
<p class="room_cat_data">{$booking_data['stats']['num_booked']}</p>
</div>
</div>
@@ -90,7 +90,7 @@
<div class="col-sm-6">
<div class="row">
<div class="col-sm-12 htl_room_cat_data">
<p class="room_cat_header">{l s='Unavailable Rooms' mod='hotelreservationsystem'}</p>
<p class="room_cat_header">{l s='Unavailable Rooms'}</p>
<p class="room_cat_data">{$booking_data['stats']['num_unavail']}</p>
</div>
</div>
@@ -101,19 +101,19 @@
<div class="row">
<div class="col-sm-6 indi_cont clearfix">
<div class="color_indicate bg-green"></div>
<span class="indi_label">{l s='Available Rooms' mod='hotelreservationsystem'}</span>
<span class="indi_label">{l s='Available Rooms'}</span>
</div>
<div class="col-sm-6 indi_cont clearfix">
<div class="color_indicate bg-yellow"></div>
<span class="indi_label">{l s='Partially Available' mod='hotelreservationsystem'}</span>
<span class="indi_label">{l s='Partially Available'}</span>
</div>
<div class="col-sm-6 indi_cont clearfix">
<div class="color_indicate bg-red"></div>
<span class="indi_label">{l s='Unavailable Rooms' mod='hotelreservationsystem'}</span>
<span class="indi_label">{l s='Unavailable Rooms'}</span>
</div>
<div class="col-sm-6 indi_cont clearfix">
<div class="color_indicate bg-gray"></div>
<span class="indi_label">{l s='Hold For Maintenance' mod='hotelreservationsystem'}</span>
<span class="indi_label">{l s='Hold For Maintenance'}</span>
</div>
</div>
</div>
@@ -122,7 +122,7 @@
<div class="panel-footer">
<a href="{$link->getAdminLink('AdminProducts')|escape:'html':'UTF-8'}{if isset($smarty.request.page) && $smarty.request.page > 1}&amp;submitFilterproduct={$smarty.request.page|intval}{/if}" class="btn btn-default">
<i class="process-icon-cancel"></i>
{l s='Cancel' mod='hotelreservationsystem'}
{l s='Cancel'}
</a>
<button type="submit" name="submitAddproductAndStay" class="btn btn-default pull-right" disabled="disabled" id="stayBookingTab">
<i class="process-icon-loading"></i>
@@ -132,15 +132,15 @@
</div>
<div class="panel">
<h3 class="tab"> <i class="icon-list"></i> {l s='LIST OF HOTEL ROOMS' mod='hotelreservationsystem'}</h3>
<h3 class="tab"> <i class="icon-list"></i> {l s='LIST OF HOTEL ROOMS'}</h3>
<div class="form-group">
<div class="table-responsive">
<table class="table">
<thead>
<tr>
<th>{l s='Room No.' mod='hotelreservationsystem'}</th>
<th>{l s='Status' mod='hotelreservationsystem'}</th>
<th>{l s='Message' mod='hotelreservationsystem'}</th>
<th>{l s='Room No.'}</th>
<th>{l s='Status'}</th>
<th>{l s='Message'}</th>
</tr>
</thead>
<tbody>
@@ -149,7 +149,7 @@
{foreach from=$b_val key=data_k item=data_v}
<tr>
<td>{$data_v['room_num']}</td>
<td>{l s='Available' mod='hotelreservationsystem'}</td>
<td>{l s='Available'}</td>
<td>{$data_v['room_comment']}</td>
</tr>
{/foreach}
@@ -157,7 +157,7 @@
{foreach from=$b_val key=data_k item=data_v}
<tr>
<td>{$data_v['room_num']}</td>
<td>{l s='Unavailable' mod='hotelreservationsystem'}</td>
<td>{l s='Unavailable'}</td>
<td>{$data_v['room_comment']}</td>
</tr>
{/foreach}
@@ -167,11 +167,11 @@
<td>{$data_v['room_num']}</td>
<td>
{if $data_v['detail'][0]['booking_status'] == 1}
{l s='Alloted' mod='hotelreservationsystem'}
{l s='Alloted'}
{elseif $data_v['detail'][0]['booking_status'] == 2}
{l s='Checked-in' mod='hotelreservationsystem'}
{l s='Checked-in'}
{elseif $data_v['detail'][0]['booking_status'] == 3}
{l s='Checked-out' mod='hotelreservationsystem'}
{l s='Checked-out'}
{/if}
</td>
<td>{$data_v['detail'][0]['comment']}</td>
@@ -181,7 +181,7 @@
{foreach from=$b_val key=data_k item=data_v}
<tr>
<td>{$data_v['room_num']}</td>
<td>{l s='Partially Available' mod='hotelreservationsystem'}</td>
<td>{l s='Partially Available'}</td>
<td>{if isset($data_v['comment'])}{$data_v['comment']}{/if}</td>
</tr>
{/foreach}

View File

@@ -1,7 +1,7 @@
{if isset($product->id)}
<div id="product-configuration" class="panel product-tab">
<input type="hidden" name="submitted_tabs[]" value="Configuration" />
<h3 class="tab"> <i class="icon-AdminAdmin"></i> {l s='Configuration' mod='hotelreservationsystem'}</h3>
<h3 class="tab"> <i class="icon-AdminAdmin"></i> {l s='Configuration'}</h3>
{if isset($htl_room_type)}
<input type="hidden" value="{$htl_room_type['id']}" name="wk_id_room_type">
@@ -10,7 +10,7 @@
<div class="form-group">
{if isset($htl_room_type)}
<label class="control-label col-sm-2" for="hotel_place">
{l s='Hotel' mod='hotelreservationsystem'}
{l s='Hotel'}
</label>
<div class="col-sm-4">
<input type="text" class="form-control" value="{$htl_full_info['hotel_name']}" readonly>
@@ -18,7 +18,7 @@
</div>
{else}
<label class="control-label col-sm-2" for="hotel_place">
{l s='Select Hotel' mod='hotelreservationsystem'}
{l s='Select Hotel'}
</label>
<div class="col-sm-4">
<select name="id_hotel" id="hotel_place" class="form-control">
@@ -32,7 +32,7 @@
<div class="form-group">
<label class="control-label col-sm-2" for="num_adults">
{l s='Adults' mod='hotelreservationsystem'}
{l s='Adults'}
</label>
<div class="col-sm-4">
<input id="num_adults" type="text" name="num_adults" class="form-control" {if isset($htl_room_type)}value="{$htl_room_type['adult']}"{/if}>
@@ -42,7 +42,7 @@
<div class="form-group">
<label class="control-label col-sm-2" for="num_child">
{l s='Children' mod='hotelreservationsystem'}
{l s='Children'}
</label>
<div class="col-sm-4">
<input id="num_child" type="text" name="num_child" class="form-control" {if isset($htl_room_type)}value="{$htl_room_type['children']}"{/if}>
@@ -59,13 +59,13 @@
</label>
</th>
<th class="col-sm-2 center">
<span>{l s='Floor' mod='hotelreservationsystem'}</span>
<span>{l s='Floor'}</span>
</th>
<th class="col-sm-2">
<span>{l s='Status' mod='hotelreservationsystem'}</span>
<span>{l s='Status'}</span>
</th>
<th class="col-sm-6 center">
<span>{l s='Extra Information' mod='hotelreservationsystem'}</span>
<span>{l s='Extra Information'}</span>
</th>
</tr>
{if isset($htl_room_info) && $htl_room_info}
@@ -85,7 +85,7 @@
</select>
</td>
<td class="center col-sm-6">
<a class="btn btn-default deactiveDatesModal" data-toggle="modal" data-target="#deactiveDatesModal" {if $info['id_status'] != 3 }style="display: none;"{/if}>{if $info['id_status'] != 3 }{l s='Add Dates' mod='hotelreservationsystem'}{else}{l s='View Dates' mod='hotelreservationsystem'}{/if}
<a class="btn btn-default deactiveDatesModal" data-toggle="modal" data-target="#deactiveDatesModal" {if $info['id_status'] != 3 }style="display: none;"{/if}>{if $info['id_status'] != 3 }{l s='Add Dates'}{else}{l s='View Dates'}{/if}
</a>
<input type="text" class="form-control room_comment" value="{$info['comment']}" name="room_comment[]" {if $info['id_status'] == 3 }style="display: none;"{/if}>
<input type="hidden" class="form-control disableDatesJSON" name="disableDatesJSON[]" {if $info['id_status'] == 3}value="{$info['disabled_dates_json']|escape:'html':'UTF-8'}"{/if}>
@@ -114,11 +114,16 @@
</td>
<td class="center col-sm-6">
<a class="deactiveDatesModal" data-toggle="modal" data-target="#deactiveDatesModal" style="display: none;">
{l s='add Dates' mod='hotelreservationsystem'}
{l s='add Dates'}
</a>
<input type="hidden" class="form-control disableDatesJSON" name="disableDatesJSON" value="0">
<input type="text" class="form-control room_comment" name="room_comment[]">
</td>
{if $k == 1}
<td class="center col-sm-1">
<a href="#" class="remove-rooms-button btn btn-default"><i class="icon-trash"></i></a>
</td>
{/if}
</tr>
{/for}
{/if}
@@ -128,7 +133,7 @@
<div class="col-sm-12">
<button id="add-more-rooms-button" class="btn btn-default" type="button" data-size="s" data-style="expand-right">
<i class="icon-folder-open"></i>
{l s='Add More Rooms' mod='hotelreservationsystem'}
{l s='Add More Rooms'}
</button>
</div>
</div>
@@ -158,7 +163,7 @@
<button type="button" class="close margin-right-10" data-dismiss="modal" aria-label="Close">
<span aria-hidden="true">&times;</span>
</button>
<h4 class="modal-title"><i class="icon-calendar"></i>&nbsp; {l s='Disable dates' mod='hotelreservationsystem'}</h4>
<h4 class="modal-title"><i class="icon-calendar"></i>&nbsp; {l s='Disable dates'}</h4>
</div>
<div class="modal-body">
<div class="from-group table-responsive-row clearfix">
@@ -166,13 +171,13 @@
<thead>
<tr class="nodrag nodrop">
<th class="col-sm-1 center">
<span>{l s='Date From' mod='hotelreservationsystem'}</span>
<span>{l s='Date From'}</span>
</th>
<th class="col-sm-2 center">
<span>{l s='Date To' mod='hotelreservationsystem'}</span>
<span>{l s='Date To'}</span>
</th>
<th class="col-sm-2 center">
<span>{l s='Reason' mod='hotelreservationsystem'}</span>
<span>{l s='Reason'}</span>
</th>
</tr>
</thead>
@@ -181,13 +186,13 @@
</table>
<div class="form-group">
<div class="col-sm-12">
<a href="#" class="add_more_room_disable_dates btn btn-default"><i class="icon icon-plus"></i>{l s="Add More" mod='hotelreservationsystem'}</a>
<a href="#" class="add_more_room_disable_dates btn btn-default"><i class="icon icon-plus"></i>{l s="Add More"}</a>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default deactiveDatesModalSubmit">{l s='Done' mod='hotelreservationsystem'}</button>
<button type="button" class="btn btn-default deactiveDatesModalSubmit">{l s='Done'}</button>
</div>
</div>
</div>
@@ -321,7 +326,7 @@
html += '</td>';
html += '<td class="center col-sm-6">';
html += '<a class="btn btn-default deactiveDatesModal" data-toggle="modal" data-target="#deactiveDatesModal" style="display: none;">';
html += "{l s='Add Dates' mod='hotelreservationsystem'}";
html += "{l s='Add Dates'}";
html += '</a>';
html += '<input type="hidden" class="form-control disableDatesJSON" name="disableDatesJSON[]" value="0">';
html += '<input type="text" class="form-control room_comment" name="room_comment[]">';
@@ -337,7 +342,7 @@
// delete room
$('.rm_htl_room').on('click',function(e) {
e.preventDefault();
var $current = $(this);
var id_htl_info = $(this).attr('data-id-htl-info');
$.ajax({
url: prod_link,
@@ -348,15 +353,18 @@
action:'deleteHotelRoom',
id: id_htl_info,
},
success: function (result)
{
if (parseInt(result) == 1)
{
success: function (result) {
if (parseInt(result) == 1) {
showSuccessMessage("{l s='Removed successfully'}");
}
}
$current.closest(".room_data_values").remove();
} else {
showErrorMessage("{l s='Some error occurred'}");
}
},
error: function(XMLHttpRequest, textStatus, errorThrown) {
showErrorMessage("{l s='Some error occurred'}");
}
});
$(this).closest(".room_data_values").remove();
});
$(".checkConfigurationClick").on("click", function() {

View File

@@ -155,7 +155,7 @@ $(document).ready(function () {
</script>
<div class="row">
<div class="col-lg-6">
<select onchange="javascript:calcPrice(); unitPriceWithTax('unit');" name="id_tax_rules_group" id="id_tax_rules_group" {if $tax_exclude_taxe_option}disabled="disabled"{/if} >
<select onchange="javascript:calcPrice(); {*unitPriceWithTax('unit');*}" name="id_tax_rules_group" id="id_tax_rules_group" {if $tax_exclude_taxe_option}disabled="disabled"{/if} >
<option value="0">{l s='No Tax'}</option>
{foreach from=$tax_rules_groups item=tax_rules_group}
<option value="{$tax_rules_group.id_tax_rules_group}" {if $product->getIdTaxRulesGroup() == $tax_rules_group.id_tax_rules_group}selected="selected"{/if} >
@@ -202,8 +202,8 @@ $(document).ready(function () {
</div>
{if isset($pack) && $pack->isPack($product->id)}<p class="col-lg-9 col-lg-offset-3 help-block">{l s='The sum of prices of the room types in the pack is %s%s%s' sprintf=[$currency->prefix,{toolsConvertPrice price=$pack->noPackPrice($product->id)|string_format:$priceDisplayPrecisionFormat},$currency->suffix]}</p>{/if}
</div>
<div class="form-group">
{* As no use in QloApps currently so commented *}
{* <div class="form-group">
<div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="unit_price" type="unit_price"}</span></div>
<label class="control-label col-lg-2" for="unit_price">
<span class="label-tooltip" data-toggle="tooltip" title="{l s='When selling a pack of items, you can indicate the unit price for each item of the pack. For instance, "per bottle" or "per pound".'}">{l s='Unit price (tax excl.)'}</span>
@@ -216,7 +216,7 @@ $(document).ready(function () {
<input id="unity" name="unity" type="text" value="{$product->unity|htmlentitiesUTF8}" maxlength="255" onkeyup="if (isArrowKey(event)) return ;unitySecond();" onchange="unitySecond();"/>
</div>
</div>
</div>
</div> *}
{if isset($product->unity) && $product->unity}
<div class="form-group">
<div class="col-lg-9 col-lg-offset-3">
@@ -712,7 +712,7 @@ $(document).ready(function () {
<thead>
<tr>
<th>{l s='Rule'}</th>
<th>{l s='Combination'}</th>
{* <th>{l s='Combination'}</th> *}
{if $multi_shop}<th>{l s='Shop'}</th>{/if}
<th>{l s='Currency'}</th>
<th>{l s='Country'}</th>
@@ -735,7 +735,7 @@ $(document).ready(function () {
$(document).ready(function() {
delete_price_rule = '{l s="Do you really want to remove this price rule?"}';
calcPriceTI();
unitPriceWithTax('unit');
});
//unitPriceWithTax('unit');
});
</script>
{/if}

View File

@@ -29,7 +29,7 @@
<div id="footer" class="bootstrap hide">
<div class="col-sm-2 hidden-xs">
<a href="https://webkul.com/" class="_blank">Webkul&trade;</a>
<a href="https://webkul.com" class="_blank">Webkul&trade;</a>
-
<span id="footer-load-time"><i class="icon-time" title="{l s='Load time: '}"></i> {number_format(microtime(true) - $timer_start, 3, '.', '')}s</span>
</div>

View File

@@ -22,6 +22,8 @@
* @license http://opensource.org/licenses/afl-3.0.php Academic Free License (AFL 3.0)
* International Registered Trademark & Property of PrestaShop SA
*}
{$header}
{$content}
{$footer}

View File

@@ -1753,9 +1753,8 @@ class CartCore extends ObjectModel
// price of extra demands on room type in the cart
if ($type == Cart::BOTH || $type == Cart::BOTH_WITHOUT_SHIPPING) {
if ($totalDemandsPrice = $objCartBookingData->getCartExtraDemands($this->id, 0, 0, 0, 0, 1)) {
$order_total += $totalDemandsPrice;
}
$totalDemandsPrice = $objCartBookingData->getCartExtraDemands($this->id, 0, 0, 0, 0, 1, 0, (int)$with_taxes);
$order_total += $totalDemandsPrice;
}
return Tools::ps_round((float)$order_total, $compute_precision);
@@ -2077,6 +2076,45 @@ class CartCore extends ObjectModel
}
}
}
// Step 6 : Break $package_list hotel wise
$orderPackage = array();
$objRoomType = new HotelRoomType();
foreach ($final_package_list as $id_address => $packages) {
foreach ($packages as $id_package => $package) {
foreach ($package['product_list'] as $product) {
$productInfo = $objRoomType->getRoomTypeInfoByIdProduct($product['id_product']);
$idHotel = $productInfo['id_hotel'] ? $productInfo['id_hotel'] : 0;
$orderPackage[$id_address][$idHotel]['product_list'][] = $product;
if (!isset($orderPackage[$id_address][$idHotel]['carrier_list'])) {
$orderPackage[$id_address][$idHotel]['carrier_list'] = $product['carrier_list'];
} else {
$orderPackage[$id_address][$idHotel]['carrier_list'] = array_intersect($orderPackage[$id_address][$idHotel]['carrier_list'], $product['carrier_list']);
}
if (!isset($orderPackage[$id_address][$idHotel]['warehouse_list'])) {
$orderPackage[$id_address][$idHotel]['warehouse_list'] = $package['warehouse_list'];
}
if (!isset($orderPackage[$id_address][$idHotel]['id_warehouse'])) {
$orderPackage[$id_address][$idHotel]['id_warehouse'] = $package['id_warehouse'];
}
if (isset($package['id_carrier'])) {
if (!isset($orderPackage[$id_address][$idHotel]['id_carrier'])) {
$orderPackage[$id_address][$idHotel]['id_carrier'] = $package['id_carrier'];
}
}
}
}
}
$hotelWisePackageList = array();
foreach ($orderPackage as $id_address => $packageByAddress) {
foreach ($packageByAddress as $id_package => $package) {
$hotelWisePackageList[$id_address][] = $package;
}
}
$final_package_list = $hotelWisePackageList;
// END $package_list hotel wise
$cache[$cache_key] = $final_package_list;
return $final_package_list;
}
@@ -3246,7 +3284,27 @@ class CartCore extends ObjectModel
$total_products = $this->getOrderTotal(false, Cart::ONLY_PRODUCTS);
$total_discounts = $this->getOrderTotal(true, Cart::ONLY_DISCOUNTS);
$total_discounts_tax_exc = $this->getOrderTotal(false, Cart::ONLY_DISCOUNTS);
$objCartBookingData = new HotelCartBookingData();
$totalDemandsWT = $objCartBookingData->getCartExtraDemands(
$this->id,
0,
0,
0,
0,
1,
0,
1
);
$totalDemandsTaxExcl = $objCartBookingData->getCartExtraDemands(
$this->id,
0,
0,
0,
0,
1,
0,
0
);
// The cart content is altered for display
foreach ($cart_rules as &$cart_rule) {
// If the cart rule is automatic (wihtout any code) and include free shipping, it should not be displayed as a cart rule but only set the shipping cost to 0
@@ -3332,6 +3390,8 @@ class CartCore extends ObjectModel
'total_shipping_tax_exc' => $total_shipping_tax_exc,
'total_products_wt' => $total_products_wt,
'total_products' => $total_products,
'total_extra_demands_wt' => $totalDemandsWT,
'total_extra_demands_tax_exc' => $totalDemandsTaxExcl,
'total_price' => $base_total_tax_inc,
'total_tax' => $total_tax,
'total_price_without_tax' => $base_total_tax_exc,

View File

@@ -433,11 +433,10 @@ class CategoryCore extends ObjectModel
}
$right = (int)$n++;
Db::getInstance()->execute(
'UPDATE '._DB_PREFIX_.'category
SET nleft = '.(int)$left.', nright = '.(int)$right.'
WHERE id_category = '.(int)$id_category.' LIMIT 1'
);
Db::getInstance()->execute('
UPDATE '._DB_PREFIX_.'category
SET nleft = '.(int)$left.', nright = '.(int)$right.'
WHERE id_category = '.(int)$id_category.' LIMIT 1');
}
/**

View File

@@ -41,7 +41,7 @@ class FeatureCore extends ObjectModel
'position' => array('type' => self::TYPE_INT, 'validate' => 'isInt'),
/* Lang fields */
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isCatalogName', 'required' => true, 'size' => 128),
'name' => array('type' => self::TYPE_STRING, 'lang' => true, 'validate' => 'isGenericName', 'required' => true, 'size' => 128),
),
);

View File

@@ -418,8 +418,15 @@ class HookCore extends ObjectModel
*
* @return string/array modules output
*/
public static function exec($hook_name, $hook_args = array(), $id_module = null, $array_return = false, $check_exceptions = true, $use_push = false, $id_shop = null)
{
public static function exec(
$hook_name,
$hook_args = array(),
$id_module = null,
$array_return = false,
$check_exceptions = true,
$use_push = false,
$id_shop = null
) {
if (defined('PS_INSTALLATION_IN_PROGRESS')) {
return;
}

View File

@@ -370,7 +370,15 @@ abstract class PaymentModuleCore extends Module
// We don't use the following condition to avoid the float precision issues : http://www.php.net/manual/en/language.types.float.php
// if ($order->total_paid != $order->total_paid_real)
// We use number_format in order to compare two string
if ($order_status->logable && number_format($cart_total_paid, _PS_PRICE_COMPUTE_PRECISION_) != number_format($amount_paid, _PS_PRICE_COMPUTE_PRECISION_)) {
if (Configuration::get('WK_ALLOW_ADVANCED_PAYMENT')) {
$objCustAdv = new HotelCustomerAdvancedPayment();
$advOrderTotal = $objCustAdv->getOrdertTotal($this->context->cart->id, $this->context->cart->id_guest);
// if customer is paying advance payment amount
if ($order_status->logable && number_format($advOrderTotal, _PS_PRICE_COMPUTE_PRECISION_) != number_format($amount_paid, _PS_PRICE_COMPUTE_PRECISION_)) {
$id_order_state = Configuration::get('PS_OS_ERROR');
}
} elseif ($order_status->logable && number_format($cart_total_paid, _PS_PRICE_COMPUTE_PRECISION_) != number_format($amount_paid, _PS_PRICE_COMPUTE_PRECISION_)) {
// if customer is paying full payment amount
$id_order_state = Configuration::get('PS_OS_ERROR');
}
@@ -440,11 +448,14 @@ abstract class PaymentModuleCore extends Module
// Make sure CartRule caches are empty
CartRule::cleanCache();
$objRoomType = new HotelRoomType();
foreach ($order_detail_list as $key => $order_detail) {
/** @var OrderDetail $order_detail */
$order = $order_list[$key];
if (!$order_creation_failed && isset($order->id)) {
// first set if_hotel as 0 and get the hotel id from room type info -> below
$idHotel = 0;
if (!$secure_key) {
$message .= '<br />'.Tools::displayError('Warning: the secure key is empty, check your payment account before validation');
}
@@ -519,6 +530,12 @@ abstract class PaymentModuleCore extends Module
if (!$product['is_virtual']) {
$virtual_product &= false;
}
// If id_hotel is not available then find id_hotel for sending mails hotel wise
if (!$idHotel) {
if ($roomDetail = $objRoomType->getRoomTypeInfoByIdProduct((int)$product['id_product'])) {
$idHotel = $roomDetail['id_hotel'];
}
}
} // end foreach ($products)
$product_list_txt = '';
@@ -728,6 +745,8 @@ abstract class PaymentModuleCore extends Module
$cart_booking_data_text = $this->getEmailTemplateContent('hotel-booking-cart-data.text', Mail::TYPE_TEXT, $cart_booking_data['cart_htl_data']);
$cart_booking_data_html = $this->getEmailTemplateContent('hotel-booking-cart-data.tpl', Mail::TYPE_HTML, $cart_booking_data['cart_htl_data']);
$extra_demands_details_html = $this->getEmailTemplateContent('booking_extra_demands.tpl', Mail::TYPE_HTML, $cart_booking_data['cart_htl_data']);
//For Advanced Payment
$obj_customer_adv = new HotelCustomerAdvancedPayment();
$order_adv_dtl = $obj_customer_adv->getCstAdvPaymentDtlByIdOrder($order->id);
@@ -743,69 +762,68 @@ abstract class PaymentModuleCore extends Module
$adv_data_text = $this->getEmailTemplateContent('advanced-book-data.txt', Mail::TYPE_TEXT, $order_adv_dtl);
$data = array(
'{adv_data_html}' => $adv_data_html,//by webkul
'{adv_data_text}' => $adv_data_text,//by webkul
'{cart_booking_data_html}' => $cart_booking_data_html,//by webkul
'{total_demands_price}' => Tools::displayPrice(
$cart_booking_data['total_extra_demads'],
$this->context->currency,
false
),//by webkul
'{firstname}' => $this->context->customer->firstname,
'{lastname}' => $this->context->customer->lastname,
'{email}' => $this->context->customer->email,
'{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"),
'{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"),
'{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array(
'firstname' => '<span style="font-weight:bold;">%s</span>',
'lastname' => '<span style="font-weight:bold;">%s</span>'
)),
'{invoice_block_html}' => $this->_getFormatedAddress($invoice, '<br />', array(
'{adv_data_html}' => $adv_data_html,//by webkul
'{adv_data_text}' => $adv_data_text,//by webkul
'{cart_booking_data_html}' => $cart_booking_data_html,//by webkul
'{extra_demands_details_html}' => $extra_demands_details_html,//by webkul
'{total_extra_demands_te}' => Tools::displayPrice(
$cart_booking_data['total_extra_demands_te'],
$this->context->currency,
false
),
'{extra_demands_tax}' => Tools::displayPrice(
($cart_booking_data['total_extra_demands_ti']-$cart_booking_data['total_extra_demands_te']),
$this->context->currency,
false
),
'{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"),
'{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"),
'{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array(
'firstname' => '<span style="font-weight:bold;">%s</span>',
'lastname' => '<span style="font-weight:bold;">%s</span>'
)),
'{delivery_company}' => $delivery->company,
'{delivery_firstname}' => $delivery->firstname,
'{delivery_lastname}' => $delivery->lastname,
'{delivery_address1}' => $delivery->address1,
'{delivery_address2}' => $delivery->address2,
'{delivery_city}' => $delivery->city,
'{delivery_postal_code}' => $delivery->postcode,
'{delivery_country}' => $delivery->country,
'{delivery_state}' => $delivery->id_state ? $delivery_state->name : '',
'{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile,
'{delivery_other}' => $delivery->other,
'{invoice_company}' => $invoice->company,
'{invoice_vat_number}' => $invoice->vat_number,
'{invoice_firstname}' => $invoice->firstname,
'{invoice_lastname}' => $invoice->lastname,
'{invoice_address2}' => $invoice->address2,
'{invoice_address1}' => $invoice->address1,
'{invoice_city}' => $invoice->city,
'{invoice_postal_code}' => $invoice->postcode,
'{invoice_country}' => $invoice->country,
'{invoice_state}' => $invoice->id_state ? $invoice_state->name : '',
'{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile,
'{invoice_other}' => $invoice->other,
'{order_name}' => $order->getUniqReference(),
'{date}' => Tools::displayDate(date('Y-m-d H:i:s'), null, 1),
'{carrier}' => ($virtual_product || !isset($carrier->name)) ? Tools::displayError('No carrier') : $carrier->name,
'{payment}' => Tools::substr($order->payment, 0, 32),
'{products}' => $product_list_html,
'{products_txt}' => $product_list_txt,
'{discounts}' => $cart_rules_list_html,
'{discounts_txt}' => $cart_rules_list_txt,
'{total_extra_demands}' => Tools::displayPrice(
$cart_booking_data['total_extra_demads'],
$this->context->currency,
false
),
'{total_paid}' => Tools::displayPrice($order->total_paid, $this->context->currency, false),
'{total_products}' => Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ? $order->total_products : $order->total_products_wt, $this->context->currency, false),
'{total_discounts}' => Tools::displayPrice($order->total_discounts, $this->context->currency, false),
'{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false),
'{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $this->context->currency, false),
'{total_tax_paid}' => Tools::displayPrice(($order->total_products_wt - $order->total_products) + ($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $this->context->currency, false));
)),
'{invoice_block_html}' => $this->_getFormatedAddress($invoice, '<br />', array(
'firstname' => '<span style="font-weight:bold;">%s</span>',
'lastname' => '<span style="font-weight:bold;">%s</span>'
)),
'{delivery_company}' => $delivery->company,
'{delivery_firstname}' => $delivery->firstname,
'{delivery_lastname}' => $delivery->lastname,
'{delivery_address1}' => $delivery->address1,
'{delivery_address2}' => $delivery->address2,
'{delivery_city}' => $delivery->city,
'{delivery_postal_code}' => $delivery->postcode,
'{delivery_country}' => $delivery->country,
'{delivery_state}' => $delivery->id_state ? $delivery_state->name : '',
'{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile,
'{delivery_other}' => $delivery->other,
'{invoice_company}' => $invoice->company,
'{invoice_vat_number}' => $invoice->vat_number,
'{invoice_firstname}' => $invoice->firstname,
'{invoice_lastname}' => $invoice->lastname,
'{invoice_address2}' => $invoice->address2,
'{invoice_address1}' => $invoice->address1,
'{invoice_city}' => $invoice->city,
'{invoice_postal_code}' => $invoice->postcode,
'{invoice_country}' => $invoice->country,
'{invoice_state}' => $invoice->id_state ? $invoice_state->name : '',
'{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile,
'{invoice_other}' => $invoice->other,
'{order_name}' => $order->getUniqReference(),
'{date}' => Tools::displayDate(date('Y-m-d H:i:s'), null, 1),
'{carrier}' => ($virtual_product || !isset($carrier->name)) ? Tools::displayError('No carrier') : $carrier->name,
'{payment}' => Tools::substr($order->payment, 0, 32),
'{products}' => $product_list_html,
'{products_txt}' => $product_list_txt,
'{discounts}' => $cart_rules_list_html,
'{discounts_txt}' => $cart_rules_list_txt,
'{total_paid}' => Tools::displayPrice($order->total_paid, $this->context->currency, false),
'{total_products}' => Tools::displayPrice(Product::getTaxCalculationMethod() == PS_TAX_EXC ? $order->total_products : $order->total_products_wt, $this->context->currency, false),
'{total_discounts}' => Tools::displayPrice($order->total_discounts, $this->context->currency, false),
'{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false),
'{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $this->context->currency, false),
'{total_tax_paid}' => Tools::displayPrice(($order->total_products_wt - $order->total_products) + ($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $this->context->currency, false)
);
if (is_array($extra_vars)) {
$data = array_merge($data, $extra_vars);
@@ -827,19 +845,108 @@ abstract class PaymentModuleCore extends Module
PrestaShopLogger::addLog('PaymentModule::validateOrder - Mail is about to be sent', 1, null, 'Cart', (int)$id_cart, true);
}
if (Validate::isEmail($this->context->customer->email)) {
Mail::Send(
(int)$order->id_lang,
'order_conf',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$this->context->customer->email,
$this->context->customer->firstname.' '.$this->context->customer->lastname,
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);
// Send order confirmation mails to the reciepients according to the order mail configuration
if (Configuration::get('PS_ORDER_CONF_MAIL_TO_CUSTOMER')){
if (Validate::isEmail($this->context->customer->email)) {
// send customer information
$data['{firstname}'] = $this->context->customer->firstname;
$data['{lastname}'] = $this->context->customer->lastname;
$data['{email}'] = $this->context->customer->email;
Mail::Send(
(int)$order->id_lang,
'order_conf',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$this->context->customer->email,
$this->context->customer->firstname.' '.$this->context->customer->lastname,
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);
}
}
if (Configuration::get('PS_ORDER_CONF_MAIL_TO_SUPERADMIN')){
// send superadmin information
if (Validate::isLoadedObject($superAdmin = new Employee(_PS_ADMIN_PROFILE_))) {
if (Validate::isEmail($superAdmin->email)) {
$data['{customer_name}'] = $this->context->customer->firstname.' '.$this->context->customer->lastname;
$data['{customer_email}'] = $this->context->customer->email;
$data['{firstname}'] = $superAdmin->firstname;
$data['{lastname}'] = $superAdmin->lastname;
$data['{email}'] = $superAdmin->email;
Mail::Send(
(int)$order->id_lang,
'order_conf_admin',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$superAdmin->email,
$superAdmin->firstname.' '.$superAdmin->lastname,
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);
}
}
}
if ($idHotel
&& Validate::isLoadedObject($objHotel = new HotelBranchInformation($idHotel))
) {
if (Configuration::get('PS_ORDER_CONF_MAIL_TO_HOTEL_MANAGER')){
// send hotel information
$data['{firstname}'] = '';
$data['{lastname}'] = '';
$data['{email}'] = $objHotel->email;
$data['{customer_name}'] = $this->context->customer->firstname.' '.$this->context->customer->lastname;
$data['{customer_email}'] = $this->context->customer->email;
if (Validate::isEmail($objHotel->email)) {
Mail::Send(
(int)$order->id_lang,
'order_conf_admin',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$objHotel->email,
null,
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);
}
}
if (Configuration::get('PS_ORDER_CONF_MAIL_TO_EMPLOYEE')){
if ($htlAccesses = $objHotel->getHotelAccess($idHotel)) {
$data['{customer_name}'] = $this->context->customer->firstname.' '.$this->context->customer->lastname;
$data['{customer_email}'] = $this->context->customer->email;
foreach ($htlAccesses as $access) {
if ($access['id_profile'] != _PS_ADMIN_PROFILE_) {
if ($htlEmployees = Employee::getEmployeesByProfile($access['id_profile'])) {
foreach ($htlEmployees as $empl) {
if (Validate::isEmail($empl['email'])) {
// send hotel manager (employee) have permission for this hotel
$data['{firstname}'] = $empl['firstname'];
$data['{lastname}'] = $empl['lastname'];
$data['{email}'] = $empl['email'];
Mail::Send(
(int)$order->id_lang,
'order_conf_admin',
Mail::l('Order confirmation', (int)$order->id_lang),
$data,
$empl['email'],
$empl['firstname'].' '.$empl['lastname'],
null,
null,
$file_attachement,
null, _PS_MAIL_DIR_, false, (int)$order->id_shop
);
}
}
}
}
}
}
}
}
}
@@ -1077,7 +1184,8 @@ abstract class PaymentModuleCore extends Module
$obj_htl_bk_dtl = new HotelBookingDetail();
$obj_rm_type = new HotelRoomType();
$objBookingDemand = new HotelBookingDemands();
$totalDemandsPrice = 0;
$result['total_extra_demands_te'] = 0;
$result['total_extra_demands_ti'] = 0;
$cart_htl_data = array();
if (!empty($products)) {
foreach ($products as $type_key => $type_value) {
@@ -1132,13 +1240,24 @@ abstract class PaymentModuleCore extends Module
$data_v['date_from'],
$data_v['date_to']
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
} else {
@@ -1162,22 +1281,33 @@ abstract class PaymentModuleCore extends Module
$data_v['date_from'],
$data_v['date_to']
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
$totalDemandsPrice += $cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'];
$result['total_extra_demands_te'] += $cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'];
$result['total_extra_demands_ti'] += $cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'];
}
}
}
}
$result['cart_htl_data'] = $cart_htl_data;
$result['total_extra_demads'] = $totalDemandsPrice;
}
return $result;
}

View File

@@ -178,7 +178,7 @@ class ThemeCore extends ObjectModel
if (file_exists(_PS_ROOT_DIR_.'/config/xml/themes/'.$theme->directory.'.xml')) {
$config_file = _PS_ROOT_DIR_.'/config/xml/themes/'.$theme->directory.'.xml';
} elseif ($theme->name == 'hotel-theme') {
} elseif ($theme->name == 'hotel-reservation-theme') {
$config_file = _PS_ROOT_DIR_.'/config/xml/themes/default.xml';
} else {
$config_file = false;
@@ -197,7 +197,7 @@ class ThemeCore extends ObjectModel
$theme_arr['author_'.$key] = (string)$value;
}
if ($theme_arr['theme_name'] == 'hotel-theme') {
if ($theme_arr['theme_name'] == 'hotel-reservation-theme') {
$theme_arr['tc'] = Module::isEnabled('wkthemeconfigurator');
}
}

View File

@@ -20,7 +20,8 @@
class CheckoutCartSummaryStep extends AbstractCheckoutStep
{
public function __construct() {
public function __construct()
{
parent::__construct();
$this->step_key = 'checkout_rooms_summary';
}

View File

@@ -20,7 +20,8 @@
class CheckoutCustomerDetailsStep extends AbstractCheckoutStep
{
public function __construct() {
public function __construct()
{
parent::__construct();
$this->step_key = 'checkout_customer';
}

View File

@@ -27,7 +27,8 @@ class CheckoutPaymentStep extends AbstractCheckoutStep
public function handleRequest()
{
if ($this->context->cookie->__get('customer_details_proceeded')) {
if ($this->context->cookie->__get('customer_details_proceeded'))
{
$this->step_is_reachable = 1;
$this->step_is_current = 1;
$this->step_is_complete = 0;

View File

@@ -487,6 +487,34 @@ class AdminControllerCore extends Controller
}
$this->tabAccess = Profile::getProfileAccess($this->context->employee->id_profile, $this->id);
if ($this->context->employee->id_profile != _PS_ADMIN_PROFILE_) {
// Here we wiil check the query if hotel wise access is available
$this->access_query = '';
if (isset($this->access_select)) {
$this->access_query .= $this->access_select;
}
if (isset($this->access_join)) {
$this->access_query .= $this->access_join;
}
if (isset($this->access_where)) {
$this->access_query .= $this->access_where;
} elseif ($this->access_query && (!isset($this->access_where) || !$this->access_where)) {
$this->access_query .= ' WHERE 0';
}
if ($this->access_query) {
if (Tools::getValue($this->identifier)) {
$this->access_query .= ' AND a.'.$this->identifier.'='.(int) Tools::getValue($this->identifier);
if (!Db::getInstance()->executeS($this->access_query)) {
$this->tabAccess['view'] = '0';
$this->tabAccess['add'] = '0';
$this->tabAccess['edit'] = '0';
$this->tabAccess['delete'] = '0';
}
}
}
}
// Access control End
// Fix for homepage
if ($this->controller_name == 'AdminDashboard') {
$_POST['token'] = $this->token;
@@ -548,7 +576,7 @@ class AdminControllerCore extends Controller
*/
public function initBreadcrumbs($tab_id = null, $tabs = null)
{
if (is_array($tabs) || count($tabs)) {
if (is_array($tabs)) {
$tabs = array();
}
@@ -2894,9 +2922,9 @@ class AdminControllerCore extends Controller
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
} elseif (Tools::isSubmit('submitAdd'.$this->table)
|| Tools::isSubmit('submitAdd'.$this->table.'AndStay')
|| Tools::isSubmit('submitAdd'.$this->table.'AndPreview')
|| Tools::isSubmit('submitAdd'.$this->table.'AndBackToParent')) {
|| Tools::isSubmit('submitAdd'.$this->table.'AndStay')
|| Tools::isSubmit('submitAdd'.$this->table.'AndPreview')
|| Tools::isSubmit('submitAdd'.$this->table.'AndBackToParent')) {
// case 1: updating existing entry
if ($this->id_object) {
if ($this->tabAccess['edit'] === '1') {
@@ -3216,8 +3244,15 @@ class AdminControllerCore extends Controller
'.$lang_join.'
'.(isset($this->_join) ? $this->_join.' ' : '').'
'.$join_shop;
$sql_where = ' '.(isset($this->_where) ? $this->_where.' ' : '').($this->deleted ? 'AND a.`deleted` = 0 ' : '').
(isset($this->_filter) ? $this->_filter : '').$where_shop.'
$sql_where = ' '.(isset($this->_where) ? $this->_where.' ' : '');
$sql_where .= ($this->deleted ? 'AND a.`deleted` = 0 ' : '');
// here add condition of hotel accesses
if (isset($this->access_query) && $this->access_query) {
$sql_where .= ' AND a.'.$this->identifier.' IN ('.$this->access_query.')';
}
$sql_where .= (isset($this->_filter) ? $this->_filter : '').$where_shop.'
'.(isset($this->_group) ? $this->_group.' ' : '').'
'.$having_clause;
$sql_order_by = ' ORDER BY '.((str_replace('`', '', $order_by) == $this->identifier) ? 'a.' : '').$order_by.' '.pSQL($order_way).

View File

@@ -315,7 +315,6 @@ class OrderInvoiceCore extends ObjectModel
/**
* This method returns true if at least one order details uses the
* One After Another tax computation method.
*
* @since 1.5
* @return bool
*/
@@ -323,13 +322,13 @@ class OrderInvoiceCore extends ObjectModel
{
// if one of the order details use the tax computation method the display will be different
return Db::getInstance()->getValue('
SELECT od.`tax_computation_method`
FROM `'._DB_PREFIX_.'order_detail_tax` odt
LEFT JOIN `'._DB_PREFIX_.'order_detail` od ON (od.`id_order_detail` = odt.`id_order_detail`)
WHERE od.`id_order` = '.(int)$this->id_order.'
AND od.`id_order_invoice` = '.(int)$this->id.'
AND od.`tax_computation_method` = '.(int)TaxCalculator::ONE_AFTER_ANOTHER_METHOD)
|| Configuration::get('PS_INVOICE_TAXES_BREAKDOWN');
SELECT od.`tax_computation_method`
FROM `' . _DB_PREFIX_ . 'order_detail_tax` odt
LEFT JOIN `' . _DB_PREFIX_ . 'order_detail` od ON (od.`id_order_detail` = odt.`id_order_detail`)
WHERE od.`id_order` = ' . (int) $this->id_order . '
AND od.`id_order_invoice` = ' . (int) $this->id . '
AND od.`tax_computation_method` = ' . (int) TaxCalculator::ONE_AFTER_ANOTHER_METHOD)
|| Configuration::get('PS_INVOICE_TAXES_BREAKDOWN');
}
public function displayTaxBasesInProductTaxesBreakdown()
@@ -360,7 +359,6 @@ class OrderInvoiceCore extends ObjectModel
$breakdown = array();
$details = $order->getProductTaxesDetails();
if ($sum_composite_taxes) {
$grouped_details = array();
foreach ($details as $row) {
@@ -377,10 +375,8 @@ class OrderInvoiceCore extends ObjectModel
$grouped_details[$row['id_order_detail']]['total_tax_base'] += $row['total_tax_base'];
$grouped_details[$row['id_order_detail']]['total_amount'] += $row['total_amount'];
}
$details = $grouped_details;
}
foreach ($details as $row) {
$rate = sprintf('%.3f', $row['tax_rate']);
if (!isset($breakdown[$rate])) {
@@ -388,7 +384,7 @@ class OrderInvoiceCore extends ObjectModel
'total_price_tax_excl' => 0,
'total_amount' => 0,
'id_tax' => $row['id_tax'],
'rate' =>$rate,
'rate' => $rate,
);
}
@@ -402,7 +398,68 @@ class OrderInvoiceCore extends ObjectModel
}
ksort($breakdown);
return $breakdown;
}
public function getExtraDemandTaxesBreakdown($order = null)
{
if (!$order) {
$order = $this->getOrder();
}
$breakdown = array();
$objBookingDemand = new HotelBookingDemands();
$details = $objBookingDemand->getExtraDemandsTaxesDetails($order->id);
if (!$this->useOneAfterAnotherTaxComputationMethod()) {
$grouped_details = array();
foreach ($details as $row) {
if (!isset($grouped_details[$row['id_htl_booking']][$row['id_booking_demand']])) {
$grouped_details[$row['id_htl_booking']][$row['id_booking_demand']] = array(
'tax_rate' => 0,
'total_tax_base' => 0,
'total_amount' => 0,
'id_tax' => $row['id_tax'],
);
$grouped_details[$row['id_htl_booking']][$row['id_booking_demand']]['total_tax_base'] += $row['total_price_tax_excl'];
}
$grouped_details[$row['id_htl_booking']][$row['id_booking_demand']]['total_amount'] += $row['total_amount'];
$grouped_details[$row['id_htl_booking']][$row['id_booking_demand']]['tax_rate'] += $row['rate'];
}
$details = $grouped_details;
foreach ($details as $detail) {
foreach ($detail as $row) {
$rate = sprintf('%.3f', $row['tax_rate']);
if (!isset($breakdown[$rate])) {
$breakdown[$rate] = array(
'total_price_tax_excl' => 0,
'total_amount' => 0,
'id_tax' => $row['id_tax'],
'rate' =>$rate,
);
}
$breakdown[$rate]['total_price_tax_excl'] += $row['total_tax_base'];
$breakdown[$rate]['total_amount'] += $row['total_amount'];
}
}
} else {
foreach ($details as $row) {
$rate = sprintf('%.3f', $row['rate']);
if (!isset($breakdown[$rate])) {
$breakdown[$rate] = array(
'total_price_tax_excl' => 0,
'total_amount' => 0,
'id_tax' => $row['id_tax'],
'rate' =>$rate,
);
}
$breakdown[$rate]['total_price_tax_excl'] += $row['total_tax_base'];
$breakdown[$rate]['total_amount'] += $row['total_amount'];
}
}
foreach ($breakdown as $rate => $data) {
$breakdown[$rate]['total_price_tax_excl'] = Tools::ps_round($data['total_price_tax_excl'], _PS_PRICE_COMPUTE_PRECISION_, $order->round_mode);
$breakdown[$rate]['total_amount'] = Tools::ps_round($data['total_amount'], _PS_PRICE_COMPUTE_PRECISION_, $order->round_mode);
}
ksort($breakdown);
return $breakdown;
}
@@ -716,7 +773,7 @@ class OrderInvoiceCore extends ObjectModel
$query->innerJoin(
'order_invoice_payment',
'oip2',
'oip2.id_order_payment = oip1.id_order_payment AND oip2.id_order_invoice <> oip1.id_order_invoice AND oip1.id_order = oip2.id_order'
'oip2.id_order_payment = oip1.id_order_payment AND oip2.id_order_invoice <> oip1.id_order_invoice AND oip1.id_order = oip2.id_order'
);
$query->where('oip1.id_order_invoice = '.$this->id);

View File

@@ -284,16 +284,16 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
$round_type = null;
switch ($this->order->round_type) {
case Order::ROUND_TOTAL:
$round_type = 'total';
$round_type = 'total';
break;
case Order::ROUND_LINE:
$round_type = 'line';
$round_type = 'line';
break;
case Order::ROUND_ITEM:
$round_type = 'item';
$round_type = 'item';
break;
default:
$round_type = 'line';
$round_type = 'line';
break;
}
@@ -393,15 +393,27 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
$data_v['date_from'],
$data_v['date_to']
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order_obj->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order_obj->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['num_rm'] += 1;
$num_days = $cart_htl_data[$type_key]['date_diff'][$date_join]['num_days'];
@@ -423,13 +435,24 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
$data_v['date_from'],
$data_v['date_to']
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order_obj->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order_obj->id,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
@@ -447,10 +470,24 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
// For order refund
$cart_htl_data[$type_key]['date_diff'][$date_join]['stage_name'] = $stage_name;
$cart_htl_data[$type_key]['date_diff'][$date_join]['id_room'] = $data_v['id_room'];
$totalDemandsPrice += $cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'];
$totalDemandsPriceTE += $cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'];
$totalDemandsPriceTI += $cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'];
}
// Set tax_code
if ($taxes = OrderDetail::getTaxListStatic($data_v['id_order_detail'])) {
$tax_temp = array();
foreach ($taxes as $tax) {
$obj = new Tax($tax['id_tax']);
$tax_temp[] = sprintf($this->l('%1$s%2$s%%'), ($obj->rate + 0), '');
}
$cart_htl_data[$type_key]['order_detail_tax_label'] = implode(', ', $tax_temp);
} else {
$cart_htl_data[$type_key]['order_detail_tax_label'] = HTMLTemplateInvoice::l('No tax');
}
}
}
unset($tax_temp);
// For Advanced Payment
$obj_customer_adv = new HotelCustomerAdvancedPayment();
$order_adv_dtl = $obj_customer_adv->getCstAdvPaymentDtlByIdOrder($order_obj->id);
@@ -458,7 +495,8 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
$this->smarty->assign('order_adv_dtl', $order_adv_dtl);
}
// enter extra demands price to the footer total details
$footer['total_extra_demands'] = $totalDemandsPrice;
$footer['total_extra_demands_ti'] = $totalDemandsPriceTI;
$footer['total_extra_demands_te'] = $totalDemandsPriceTE;
}
}
$data = array(
@@ -493,6 +531,7 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
'addresses_tab' => $this->smarty->fetch($this->getTemplate('invoice.addresses-tab')),
'summary_tab' => $this->smarty->fetch($this->getTemplate('invoice.summary-tab')),
'product_tab' => $this->smarty->fetch($this->getTemplate('invoice.product-tab')),
'extra_demands_tab' => $this->smarty->fetch($this->getTemplate('invoice.extra-demands-tab')),
'tax_tab' => $this->getTaxTabContent(),
'payment_tab' => $this->smarty->fetch($this->getTemplate('invoice.payment-tab')),
'note_tab' => $this->smarty->fetch($this->getTemplate('invoice.note-tab')),
@@ -572,6 +611,7 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
{
$breakdowns = array(
'product_tax' => $this->order_invoice->getProductTaxesBreakdown($this->order),
'extra_demands_tax' => $this->order_invoice->getExtraDemandTaxesBreakdown($this->order),
'shipping_tax' => $this->order_invoice->getShippingTaxesBreakdown($this->order),
'ecotax_tax' => $this->order_invoice->getEcoTaxTaxesBreakdown(),
'wrapping_tax' => $this->order_invoice->getWrappingTaxesBreakdown(),
@@ -593,6 +633,12 @@ class HTMLTemplateInvoiceCore extends HTMLTemplate
}
}
if (isset($breakdowns['extra_demands_tax'])) {
foreach ($breakdowns['extra_demands_tax'] as &$bd) {
$bd['total_tax_excl'] = $bd['total_price_tax_excl'];
}
}
if (isset($breakdowns['ecotax_tax'])) {
foreach ($breakdowns['ecotax_tax'] as &$bd) {
$bd['total_tax_excl'] = $bd['ecotax_tax_excl'];

View File

@@ -262,4 +262,6 @@ if (!defined('_MEDIA_SERVER_2_')) {
}
if (!defined('_MEDIA_SERVER_3_')) {
define('_MEDIA_SERVER_3_', Configuration::get('PS_MEDIA_SERVER_3'));
}
}
require_once (_PS_ROOT_DIR_.'/modules/hotelreservationsystem/define.php');

View File

@@ -76,8 +76,14 @@ class AdminAccessControllerCore extends AdminController
}
}
// Send all hotels for the permissions of the hotels
$objHtlBranchInfo = new HotelBranchInformation();
$hotels = $objHtlBranchInfo->hotelBranchesInfo();
$modules = array();
$hotelAccess = array();
foreach ($profiles as $profile) {
// Get modules accesses by profiles
$modules[$profile['id_profile']] = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('
SELECT ma.`id_module`, m.`name`, ma.`view`, ma.`configure`, ma.`uninstall`
FROM '._DB_PREFIX_.'module_access ma
@@ -85,7 +91,7 @@ class AdminAccessControllerCore extends AdminController
ON ma.id_module = m.id_module
WHERE id_profile = '.(int)$profile['id_profile'].'
ORDER BY m.name
');
');
foreach ($modules[$profile['id_profile']] as $k => &$module) {
$m = Module::getInstanceById($module['id_module']);
// the following condition handles invalid modules
@@ -95,12 +101,24 @@ class AdminAccessControllerCore extends AdminController
unset($modules[$profile['id_profile']][$k]);
}
}
uasort($modules[$profile['id_profile']], array($this, 'sortModuleByName'));
// End module accesses
// Get Hotels accesses by profiles
foreach ($hotels as $hotelInfo) {
$idHotel = $hotelInfo['id'];
$hotelAccess[$profile['id_profile']][$idHotel] = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow(
'SELECT * FROM `'._DB_PREFIX_.'htl_access`
WHERE `id_profile` = '.(int)$profile['id_profile'].' AND `id_hotel` = '.(int)$idHotel
);
}
// End Hotels accesses
}
$this->fields_form = array('');
$this->tpl_form_vars = array(
'hotelAccess' => $hotelAccess,
'hotels' => $hotels,
'profiles' => $profiles,
'accesses' => $accesses,
'id_tab_parentmodule' => (int)Tab::getIdFromClassName('AdminParentModules'),
@@ -132,13 +150,15 @@ class AdminAccessControllerCore extends AdminController
$this->initPageHeaderToolbar();
$this->content .= $this->renderForm();
$this->context->smarty->assign(array(
'content' => $this->content,
'url_post' => self::$currentIndex.'&token='.$this->token,
'show_page_header_toolbar' => $this->show_page_header_toolbar,
'page_header_toolbar_title' => $this->page_header_toolbar_title,
'page_header_toolbar_btn' => $this->page_header_toolbar_btn
));
$this->context->smarty->assign(
array(
'content' => $this->content,
'url_post' => self::$currentIndex.'&token='.$this->token,
'show_page_header_toolbar' => $this->show_page_header_toolbar,
'page_header_toolbar_title' => $this->page_header_toolbar_title,
'page_header_toolbar_btn' => $this->page_header_toolbar_btn
)
);
}
public function initToolbarTitle()
@@ -152,6 +172,37 @@ class AdminAccessControllerCore extends AdminController
unset($this->page_header_toolbar_btn['cancel']);
}
public function ajaxProcessUpdateHotelAccess()
{
if (_PS_MODE_DEMO_) {
throw new PrestaShopException(Tools::displayError('This functionality has been disabled.'));
}
if ($this->tabAccess['edit'] != '1') {
throw new PrestaShopException(Tools::displayError('You do not have permission to edit this.'));
}
if (Tools::isSubmit('submitAddHotelAccess')) {
$enabled = (int)Tools::getValue('enabled');
$idHotel = (int)Tools::getValue('id_hotel');
$idProfile = (int)Tools::getValue('id_profile');
$where = '`id_hotel`';
if ($idHotel == -1) {
$sql = 'UPDATE `'._DB_PREFIX_.'htl_access`
SET `access` = '.(int)$enabled.'
WHERE `id_profile` = '.(int)$idProfile;
} else {
$sql = 'UPDATE `'._DB_PREFIX_.'htl_access`
SET `access` = '.(int)$enabled.'
WHERE `id_hotel` = '.(int)$idHotel.' AND `id_profile` = '.(int)$idProfile;
}
$res = Db::getInstance()->execute($sql) ? 'ok' : 'error';
die($res);
}
}
public function ajaxProcessUpdateAccess()
{
if (_PS_MODE_DEMO_) {

View File

@@ -74,6 +74,16 @@ class AdminAddressesControllerCore extends AdminController
'city' => array('title' => $this->l('City')),
'country' => array('title' => $this->l('Country'), 'type' => 'select', 'list' => $this->countries_array, 'filter_key' => 'cl!id_country'));
// START send access query information to the admin controller
$this->access_select = ' SELECT a.`id_address` FROM '._DB_PREFIX_.'address a';
$this->access_join = ' INNER JOIN '._DB_PREFIX_.'customer cust ON (cust.id_customer = a.id_customer)';
$this->access_join .= ' INNER JOIN '._DB_PREFIX_.'orders ord ON (cust.id_customer = ord.id_customer)';
$this->access_join .= ' INNER JOIN '._DB_PREFIX_.'htl_booking_detail hbd ON (hbd.id_order = ord.id_order)';
if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) {
$this->access_where = ' WHERE hbd.id_hotel IN ('.implode(',', $acsHtls).')';
}
parent::__construct();
$this->_select = 'cl.`name` as country';

View File

@@ -39,6 +39,8 @@ class AdminCartRulesControllerCore extends AdminController
$this->addRowAction('delete');
$this->_orderWay = 'DESC';
$this->context = Context::getContext();
$this->bulk_actions = array('delete' => array('text' => $this->l('Delete selected'),'icon' => 'icon-trash', 'confirm' => $this->l('Delete selected items?')));
$this->fields_list = array(
@@ -51,6 +53,25 @@ class AdminCartRulesControllerCore extends AdminController
'active' => array('title' => $this->l('Status'), 'active' => 'status', 'type' => 'bool', 'align' => 'center', 'class' => 'fixed-width-xs', 'orderby' => false),
);
// START send access query information to the admin controller
$this->access_select = ' SELECT a.`id_cart_rule` FROM '._DB_PREFIX_.'cart_rule a';
if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) {
// check roomtypes access if at least one hotel is acessed
$permittedIdsQuery = ' SELECT DISTINCT crprg.`id_cart_rule`
FROM '._DB_PREFIX_.'cart_rule_product_rule_group crprg';
$permittedIdsQuery .= ' INNER JOIN '._DB_PREFIX_.'cart_rule_product_rule crpr
ON (crprg.id_product_rule_group = crpr.id_product_rule_group)';
$permittedIdsQuery .= ' INNER JOIN '._DB_PREFIX_.'cart_rule_product_rule_value crpv
ON (crpv.id_product_rule = crpr.id_product_rule)';
$permittedIdsQuery .= ' INNER JOIN '._DB_PREFIX_.'htl_room_type hrt ON (crpv.id_item = hrt.id_product)';
$permittedIdsQuery .= ' WHERE hrt.id_hotel IN ('.implode(',', $acsHtls).')';
}
$notInCond = ' SELECT DISTINCT cprg.`id_cart_rule` FROM '._DB_PREFIX_.'cart_rule_product_rule_group cprg';
//check access if at least one hotel is acessed other wise remove all cart rules created for room types
if ($acsHtls) {
$notInCond .= ' WHERE cprg.`id_cart_rule` NOT IN ('.$permittedIdsQuery.')';
}
$this->access_where = ' WHERE a.`id_cart_rule` NOT IN ('.$notInCond.')';
parent::__construct();
}
@@ -125,6 +146,12 @@ class AdminCartRulesControllerCore extends AdminController
public function setMedia()
{
parent::setMedia();
Media::addJsDef(
array(
'room_access_err' => $this->l('You can only select room types which hotel(s) access is provided to this employee.'),
'room_rmv_txt' => $this->l('Unselect below room types'),
)
);
$this->addJqueryPlugin(array('typewatch', 'fancybox', 'autocomplete'));
}
@@ -250,8 +277,6 @@ class AdminCartRulesControllerCore extends AdminController
foreach (array('country', 'carrier', 'group', 'product_rule_group', 'shop') as $type) {
Db::getInstance()->delete('cart_rule_'.$type, '`id_cart_rule` = '.(int)$id_cart_rule);
}
Db::getInstance()->delete('cart_rule_product_rule', 'NOT EXISTS (SELECT 1 FROM `'._DB_PREFIX_.'cart_rule_product_rule_group`
WHERE `'._DB_PREFIX_.'cart_rule_product_rule`.`id_product_rule_group` = `'._DB_PREFIX_.'cart_rule_product_rule_group`.`id_product_rule_group`)');
Db::getInstance()->delete('cart_rule_product_rule_value', 'NOT EXISTS (SELECT 1 FROM `'._DB_PREFIX_.'cart_rule_product_rule`
@@ -462,9 +487,26 @@ class AdminCartRulesControllerCore extends AdminController
foreach ($results as $row) {
$products[in_array($row['id'], $selected) ? 'selected' : 'unselected'][] = $row;
}
// filter hotels as per accessed hotels
$products['selected'] = HotelBranchInformation::filterDataByHotelAccess(
$products['selected'],
$this->context->employee->id_profile,
0,
1,
1
);
$products['unselected'] = HotelBranchInformation::filterDataByHotelAccess(
$products['unselected'],
$this->context->employee->id_profile,
0,
1,
1
);
Context::getContext()->smarty->assign('product_rule_itemlist', $products);
$choose_content = $this->createTemplate('product_rule_itemlist.tpl')->fetch();
Context::getContext()->smarty->assign('product_rule_choose_content', $choose_content);
break;
case 'manufacturers':
$products = array('selected' => array(), 'unselected' => array());
@@ -547,6 +589,11 @@ class AdminCartRulesControllerCore extends AdminController
// Both product filter (free product and product discount) search for products
if (Tools::isSubmit('giftProductFilter') || Tools::isSubmit('reductionProductFilter')) {
$products = Product::searchByName(Context::getContext()->language->id, trim(Tools::getValue('q')));
// filter hotels as per accessed hotels
$products = HotelBranchInformation::filterDataByHotelAccess(
$products,
$this->context->employee->id_profile
);
die(Tools::jsonEncode($products));
}
}

View File

@@ -41,6 +41,7 @@ class AdminCartsControllerCore extends AdminController
$this->addRowAction('delete');
$this->allow_export = true;
$this->_orderWay = 'DESC';
$this->context = Context::getContext();
$this->_select = 'CONCAT(LEFT(c.`firstname`, 1), \'. \', c.`lastname`) `customer`, a.id_cart total, ca.name carrier,
IF (IFNULL(o.id_order, \''.$this->l('Non ordered').'\') = \''.$this->l('Non ordered').'\', IF(TIME_TO_SEC(TIMEDIFF(\''.pSQL(date('Y-m-d H:i:00', time())).'\', a.`date_add`)) > 86400, \''.$this->l('Abandoned cart').'\', \''.$this->l('Non ordered').'\'), o.id_order) AS status, IF(o.id_order, 1, 0) badge_success, IF(o.id_order, 0, 1) badge_danger, IF(co.id_guest, 1, 0) id_guest';
@@ -112,6 +113,13 @@ class AdminCartsControllerCore extends AdminController
)
);
// START send access query information to the admin controller
$this->access_select = ' SELECT a.`id_cart` FROM '._DB_PREFIX_.'cart a';
$this->access_join = ' INNER JOIN '._DB_PREFIX_.'htl_cart_booking_data hcb ON (hcb.id_cart = a.id_cart)';
if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) {
$this->access_where = ' WHERE hcb.id_hotel IN ('.implode(',', $acsHtls).')';
}
parent::__construct();
}
@@ -586,10 +594,10 @@ class AdminCartsControllerCore extends AdminController
$this->context->smarty->assign(array(
'cart_detail_data' => $cart_detail_data,
));
$tpl_path = 'default/template/controllers/orders/current_cart_details_data.tpl';
$cart_dtl_tpl = $this->context->smarty->fetch(_PS_BO_ALL_THEMES_DIR_.$tpl_path);
$result = $this->ajaxReturnVars();
$result['cart_detail_html'] = $cart_dtl_tpl;//tpl is added to the returned array
echo Tools::jsonEncode($result);
@@ -796,7 +804,7 @@ class AdminCartsControllerCore extends AdminController
$id_customer = (int)Tools::getValue('id_customer');
$customer = new Customer($id_customer);
$this->context->customer = $customer;
$carts = Cart::getCustomerCarts((int)$id_customer);
$orders = Order::getCustomerOrders((int)$id_customer);

View File

@@ -153,6 +153,15 @@ class AdminCustomersControllerCore extends AdminController
$this->shopLinkType = 'shop';
$this->shopShareDatas = Shop::SHARE_CUSTOMER;
// START send access query information to the admin controller
$this->access_select = ' SELECT a.`id_customer` FROM '._DB_PREFIX_.'customer a';
$this->access_join = ' INNER JOIN '._DB_PREFIX_.'orders ord ON (a.id_customer = ord.id_customer)';
$this->access_join .= ' INNER JOIN '._DB_PREFIX_.'htl_booking_detail hbd ON (hbd.id_order = ord.id_order)';
if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) {
$this->access_where = ' WHERE hbd.id_hotel IN ('.implode(',', $acsHtls).')';
}
parent::__construct();
$this->_select = '

View File

@@ -171,7 +171,7 @@ class AdminFeaturesControllerCore extends AdminController
}
$ps_img_url = _PS_IMG_DIR_.'rf/'.$obj->id.'.png';
if ($img_exist = file_exists($ps_img_url)) {
$img_url = '../../hotelcommerce/img/rf/'.$obj->id.'.png';
$img_url = _PS_IMG_.'rf/'.$obj->id.'.png';
$image = "<img class='img-thumbnail img-responsive' style='max-width:100px' src='".$img_url."'>";
}

View File

@@ -131,43 +131,41 @@ class AdminOrderPreferencesControllerCore extends AdminController
),
'submit' => array('title' => $this->l('Save'))
),
/*'gift' => array(
'title' => $this->l('Gift options'),
'icon' => 'icon-gift',
'email' => array(
'title' => $this->l('Email'),
'icon' => 'icon-cogs',
'fields' => array(
'PS_GIFT_WRAPPING' => array(
'title' => $this->l('Offer gift wrapping'),
'hint' => $this->l('Suggest gift-wrapping to customers.'),
'PS_ORDER_CONF_MAIL_TO_CUSTOMER' => array(
'title' => $this->l('Order confirmation mail to customer'),
'hint' => $this->l('Enable, if you want to send order confirmation email to the customer.'),
'validation' => 'isBool',
'cast' => 'intval',
'type' => 'bool'
),
'PS_GIFT_WRAPPING_PRICE' => array(
'title' => $this->l('Gift-wrapping price'),
'hint' => $this->l('Set a price for gift wrapping.'),
'validation' => 'isPrice',
'cast' => 'floatval',
'type' => 'price'
),
'PS_GIFT_WRAPPING_TAX_RULES_GROUP' => array(
'title' => $this->l('Gift-wrapping tax'),
'hint' => $this->l('Set a tax for gift wrapping.'),
'validation' => 'isInt',
'PS_ORDER_CONF_MAIL_TO_SUPERADMIN' => array(
'title' => $this->l('Order confirmation mail to super admin'),
'hint' => $this->l('Enable, if you want to send order confirmation email to the super admin.'),
'validation' => 'isBool',
'cast' => 'intval',
'type' => 'select',
'list' => array_merge(array(array('id_tax_rules_group' => 0, 'name' => $this->l('None'))), TaxRulesGroup::getTaxRulesGroups(true)),
'identifier' => 'id_tax_rules_group'
'type' => 'bool'
),
'PS_RECYCLABLE_PACK' => array(
'title' => $this->l('Offer recycled packaging'),
'hint' => $this->l('Suggest recycled packaging to customer.'),
'PS_ORDER_CONF_MAIL_TO_HOTEL_MANAGER' => array(
'title' => $this->l('Order confirmation mail to hotelier'),
'hint' => $this->l('Enable, if you want to send order confirmation email to the hotelier. Mail will be sent to the email saved while creating the hotel.'),
'validation' => 'isBool',
'cast' => 'intval',
'type' => 'bool'
),
'PS_ORDER_CONF_MAIL_TO_EMPLOYEE' => array(
'title' => $this->l('Order confirmation mail to employee'),
'hint' => $this->l('Enable, if you want to send order confirmation email to the employees with profiles which have permission to manage the hotel.'),
'validation' => 'isBool',
'cast' => 'intval',
'type' => 'bool'
),
),
'submit' => array('title' => $this->l('Save')),
),*/
'submit' => array('title' => $this->l('Save'))
),
);
if (!Configuration::get('PS_ALLOW_MULTISHIPPING')) {

View File

@@ -207,6 +207,13 @@ class AdminOrdersControllerCore extends AdminController
'updateOrderStatus' => array('text' => $this->l('Change Order Status'), 'icon' => 'icon-refresh')
);
// START send access query information to the admin controller
$this->access_select = ' SELECT a.`id_order` FROM '._DB_PREFIX_.'orders a';
$this->access_join = ' INNER JOIN '._DB_PREFIX_.'htl_booking_detail hbd ON (hbd.id_order = a.id_order)';
if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) {
$this->access_where = ' WHERE hbd.id_hotel IN ('.implode(',', $acsHtls).')';
}
parent::__construct();
}
@@ -216,31 +223,6 @@ class AdminOrdersControllerCore extends AdminController
return Tools::displayPrice($echo, (int)$order->id_currency);
}
####################################################
/*commented by webkul to hide 'Add New Order' from order list page*/
####################################################
/*public function initPageHeaderToolbar()
{
parent::initPageHeaderToolbar();
if (empty($this->display)) {
$this->page_header_toolbar_btn['new_order'] = array(
'href' => self::$currentIndex.'&addorder&token='.$this->token,
'desc' => $this->l('Add new order', null, null, false),
'icon' => 'process-icon-new'
);
}
if ($this->display == 'add') {
unset($this->page_header_toolbar_btn['save']);
}
if (Context::getContext()->shop->getContext() != Shop::CONTEXT_SHOP && isset($this->page_header_toolbar_btn['new_order'])
&& Shop::isFeatureActive()) {
unset($this->page_header_toolbar_btn['new_order']);
}*/
public function renderForm()
{
if (Context::getContext()->shop->getContext() != Shop::CONTEXT_SHOP && Shop::isFeatureActive()) {
@@ -485,65 +467,73 @@ class AdminOrdersControllerCore extends AdminController
{
// by webkul for reallocation of rooms
if (Tools::isSubmit('realloc_allocated_rooms')) {
$order_id = Tools::getValue('id_order');
$current_room_id = Tools::getValue('modal_id_room');
$current_room = Tools::getValue('modal_curr_room_num');
$date_from = Tools::getValue('modal_date_from');
$date_to = Tools::getValue('modal_date_to');
$realloc_room_id = Tools::getValue('realloc_avail_rooms');
if ($this->tabAccess['edit'] === '1') {
$order_id = Tools::getValue('id_order');
$current_room_id = Tools::getValue('modal_id_room');
$current_room = Tools::getValue('modal_curr_room_num');
$date_from = Tools::getValue('modal_date_from');
$date_to = Tools::getValue('modal_date_to');
$realloc_room_id = Tools::getValue('realloc_avail_rooms');
if ($realloc_room_id == 0) {
$this->errors[] = Tools::displayError('Please select a room to swap with this room.');
}
if ($current_room_id == 0) {
$this->errors[] = Tools::displayError('Cuurent room is missing.');
}
if ($date_from == 0) {
$this->errors[] = Tools::displayError('Check In date is missing.');
}
if ($date_to == 0) {
$this->errors[] = Tools::displayError('Check Out date is missing.');
}
if (!count($this->errors)) {
$obj_booking_dtl = new HotelBookingDetail();
$room_swapped = $obj_booking_dtl->reallocateRoomWithAvailableSameRoomType($current_room_id, $date_from, $date_to, $realloc_room_id);
if (!$room_swapped) {
$this->errors[] = Tools::displayError('Some error occured. Please try again.');
} else {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int) $order_id.'&vieworder&token='.$this->token);
if ($realloc_room_id == 0) {
$this->errors[] = Tools::displayError('Please select a room to swap with this room.');
}
if ($current_room_id == 0) {
$this->errors[] = Tools::displayError('Cuurent room is missing.');
}
if ($date_from == 0) {
$this->errors[] = Tools::displayError('Check In date is missing.');
}
if ($date_to == 0) {
$this->errors[] = Tools::displayError('Check Out date is missing.');
}
if (!count($this->errors)) {
$obj_booking_dtl = new HotelBookingDetail();
$room_swapped = $obj_booking_dtl->reallocateRoomWithAvailableSameRoomType($current_room_id, $date_from, $date_to, $realloc_room_id);
if (!$room_swapped) {
$this->errors[] = Tools::displayError('Some error occured. Please try again.');
} else {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int) $order_id.'&vieworder&token='.$this->token);
}
}
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
}
if (Tools::isSubmit('swap_allocated_rooms')) {
$order_id = Tools::getValue('id_order');
$current_room_id = Tools::getValue('modal_id_room');
$current_room = Tools::getValue('modal_curr_room_num');
$date_from = Tools::getValue('modal_date_from');
$date_to = Tools::getValue('modal_date_to');
$swapped_room_id = Tools::getValue('swap_avail_rooms');
if ($this->tabAccess['edit'] === '1') {
$order_id = Tools::getValue('id_order');
$current_room_id = Tools::getValue('modal_id_room');
$current_room = Tools::getValue('modal_curr_room_num');
$date_from = Tools::getValue('modal_date_from');
$date_to = Tools::getValue('modal_date_to');
$swapped_room_id = Tools::getValue('swap_avail_rooms');
if ($swapped_room_id == 0) {
$this->errors[] = Tools::displayError('Please select a room to swap with this room.');
}
if ($current_room_id == 0) {
$this->errors[] = Tools::displayError('Cuurent room is missing.');
}
if ($date_from == 0) {
$this->errors[] = Tools::displayError('Check In date is missing.');
}
if ($date_to == 0) {
$this->errors[] = Tools::displayError('Check Out date is missing.');
}
if (!count($this->errors)) {
$obj_booking_dtl = new HotelBookingDetail();
$room_swapped = $obj_booking_dtl->swapRoomWithAvailableSameRoomType($current_room_id, $date_from, $date_to, $swapped_room_id);
if (!$room_swapped) {
$this->errors[] = Tools::displayError('Some error occured. Please try again.');
} else {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int) $order_id.'&vieworder&token='.$this->token);
if ($swapped_room_id == 0) {
$this->errors[] = Tools::displayError('Please select a room to swap with this room.');
}
if ($current_room_id == 0) {
$this->errors[] = Tools::displayError('Cuurent room is missing.');
}
if ($date_from == 0) {
$this->errors[] = Tools::displayError('Check In date is missing.');
}
if ($date_to == 0) {
$this->errors[] = Tools::displayError('Check Out date is missing.');
}
if (!count($this->errors)) {
$obj_booking_dtl = new HotelBookingDetail();
$room_swapped = $obj_booking_dtl->swapRoomWithAvailableSameRoomType($current_room_id, $date_from, $date_to, $swapped_room_id);
if (!$room_swapped) {
$this->errors[] = Tools::displayError('Some error occured. Please try again.');
} else {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int) $order_id.'&vieworder&token='.$this->token);
}
}
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
}
//by webkul to update order status when admin changes from order detail page
@@ -553,16 +543,40 @@ class AdminOrdersControllerCore extends AdminController
$date_to = Tools::getValue('date_to');
$order_id = (int) Tools::getValue('id_order');
$new_status = (int) Tools::getValue('booking_order_status');
if ($order_id && $new_status && $id_room) {
$obj_booking_detail = new HotelBookingDetail();
$update = $obj_booking_detail->updateBookingOrderStatusByOrderId($order_id, $new_status, $id_room, $date_from, $date_to);
if ($update) {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int) $order_id.'&vieworder&token='.$this->token);
} else {
$this->errors[] = Tools::displayError('New order status is invalid.');
}
$currentDate = date('Y-m-d H:i:s');
// @todo This is a valid condition but will be used after managing after order data management
// elseif (($new_status == 2 || $new_status == 3) && !($date_from <= $currentDate && $date_to >= $currentDate)) {
// $this->errors[] = Tools::displayError('Check-in and Check-out dates must be in between the booking dates.');
// }
if (!$order_id || !$id_room) {
$this->errors[] = Tools::displayError('Something went wrong, Please try again !!');
} elseif (!$new_status) {
$this->errors[] = Tools::displayError('Invalid room check-in status, Please try again !!');
} else {
$this->errors[] = Tools::displayError('New order status is invalid.');
$obj_booking_detail = new HotelBookingDetail();
$roomBookingDetail = $obj_booking_detail->getRoomBookingData($id_room, $order_id);
if ($roomBookingDetail) {
if ($new_status == 3 && !($roomBookingDetail['check_in'] != '0000-00-00 00:00:00' && $roomBookingDetail['check_in'] <= $currentDate)) {
$this->errors[] = Tools::displayError('Room status must be set to check-in, before setting the room status to check-out.');
} else {
if ($obj_booking_detail->updateBookingOrderStatusByOrderId(
$order_id,
$new_status,
$id_room,
$date_from,
$date_to
)) {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.(int) $order_id.'&vieworder&token='.$this->token);
} else {
$this->errors[] = Tools::displayError('Error while updating room status.');
}
}
} else {
$this->errors[] = Tools::displayError('Something went wrong, please try again!');
}
}
}
@@ -609,9 +623,21 @@ class AdminOrdersControllerCore extends AdminController
'{shipping_number}' => $order->shipping_number,
'{order_name}' => $order->getUniqReference()
);
if (@Mail::Send((int)$order->id_lang, 'in_transit', Mail::l('Package in transit', (int)$order->id_lang), $templateVars,
$customer->email, $customer->firstname.' '.$customer->lastname, null, null, null, null,
_PS_MAIL_DIR_, true, (int)$order->id_shop)) {
if (@Mail::Send(
(int)$order->id_lang,
'in_transit',
Mail::l('Package in transit', (int)$order->id_lang),
$templateVars,
$customer->email,
$customer->firstname.' '.$customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
(int)$order->id_shop
)) {
Hook::exec('actionAdminOrdersTrackingNumberUpdate', array('order' => $order, 'customer' => $customer, 'carrier' => $carrier), null, false, true, false, $order->id_shop);
Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=4&token='.$this->token);
} else {
@@ -748,9 +774,21 @@ class AdminOrdersControllerCore extends AdminController
'{order_name}' => $order->getUniqReference(),
'{message}' => $message
);
if (@Mail::Send((int)$order->id_lang, 'order_merchant_comment',
Mail::l('New message regarding your order', (int)$order->id_lang), $varsTpl, $customer->email,
$customer->firstname.' '.$customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, (int)$order->id_shop)) {
if (@Mail::Send(
(int)$order->id_lang,
'order_merchant_comment',
Mail::l('New message regarding your order', (int)$order->id_lang),
$varsTpl,
$customer->email,
$customer->firstname.' '.$customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
(int)$order->id_shop
)) {
Tools::redirectAdmin(self::$currentIndex.'&id_order='.$order->id.'&vieworder&conf=11'.'&token='.$this->token);
}
}
@@ -787,9 +825,8 @@ class AdminOrdersControllerCore extends AdminController
$order_detail_list[$id_order_detail]['unit_price'] = (!Tools::getValue('TaxMethod') ? $order_detail->unit_price_tax_excl : $order_detail->unit_price_tax_incl);
$order_detail_list[$id_order_detail]['amount'] = $order_detail->unit_price_tax_incl * $order_detail_list[$id_order_detail]['quantity'];
} else {
$order_detail_list[$id_order_detail]['unit_price'] = $order_detail_list[$id_order_detail]['amount'] / $order_detail_list[$id_order_detail]['quantity'];
$order_detail_list[$id_order_detail]['unit_price'] = $order_detail_list[$id_order_detail]['amount'] / $order_detail_list[$id_order_detail]['quantity'];
$order_detail_list[$id_order_detail]['amount'] = (float)str_replace(',', '.', $amount_detail);
}
$amount += $order_detail_list[$id_order_detail]['amount'];
if (!$order->hasBeenDelivered() || ($order->hasBeenDelivered() && Tools::isSubmit('reinjectQuantities')) && $order_detail_list[$id_order_detail]['quantity'] > 0) {
@@ -838,8 +875,14 @@ class AdminOrdersControllerCore extends AdminController
}
if ($amount >= 0) {
if (!OrderSlip::create($order, $order_detail_list, $shipping_cost_amount, $voucher, $choosen,
(Tools::getValue('TaxMethod') ? false : true))) {
if (!OrderSlip::create(
$order,
$order_detail_list,
$shipping_cost_amount,
$voucher,
$choosen,
(Tools::getValue('TaxMethod') ? false : true)
)) {
$this->errors[] = Tools::displayError('You cannot generate a partial credit slip.');
} else {
Hook::exec('actionOrderSlipAdd', array('order' => $order, 'productList' => $order_detail_list, 'qtyList' => $full_quantity_list), null, false, true, false, $order->id_shop);
@@ -920,9 +963,21 @@ class AdminOrdersControllerCore extends AdminController
$params['{order_name}'] = $order->getUniqReference();
$params['{voucher_amount}'] = Tools::displayPrice($cart_rule->reduction_amount, $currency, false);
$params['{voucher_num}'] = $cart_rule->code;
@Mail::Send((int)$order->id_lang, 'voucher', sprintf(Mail::l('New voucher for your order #%s', (int)$order->id_lang), $order->reference),
$params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null,
null, _PS_MAIL_DIR_, true, (int)$order->id_shop);
@Mail::Send(
(int)$order->id_lang,
'voucher',
sprintf(Mail::l('New voucher for your order #%s', (int)$order->id_lang), $order->reference),
$params,
$customer->email,
$customer->firstname.' '.$customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
(int)$order->id_shop
);
}
}
}
@@ -1175,9 +1230,21 @@ class AdminOrdersControllerCore extends AdminController
$currency = $this->context->currency;
$params['{voucher_amount}'] = Tools::displayPrice($cartrule->reduction_amount, $currency, false);
$params['{voucher_num}'] = $cartrule->code;
@Mail::Send((int)$order->id_lang, 'voucher', sprintf(Mail::l('New voucher for your order #%s', (int)$order->id_lang), $order->reference),
$params, $customer->email, $customer->firstname.' '.$customer->lastname, null, null, null,
null, _PS_MAIL_DIR_, true, (int)$order->id_shop);
@Mail::Send(
(int)$order->id_lang,
'voucher',
sprintf(Mail::l('New voucher for your order #%s', (int)$order->id_lang), $order->reference),
$params,
$customer->email,
$customer->firstname.' '.$customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
(int)$order->id_shop
);
}
}
}
@@ -1272,9 +1339,16 @@ class AdminOrdersControllerCore extends AdminController
} else {
$employee = new Employee((int)Context::getContext()->cookie->id_employee);
$payment_module->validateOrder(
(int)$cart->id, (int)$id_order_state,
$cart->getOrderTotal(true, Cart::BOTH), $payment_module->displayName, $this->l('Manual order -- Employee:').' '.
substr($employee->firstname, 0, 1).'. '.$employee->lastname, array(), null, false, $cart->secure_key
(int)$cart->id,
(int)$id_order_state,
$cart->getOrderTotal(true, Cart::BOTH),
$payment_module->displayName,
$this->l('Manual order -- Employee:').' '.
substr($employee->firstname, 0, 1).'. '.$employee->lastname,
array(),
null,
false,
$cart->secure_key
);
/*
setcookie('wk_id_cart', ' ', time() - 86400, '/');
@@ -1663,7 +1737,6 @@ class AdminOrdersControllerCore extends AdminController
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
}
parent::postProcess();
}
@@ -1870,9 +1943,10 @@ class AdminOrdersControllerCore extends AdminController
$obj_htl_bk_dtl = new HotelBookingDetail();
$order_detail_data = $obj_htl_bk_dtl->getOrderFormatedBookinInfoByIdOrder((int) Tools::getValue('id_order'));
$total_tax = 0;
$total_room_tax = 0;
$totalRoomsCostTE = 0;
$totalDemandsPrice = 0;
$totalDemandsPriceTE = 0;
$totalDemandsPriceTI = 0;
if ($order_detail_data) {
$objBookingDemand = new HotelBookingDemands();
foreach ($order_detail_data as $key => $value) {
@@ -1892,16 +1966,28 @@ class AdminOrdersControllerCore extends AdminController
$value['date_from'],
$value['date_to']
);
$order_detail_data[$key]['extra_demands_price'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order_detail_data[$key]['extra_demands_price_ti'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order->id,
$value['id_product'],
$value['id_room'],
$value['date_from'],
$value['date_to'],
0,
1,
1
);
$totalDemandsPrice += $order_detail_data[$key]['extra_demands_price'];
$totalDemandsPriceTI += $order_detail_data[$key]['extra_demands_price_ti'];
$order_detail_data[$key]['extra_demands_price_te'] = $objBookingDemand->getRoomTypeBookingExtraDemands(
$order->id,
$value['id_product'],
$value['id_room'],
$value['date_from'],
$value['date_to'],
0,
1,
0
);
$totalDemandsPriceTE += $order_detail_data[$key]['extra_demands_price_te'];
$cust_obj = new Customer($value['id_customer']);
if ($cust_obj->firstname) {
$order_detail_data[$key]['alloted_cust_name'] = $cust_obj->firstname.' '.$cust_obj->lastname;
@@ -1919,7 +2005,7 @@ class AdminOrdersControllerCore extends AdminController
/*Product price when order was created*/
$totalRoomsCostTE += $value['total_price_tax_excl'];
$total_tax += $value['total_price_tax_incl']-$value['total_price_tax_excl'];
$total_room_tax += $value['total_price_tax_incl']-$value['total_price_tax_excl'];
$num_days = $obj_htl_bk_dtl->getNumberOfDays($value['date_from'], $value['date_to']);
$order_detail_data[$key]['unit_amt_tax_excl'] = $value['total_price_tax_excl']/$num_days;
$order_detail_data[$key]['unit_amt_tax_incl'] = $value['total_price_tax_incl']/$num_days;
@@ -1958,32 +2044,36 @@ class AdminOrdersControllerCore extends AdminController
$order_adv_dtl = $obj_customer_adv->getCstAdvPaymentDtlByIdOrder($order->id);
if ($order_adv_dtl) {
if (Tools::isSubmit('payDueAmount')) {
$due_submit_amount = Tools::getValue('submitted_amount');
if (!Validate::isPrice($due_submit_amount)) {
$this->errors[] = $this->l('Submitted Amount must be valid amount.');
} else {
$obj_customer_adv = new HotelCustomerAdvancedPayment($order_adv_dtl['id']);
$due_submit_amount += $obj_customer_adv->total_paid_amount;
if (($due_submit_amount <= $obj_customer_adv->total_order_amount) && ($due_submit_amount > 0)) {
$obj_customer_adv->total_paid_amount = $due_submit_amount;
$obj_customer_adv->save();
Tools::redirectAdmin($this->context->link->getAdminLink('AdminOrders').'&vieworder&id_order='.$order->id);
if ($this->tabAccess['edit'] === '1') {
$due_submit_amount = Tools::getValue('submitted_amount');
if (!Validate::isPrice($due_submit_amount)) {
$this->errors[] = $this->l('Submitted Amount must be valid amount.');
} else {
$this->errors[] = $this->l('Submitted Amount must be less than total order amount.');
$obj_customer_adv = new HotelCustomerAdvancedPayment($order_adv_dtl['id']);
$due_submit_amount += $obj_customer_adv->total_paid_amount;
if (($due_submit_amount <= $obj_customer_adv->total_order_amount) && ($due_submit_amount > 0)) {
$obj_customer_adv->total_paid_amount = $due_submit_amount;
$obj_customer_adv->save();
Tools::redirectAdmin($this->context->link->getAdminLink('AdminOrders').'&vieworder&id_order='.$order->id);
} else {
$this->errors[] = $this->l('Submitted Amount must be less than total order amount.');
}
}
} else {
$this->errors[] = Tools::displayError('You do not have permission to edit this.');
}
}
$this->context->smarty->assign('order_adv_dtl', $order_adv_dtl);
}
// get order extra demands
$objBookingDemand = new HotelBookingDemands();
$this->tpl_view_vars = array(
/*Assigned variable to view.tpl By webkul*/
'totalDemandsPrice' => $totalDemandsPrice,
'totalDemandsPriceTI' => $totalDemandsPriceTI,
'totalDemandsPriceTE' => $totalDemandsPriceTE,
'totalRoomsCostTE' => $totalRoomsCostTE,
'total_tax_in_order' => $total_tax,
'total_room_tax' => $total_room_tax,
'htl_booking_order_data' => $htl_booking_data_order_id,
'hotel_order_status' => $htl_order_status,
'order_detail_data' => $order_detail_data,
@@ -2029,22 +2119,30 @@ class AdminOrdersControllerCore extends AdminController
'payment_methods' => $payment_methods,
'invoice_management_active' => Configuration::get('PS_INVOICE', null, null, $order->id_shop),
'display_warehouse' => (int)Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT'),
'HOOK_CONTENT_ORDER' => Hook::exec('displayAdminOrderContentOrder', array(
'HOOK_CONTENT_ORDER' => Hook::exec(
'displayAdminOrderContentOrder',
array(
'order' => $order,
'products' => $products,
'customer' => $customer)
),
'HOOK_CONTENT_SHIP' => Hook::exec('displayAdminOrderContentShip', array(
'HOOK_CONTENT_SHIP' => Hook::exec(
'displayAdminOrderContentShip',
array(
'order' => $order,
'products' => $products,
'customer' => $customer)
),
'HOOK_TAB_ORDER' => Hook::exec('displayAdminOrderTabOrder', array(
'HOOK_TAB_ORDER' => Hook::exec(
'displayAdminOrderTabOrder',
array(
'order' => $order,
'products' => $products,
'customer' => $customer)
),
'HOOK_TAB_SHIP' => Hook::exec('displayAdminOrderTabShip', array(
'HOOK_TAB_SHIP' => Hook::exec(
'displayAdminOrderTabShip',
array(
'order' => $order,
'products' => $products,
'customer' => $customer)
@@ -2145,8 +2243,21 @@ class AdminOrdersControllerCore extends AdminController
'{firstname}' => $customer->firstname,
'{lastname}' => $customer->lastname
);
if (Mail::Send((int)$cart->id_lang, 'backoffice_order', Mail::l('Process the payment of your order', (int)$cart->id_lang), $mailVars, $customer->email,
$customer->firstname.' '.$customer->lastname, null, null, null, null, _PS_MAIL_DIR_, true, $cart->id_shop)) {
if (Mail::Send(
(int)$cart->id_lang,
'backoffice_order',
Mail::l('Process the payment of your order', (int)$cart->id_lang),
$mailVars,
$customer->email,
$customer->firstname.' '.$customer->lastname,
null,
null,
null,
null,
_PS_MAIL_DIR_,
true,
$cart->id_shop
)) {
die(Tools::jsonEncode(array('errors' => false, 'result' => $this->l('The email was sent to your customer.'))));
}
}
@@ -2332,8 +2443,20 @@ class AdminOrdersControllerCore extends AdminController
// always add taxes even if there are not displayed to the customer
$use_taxes = true;
$initial_product_price_tax_incl = Product::getPriceStatic($product->id, $use_taxes, isset($combination) ? $combination->id : null, 2, null, false, true, 1,
false, $order->id_customer, $cart->id, $order->{Configuration::get('PS_TAX_ADDRESS_TYPE', null, null, $order->id_shop)});
$initial_product_price_tax_incl = Product::getPriceStatic(
$product->id,
$use_taxes,
isset($combination) ? $combination->id : null,
2,
null,
false,
true,
1,
false,
$order->id_customer,
$cart->id,
$order->{Configuration::get('PS_TAX_ADDRESS_TYPE', null, null, $order->id_shop)}
);
// Creating specific price if needed
if ($product_informations['product_price_tax_incl'] != $initial_product_price_tax_incl) {
@@ -2361,8 +2484,15 @@ class AdminOrdersControllerCore extends AdminController
}
// Add product to cart
$update_quantity = $cart->updateQty($product_informations['product_quantity'], $product->id, isset($product_informations['product_attribute_id']) ? $product_informations['product_attribute_id'] : null,
isset($combination) ? $combination->id : null, 'up', 0, new Shop($cart->id_shop));
$update_quantity = $cart->updateQty(
$product_informations['product_quantity'],
$product->id,
isset($product_informations['product_attribute_id']) ? $product_informations['product_attribute_id'] : null,
isset($combination) ? $combination->id : null,
'up',
0,
new Shop($cart->id_shop)
);
if ($update_quantity < 0) {
// If product has attribute, minimal quantity is set with minimal quantity of attribute
@@ -3031,8 +3161,8 @@ class AdminOrdersControllerCore extends AdminController
/*$totalProductPriceBeforeTE = $order_detail->total_price_tax_excl;
$totalProductPriceBeforeTI = $order_detail->total_price_tax_incl;*/
// by webkul to calculate rates of the product from hotelreservation syatem tables with feature prices....
/* $hotelCartBookingData = new HotelCartBookingData();
$roomTypesByIdProduct = $hotelCartBookingData->getCartInfoIdCartIdProduct($this->id, $product['id_product']);*/
/* $hotelCartBookingData = new HotelCartBookingData();
$roomTypesByIdProduct = $hotelCartBookingData->getCartInfoIdCartIdProduct($this->id, $product['id_product']);*/
/*This code below to alter the values in the order detail table*/
//$diff_products_tax_incl = $order_detail->unit_price_tax_incl * $product_quantity;
@@ -3123,7 +3253,7 @@ class AdminOrdersControllerCore extends AdminController
$htl_refund_info = new HotelOrderRefundInfo();
$delete_room_refunf_info = $htl_refund_info->deleteOrderedRoomRefundInfo($id_order, $id_product, $date_from, $date_to);
/*END*/
//Update Order Info in Customer Advance payment table
//Update Order Info in Customer Advance payment table
$obj_customer_adv = new HotelCustomerAdvancedPayment($id_order);
$obj_customer_adv->updateAdvancePaymentInfoOnOrderEdit($id_order);
/*End*/
@@ -3271,7 +3401,6 @@ class AdminOrdersControllerCore extends AdminController
'result' => false,
'error' => Tools::displayError('This product is no longer in stock with those attributes ')
)));
}
}
}
@@ -3321,11 +3450,11 @@ class AdminOrdersControllerCore extends AdminController
if (Configuration::get('PS_ADVANCED_STOCK_MANAGEMENT') && $product->advanced_stock_management && $order_detail->id_warehouse != 0) {
$manager = StockManagerFactory::getManager();
$movements = StockMvt::getNegativeStockMvts(
$order_detail->id_order,
$order_detail->product_id,
$order_detail->product_attribute_id,
$quantity_to_reinject
);
$order_detail->id_order,
$order_detail->product_id,
$order_detail->product_attribute_id,
$quantity_to_reinject
);
$left_to_reinject = $quantity_to_reinject;
foreach ($movements as $movement) {
if ($left_to_reinject > $movement['physical_quantity']) {
@@ -3335,37 +3464,26 @@ class AdminOrdersControllerCore extends AdminController
$left_to_reinject -= $quantity_to_reinject;
if (Pack::isPack((int)$product->id)) {
// Gets items
if ($product->pack_stock_type == 1 || $product->pack_stock_type == 2 || ($product->pack_stock_type == 3 && Configuration::get('PS_PACK_STOCK_TYPE') > 0)) {
$products_pack = Pack::getItems((int)$product->id, (int)Configuration::get('PS_LANG_DEFAULT'));
// Foreach item
foreach ($products_pack as $product_pack) {
if ($product_pack->advanced_stock_management == 1) {
$manager->addProduct(
$product_pack->id,
$product_pack->id_pack_product_attribute,
new Warehouse($movement['id_warehouse']),
$product_pack->pack_quantity * $quantity_to_reinject,
null,
$movement['price_te'],
true
);
}
if ($product->pack_stock_type == 1 || $product->pack_stock_type == 2 || ($product->pack_stock_type == 3 && Configuration::get('PS_PACK_STOCK_TYPE') > 0)) {
$products_pack = Pack::getItems((int)$product->id, (int)Configuration::get('PS_LANG_DEFAULT'));
// Foreach item
foreach ($products_pack as $product_pack) {
if ($product_pack->advanced_stock_management == 1) {
$manager->addProduct(
$product_pack->id,
$product_pack->id_pack_product_attribute,
new Warehouse($movement['id_warehouse']),
$product_pack->pack_quantity * $quantity_to_reinject,
null,
$movement['price_te'],
true
);
}
}
}
if ($product->pack_stock_type == 0 || $product->pack_stock_type == 2 ||
($product->pack_stock_type == 3 && (Configuration::get('PS_PACK_STOCK_TYPE') == 0 || Configuration::get('PS_PACK_STOCK_TYPE') == 2))) {
$manager->addProduct(
$order_detail->product_id,
$order_detail->product_attribute_id,
new Warehouse($movement['id_warehouse']),
$quantity_to_reinject,
null,
$movement['price_te'],
true
);
}
} else {
$manager->addProduct(
$order_detail->product_id,
$order_detail->product_attribute_id,
new Warehouse($movement['id_warehouse']),
@@ -3374,6 +3492,17 @@ class AdminOrdersControllerCore extends AdminController
$movement['price_te'],
true
);
}
} else {
$manager->addProduct(
$order_detail->product_id,
$order_detail->product_attribute_id,
new Warehouse($movement['id_warehouse']),
$quantity_to_reinject,
null,
$movement['price_te'],
true
);
}
}
@@ -3384,11 +3513,11 @@ class AdminOrdersControllerCore extends AdminController
StockAvailable::synchronize($id_product);
} elseif ($order_detail->id_warehouse == 0) {
StockAvailable::updateQuantity(
$order_detail->product_id,
$order_detail->product_attribute_id,
$quantity_to_reinject,
$order_detail->id_shop
);
$order_detail->product_id,
$order_detail->product_attribute_id,
$quantity_to_reinject,
$order_detail->id_shop
);
if ($delete) {
$order_detail->delete();
@@ -3477,7 +3606,7 @@ class AdminOrdersControllerCore extends AdminController
die(Tools::jsonEncode($result));
}
// To show rooms extra demands in the modal box
// To show rooms extra demands in the modal box in order details view page
public function ajaxProcessGetRoomTypeBookingDemands()
{
$extraDemandsTpl = '';
@@ -3497,7 +3626,7 @@ class AdminOrdersControllerCore extends AdminController
)) {
$objOrder = new Order($idOrder);
$this->context->smarty->assign(
array (
array(
'extraDemands' => $extraDemands,
'orderCurrency' => $objOrder->id_currency
)
@@ -3509,4 +3638,72 @@ class AdminOrdersControllerCore extends AdminController
}
die($extraDemandsTpl);
}
// Process to get extra demands of any room while order creation process form.tpl
public function ajaxProcessGetRoomTypeCartDemands()
{
$extraDemandsTpl = '';
if ($idProduct = Tools::getValue('id_product')) {
if (($dateFrom = Tools::getValue('date_from'))
&& ($dateTo = Tools::getValue('date_to'))
&& ($idRoom = Tools::getValue('id_room'))
&& ($idCart = Tools::getValue('id_cart'))
) {
$objCartBookingData = new HotelCartBookingData();
if ($selectedRoomDemands = $objCartBookingData->getCartExtraDemands(
$idCart,
$idProduct,
$idRoom,
$dateFrom,
$dateTo
)) {
// get room type additional demands
$objRoomDemands = new HotelRoomTypeDemand();
if ($roomTypeDemands = $objRoomDemands->getRoomTypeDemands($idProduct)) {
foreach ($roomTypeDemands as &$demand) {
// if demand has advance options then set demand price as first advance option price.
if (isset($demand['adv_option']) && $demand['adv_option']) {
$demand['price'] = current($demand['adv_option'])['price'];
}
}
foreach ($selectedRoomDemands as &$selectedDemand) {
$objRoom = new HotelRoomInformation($selectedDemand['id_room']);
$selectedDemand['room_num'] = $objRoom->room_num;
if (isset($selectedDemand['extra_demands']) && $selectedDemand['extra_demands']) {
$extraDmd = array();
foreach ($selectedDemand['extra_demands'] as $sDemand) {
$selectedDemand['selected_global_demands'][] = $sDemand['id_global_demand'];
$extraDmd[$sDemand['id_global_demand'].'-'.$sDemand['id_option']] = $sDemand;
}
$selectedDemand['extra_demands'] = $extraDmd;
}
}
$this->context->smarty->assign('roomTypeDemands', $roomTypeDemands);
$this->context->smarty->assign('selectedRoomDemands', $selectedRoomDemands);
$extraDemandsTpl .= $this->context->smarty->fetch(
_PS_ADMIN_DIR_.'/themes/default/template/controllers/orders/_cart_booking_demands.tpl'
);
}
}
}
}
die($extraDemandsTpl);
}
// Process when admin changes extra demands of any room while order creation process form.tpl
public function ajaxProcessChangeRoomDemands()
{
if ($idCartBooking = Tools::getValue('id_cart_booking')) {
if (Validate::isLoadedObject($objCartbookingCata = new HotelCartBookingData($idCartBooking))) {
$roomDemands = Tools::getValue('room_demands');
$roomDemands = Tools::jsonDecode($roomDemands, true);
$roomDemands = Tools::jsonEncode($roomDemands);
$objCartbookingCata->extra_demands = $roomDemands;
if ($objCartbookingCata->save()) {
die('1');
}
}
}
die('0');
}
}

View File

@@ -76,6 +76,14 @@ class AdminProductsControllerCore extends AdminController
if (!Tools::getValue('id_product')) {
$this->multishop_context_group = false;
}
$this->context = Context::getContext();
// START send access query information to the admin controller
$this->access_select = ' SELECT a.`id_product` FROM '._DB_PREFIX_.'product a';
$this->access_join = ' INNER JOIN '._DB_PREFIX_.'htl_room_type hrt ON (hrt.id_product = a.id_product)';
if ($acsHtls = HotelBranchInformation::getProfileAccessedHotels($this->context->employee->id_profile, 1, 1)) {
$this->access_where = ' WHERE hrt.id_hotel IN ('.implode(',', $acsHtls).')';
}
parent::__construct();
@@ -256,19 +264,6 @@ class AdminProductsControllerCore extends AdminController
'search' => false
);
//By webkul ..need not to show quantity of the product
/*if (Configuration::get('PS_STOCK_MANAGEMENT')) {
$this->fields_list['sav_quantity'] = array(
'title' => $this->l('Quantity'),
'type' => 'int',
'align' => 'text-right',
'filter_key' => 'sav!quantity',
'orderby' => true,
'badge_danger' => true,
//'hint' => $this->l('This is the quantity available in the current shop/group.'),
);
}*/
$this->fields_list['active'] = array(
'title' => $this->l('Status'),
'active' => 'status',
@@ -3341,9 +3336,7 @@ class AdminProductsControllerCore extends AdminController
}
}
}
}
if (!count($disableDates)) {
} else {
$this->errors[] = Tools::displayError('Please add dates for status temporary disable.');
}
}
@@ -3392,10 +3385,11 @@ class AdminProductsControllerCore extends AdminController
}
}
//validate room status
$disableDtsArr = array();
foreach ($room_status as $key => $status) {
if ($status == 3) {
$disableDatesArray = Tools::jsonDecode($disable_dates[$key], true);
$this->validateDisableDateRanges($disableDatesArray);
$disableDtsArr[$key] = Tools::jsonDecode($disable_dates[$key], true);
$this->validateDisableDateRanges($disableDtsArr[$key]);
}
}
}
@@ -3452,16 +3446,18 @@ class AdminProductsControllerCore extends AdminController
$objRoomInfo->comment = $room_comment[$key];
if ($objRoomInfo->save()) {
if ($room_status[$key] == 3) {
if ($disableDatesArray) {
$objRoomDisableDates = new HotelRoomDisableDates();
$objRoomDisableDates->deleteRoomDisableDates($objRoomInfo->id);
foreach ($disableDatesArray as $disableDateRange) {
$objRoomDisableDates->id_room_type = $id_product;
$objRoomDisableDates->id_room = $objRoomInfo->id;
$objRoomDisableDates->date_from = $disableDateRange['date_from'];
$objRoomDisableDates->date_to = $disableDateRange['date_to'];
$objRoomDisableDates->reason = $disableDateRange['reason'];
$objRoomDisableDates->add();
$objDisDts = new HotelRoomDisableDates();
$objDisDts->deleteRoomDisableDates($objRoomInfo->id);
if (isset($disableDtsArr[$key]) && $disableDtsArr[$key]) {
// delete privious save dats
foreach ($disableDtsArr[$key] as $disDtRange) {
$objDisDts = new HotelRoomDisableDates();
$objDisDts->id_room_type = $id_product;
$objDisDts->id_room = $objRoomInfo->id;
$objDisDts->date_from = $disDtRange['date_from'];
$objDisDts->date_to = $disDtRange['date_to'];
$objDisDts->reason = $disDtRange['reason'];
$objDisDts->add();
}
}
}
@@ -3476,10 +3472,14 @@ class AdminProductsControllerCore extends AdminController
public function ajaxProcessDeleteHotelRoom()
{
$idRoom = Tools::getValue('id');
$objRoomInfo = new HotelRoomInformation((int)$idRoom);
die($objRoomInfo->delete());
if ($this->tabAccess['edit'] == 1) {
$idRoom = Tools::getValue('id');
$objRoomInfo = new HotelRoomInformation((int)$idRoom);
if ($objRoomInfo->delete()) {
die('1');
}
}
die('0');
}
/**
@@ -3526,10 +3526,11 @@ class AdminProductsControllerCore extends AdminController
$bookingParams['only_active_roomtype'] = 0;
$booking_data = $obj_booking_dtl->getBookingData($bookingParams);
$bookingParams['for_calendar'] = 1;
while ($start_date <= $last_date) {
$cal_date_from = $start_date;
$cal_date_to = date('Y-m-d', strtotime($cal_date_from) + 86400);
$cal_date_to = date('Y-m-d', strtotime('+1 day', strtotime($cal_date_from)));
$booking_calendar_data[$cal_date_from] = $obj_booking_dtl->getBookingData($bookingParams);
// if product is inactive then booking_details will be false
@@ -3539,8 +3540,7 @@ class AdminProductsControllerCore extends AdminController
$booking_calendar_data[$cal_date_from]['stats']['num_unavail'] = 0;
$booking_calendar_data[$cal_date_from]['stats']['num_booked'] = 0;
}
$start_date = date('Y-m-d', strtotime($start_date)+ 86400);
$start_date = date('Y-m-d', strtotime('+1 day', strtotime($start_date)));
}
if (isset($search_flag) && $search_flag) {
if ($booking_data['stats']['num_avail'] > 0) {
@@ -4128,8 +4128,8 @@ class AdminProductsControllerCore extends AdminController
if (!$specific_price['id_shop'] || in_array($specific_price['id_shop'], Shop::getContextListShopID())) {
$content .= '
<tr '.($i % 2 ? 'class="alt_row"' : '').'>
<td>'.$rule_name.'</td>
<td>'.$attributes_name.'</td>';
<td>'.$rule_name.'</td>';
// <td>'.$attributes_name.'</td>';
$can_delete_specific_prices = true;
if (Shop::isFeatureActive()) {

View File

@@ -57,7 +57,7 @@ class AdminProfilesControllerCore extends AdminController
),
'name' => array('title' => $this->l('Name'))
);
$this->identifier = 'id_profile';
$this->fields_form = array(
@@ -112,7 +112,7 @@ class AdminProfilesControllerCore extends AdminController
'icon' => 'process-icon-new'
);
}
parent::initPageHeaderToolbar();
}
}

View File

@@ -269,41 +269,56 @@ class CartControllerCore extends FrontController
$id_cart = $this->context->cart->id;
$id_guest = $this->context->cart->id_guest;
/*
* By Webkul
* This code is to check available quantity of Room before adding it to cart.
*/
// By Webkul : This code is to check available quantity of Room before adding it to cart.
if (Module::isInstalled('hotelreservationsystem') && Module::isEnabled('hotelreservationsystem')) {
require_once _PS_MODULE_DIR_.'hotelreservationsystem/define.php';
$obj_booking_detail = new HotelBookingDetail();
$num_days = $obj_booking_detail->getNumberOfDays($date_from, $date_to);
$req_rm = $this->qty;
$this->qty = $this->qty * (int) $num_days;
$obj_room_type = new HotelRoomType();
$room_info_by_id_product = $obj_room_type->getRoomTypeInfoByIdProduct($this->id_product);
if ($room_info_by_id_product) {
$id_hotel = $room_info_by_id_product['id_hotel'];
if ($id_hotel) {
/*Check Order restrict condition before adding in to cart*/
$max_order_date = HotelOrderRestrictDate::getMaxOrderDate($id_hotel);
if ($max_order_date) {
$max_order_date = date('Y-m-d', strtotime($max_order_date));
if ($max_order_date < $date_from || $max_order_date < $date_to) {
$this->errors[] = Tools::displayError('You can\'t Book room after date '.$max_order_date);
$objRoomType = new HotelRoomType();
if ($roomTypeInfo = $objRoomType->getRoomTypeInfoByIdProduct($this->id_product)) {
if ($id_hotel = $roomTypeInfo['id_hotel']) {
if (strtotime($date_from) < strtotime(date('Y-m-d'))) {
$this->errors[] = Tools::displayError('You can\'t book room before current date');
} elseif (strtotime($date_from) >= strtotime($date_to)) {
$this->errors[] = Tools::displayError('Check-out date must be after check-in date');
} elseif ($maxOrdDate = HotelOrderRestrictDate::getMaxOrderDate($id_hotel)) {
// Check Order restrict condition before adding in to cart
if (strtotime($maxOrdDate) < strtotime($date_from)
|| strtotime($maxOrdDate) < strtotime($date_to)
) {
$maxOrdDate = date('d-m-Y', strtotime($maxOrdDate));
$this->errors[] = Tools::displayError('You can\'t book room after date '.$maxOrdDate);
}
}
/*END*/
$obj_booking_dtl = new HotelBookingDetail();
$hotel_room_data = $obj_booking_dtl->DataForFrontSearch($date_from, $date_to, $id_hotel, $this->id_product, 1, 0, 0, -1, 0, 0, $id_cart, $id_guest);
$total_available_rooms = $hotel_room_data['stats']['num_avail'];
if ($total_available_rooms < $req_rm) {
die(Tools::jsonEncode(array('status' => 'unavailable_quantity', 'avail_rooms' => $total_available_rooms)));
if (!$this->errors) {
$objBookingDtl = new HotelBookingDetail();
$num_days = $objBookingDtl->getNumberOfDays($date_from, $date_to);
$req_rm = $this->qty;
$this->qty = $this->qty * (int) $num_days;
$obj_booking_dtl = new HotelBookingDetail();
if ($hotel_room_data = $obj_booking_dtl->DataForFrontSearch(
$date_from,
$date_to,
$id_hotel,
$this->id_product,
1,
0,
0,
-1,
0,
0,
$id_cart,
$id_guest
)) {
if (isset($hotel_room_data['stats']['num_avail'])) {
$total_available_rooms = $hotel_room_data['stats']['num_avail'];
if ($total_available_rooms < $req_rm) {
die(Tools::jsonEncode(array('status' => 'unavailable_quantity', 'avail_rooms' => $total_available_rooms)));
}
} else {
$this->errors[] = Tools::displayError('Rooms are unavailable. Please try with different dates');
}
} else {
$this->errors[] = Tools::displayError('Rooms are unavailable. Please try with different dates');
}
}
} else {
die(Tools::jsonEncode(array('status' => 'failed3')));

View File

@@ -272,7 +272,10 @@ class CategoryControllerCore extends FrontController
$obj_booking_dtl = new HotelBookingDetail();
$booking_data = $obj_booking_dtl->DataForFrontSearch($date_from, $date_to, $id_hotel, 0, 0, $adult, $child, $ratting, $amenities, $price, $id_cart, $id_guest);
if (isset($booking_data['rm_data']) && $booking_data['rm_data']) {
// reset array keys from 0
$booking_data['rm_data'] = array_values($booking_data['rm_data']);
}
if ($sort_by && $sort_value) {
$indi_arr = array();
@@ -281,7 +284,6 @@ class CategoryControllerCore extends FrontController
} elseif ($sort_value == 2) {
$direction = SORT_DESC;
}
foreach ($booking_data['rm_data'] as $s_k => $s_v) {
if ($sort_by == 1) {
$indi_arr[$s_k] = $s_v['ratting'];

View File

@@ -122,14 +122,28 @@ class GuestTrackingControllerCore extends FrontController
&& ($dateTo = Tools::getValue('date_to'))
) {
$objBookingDemand = new HotelBookingDemands();
$order = new Order($idOrder);
$customer = new Customer((int)$order->id_customer);
$useTax = 0;
if (Group::getPriceDisplayMethod($customer->id_default_group) == PS_TAX_INC) {
$useTax = 1;
}
if ($extraDemands = $objBookingDemand->getRoomTypeBookingExtraDemands(
$idOrder,
$idProduct,
0,
$dateFrom,
$dateTo
$dateTo,
1,
0,
$useTax
)) {
$this->context->smarty->assign('extraDemands', $extraDemands);
$this->context->smarty->assign(
array(
'useTax' => $useTax,
'extraDemands' => $extraDemands,
)
);
$extraDemandsTpl .= $this->context->smarty->fetch(_PS_THEME_DIR_.'_partials/order_booking_demands.tpl');
}
}
@@ -212,7 +226,8 @@ class GuestTrackingControllerCore extends FrontController
// enter the details of the booking the order
if ($hotelresInstalled) {
if ($orderProducts = $order->getProducts()) {
$total_demands_price = 0;
$total_demands_price_te = 0;
$total_demands_price_ti = 0;
foreach ($orderProducts as $type_key => $type_value) {
if (in_array($type_value['product_id'], $processedProducts)) {
continue;
@@ -303,19 +318,36 @@ class GuestTrackingControllerCore extends FrontController
$data_v['date_from'],
$data_v['date_to']
);
if (empty($cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price'])) {
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price'] = 0;
if (empty($cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'])) {
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = 0;
}
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price'] += $extraDemandPrice = $objBookingDemand->getRoomTypeBookingExtraDemands(
$extraDemandPriceTI = $objBookingDemand->getRoomTypeBookingExtraDemands(
$idOrder,
$type_value['product_id'],
$data_v['id_room'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
$total_demands_price += $extraDemandPrice;
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] += $extraDemandPriceTI;
if (empty($cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_te'])) {
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = 0;
}
$extraDemandPriceTE = $objBookingDemand->getRoomTypeBookingExtraDemands(
$idOrder,
$type_value['product_id'],
0,
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] += $extraDemandPriceTE;
$total_demands_price_ti += $extraDemandPriceTI;
$total_demands_price_te += $extraDemandPriceTE;
$cartHotelData[$type_key]['date_diff'][$date_join]['product_price_tax_excl'] = $order_details_obj->unit_price_tax_excl;
$cartHotelData[$type_key]['date_diff'][$date_join]['product_price_tax_incl'] = $order_details_obj->unit_price_tax_incl;
$cartHotelData[$type_key]['date_diff'][$date_join]['product_price_without_reduction_tax_excl'] = $order_details_obj->unit_price_tax_excl + $order_details_obj->reduction_amount_tax_excl;
@@ -346,7 +378,8 @@ class GuestTrackingControllerCore extends FrontController
$this->context->smarty->assign(
array(
'total_demands_price' => $total_demands_price,
'total_demands_price_ti' => $total_demands_price_ti,
'total_demands_price_te' => $total_demands_price_te,
'any_back_order' => $anyBackOrder,
'shw_bo_msg' => Configuration::get('WK_SHOW_MSG_ON_BO'),
'back_ord_msg' => Configuration::get('WK_BO_MESSAGE'),
@@ -372,7 +405,8 @@ class GuestTrackingControllerCore extends FrontController
'CUSTOMIZE_FILE' => Product::CUSTOMIZE_FILE,
'CUSTOMIZE_TEXTFIELD' => Product::CUSTOMIZE_TEXTFIELD,
'use_tax' => Configuration::get('PS_TAX'),
));
'guestInformations' => (array)$customer,
));
}
public function setMedia()

View File

@@ -115,7 +115,8 @@ class OrderConfirmationControllerCore extends FrontController
$any_back_order = 0;
$processed_product = array();
$orderTotalInfo = array();
$orderTotalInfo['total_demands_price'] = 0;
$orderTotalInfo['total_demands_price_te'] = 0;
$orderTotalInfo['total_demands_price_ti'] = 0;
$orderTotalInfo['total_products_te'] = 0;
$orderTotalInfo['total_products_ti'] = 0;
$orderTotalInfo['total_discounts'] = 0;
@@ -219,19 +220,36 @@ class OrderConfirmationControllerCore extends FrontController
$data_v['date_from'],
$data_v['date_to']
);
if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'])) {
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'] = 0;
if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'])) {
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = 0;
}
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price'] += $extraDemandPrice = $objBookingDemand->getRoomTypeBookingExtraDemands(
$extraDemandPriceTI = $objBookingDemand->getRoomTypeBookingExtraDemands(
$idOrder,
$type_value['product_id'],
$data_v['id_room'],
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
$orderTotalInfo['total_demands_price'] += $extraDemandPrice;
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] += $extraDemandPriceTI;
if (empty($cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'])) {
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = 0;
}
$extraDemandPriceTE = $objBookingDemand->getRoomTypeBookingExtraDemands(
$idOrder,
$type_value['product_id'],
$data_v['id_room'],
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$cart_htl_data[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] += $extraDemandPriceTE;
$orderTotalInfo['total_demands_price_ti'] += $extraDemandPriceTI;
$orderTotalInfo['total_demands_price_te'] += $extraDemandPriceTE;
$cart_htl_data[$type_key]['date_diff'][$date_join]['product_price_tax_excl'] = $order_details_obj->unit_price_tax_excl;
$cart_htl_data[$type_key]['date_diff'][$date_join]['product_price_tax_incl'] = $order_details_obj->unit_price_tax_incl;
$cart_htl_data[$type_key]['date_diff'][$date_join]['product_price_without_reduction_tax_excl'] = $order_details_obj->unit_price_tax_excl + $order_details_obj->reduction_amount_tax_excl;

View File

@@ -172,14 +172,27 @@ class OrderDetailControllerCore extends FrontController
&& ($dateTo = Tools::getValue('date_to'))
) {
$objBookingDemand = new HotelBookingDemands();
$useTax = 0;
$customer = Context::getContext()->customer;
if (Group::getPriceDisplayMethod($customer->id_default_group) == PS_TAX_INC) {
$useTax = 1;
}
if ($extraDemands = $objBookingDemand->getRoomTypeBookingExtraDemands(
$idOrder,
$idProduct,
0,
$dateFrom,
$dateTo
$dateTo,
1,
0,
$useTax
)) {
$this->context->smarty->assign('extraDemands', $extraDemands);
$this->context->smarty->assign(
array(
'useTax' => $useTax,
'extraDemands' => $extraDemands,
)
);
$extraDemandsTpl .= $this->context->smarty->fetch(_PS_THEME_DIR_.'_partials/order_booking_demands.tpl');
}
}
@@ -370,7 +383,8 @@ class OrderDetailControllerCore extends FrontController
if ($hotelresInstalled) {
if (!empty($products)) {
$total_demands_price = 0;
$total_demands_price_te = 0;
$total_demands_price_ti = 0;
foreach ($products as $type_key => $type_value) {
if (in_array($type_value['product_id'], $processedProducts)) {
continue;
@@ -437,7 +451,6 @@ class OrderDetailControllerCore extends FrontController
$cartHotelData[$type_key]['date_diff'][$date_join]['stage_name'] = $stage_name;
} else {
$num_days = $objBookingDetail->getNumberOfDays($data_v['date_from'], $data_v['date_to']);
$cartHotelData[$type_key]['date_diff'][$date_join]['num_rm'] = 1;
$cartHotelData[$type_key]['date_diff'][$date_join]['data_form'] = $data_v['date_from'];
$cartHotelData[$type_key]['date_diff'][$date_join]['data_to'] = $data_v['date_to'];
@@ -461,19 +474,34 @@ class OrderDetailControllerCore extends FrontController
$data_v['date_from'],
$data_v['date_to']
);
if (empty($cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price'])) {
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price'] = 0;
if (empty($cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'])) {
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] = 0;
}
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price'] += $extraDemandPrice = $objBookingDemand->getRoomTypeBookingExtraDemands(
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_ti'] += $extraDemandPriceTI = $objBookingDemand->getRoomTypeBookingExtraDemands(
$id_order,
$type_value['product_id'],
$data_v['id_room'],
$data_v['date_from'],
$data_v['date_to'],
0,
1,
1
);
$total_demands_price += $extraDemandPrice;
if (empty($cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_te'])) {
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] = 0;
}
$cartHotelData[$type_key]['date_diff'][$date_join]['extra_demands_price_te'] += $extraDemandPriceTE = $objBookingDemand->getRoomTypeBookingExtraDemands(
$id_order,
$type_value['product_id'],
$data_v['id_room'],
$data_v['date_from'],
$data_v['date_to'],
0,
1,
0
);
$total_demands_price_ti += $extraDemandPriceTI;
$total_demands_price_te += $extraDemandPriceTE;
$cartHotelData[$type_key]['date_diff'][$date_join]['product_price_tax_excl'] = $order_details_obj->unit_price_tax_excl;
$cartHotelData[$type_key]['date_diff'][$date_join]['product_price_tax_incl'] = $order_details_obj->unit_price_tax_incl;
$cartHotelData[$type_key]['date_diff'][$date_join]['product_price_without_reduction_tax_excl'] = $order_details_obj->unit_price_tax_excl + $order_details_obj->reduction_amount_tax_excl;
@@ -498,7 +526,8 @@ class OrderDetailControllerCore extends FrontController
$orderAdvDetail = $objCustomerAdv->getCstAdvPaymentDtlByIdOrder($order->id);
$this->context->smarty->assign(
array(
'total_demands_price' => $total_demands_price,
'total_demands_price_ti' => $total_demands_price_ti,
'total_demands_price_te' => $total_demands_price_te,
'any_back_order' => $anyBackOrder,
'shw_bo_msg' => Configuration::get('WK_SHOW_MSG_ON_BO'),
'back_ord_msg' => Configuration::get('WK_BO_MESSAGE'),
@@ -516,6 +545,7 @@ class OrderDetailControllerCore extends FrontController
array(
'shop_name' => strval(Configuration::get('PS_SHOP_NAME')),
'order' => $order,
'guestInformations' => (array)new Customer($order->id_customer),
'return_allowed' => (int) $order->isReturnable(),
'currency' => new Currency($order->id_currency),
'order_state' => (int) $id_order_state,

View File

@@ -414,21 +414,18 @@ class OrderOpcControllerCore extends ParentOrderController
$this->context->smarty->assign('checkout_process_steps', $this->checkoutProcess->getSteps());
// set room type demands
$objCartBookingData = new HotelCartBookingData();
$objGlobalDemand = new HotelRoomTypeGlobalDemand();
$allDemands = $objGlobalDemand->getAllDemands();
$objCurrency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));
// get room type additional services
$objRoomDemand = new HotelRoomTypeDemand();
$this->context->smarty->assign(
array (
'allDemands' => $allDemands,
'defaultcurrencySign' => $objCurrency->sign,
)
);
$totalFacilityCostTI = $objCartBookingData->getCartExtraDemands($this->context->cart->id, 0, 0, 0, 0, 1, 0, 1);
$totalFacilityCostTE = $objCartBookingData->getCartExtraDemands($this->context->cart->id, 0, 0, 0, 0, 1, 0, 0);
$this->context->smarty->assign(
array(
'additional_facilities_tax' => ($totalFacilityCostTI - $totalFacilityCostTE),
'totalFacilityCostTE' => $totalFacilityCostTE,
'allDemands' => $allDemands,
'defaultcurrencySign' => $objCurrency->sign,
'THEME_DIR' => _THEME_DIR_,
'PS_CUSTOMER_ADDRESS_CREATION' => Configuration::get('PS_CUSTOMER_ADDRESS_CREATION'),
'free_shipping' => $free_shipping,
@@ -487,8 +484,8 @@ class OrderOpcControllerCore extends ParentOrderController
$id_product = Tools::getValue('id_product');
$date_from = Tools::getValue('date_from');
$date_to = Tools::getValue('date_to');
$obj_cart_bk_data = new HotelCartBookingData();
if ($cart_data_dlt = $obj_cart_bk_data->deleteRoomDataFromOrderLine(
$objCartBookingData = new HotelCartBookingData();
if ($cart_data_dlt = $objCartBookingData->deleteRoomDataFromOrderLine(
$this->context->cart->id,
$this->context->cart->id_guest,
$id_product,
@@ -505,8 +502,6 @@ class OrderOpcControllerCore extends ParentOrderController
} else {
if (Module::isInstalled('hotelreservationsystem')) {
require_once _PS_MODULE_DIR_.'hotelreservationsystem/define.php';
$obj_cart_bk_data = new HotelCartBookingData();
$obj_htl_bk_dtl = new HotelBookingDetail();
$obj_rm_type = new HotelRoomType();
@@ -516,7 +511,7 @@ class OrderOpcControllerCore extends ParentOrderController
$cartChanged = false;
foreach ($htl_rm_types as $t_key => $t_value) {
$rm_dtl = $obj_rm_type->getRoomTypeInfoByIdProduct($t_value['id_product']);
$cart_bk_data = $obj_cart_bk_data->getOnlyCartBookingData($this->context->cart->id, $this->context->cart->id_guest, $t_value['id_product']);
$cart_bk_data = $objCartBookingData->getOnlyCartBookingData($this->context->cart->id, $this->context->cart->id_guest, $t_value['id_product']);
$cart_data = array();
foreach ($cart_bk_data as $cd_key => $cd_val) {
@@ -544,7 +539,7 @@ class OrderOpcControllerCore extends ParentOrderController
'date_from' => $cl_val['date_from'],
'date_to' => $cl_val['date_to'],
);
$iscartdlt = $obj_cart_bk_data->deleteRowByCartBookingData($cartData);
$iscartdlt = $objCartBookingData->deleteRowByCartBookingData($cartData);
if ($iscartdlt) {
$nbDays = $obj_htl_bk_dtl->getNumberOfDays($cl_val['date_from'], $cl_val['date_to']);
$this->context->cart->updateQty($nbDays, $t_value['id_product'], null, false, 'down');
@@ -625,18 +620,6 @@ class OrderOpcControllerCore extends ParentOrderController
$this->context->smarty->assign('advance_payment_active', $advance_payment_active);
}
}
// total price of extra demands in the cart
$objCartBookingData = new HotelCartBookingData();
if ($totalDemandsPrice = $objCartBookingData->getCartExtraDemands(
$this->context->cart->id,
0,
0,
0,
0,
1
)) {
$this->context->smarty->assign('totalDemandsPrice', $totalDemandsPrice);
}
}
/*Check Order restrict condition before Payment by the customer*/
if (Module::isInstalled('hotelreservationsystem') && Module::isEnabled('hotelreservationsystem')) {

View File

@@ -169,7 +169,7 @@ class ParentOrderControllerCore extends FrontController
{
// For Advanced Payment (when advance paid amount will be zero when voucher will be applied)
$freeAdvancePaymentOrder = false;
if (Module::isInstalled('hotelreservationsystem'))
if (Module::isInstalled('hotelreservationsystem'))
{
require_once (_PS_MODULE_DIR_.'hotelreservationsystem/define.php');
$obj_adv_pmt = new HotelAdvancedPayment();

View File

@@ -355,7 +355,6 @@ class ProductControllerCore extends FrontController
$num_days = $obj_booking_detail->getNumberOfDays($date_from, $date_to);
//$price_tax_incl = Product::getPriceStatic($this->product->id, HotelBookingDetail::useTax());
//$total_price = $price_tax_incl * $num_days;
//
//// By webkul New way to calculate product prices with feature Prices
$roomTypeDateRangePrice = HotelRoomTypeFeaturePricing::getRoomTypeTotalPrice($this->product->id, $date_from, $date_to);
if ($useTax) {
@@ -1035,13 +1034,17 @@ class ProductControllerCore extends FrontController
$objRoomDemandPrice = new HotelRoomTypeDemandPrice();
$demandsPrice = $objRoomDemandPrice->getRoomTypeDemandsTotalPrice(
$idProduct,
$roomDemand
$roomDemand,
$useTax,
$dateFrom,
$dateTo
);
$demandsPrice *= $quantity;
$totalPrice += $demandsPrice;
}
}
$result['msg'] = 'success';
$result['quantity'] = (int)$quantity;
$result['total_price'] = $totalPrice;
$result['total_room_price'] = $totalRoomPrice;
$result['extra_demand_price'] = $demandsPrice;

View File

@@ -110,10 +110,6 @@ UPDATE `PREFIX_hook_module` SET position = 1
WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocksearch')
AND id_hook = @id_hook;
UPDATE `PREFIX_hook_module` SET position = 2
WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blockcart')
AND id_hook = @id_hook;
UPDATE `PREFIX_hook_module` SET position = 3
WHERE id_module = (SELECT id_module FROM `PREFIX_module` WHERE name = 'blocktopmenu')
AND id_hook = @id_hook;

View File

@@ -323,6 +323,18 @@
<configuration id="PS_GUEST_CHECKOUT_ENABLED" name="PS_GUEST_CHECKOUT_ENABLED">
<value>0</value>
</configuration>
<configuration id="PS_ORDER_CONF_MAIL_TO_CUSTOMER" name="PS_ORDER_CONF_MAIL_TO_CUSTOMER">
<value>1</value>
</configuration>
<configuration id="PS_ORDER_CONF_MAIL_TO_SUPERADMIN" name="PS_ORDER_CONF_MAIL_TO_SUPERADMIN">
<value>1</value>
</configuration>
<configuration id="PS_ORDER_CONF_MAIL_TO_HOTEL_MANAGER" name="PS_ORDER_CONF_MAIL_TO_HOTEL_MANAGER">
<value>1</value>
</configuration>
<configuration id="PS_ORDER_CONF_MAIL_TO_EMPLOYEE" name="PS_ORDER_CONF_MAIL_TO_EMPLOYEE">
<value>1</value>
</configuration>
<configuration id="PS_DISPLAY_SUPPLIERS" name="PS_DISPLAY_SUPPLIERS">
<value>1</value>
</configuration>

View File

@@ -10,7 +10,7 @@
</fields>
<entities>
<theme id="default">
<name>hotel-theme</name>
<name>hotel-reservation-theme</name>
<directory>hotel-reservation-theme</directory>
<responsive>1</responsive>
<default_left_column>1</default_left_column>

View File

@@ -25,4 +25,4 @@
*/
define('_PS_INSTALL_VERSION_', '1.6.1.23');
define('_QLO_INSTALL_VERSION_', '1.4.0');
define('_QLO_INSTALL_VERSION_', '1.4.1');

View File

@@ -10,4 +10,4 @@ Adresse électronique : {email}
{shop_url} propulsé par PrestaShop™
{shop_url} propulsé par Webkul™

View File

@@ -7,4 +7,4 @@ E-mail : {email}
{shop_name} - {shop_url}
{shop_url} didukung oleh PrestaShop™
{shop_url} didukung oleh Webkul™

View File

@@ -7,4 +7,4 @@ E-mail: {email}
{shop_name} - {shop_url}
{shop_url} na silniku PrestaShop™
{shop_url} na silniku Webkul™

View File

@@ -10,4 +10,4 @@ Adresse électronique : {email}
{shop_url} propulsé par PrestaShop™
{shop_url} propulsé par Webkul™

View File

@@ -7,4 +7,4 @@ Adresa de e-mail: {email}
{shop_name} - {shop_url}
{shop_url} motorizat de PrestaShop™
{shop_url} motorizat de Webkul™

View File

@@ -7,4 +7,4 @@
{shop_name} - {shop_url}
{shop_url} под управлением PrestaShop™
{shop_url} под управлением Webkul™

View File

@@ -7,4 +7,4 @@
{shop_name} - {shop_url}
{shop_url} 是透過 PrestaShop™ 建置
{shop_url} 是透過 Webkul™ 建置

View File

@@ -645,7 +645,6 @@ class InstallModelInstall extends InstallAbstractModel
} else {
$modules = array(
'hotelreservationsystem',
'blocknavigationmenu',
'blocknewsletter',
'blocksocial',
'wkfooterblock',
@@ -658,14 +657,20 @@ class InstallModelInstall extends InstallAbstractModel
'wktestimonialblock',
'socialsharing',
'bankwire',
'blockcart',
'blockmyaccount',
'blockuserinfo',
'cheque',
'paypal',
'wkpaypaladaptive',
'blockmyaccount',
'blocklanguages',
'blockcurrencies',
'dashactivity',
'productcomments',
'wkfooterlangcurrencyblock',
'wkfooterpaymentinfoblockcontainer',
'wkfooteraboutblock',
'wkfooterpaymentblock',
'wkfooternotificationblock',
'blocknavigationmenu',
'dashactivity',
'dashtrends',
'dashgoals',
'dashproducts',
@@ -689,14 +694,9 @@ class InstallModelInstall extends InstallAbstractModel
'statsbestvouchers',
'statsbestcustomers',
'statsequipment',
'wkpaypaladaptive',
'wkfooterlangcurrencyblock',
'wkfooterexploreblock',
'wkfooterpaymentinfoblockcontainer',
'wkfooteraboutblock',
'wkfooterpaymentblock',
'wkfooternotificationblock',
);
'blockcart',
'blockuserinfo',
);
}
return $modules;
}

View File

@@ -44,7 +44,7 @@ function create_multistore()
$all_themes_dir = _PS_ROOT_DIR_.DIRECTORY_SEPARATOR.'themes';
$themes = scandir($all_themes_dir);
foreach ($themes as $theme) {
if (!is_file($all_themes_dir.DIRECTORY_SEPARATOR.$theme) && is_dir($all_themes_dir.DIRECTORY_SEPARATOR.$theme.DIRECTORY_SEPARATOR) && $theme[0] != '.' && $theme != 'prestashop' && $theme != 'hotel-theme') {
if (!is_file($all_themes_dir.DIRECTORY_SEPARATOR.$theme) && is_dir($all_themes_dir.DIRECTORY_SEPARATOR.$theme.DIRECTORY_SEPARATOR) && $theme[0] != '.' && $theme != 'prestashop' && $theme != 'hotel-reservation-theme') {
$res &= Db::getInstance()->execute('INSERT INTO '._DB_PREFIX_.'theme (name) VALUES("'.Db::getInstance()->escape($theme).'")');
}
}

View File

@@ -4,7 +4,7 @@ ALTER TABLE `PREFIX_theme` ADD `default_left_column` TINYINT( 1 ) NOT NULL DEFAU
ALTER TABLE `PREFIX_theme` ADD `default_right_column` TINYINT( 1 ) NOT NULL DEFAULT '1';
ALTER TABLE `PREFIX_theme` ADD `product_per_page` INT UNSIGNED NOT NULL;
ALTER TABLE `PREFIX_tab_lang` CHANGE `name` `name` VARCHAR(64) DEFAULT NULL;
ALTER TABLE `PREFIX_tab_lang` CHANGE `name` `name` VARCHAR(64) DEFAULT NULL;
ALTER TABLE `PREFIX_attachment` ADD `file_size` bigint(10) unsigned NOT NULL DEFAULT 0 AFTER `file_name`;
/* PHP:p1603_add_attachment_size(); */;
@@ -21,10 +21,10 @@ INSERT INTO `PREFIX_web_browser` (name) VALUES ('IE 11');
DELETE FROM `PREFIX_theme` WHERE `directory` = 'hotel-reservation-theme';
INSERT INTO `PREFIX_theme` (`name`, `directory`, `responsive`, `default_left_column`, `default_right_column`, `product_per_page`)
VALUES ('hotel-theme', 'hotel-reservation-theme', 1, 1, 0, 12);
VALUES ('hotel-reservation-theme', 'hotel-reservation-theme', 1, 1, 0, 12);
INSERT IGNORE INTO `PREFIX_theme_meta` ( `id_theme` , `id_meta` , `left_column` , `right_column` )
SELECT `PREFIX_theme`.`id_theme` , `PREFIX_meta`.`id_meta` , `default_left_column` , `default_right_column`
FROM `PREFIX_theme` , `PREFIX_meta`;
ALTER TABLE `PREFIX_import_match` ADD UNIQUE (`name` ( 32 ));

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -88,7 +88,7 @@
<p data-html-only="1" style="border-bottom:1px solid #D6D4D4;margin:3px 0 7px;text-transform:uppercase;font-weight:500;font-size:18px;padding-bottom:10px">
Your {shop_name} login details </p>
<span style="color:#777">
Here are your login details:<br />
Here are your login details:<br />
<span style="color:#333"><strong>E-mail address: <a href="mailto:{email}" style="color:#337ff1">{email}</a></strong></span><br />
<span style="color:#333"><strong>Password:</strong></span> {passwd}
</span>
@@ -139,7 +139,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,15 +1,15 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Thank you for creating a customer account at {shop_name}.
Thank you for creating a customer account at {shop_name}.
Here are your login details:
E-MAIL ADDRESS: {email}
PASSWORD: {passwd}
PASSWORD: {passwd}
Important Security Tips:
@@ -22,8 +22,8 @@ Important Security Tips:
* Should you suspect someone is using your account illegally, please
notify us immediately.
You can now place orders on our shop: {shop_name} [/{shop_url}]
You can now place orders on our shop: {shop_name} [/{shop_url}]
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -102,7 +102,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,12 +1,12 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
A new order has been generated on your behalf.
A new order has been generated on your behalf.
Please go on {order_link} [/{order_link}] to finalize the payment.
Please go on {order_link} [/{order_link}] to finalize the payment.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -86,7 +86,7 @@
<td style="padding:7px 0">
<font size="2" face="Open-sans, sans-serif" color="#555454">
<p data-html-only="1" style="border-bottom:1px solid #D6D4D4;margin:3px 0 7px;text-transform:uppercase;font-weight:500;font-size:18px;padding-bottom:10px">
Order {order_name}&nbsp;-&nbsp;Awaiting wire payment
Order {order_name}&nbsp;-&nbsp;Awaiting wire payment
</p>
<span style="color:#777">
Your order with the reference <span style="color:#333"><strong>{order_name}</strong></span> has been placed successfully and will be <strong>shipped as soon as we receive your payment</strong>. </span>
@@ -107,10 +107,10 @@
<td width="10" style="padding:7px 0">&nbsp;</td>
<td style="padding:7px 0">
<font size="2" face="Open-sans, sans-serif" color="#555454">
<p style="border-bottom:1px solid #D6D4D4;margin:3px 0 7px;text-transform:uppercase;font-weight:500;font-size:18px;padding-bottom:10px">
<p style="border-bottom:1px solid #D6D4D4;margin:3px 0 7px;text-transform:uppercase;font-weight:500;font-size:18px;padding-bottom:10px">
You have selected to pay by wire transfer. </p>
<span style="color:#777">
Here are the bank details for your transfer:<br />
Here are the bank details for your transfer:<br />
<span style="color:#333"><strong>Amount:</strong></span> {total_paid}<br />
<span style="color:#333"><strong>Account owner:</strong></span> {bankwire_owner}<br />
<span style="color:#333"><strong>Account details:</strong></span> {bankwire_details}<br />
@@ -148,7 +148,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,14 +1,14 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Thank you for shopping with {shop_name}!
Thank you for shopping with {shop_name}!
Your order with the reference {order_name} has been placed
successfully and will be SHIPPED AS SOON AS WE RECEIVE YOUR PAYMENT.
successfully and will be SHIPPED AS SOON AS WE RECEIVE YOUR PAYMENT.
You have selected to pay by wire transfer.
You have selected to pay by wire transfer.
Here are the bank details for your transfer:
@@ -18,15 +18,15 @@ ACCOUNT OWNER: {bankwire_owner}
ACCOUNT DETAILS: {bankwire_details}
BANK ADDRESS: {bankwire_address}
BANK ADDRESS: {bankwire_address}
You can review your order and download your invoice from the
"Order history" [/{history_url}] section of your customer account by
clicking "My account" [/{my_account_url}] on our shop.
clicking "My account" [/{my_account_url}] on our shop.
If you have a guest account, you can follow your order via the
"Guest Tracking" [/{guest_tracking_url}] section on our shop.
"Guest Tracking" [/{guest_tracking_url}] section on our shop.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -0,0 +1,71 @@
{if isset($list)}
<table class="table table-recap extra-demand-table">
<thead>
<tr>
<th colspan="3">{l s='Extra Demands Details'}</th>
</tr>
<tr>
<th>{l s='Room Type'}</th>
<th>{l s='Extra demand name'}</th>
<th>{l s='Total'} <br /> {l s='(Tax excl.)'}</th>
</tr>
</thead>
<tbody>
{if isset($list)}
{foreach from=$list key=data_k item=data_v}
{foreach from=$data_v['date_diff'] key=rm_k item=rm_v}
{if isset($rm_v['extra_demands']) && $rm_v['extra_demands']}
{assign var=roomCount value=1}
{foreach $rm_v['extra_demands'] as $roomDemand}
{foreach name=demandRow from=$roomDemand['extra_demands'] item=demand}
<tr>
{if $smarty.foreach.demandRow.first}
<td class="text-center" rowspan="{$roomDemand['extra_demands']|count}">
<font size="2" face="Open-sans, sans-serif" color="#555454">
{$data_v['name']}<br>
{$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}<br>
<strong>{l s='Room'} - {$roomCount}</strong>
</font>
</td>
{/if}
<td class="text-center">
<font size="2" face="Open-sans, sans-serif" color="#555454">
{$demand['name']}
</font>
</td>
<td class="text-center">
<font size="2" face="Open-sans, sans-serif" color="#555454">
{convertPrice price=$demand['total_price_tax_excl']}
</font>
</td>
</tr>
{/foreach}
{assign var=roomCount value=$roomCount+1}
{/foreach}
{/if}
{/foreach}
{/foreach}
{/if}
</tbody>
</table>
<style>
.extra-demand-table {
width:100%;
border-collapse:collapse;
padding:5px;
}
.extra-demand-table th {
border:1px solid #D6D4D4;
background-color: #fbfbfb;
color: #333;
font-family: Arial;
font-size: 13px;
padding: 7px 5px;
text-align:left;
}
.extra-demand-table td {
border:1px solid #D6D4D4;
padding:5px;
}
</style>
{/if}

View File

@@ -0,0 +1,40 @@
{if isset($list)}
{l s='Extra Demands Details'}
{l s='Room Type'}
{l s='Extra demand name'}
{l s='Total'} {l s='(Tax excl.)'}
{if isset($list)}
{foreach from=$list key=data_k item=data_v}
{foreach from=$data_v['date_diff'] key=rm_k item=rm_v}
{if isset($rm_v['extra_demands']) && $rm_v['extra_demands']}
{assign var=roomCount value=1}
{foreach $rm_v['extra_demands'] as $roomDemand}
{foreach name=demandRow from=$roomDemand['extra_demands'] item=demand}
{if $smarty.foreach.demandRow.first}
<td class="text-center" rowspan="{$roomDemand['extra_demands']|count}">
<font size="2" face="Open-sans, sans-serif" color="#555454">
{$data_v['name']}<br>
{$rm_v['data_form']|date_format:"%d-%m-%Y"} {l s='to'} {$rm_v['data_to']|date_format:"%d-%m-%Y"}<br>
<strong>{l s='Room'} - {$roomCount}</strong>
</font>
</td>
{/if}
<td class="text-center">
<font size="2" face="Open-sans, sans-serif" color="#555454">
{$demand['name']}
</font>
</td>
<td class="text-center">
<font size="2" face="Open-sans, sans-serif" color="#555454">
{convertPrice price=$demand['total_price_tax_excl']}
</font>
</td>
</tr>
{/foreach}
{assign var=roomCount value=$roomCount+1}
{/foreach}
{/if}
{/foreach}
{/foreach}
{/if}

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -112,7 +112,7 @@
Here are the bank details for your check:<br />
<span style="color:#333"><strong>Amount:</strong></span> {total_paid}<br />
<span style="color:#333"><strong>Payable to the order of:</strong></span> {cheque_name}<br />
<span style="color:#333"><strong>Please mail your check to:</strong></span> {cheque_address_html}
<span style="color:#333"><strong>Please mail your check to:</strong></span> {cheque_address_html}
</span>
</font>
</td>
@@ -147,7 +147,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,14 +1,14 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Thank you for shopping with {shop_name}!
Thank you for shopping with {shop_name}!
Your order with the reference {order_name} has been placed
successfully and will be SHIPPED AS SOON AS WE RECEIVE YOUR PAYMENT.
successfully and will be SHIPPED AS SOON AS WE RECEIVE YOUR PAYMENT.
You have selected to pay by check.
You have selected to pay by check.
Here are the bank details for your check:
@@ -16,15 +16,15 @@ AMOUNT: {total_paid}
PAYABLE TO THE ORDER OF: {cheque_name}
PLEASE MAIL YOUR CHECK TO: {cheque_address}
PLEASE MAIL YOUR CHECK TO: {cheque_address}
You can review your order and download your invoice from the
"Order history" [/{history_url}] section of your customer account by
clicking "My account" [/{my_account_url}] on our shop.
clicking "My account" [/{my_account_url}] on our shop.
If you have a guest account, you can follow your order via the
"Guest Tracking" [/{guest_tracking_url}] section on our shop.
"Guest Tracking" [/{guest_tracking_url}] section on our shop.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -103,7 +103,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,7 +1,7 @@
[/{shop_url}]
[/{shop_url}]
Message from a {shop_name} customer
Message from a {shop_name} customer
CUSTOMER E-MAIL ADDRESS: {email}
@@ -9,8 +9,8 @@ CUSTOMER MESSAGE: {message}
ORDER ID: {order_name}
ATTACHED FILE: {attached_file}
ATTACHED FILE: {attached_file}
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -115,7 +115,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,7 +1,7 @@
[/{shop_url}]
[/{shop_url}]
Your message to {shop_name} Customer Service
Your message to {shop_name} Customer Service
Your message has been sent successfully.
@@ -11,10 +11,10 @@ ORDER ID: {order_name}
PRODUCT: {product_name}
ATTACHED FILE: {attached_file}
ATTACHED FILE: {attached_file}
We will answer as soon as possible.
We will answer as soon as possible.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -112,7 +112,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,15 +1,15 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
We have generated a credit slip in your name for order with the
reference {order_name}.
reference {order_name}.
You can review this credit slip and download your invoice from the
"My credit slips" [/{history_url}] section of your account by clicking
"My account" [/{my_account_url}] on our shop.
"My account" [/{my_account_url}] on our shop.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -123,7 +123,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,24 +1,24 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Thank you for your order with the reference {order_name} from
{shop_name}
{shop_name}
You have {nbproducts} product(s) now available for download using the
following link(s):
{virtualproducts}
{virtualproducts}
You can review your order and download your invoice from the
"Order history" [/{history_url}] section of your customer account by
clicking "My account" [/{my_account_url}] on our shop.
clicking "My account" [/{my_account_url}] on our shop.
If you have a guest account, you can follow your order via the
"Guest Tracking" [/{guest_tracking_url}?id_order={order_name}] section
on our shop.
on our shop.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -106,7 +106,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,7 +1,7 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
Here is your personal login information for {shop_name}:
@@ -11,8 +11,8 @@ LAST NAME: {lastname}
PASSWORD: {passwd}
E-MAIL ADDRESS: {email}
E-MAIL ADDRESS: {email}
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -3,7 +3,7 @@
</tr>
<tr>
<td class="footer" style="border-top: 4px solid #333333">
<span><a href="{shop_url}">{shop_name}</a> powered by <a href="http://www.prestashop.com/">PrestaShop&trade;</a></span>
<span><a href="{shop_url}">{shop_name}</a> powered by <a href="https://webkul.com">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,4 +1,4 @@
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -89,7 +89,7 @@
<span style="color:#777">
<span style="color:#333"><strong>{employee}</strong></span> wanted to forward this discussion to you. <br /><br />
<span style="color:#333"><strong>Discussion history:</strong></span> {messages}<br /><br />
<span style="color:#333"><strong>{employee}</strong></span> added <span style="color:#333"><strong>"{comment}"</strong></span>
<span style="color:#333"><strong>{employee}</strong></span> added <span style="color:#333"><strong>"{comment}"</strong></span>
</span>
</font>
</td>
@@ -104,7 +104,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,14 +1,14 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
{employee} wanted to forward this discussion to you.
{employee} wanted to forward this discussion to you.
DISCUSSION HISTORY: {messages}
{employee} added "{comment}"
{employee} added "{comment}"
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -124,7 +124,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,19 +1,19 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
Your guest account for {shop_name} was converted to a customer
account.
account.
E-MAIL ADDRESS: {email}
PASSWORD: {passwd}
PASSWORD: {passwd}
Please be careful when sharing these login details with others.
Please be careful when sharing these login details with others.
You can access your customer account on our shop: {shop_url}
You can access your customer account on our shop: {shop_url}
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>

View File

@@ -4,58 +4,58 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
thead, tbody{width: 100%}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:425px!important;margin:auto!important;}
thead, tbody{width: 100%}
.table {margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table {margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr th{font-size: 10px !important}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
thead, tbody{width: 100%}
.table {margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table {margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
@media only screen and (max-device-width: 480px) {
body {width:340px!important;margin:auto!important;}
thead, tbody{width: 100%}
.table {margin:auto!important;}
.table {margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>

View File

@@ -109,53 +109,10 @@
</table>
</td>
</tr>
{if isset($rm_v['extra_demands']) && $rm_v['extra_demands']}
<tr>
<td colspan="8" style="border:1px solid #D6D4D4;">
<p bgcolor="#f8f8f8" style="color: #333;font-family: Arial;font-weight:bold;font-size: 13px;padding-top:5px;">&nbsp;&nbsp;{l s='Additional Facilities Details'}</p>
<table class="demands-table" cellpadding="4" cellspacing="0" style="width:100%;">
<thead>
<tr>
{assign var=roomCount value=1}
{foreach $rm_v['extra_demands'] as $roomDemand}
<th bgcolor="#f8f8f8" style="border:1px solid #D6D4D4;background-color: #fbfbfb;color: #333;font-family: Arial;font-size: 13px;padding: 10px;" align="left">{l s='Room'} - {$roomCount}<br></th>
{assign var=roomCount value=$roomCount+1}
{/foreach}
</tr>
</thead>
<tbody>
<tr>
{foreach $rm_v['extra_demands'] as $roomDemands}
<td style="border:1px solid #D6D4D4;">
{foreach $roomDemands['extra_demands'] as $demand}
<p>
<span>
<font size="2" face="Open-sans, sans-serif" color="#555454">
{$demand['name']}
</font>
</span> &nbsp;&nbsp; - &nbsp;&nbsp;
<span>
<font size="2" face="Open-sans, sans-serif" color="#555454">
{convertPrice price=$demand['price']}
</font>
</span>
</p>
{/foreach}
</td>
{/foreach}
</tr>
</tbody>
</table>
</td>
</tr>
{/if}
{/foreach}
{/foreach}
{/if}
<style>
.demands-table td, .demands-table th {
border: 1px solid #ccc;
}
.pull-right {
float: right;
}

View File

@@ -17,19 +17,6 @@
{$rm_v['data_to']|date_format:"%d-%b-%G"}
{$rm_v['amount']}
{if isset($rm_v['extra_demands']) && $rm_v['extra_demands']}
{assign var=roomCount value=1}
{foreach $rm_v['extra_demands'] as $roomDemand}
{l s='Room'} - {$roomCount}
{assign var=roomCount value=$roomCount+1}
{/foreach}
{foreach $rm_v['extra_demands'] as $roomDemands}
{foreach $roomDemands['extra_demands'] as $demand}
{$demand['name']}
{convertPrice price=$demand['price']}
{/foreach}
{/foreach}
{/if}
{/foreach}
{/foreach}
{/if}

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -122,7 +122,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,21 +1,21 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
Your order with the reference {order_name} is currently in transit.
Your order with the reference {order_name} is currently in transit.
You can track your package using the following link: {followup}
[/{followup}]
[/{followup}]
You can review your order and download your invoice from the
"Order history" [/{history_url}] section of your customer account by
clicking "My account" [/{my_account_url}] on our shop.
clicking "My account" [/{my_account_url}] on our shop.
If you have a guest account, you can follow your order via the
"Guest Tracking" [/{guest_tracking_url}?id_order={order_name}] section
on our shop.
on our shop.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -102,7 +102,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

View File

@@ -1,13 +1,13 @@
[/{shop_url}]
[/{shop_url}]
Hi {firstname} {lastname},
Hi {firstname} {lastname},
WARNING: you have received a new log alert in your Back Office.
You can check for it in the "TOOLS" > "LOGS" section of your Back
Office.
Office.
{shop_name} [/{shop_url}] powered by PrestaShop(tm)
[http://www.prestashop.com/]
{shop_name} [/{shop_url}] powered by Webkul(tm)
[https://webkul.com]

View File

@@ -4,56 +4,56 @@
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0" />
<title>Message from {shop_name}</title>
<style> @media only screen and (max-width: 300px){
<style> @media only screen and (max-width: 300px){
body {
width:218px !important;
margin:auto !important;
}
.table {width:195px !important;margin:auto !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto !important;display: block !important;}
span.title{font-size:20px !important;line-height: 23px !important}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
span.subtitle{font-size: 14px !important;line-height: 18px !important;padding-top:10px !important;display:block !important;}
td.box p{font-size: 12px !important;font-weight: bold !important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 200px!important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
@media only screen and (min-width: 301px) and (max-width: 500px) {
@media only screen and (min-width: 301px) and (max-width: 500px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
.table {width:285px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap table, .table-recap thead, .table-recap tbody, .table-recap th, .table-recap td, .table-recap tr {
display: block !important;
}
.table-recap{width: 295px !important;}
.table-recap tr td, .conf_body td{text-align:center !important;}
}
@media only screen and (min-width: 501px) and (max-width: 768px) {
body {width:478px!important;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.table {width:450px!important;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
}
@media only screen and (max-device-width: 480px) {
body {width:308px!important;margin:auto!important;}
.table {width:285px;margin:auto!important;}
.logo, .titleblock, .linkbelow, .box, .footer, .space_footer{width:auto!important;display: block!important;}
.table-recap{width: 295px!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.table-recap tr td, .conf_body td{text-align:center!important;}
.address{display: block !important;margin-bottom: 10px !important;}
.space_address{display: none !important;}
.space_address{display: none !important;}
}
</style>
</head>
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto" >
<body style="-webkit-text-size-adjust:none;background-color:#fff;width:650px;font-family:Open-sans, sans-serif;color:#555454;font-size:13px;line-height:18px;margin:auto">
<table class="table table-mail" style="width:100%;margin-top:10px;-moz-box-shadow:0 0 5px #afafaf;-webkit-box-shadow:0 0 5px #afafaf;-o-box-shadow:0 0 5px #afafaf;box-shadow:0 0 5px #afafaf;filter:progid:DXImageTransform.Microsoft.Shadow(color=#afafaf,Direction=134,Strength=5)">
<tr>
<td class="space" style="width:20px;padding:7px 0">&nbsp;</td>
@@ -83,7 +83,7 @@
</tr>
<tr>
<td class="footer" style="border-top:4px solid #333333;padding:7px 0">
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="http://www.prestashop.com/" style="color:#337ff1">PrestaShop&trade;</a></span>
<span><a href="{shop_url}" style="color:#337ff1">{shop_name}</a> powered by <a href="https://webkul.com" style="color:#337ff1">Webkul&trade;</a></span>
</td>
</tr>
</table>

Some files were not shown because too many files have changed in this diff Show More