[-] FO : #PSCFV-2147 - Fix bug with date of delivery

This commit is contained in:
mDeflotte committed 2012-05-04 09:12:02 +00:00
1 parent 80db2d0e50
commit abcfa78c03
5 files changed
+114 -30

No files matched your search

+16
View File
@@ -1474,6 +1474,22 @@ class CartCore extends ObjectModel
return Tools::ps_round((float)$order_total, 2); return Tools::ps_round((float)$order_total, 2);
} }
/**
* Get the number of packages
*
* @return int number of packages
*/
public function getNbOfPackages()
{
static $nb_packages = 0;
if (!$nb_packages)
foreach ($this->getPackageList() as $by_address)
$nb_packages += count($by_address);
return $nb_packages;
}
/** /**
* Get products grouped by package and by addresses to be sent individualy (one package = one shipping cost). * Get products grouped by package and by addresses to be sent individualy (one package = one shipping cost).
* *
+42 -17
View File
@@ -27,41 +27,66 @@
{if $datesDelivery|count} {if $datesDelivery|count}
<script type="text/javascript"> <script type="text/javascript">
{literal} {literal}
var datesDelivery = new Array(); var datesDelivery = {};
{/literal} {/literal}
{foreach from=$datesDelivery item=date key=k} {foreach $datesDelivery as $by_address}
{if $date} datesDelivery[{$by_address@key}] = {};
datesDelivery[{$k}] = new Array(); {foreach $by_address as $date}
datesDelivery[{$k}]['minimal'] = "{$date.0}"; {if $date && isset($date[0])}
datesDelivery[{$k}]['maximal'] = "{$date.1}"; datesDelivery[{$by_address@key}]["{$date@key}"] = {};
datesDelivery[{$by_address@key}]["{$date@key}"]['minimal'] = ["{$date.0.0}",{$date.0.1}];
datesDelivery[{$by_address@key}]["{$date@key}"]['maximal'] = ["{$date.1.0}",{$date.1.1}];
{/if} {/if}
{/foreach} {/foreach}
{/foreach}
{literal} {literal}
$(function(){ function refreshDateOfDelivery()
if (datesDelivery[{/literal}{$id_carrier}{literal}] != undefined)
{ {
$('span#minimal').html('<b>'+datesDelivery[{/literal}{$id_carrier}{literal}]['minimal']+'</b>'); var date_from = null;
$('span#maximal').html('<b>'+datesDelivery[{/literal}{$id_carrier}{literal}]['maximal']+'</b>'); var date_to = null;
var set = true;
$.each($('.delivery_option_radio:checked'), function()
{
var date = datesDelivery[$(this).attr('name').replace(/delivery_option\[(.*)\]/, '$1')][$(this).val()];
if (typeof(date) != 'undefined')
{
if (date_from == null || date_from[1] < date['minimal'][1])
date_from = date['minimal'];
if (date_to == null || date_to[1] < date['maximal'][1])
date_to = date['maximal'];
} }
else else
$('p#dateofdelivery').hide(); set = false;
});
$('input[name=id_carrier]').click(function(){ if (date_from != null && date_to != null && set)
if (datesDelivery[$(this).val()] != undefined)
{ {
$('p#dateofdelivery').show(); $('p#dateofdelivery').show();
$('span#minimal').html('<b>'+datesDelivery[$(this).val()]['minimal']+'</b>'); $('span#minimal').html('<b>'+date_from[0]+'</b>');
$('span#maximal').html('<b>'+datesDelivery[$(this).val()]['maximal']+'</b>'); $('span#maximal').html('<b>'+date_to[0]+'</b>');
} }
else else
$('p#dateofdelivery').hide(); $('p#dateofdelivery').hide();
}
$(function(){
refreshDateOfDelivery();
$('input[name=id_carrier]').change(function(){
refreshDateOfDelivery();
}); });
}); });
{/literal} {/literal}
</script> </script>
<br /> <br />
<p id="dateofdelivery">{l s='Approximate date of delivery with this carrier is between' mod='dateofdelivery'} <span id="minimal"></span> {l s='and' mod='dateofdelivery'} <span id="maximal"></span> <sup>*</sup></p> <p id="dateofdelivery">
<p style="font-size:10px;margin:0padding:0;"><sup>*</sup> {l s='with direct payment methods (e.g. credit card)' mod='dateofdelivery'}</p> {if $nbPackages <= 1}
{l s='Approximate date of delivery with this carrier is between' mod='dateofdelivery'}
{else}
{l s='There are %s packages, that will be approximately delivered with the delivery option you choose between' sprintf=$nbPackages mod='dateofdelivery'}
{/if}
<span id="minimal"></span> {l s='and' mod='dateofdelivery'} <span id="maximal"></span> <sup>*</sup>
<br />
<span style="font-size:10px;margin:0padding:0;"><sup>*</sup> {l s='with direct payment methods (e.g. credit card)' mod='dateofdelivery'}
</p>
{/if} {/if}
+54 -12
View File
@@ -49,9 +49,9 @@ class DateOfDelivery extends Module
public function install() public function install()
{ {
if (!parent::install() if (!parent::install()
OR !$this->registerHook('beforeCarrier') || !$this->registerHook('beforeCarrier')
OR !$this->registerHook('orderDetailDisplayed') || !$this->registerHook('orderDetailDisplayed')
OR !$this->registerHook('displayPDFInvoice')) ||!$this->registerHook('displayPDFInvoice'))
return false; return false;
if (!Db::getInstance()->execute(' if (!Db::getInstance()->execute('
@@ -102,21 +102,54 @@ class DateOfDelivery extends Module
public function hookBeforeCarrier($params) public function hookBeforeCarrier($params)
{ {
if (!sizeof($params['carriers'])) if (!count($params['delivery_option_list']))
return false; return false;
$oos = false; // For out of stock management $package_list = $params['cart']->getPackageList();
foreach ($params['cart']->getProducts() as $product)
if ($product['stock_quantity'] <= 0 OR ($product['quantity_attribute'] <= 0 AND $product['id_product_attribute']))
$oos = true;
$datesDelivery = array(); $datesDelivery = array();
foreach ($params['carriers'] as $carrier) foreach ($params['delivery_option_list'] as $id_address => $by_address)
$datesDelivery[(int)($carrier['id_carrier'])] = $this->_getDatesOfDelivery((int)($carrier['id_carrier']), $oos); {
$datesDelivery[$id_address] = array();
foreach ($by_address as $key => $delivery_option)
{
$date_from = null;
$date_to = null;
$datesDelivery[$id_address][$key] = array();
foreach ($delivery_option['carrier_list'] as $id_carrier => $carrier)
{
foreach ($carrier['package_list'] as $id_package)
{
$package = $package_list[$id_address][$id_package];
$oos = false; // For out of stock management
foreach ($package['product_list'] as $product)
if (StockAvailable::getQuantityAvailableByProduct($product['id_product'], $product['id_product_attribute']) <= 0)
{
$oos = true;
break;
}
$date_range = $this->_getDatesOfDelivery($id_carrier, $oos);
if (is_null($date_from) || $date_from < $date_range[0])
{
$date_from = $date_range[0][1];
$datesDelivery[$id_address][$key][0] = $date_range[0];
}
if (is_null($date_to) || $date_to < $date_range[1])
{
$date_to = $date_range[1][1];
$datesDelivery[$id_address][$key][1] = $date_range[1];
}
}
}
}
}
$this->smarty->assign(array( $this->smarty->assign(array(
'nbPackages' => $params['cart']->getNbOfPackages(),
'datesDelivery' => $datesDelivery, 'datesDelivery' => $datesDelivery,
'id_carrier' => ($params['cart']->id_carrier ? (int)($params['cart']->id_carrier) : (int)(Configuration::get('PS_CARRIER_DEFAULT'))) 'delivery_option' => $params['delivery_option']
)); ));
return $this->display(__FILE__, 'beforeCarrier.tpl'); return $this->display(__FILE__, 'beforeCarrier.tpl');
@@ -506,6 +539,9 @@ class DateOfDelivery extends Module
$date_maximal_time += 24 * 3600; $date_maximal_time += 24 * 3600;
/* /*
// Do not remove this commentary, it's usefull to allow translations of months and days in the translator tool
$this->l('Sunday'); $this->l('Sunday');
$this->l('Monday'); $this->l('Monday');
$this->l('Tuesday'); $this->l('Tuesday');
@@ -550,8 +586,14 @@ class DateOfDelivery extends Module
} }
} }
return array( return array(
array(
$date_minimal_string, $date_minimal_string,
$date_maximal_string $date_minimal_time
),
array(
$date_maximal_string,
$date_maximal_time
)
); );
} }
} }
@@ -3,6 +3,7 @@
global $_MODULE; global $_MODULE;
$_MODULE = array(); $_MODULE = array();
$_MODULE['<{dateofdelivery}prestashop>beforecarrier_75261aaef97717dda0ca98743b24f8f3'] = 'La date approximative de livraison avec ce transporteur se situe entre le'; $_MODULE['<{dateofdelivery}prestashop>beforecarrier_75261aaef97717dda0ca98743b24f8f3'] = 'La date approximative de livraison avec ce transporteur se situe entre le';
$_MODULE['<{dateofdelivery}prestashop>beforecarrier_c31e7bcb78c69bd37e6e77be0183567f'] = 'Il y\'a %s paquets, qui seront livré approximativement entre le ';
$_MODULE['<{dateofdelivery}prestashop>beforecarrier_be5d5d37542d75f93a87094459f76678'] = 'et le '; $_MODULE['<{dateofdelivery}prestashop>beforecarrier_be5d5d37542d75f93a87094459f76678'] = 'et le ';
$_MODULE['<{dateofdelivery}prestashop>beforecarrier_c9ed8c0b07828727ca6653924b0498d3'] = 'avec un moyen de paiement direct (ex. : carte bancaire)'; $_MODULE['<{dateofdelivery}prestashop>beforecarrier_c9ed8c0b07828727ca6653924b0498d3'] = 'avec un moyen de paiement direct (ex. : carte bancaire)';
$_MODULE['<{dateofdelivery}prestashop>dateofdelivery_b0f76e26cffaf27784d901a64f39593e'] = 'Date de livraison'; $_MODULE['<{dateofdelivery}prestashop>dateofdelivery_b0f76e26cffaf27784d901a64f39593e'] = 'Date de livraison';
+1 -1
View File
@@ -119,7 +119,7 @@
<div class="delivery_options"> <div class="delivery_options">
{foreach $option_list as $key => $option} {foreach $option_list as $key => $option}
<div class="delivery_option {if ($option@index % 2)}alternate_{/if}item"> <div class="delivery_option {if ($option@index % 2)}alternate_{/if}item">
<input class="delivery_option_radio" type="radio" name="delivery_option[{$id_address}]" onchange="{if $opc}updateCarrierSelectionAndGift();{else}updateExtraCarrier('{$key}', {$id_address});{/if}" id="delivery_option_{$id_address}_{$option@index}" value="{$key}" {if $delivery_option[$id_address] == $key}checked="checked"{/if} /> <input class="delivery_option_radio" type="radio" name="delivery_option[{$id_address}]" onchange="{if $opc}updateCarrierSelectionAndGift();{else}updateExtraCarrier('{$key}', {$id_address});{/if}" id="delivery_option_{$id_address}_{$option@index}" value="{$key}" {if isset($delivery_option[$id_address]) && $delivery_option[$id_address] == $key}checked="checked"{/if} />
<label for="delivery_option_{$id_address}_{$option@index}"> <label for="delivery_option_{$id_address}_{$option@index}">
<table class="resume"> <table class="resume">
<tr> <tr>