diff --git a/classes/Cart.php b/classes/Cart.php index eb288f322..0b08947a7 100644 --- a/classes/Cart.php +++ b/classes/Cart.php @@ -781,8 +781,9 @@ class CartCore extends ObjectModel $sql .= ' WHERE cp.`id_product` = '.(int)$id_product.' AND cp.`id_product_attribute` = '.(int)$id_product_attribute.' - AND cp.`id_cart` = '.(int)$this->id.' - AND cp.`id_address_delivery` = '.(int)$id_address_delivery; + AND cp.`id_cart` = '.(int)$this->id; + if (Configuration::get('PS_ALLOW_MULTISHIPPING') && $this->isMultiAddressDelivery()) + $sql .= ' AND cp.`id_address_delivery` = '.(int)$id_address_delivery; if ($id_customization) $sql .= ' AND c.`id_customization` = '.(int)$id_customization; @@ -886,7 +887,7 @@ class CartCore extends ObjectModel SET `quantity` = `quantity` '.$qty.', `date_add` = NOW() WHERE `id_product` = '.(int)$id_product. (!empty($id_product_attribute) ? ' AND `id_product_attribute` = '.(int)$id_product_attribute : '').' - AND `id_cart` = '.(int)$this->id.' AND `id_address_delivery` = '.(int)$id_address_delivery.' + AND `id_cart` = '.(int)$this->id.(Configuration::get('PS_ALLOW_MULTISHIPPING') && $this->isMultiAddressDelivery() ? ' AND `id_address_delivery` = '.(int)$id_address_delivery : '').' LIMIT 1' ); } diff --git a/controllers/front/OrderOpcController.php b/controllers/front/OrderOpcController.php index 130f531bd..b9551506e 100644 --- a/controllers/front/OrderOpcController.php +++ b/controllers/front/OrderOpcController.php @@ -72,12 +72,13 @@ class OrderOpcControllerCore extends ParentOrderController if ($this->_processCarrier()) { $carriers = $this->context->cart->simulateCarriersOutput(); - $return = array( - 'summary' => $this->context->cart->getSummaryDetails(), + $return = array_merge(array( 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'carrier_data' => $this->_getCarrierList(), 'HOOK_BEFORECARRIER' => Hook::exec('displayBeforeCarrier', array('carriers' => $carriers)) + ), + $this->getFormatedSummaryDetail() ); Cart::addExtraCarriers($return); die(Tools::jsonEncode($return)); @@ -146,8 +147,7 @@ class OrderOpcControllerCore extends ParentOrderController $wrapping_fees = (float)(Configuration::get('PS_GIFT_WRAPPING_PRICE')); $wrapping_fees_tax = new Tax((int)(Configuration::get('PS_GIFT_WRAPPING_TAX'))); $wrapping_fees_tax_inc = $wrapping_fees * (1 + (((float)($wrapping_fees_tax->rate) / 100))); - $return = array( - 'summary' => $this->context->cart->getSummaryDetails(), + $return = array_merge(array( 'order_opc_adress' => $this->context->smarty->fetch(_PS_THEME_DIR_.'order-address.tpl'), 'block_user_info' => (isset($blockUserInfo) ? $blockUserInfo->hookTop(array()) : ''), 'carrier_data' => $this->_getCarrierList(), @@ -155,6 +155,8 @@ class OrderOpcControllerCore extends ParentOrderController 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'no_address' => 0, 'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int)($this->context->cookie->id_currency)))) + ), + $this->getFormatedSummaryDetail() ); die(Tools::jsonEncode($return)); } @@ -208,12 +210,12 @@ class OrderOpcControllerCore extends ParentOrderController $wrapping_fees_tax = new Tax((int)(Configuration::get('PS_GIFT_WRAPPING_TAX'))); $wrapping_fees_tax_inc = $wrapping_fees * (1 + (((float)($wrapping_fees_tax->rate) / 100))); $result = array_merge($result, array( - 'summary' => $this->context->cart->getSummaryDetails(), 'HOOK_TOP_PAYMENT' => Hook::exec('displayPaymentTop'), 'HOOK_PAYMENT' => $this->_getPaymentMethods(), 'gift_price' => Tools::displayPrice(Tools::convertPrice(Product::getTaxCalculationMethod() == 1 ? $wrapping_fees : $wrapping_fees_tax_inc, new Currency((int)($this->context->cookie->id_currency)))), - 'carrier_data' => $this->_getCarrierList() - )); + 'carrier_data' => $this->_getCarrierList()), + $this->getFormatedSummaryDetail() + ); die(Tools::jsonEncode($result)); } } @@ -575,5 +577,27 @@ class OrderOpcControllerCore extends ParentOrderController $this->context->smarty->assign($adr_type.'_all_fields', ${$adr_type.'_all_fields'}); } } + + protected function getFormatedSummaryDetail() + { + $result = array('summary' => $this->context->cart->getSummaryDetails(), + 'customizedDatas' => Product::getAllCustomizedDatas($this->context->cart->id, null, true) + ); + foreach ($result['summary']['products'] as $key => &$product) + { + $product['quantity_without_customization'] = $product['quantity']; + if ($result['customizedDatas']) + { + foreach ($result['customizedDatas'][(int)$product['id_product']][(int)$product['id_product_attribute']] as $addresses) + foreach ($addresses as $customization) + $product['quantity_without_customization'] -= (int)$customization['quantity']; + } + } + + if ($result['customizedDatas']) + Product::addCustomizationPrice($result['summary']['products'], $result['customizedDatas']); + return $result; + } + } diff --git a/themes/default/js/cart-summary.js b/themes/default/js/cart-summary.js index 926b3cd5f..0df7d1356 100644 --- a/themes/default/js/cart-summary.js +++ b/themes/default/js/cart-summary.js @@ -538,12 +538,11 @@ function updateCartSummary(json) return; $('.cart_quantity_input').val(0); - + product_list = {}; for (i=0;i 0 && $(this).find('.cart_unit span').attr('id').length > 0) $(this).find('.cart_unit span').attr('id', $(this).find('.cart_unit span').attr('id').replace(/_\d+$/, '_'+idAddress_delivery)); @@ -88,10 +88,8 @@ function updateAddressSelection() if ($(this).find('.cart_quantity_input').length > 0 && $(this).find('.cart_quantity_input').attr('name').length > 0) { name = $(this).find('.cart_quantity_input').attr('name')+'_hidden'; - $(this).find('.cart_quantity_input').attr('name', $(this).find('.cart_quantity_input').attr('name').replace(/_\d+$/, '_'+idAddress_delivery)); - - if ($(this).find('[name='+name+']')> 0) + if ($(this).find('[name='+name+']').length > 0) $(this).find('[name='+name+']').attr('name', name.replace(/_\d+_hidden$/, '_'+idAddress_delivery+'_hidden')); } @@ -100,6 +98,19 @@ function updateAddressSelection() .attr('id', $(this).find('.cart_quantity_delete').attr('id').replace(/_\d+$/, '_'+idAddress_delivery)) .attr('href', $(this).find('.cart_quantity_delete').attr('href').replace(/id_address_delivery=\d+&/, 'id_address_delivery='+idAddress_delivery+'&')) } + + if ($(this).find('.cart_quantity_down').length > 0 && $(this).find('.cart_quantity_down').attr('id').length > 0) { + $(this).find('.cart_quantity_down') + .attr('id', $(this).find('.cart_quantity_down').attr('id').replace(/_\d+$/, '_'+idAddress_delivery)) + .attr('href', $(this).find('.cart_quantity_down').attr('href').replace(/id_address_delivery=\d+&/, 'id_address_delivery='+idAddress_delivery+'&')) + } + + if ($(this).find('.cart_quantity_up').length > 0 && $(this).find('.cart_quantity_up').attr('id').length > 0) { + $(this).find('.cart_quantity_up') + .attr('id', $(this).find('.cart_quantity_up').attr('id').replace(/_\d+$/, '_'+idAddress_delivery)) + .attr('href', $(this).find('.cart_quantity_up').attr('href').replace(/id_address_delivery=\d+&/, 'id_address_delivery='+idAddress_delivery+'&')) + } + }); // Update global var deliveryAddress