From dd1ca9336bda47019b5cfc78a5973348faea3cd2 Mon Sep 17 00:00:00 2001 From: Jitendra Singh Date: Tue, 14 Jan 2020 19:09:59 +0530 Subject: [PATCH] Issue #1779 fixed --- .../Webkul/Product/src/Type/AbstractType.php | 5 +-- packages/Webkul/Product/src/Type/Bundle.php | 45 +++++++++++++++++-- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/packages/Webkul/Product/src/Type/AbstractType.php b/packages/Webkul/Product/src/Type/AbstractType.php index e0017bf12..bec67190b 100644 --- a/packages/Webkul/Product/src/Type/AbstractType.php +++ b/packages/Webkul/Product/src/Type/AbstractType.php @@ -597,9 +597,8 @@ abstract class AbstractType /** * Get request quantity * - * @param Product $product - * @param array $data - * @return CartItem|void + * @param array $data + * @return array */ public function getQtyRequest($data) { diff --git a/packages/Webkul/Product/src/Type/Bundle.php b/packages/Webkul/Product/src/Type/Bundle.php index 6ce1a021d..3aa680172 100644 --- a/packages/Webkul/Product/src/Type/Bundle.php +++ b/packages/Webkul/Product/src/Type/Bundle.php @@ -419,6 +419,9 @@ class Bundle extends AbstractType return $cartProduct; $cartProduct[0]['parent_id'] = $this->product->id; + $cartProduct[0]['quantity'] = $data['quantity']; + $cartProduct[0]['total_weight'] = $cartProduct[0]['weight'] * $data['quantity']; + $cartProduct[0]['base_total_weight'] = $cartProduct[0]['weight'] * $data['quantity']; $products = array_merge($products, $cartProduct); @@ -426,9 +429,9 @@ class Bundle extends AbstractType $products[0]['base_price'] += $cartProduct[0]['base_total']; $products[0]['total'] += $cartProduct[0]['total']; $products[0]['base_total'] += $cartProduct[0]['base_total']; - $products[0]['weight'] += $cartProduct[0]['weight']; - $products[0]['total_weight'] += $cartProduct[0]['total_weight']; - $products[0]['base_total_weight'] += $cartProduct[0]['base_total_weight']; + $products[0]['weight'] += ($cartProduct[0]['weight'] * $products[0]['quantity']); + $products[0]['total_weight'] += ($cartProduct[0]['total_weight'] * $products[0]['quantity']); + $products[0]['base_total_weight'] += ($cartProduct[0]['base_total_weight'] * $products[0]['quantity']); } return $products; @@ -483,7 +486,8 @@ class Bundle extends AbstractType if ($this->product->id != $options2['product_id']) return false; - return $options1['bundle_options'] == $options2['bundle_options'] && $options1['bundle_option_qty'] == $options2['bundle_option_qty']; + return $options1['bundle_options'] == $options2['bundle_options'] + && $options1['bundle_option_qty'] == $this->getOptionQuantities($options2); } /** @@ -506,6 +510,9 @@ class Bundle extends AbstractType $optionProduct = $this->productBundleOptionProductRepository->find($optionProductId); $qty = $data['bundle_option_qty'][$optionId] ?? $optionProduct->qty; + + if (! isset($data['bundle_option_qty'][$optionId])) + $data['bundle_option_qty'][$optionId] = $qty; $labels[] = $qty . ' x ' . $optionProduct->product->name . ' ' . core()->currency($optionProduct->product->getTypeInstance()->getMinimalPrice()); } @@ -522,6 +529,36 @@ class Bundle extends AbstractType return $data; } + /** + * Returns additional information for items + * + * @param array $data + * @return array + */ + public function getOptionQuantities($data) + { + $optionQuantities = []; + + foreach ($data['bundle_options'] as $optionId => $optionProductIds) { + foreach ($optionProductIds as $optionProductId) { + if (! $optionProductId) + continue; + + if (isset($data['bundle_option_qty'][$optionId])) { + $optionQuantities[$optionId] = $data['bundle_option_qty'][$optionId]; + + continue; + } + + $optionProduct = $this->productBundleOptionProductRepository->find($optionProductId); + + $optionQuantities[$optionId] = $optionProduct->qty; + } + } + + return $optionQuantities; + } + /** * Validate cart item product price *