From 5532f12d80a1c19316bb4f7fe5e5e24fb8efe249 Mon Sep 17 00:00:00 2001 From: mDeflotte Date: Tue, 22 Nov 2011 17:18:30 +0000 Subject: [PATCH] // Multishipping : on opc, on putting multi-shipping to off, the cart is set to one address delivery git-svn-id: http://dev.prestashop.com/svn/v1/branches/1.5.x@10458 b9a71923-0436-4b27-9f14-aed3839534dd --- classes/Cart.php | 17 +++++++++++-- controllers/front/AuthController.php | 2 -- controllers/front/OrderOpcController.php | 9 +++++++ themes/prestashop/js/order-opc.js | 32 +++++++++++++++++++++--- themes/prestashop/order-address.tpl | 7 ++++++ 5 files changed, 60 insertions(+), 7 deletions(-) diff --git a/classes/Cart.php b/classes/Cart.php index 1b08a422b..4ff5ee1b4 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -1480,6 +1480,19 @@ class CartCore extends ObjectModel return $delivery_option_list; } + /** + * Does the cart use multiple + */ + public function isMultiAddressDelivery() + { + $sql = new DbQuery(); + $sql->select('count(distinct id_address_delivery)'); + $sql->from('cart_product as cp'); + $sql->where('id_cart = '.(int)$this->id); + + return (boolean)(Db::getInstance()->getValue($sql) > 1); + } + /** * Get all delivery addresses object for the current cart */ @@ -1916,7 +1929,6 @@ class CartCore extends ObjectModel 'invoice' => $invoice, 'invoice_state' => State::getNameById($invoice->id_state), 'formattedAddresses' => $formattedAddresses, -//'carrier' => new Carrier($this->id_carrier, $id_lang), 'products' => $this->getProducts(false), 'discounts' => $this->getCartRules(), 'is_virtual_cart' => (int)$this->isVirtualCart(), @@ -1930,7 +1942,8 @@ class CartCore extends ObjectModel 'total_products' => $this->getOrderTotal(false, Cart::ONLY_PRODUCTS), 'total_price' => $this->getOrderTotal(), 'total_tax' => $total_tax, - 'total_price_without_tax' => $this->getOrderTotal(false)); + 'total_price_without_tax' => $this->getOrderTotal(false), + 'is_multi_address_delivery' => $this->isMultiAddressDelivery()); } public function checkQuantities() diff --git a/controllers/front/AuthController.php b/controllers/front/AuthController.php index bf0c54803..9a905d249 100644 --- a/controllers/front/AuthController.php +++ b/controllers/front/AuthController.php @@ -294,10 +294,8 @@ class AuthControllerCore extends FrontController } } } - elog('here???'); if ($this->ajax) { - elog(Tools::getToken(false)); $return = array( 'hasError' => !empty($this->errors), 'errors' => $this->errors, diff --git a/controllers/front/OrderOpcController.php b/controllers/front/OrderOpcController.php index c2c3cbd67..5c3a44325 100644 --- a/controllers/front/OrderOpcController.php +++ b/controllers/front/OrderOpcController.php @@ -40,6 +40,9 @@ class OrderOpcControllerCore extends ParentOrderController if ($this->nbProducts) $this->context->smarty->assign('virtual_cart', false); + + $this->context->smarty->assign('is_multi_address_delivery', $this->context->cart->isMultiAddressDelivery()); + $this->isLogged = (bool)($this->context->customer->id AND Customer::customerIdExistsStatic((int)($this->context->cookie->id_customer))); if ($this->context->cart->nbProducts()) @@ -211,6 +214,7 @@ class OrderOpcControllerCore extends ParentOrderController $this->setTemplate(_PS_THEME_DIR_.'order-address-multishipping-products.tpl'); $this->display(); die(); + break; case 'cartReload': $this->_assignSummaryInformations(); if ($this->context->customer->id) @@ -221,6 +225,11 @@ class OrderOpcControllerCore extends ParentOrderController $this->setTemplate(_PS_THEME_DIR_.'shopping-cart.tpl'); $this->display(); die(); + break; + case 'noMultiAddressDelivery': + $this->context->cart->setNoMultishipping(); + die(); + break; default: throw new PrestashopException('Unknown method "'.Tools::getValue('method').'"'); } diff --git a/themes/prestashop/js/order-opc.js b/themes/prestashop/js/order-opc.js index 4de6bfab3..3abb505e3 100755 --- a/themes/prestashop/js/order-opc.js +++ b/themes/prestashop/js/order-opc.js @@ -29,7 +29,7 @@ function updateCarrierList(json) var carriers = json.carriers; /* contains all carrier available for this address */ - if (carriers.length == 0) + if (!carriers || carriers.length == 0) { checkedCarrier = 0; $('input[name=id_carrier]:checked').attr('checked', false); @@ -750,15 +750,16 @@ function multishippingMode(it) 'type': 'ajax', 'onClosed': function() { - // Relaod the cart + // Reload the cart $.ajax({ url: orderOpcUrl, data: 'ajax=true&method=cartReload', dataType : 'html', + cache: false, success: function(data) { $('#cart_summary').replaceWith($(data).find('#cart_summary')); } - }) + }); updateCarrierSelectionAndGift(); }, 'onStart': function() @@ -781,5 +782,30 @@ function multishippingMode(it) $('#address_invoice').removeClass('item').addClass('alternate_item'); $(it).removeClass('on'); $('#link_multishipping_form').hide(); + + // Disable multi address shipping + $.ajax({ + url: orderOpcUrl, + async: false, + cache: false, + data: 'ajax=true&method=noMultiAddressDelivery', + }); + + // Reload the cart + $.ajax({ + url: orderOpcUrl, + async: false, + cache: false, + data: 'ajax=true&method=cartReload', + dataType : 'html', + success: function(data) { + $('#cart_summary').replaceWith($(data).find('#cart_summary')); + } + }); } } + +$(document).ready(function() { + if (multishipping_mode) + $('#multishipping_mode').click(); +}); \ No newline at end of file diff --git a/themes/prestashop/order-address.tpl b/themes/prestashop/order-address.tpl index 7e6690eac..24693aae4 100644 --- a/themes/prestashop/order-address.tpl +++ b/themes/prestashop/order-address.tpl @@ -178,6 +178,13 @@ +