diff --git a/classes/Cart.php b/classes/Cart.php index 1519da81f..b6e344cf7 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1473,7 +1473,23 @@ class CartCore extends ObjectModel 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). * diff --git a/modules/dateofdelivery/beforeCarrier.tpl b/modules/dateofdelivery/beforeCarrier.tpl index 36793384e..58c9bd49e 100644 --- a/modules/dateofdelivery/beforeCarrier.tpl +++ b/modules/dateofdelivery/beforeCarrier.tpl @@ -27,41 +27,66 @@ {if $datesDelivery|count}
-

{l s='Approximate date of delivery with this carrier is between' mod='dateofdelivery'} {l s='and' mod='dateofdelivery'} *

-

* {l s='with direct payment methods (e.g. credit card)' mod='dateofdelivery'}

+

+ {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} + {l s='and' mod='dateofdelivery'} * +
+ * {l s='with direct payment methods (e.g. credit card)' mod='dateofdelivery'} +

{/if} \ No newline at end of file diff --git a/modules/dateofdelivery/dateofdelivery.php b/modules/dateofdelivery/dateofdelivery.php index ee9c8b16e..d0a3d7cc9 100644 --- a/modules/dateofdelivery/dateofdelivery.php +++ b/modules/dateofdelivery/dateofdelivery.php @@ -49,10 +49,10 @@ class DateOfDelivery extends Module public function install() { if (!parent::install() - OR !$this->registerHook('beforeCarrier') - OR !$this->registerHook('orderDetailDisplayed') - OR !$this->registerHook('displayPDFInvoice')) - return false; + || !$this->registerHook('beforeCarrier') + || !$this->registerHook('orderDetailDisplayed') + ||!$this->registerHook('displayPDFInvoice')) + return false; if (!Db::getInstance()->execute(' CREATE TABLE IF NOT EXISTS `'._DB_PREFIX_.'dateofdelivery_carrier_rule` ( @@ -102,21 +102,54 @@ class DateOfDelivery extends Module public function hookBeforeCarrier($params) { - if (!sizeof($params['carriers'])) + if (!count($params['delivery_option_list'])) return false; - $oos = false; // For out of stock management - foreach ($params['cart']->getProducts() as $product) - if ($product['stock_quantity'] <= 0 OR ($product['quantity_attribute'] <= 0 AND $product['id_product_attribute'])) - $oos = true; + $package_list = $params['cart']->getPackageList(); $datesDelivery = array(); - foreach ($params['carriers'] as $carrier) - $datesDelivery[(int)($carrier['id_carrier'])] = $this->_getDatesOfDelivery((int)($carrier['id_carrier']), $oos); + foreach ($params['delivery_option_list'] as $id_address => $by_address) + { + $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( + 'nbPackages' => $params['cart']->getNbOfPackages(), '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'); @@ -141,33 +174,33 @@ class DateOfDelivery extends Module return $this->display(__FILE__, 'orderDetail.tpl'); } - /** - * Displays the delivery dates on the invoice - * - * @param $params contains an instance of OrderInvoice - * @return string - * - */ - public function hookDisplayPDFInvoice($params) - { - $order_invoice = $params['object']; - if (!($order_invoice instanceof OrderInvoice)) - return; + /** + * Displays the delivery dates on the invoice + * + * @param $params contains an instance of OrderInvoice + * @return string + * + */ + public function hookDisplayPDFInvoice($params) + { + $order_invoice = $params['object']; + if (!($order_invoice instanceof OrderInvoice)) + return; - $order = new Order((int)$order_invoice->id_order); + $order = new Order((int)$order_invoice->id_order); - $oos = false; // For out of stock management - foreach ($order->getProducts() as $product) - if ($product['product_quantity_in_stock'] < 1) - $oos = true; + $oos = false; // For out of stock management + foreach ($order->getProducts() as $product) + if ($product['product_quantity_in_stock'] < 1) + $oos = true; - $id_carrier = (int)OrderInvoice::getCarrierId($order_invoice->id); - $return = ''; - if ($datesDelivery = $this->_getDatesOfDelivery($id_carrier, $oos, $order_invoice->date_add)) - $return = $this->l('Approximate date of delivery is between').' '.$datesDelivery[0].' '.$this->l('and').' '.$datesDelivery[1]; + $id_carrier = (int)OrderInvoice::getCarrierId($order_invoice->id); + $return = ''; + if ($datesDelivery = $this->_getDatesOfDelivery($id_carrier, $oos, $order_invoice->date_add)) + $return = $this->l('Approximate date of delivery is between').' '.$datesDelivery[0].' '.$this->l('and').' '.$datesDelivery[1]; - return $return; - } + return $return; + } private function _postProcess() { @@ -460,13 +493,13 @@ class DateOfDelivery extends Module '.((int)$id_carrier_rule != 0 ? 'AND `id_carrier_rule` != '.(int)($id_carrier_rule) : '')); } - /** - * @param $id_carrier - * @param bool $product_oos - * @param null $date - * - * @return array|bool returns the min & max delivery date - */ + /** + * @param $id_carrier + * @param bool $product_oos + * @param null $date + * + * @return array|bool returns the min & max delivery date + */ private function _getDatesOfDelivery($id_carrier, $product_oos = false, $date = null) { if (!(int)($id_carrier)) @@ -506,6 +539,9 @@ class DateOfDelivery extends Module $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('Monday'); $this->l('Tuesday'); @@ -550,8 +586,14 @@ class DateOfDelivery extends Module } } return array( - $date_minimal_string, - $date_maximal_string + array( + $date_minimal_string, + $date_minimal_time + ), + array( + $date_maximal_string, + $date_maximal_time + ) ); } } diff --git a/modules/dateofdelivery/translations/fr.php b/modules/dateofdelivery/translations/fr.php index 07d4f8f63..4160686ba 100644 --- a/modules/dateofdelivery/translations/fr.php +++ b/modules/dateofdelivery/translations/fr.php @@ -3,6 +3,7 @@ global $_MODULE; $_MODULE = array(); $_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_c9ed8c0b07828727ca6653924b0498d3'] = 'avec un moyen de paiement direct (ex. : carte bancaire)'; $_MODULE['<{dateofdelivery}prestashop>dateofdelivery_b0f76e26cffaf27784d901a64f39593e'] = 'Date de livraison'; diff --git a/themes/default/order-carrier.tpl b/themes/default/order-carrier.tpl index ecc512827..beda5f35b 100644 --- a/themes/default/order-carrier.tpl +++ b/themes/default/order-carrier.tpl @@ -119,7 +119,7 @@
{foreach $option_list as $key => $option}
- +