Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fixes: Bundle product with only one product in required bundle option not being added to cart with bundle option #868

Open
wants to merge 7 commits into
base: develop
Choose a base branch
from

Conversation

bhoopatparmar
Copy link

@bhoopatparmar bhoopatparmar commented Apr 11, 2024

Description (*)

Adding a bundle product to the cart from the product carousel/widget doesn’t let the product be added properly with the bundle option. The bundle product options are not added within the parent product. It shows a warning message in minicart like ‘Please specify product option(s)’. It doesn’t fail in all the cases, it only fails in a certain case where a bundle product has been created with a required bundle option & the bundle option contains only one product with the ‘is_default’ checkbox selected.

Screenshot 1:
image
Here you can see in the screenshot a bundle product has been created with a bundle option containing only one product in it & the option is required and the product is default select.

Screenshot 2:
admin-carousel
After creating a bundle product, a product carousel has been added to the home page content by using a page-builder that includes the particular bundle product.

Screenshot 3:
home-page
As we have created a product carousel, a bundle product is visible on the home page in the product slider.

Screenshot 4:
mini-cart
When we click on the add-to-cart button, the product seems to be added to the cart & it doesn’t throw any error. And then if you check in the mini-cart, you will see a warning message like “Please specify product option(s).”

Related Pull Requests

  1. Fixes: Bundle product with only one product in required bundle option not being added to cart with bundle option. magento2#38601

Manual testing scenarios (*)

  1. Create a bundle product that contains one or more bundle options & each bundle option is required and must contain only one product that is default selected. (see screenshot 1)
  2. Create a product carousel using page-builder content that includes the newly created bundle product in the widget. (see screenshot 2). Here I've added the product carousel in home page content
  3. From the front end visit the page & try to add the bundle product from the product slider.(see screenshot 3)
  4. After clicking Add to Cart observe a warning message in minicart. (see screenshot 4).

Expected result (*)

The bundle product should be added to the cart with bundle options.

Actual result (*)

The bundle product isn’t being added to the cart with bundle options.

Additional Information (*)

File: Magento/PageBuilder/view/frontend/templates/catalog/product/widget/content/carousel.phtml

In the given carousel.phtml file it doesn’t get the options data where the add-to-cart form is rendered for the particular product (see screenshot 5). As the options are not rendered, adding that product to the cart will only add the parent bundle product to the cart without any bundle options.

Screenshot 5:
code-issue

Solution (*)

We have to update the given carousel.phtml to get the bundle options in the add-to-cart form. We can get the bundle product options by using the Magento\Catalog\ViewModel\Product\OptionsData ViewModel. (see screenshot 6)

A separate function has been created in the block file of the carousel.phtml (Magento\CatalogWidget\Block\Product\ProductsList) to get the ViewModel that returns the object of Magento\Catalog\ViewModel\Product\OptionsData. Refer the mentioned related PR.

Screenshot 7:
code-resolve

The same issue happens with the product grid as well in the product slider added by page builder. That can be solved by this PR:

Checklist

  • Pull request has a meaningful description of its purpose
  • All commits are accompanied by meaningful commit messages
  • All new or changed code is covered with unit/integration tests (if applicable)
  • README.md files for modified modules are updated and included in the pull request if any README.md predefined sections require an update
  • All automated tests passed successfully (all builds are green)

Resolved issues:

  1. resolves [Issue] Fixes: Bundle product with only one product in required bundle option not being added to cart with bundle option #870: Fixes: Bundle product with only one product in required bundle option not being added to cart with bundle option

@bhoopatparmar
Copy link
Author

@magento run all test

Copy link

Failed to run the builds. Please try to re-run them later.

@Bashev
Copy link
Contributor

Bashev commented Apr 11, 2024

@magento run all tests

@@ -61,6 +61,12 @@ use Magento\Framework\App\Action\Action;
<?php if ($_item->isSaleable()): ?>
<?php $postParams = $block->getAddToCartPostParams($_item); ?>
<form data-role="tocart-form" data-product-sku="<?= $block->escapeHtml($_item->getSku()) ?>" action="<?= $block->escapeUrl($postParams['action']) ?>" method="post">
<?php $options = $block->getViewModel()->getOptionsData($_item); ?>
Copy link
Contributor

@Bashev Bashev Apr 11, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

My suggestion is to change it on this way, if($options = $block->getViewModel()?->getOptionsData($_item)) : to prevent nullable (not defined) viewModel.

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

@Bashev Thanks for your suggestion. I've updated the code as per your suggestion.

@m2-community-project m2-community-project bot moved this from Review in Progress to Reviewer Approved in Pull Request Progress Apr 11, 2024
@engcom-Bravo engcom-Bravo self-assigned this Apr 22, 2024
@engcom-Bravo
Copy link
Collaborator

@magento run all tests

@engcom-Bravo
Copy link
Collaborator

@magento give me test instance

Copy link

Hi @engcom-Bravo. Thank you for your request. I'm working on Magento instance for you.

Copy link

@engcom-Hotel
Copy link
Collaborator

@magento run all tests

Copy link
Collaborator

@engcom-Hotel engcom-Hotel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hello @bhoopatparmar,

Thanks for the collaboration!

The changes look good to me, but please look into the failed tests. It seems they are failing due to PR changes.

Thanks

@engcom-Hotel
Copy link
Collaborator

@magento run Functional Tests B2B, Functional Tests CE, Functional Tests EE, WebAPI Tests

@engcom-Hotel
Copy link
Collaborator

@magento run Functional Tests B2B, WebAPI Tests

@engcom-Hotel
Copy link
Collaborator

@magento run Functional Tests B2B

@engcom-Hotel
Copy link
Collaborator

The failed tests seem flaky to me, they are different in 2 consecutive runs. Please refer to the below screenshot for reference:

Functional Test B2B
Run 1

image

Run 2

image

WebAPI Tests

Run 1

image

Run 2
image

Hence moving the PR in testing.

Thanks

@engcom-Hotel engcom-Hotel moved this from Changes Requested to Ready for Testing in Community Dashboard May 22, 2024
@engcom-Bravo
Copy link
Collaborator

@magento create issue

@engcom-Bravo
Copy link
Collaborator

@magento give me test instance

Copy link

Hi @engcom-Bravo. Thank you for your request. I'm working on Magento instance for you.

@engcom-Bravo engcom-Bravo moved this from Changes Requested to Testing in Progress in Community Dashboard May 23, 2024
Copy link

Copy link
Collaborator

@engcom-Bravo engcom-Bravo left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Hi @bhoopatparmar,

Thanks for the collaboration & contribution!

❌ QA not Passed

Manual Scenario Steps

  • Create a bundle product that contains one or more bundle options & each bundle option is required and must contain only one product that is default selected. (see screenshot 1)
  • Create a widget with the type ‘Catalog Product List’ with a condition that includes the newly created bundle product in the widget. (see screenshot 2)
  • From the front end visit the widget & try to add the bundle product from the widget product list.(see screenshot 3)
  • After clicking Add to Cart observe a warning message in minicart. (see screenshot 4).

✔️ Expected result After Fix 

The bundle product should be added to the cart with bundle options

❌ Actual result After Fix

Screenshot 2024-05-23 at 12 58 02

Bundle Products are still not adding to the cart with the Bundle options.

Could you please let us know if we are missing anything.

Thanks.

@m2-community-project m2-community-project bot moved this from Testing in Progress to Changes Requested in Community Dashboard May 23, 2024
@bhoopatparmar
Copy link
Author

Hi @engcom-Bravo
The solution provided in this PR is depended upon the fix provided in this PR : magento/magento2#38601
You can see a new method has been added getViewModel() in the file Magento/CatalogWidget/Block/Product/ProductsList.php that returns the viewModel object. With that fix included, the current PR for the magento2-page-builder will work properly !

Thanks.

@engcom-Hotel
Copy link
Collaborator

Thanks for the update @bhoopatparmar, but can you please have a look at the below comment:

magento/magento2#38601 (review)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
Community Dashboard
Changes Requested
4 participants