Magento2: Cart/Minicart not updating prices when Zero VAT customer group is assigned when logged in

Created on 17 Aug 2017  Â·  10Comments  Â·  Source: magento/magento2

Cart/Minicart not updating prices when Zero VAT customer group is assigned when logged in, until you go through to the billing step of checkout and then go back to update the cart.

Preconditions


  1. Magento 2.1.5
  2. Theme - Magento Luma

VAT SETUP
All VAT codes are supplied without the country prefix.
Stores > Taxes > Tax Rules > Add New Tax Rule
Tax Rule Information
Name: Zero VAT
Tax Rate: Click ‘Add New Tax Rate’

  • Tax Identifier: Zero VAT
  • Zip/Post is Range: unticked
  • Zip/Post Code: *
  • State: *
  • Country: Spain
  • Rate Percent: 0.00
  • Save

Additional Settings
Customer Tax Class: Click ‘Add New Tax Class’

  • Zero VAT Customer
  • Press the tick
  • Ensure this is the only tax class highlighted
    Product Tax Class: Click ‘Add New Tax
  • Zero VAT Product
  • Press the tick
  • Ensure this is the only tax class highlighted
    Priority: 0
    Calculate Off Subtotal Only: unticked
    Sort Order: 0

Stores > Taxes > Tax Zones and Rates > Add New Tax Rate
Tax Identifier: Zero VAT
Zip/Post is Range: unticked
Zip/Post Code: *
State: *
Country: Spain
Rate Percent: 0.00

Stores > Other Settings > Customer Groups > Add New Customer Group
Group Name: Zero VAT Customer Group
Tax Class: Zero VAT Customer

Stores > Configuration > Customers > Customer Configuration > CHANGE SCOPE TO SPANISH WEBSITE LEVEL > Create New Account Options
screen shot 2017-08-17 at 12 30 54

Stores > Configuration > Sales > Tax
screen shot 2017-08-17 at 12 34 49
screen shot 2017-08-17 at 12 35 13
screen shot 2017-08-17 at 12 35 36

Steps to reproduce

Product example being used:

  • Including VAT price 447,00 €
  • Excluding VAT price 369,42 €
  • Go to the frontend as a guest and add an item to your basket.
  • Minicart shows product as 447,00 €
  • Go to login as a new customer.
  • Add your address & vat number when prompted (default functionality).
  • You should receive the 'Your vat id has been successfully validated. You will not be charged tax' message. At this point you are assigned the Zero VAT customer group.
  • Go back to the frontend and notice that all the prices in the category and product pages are now showing the VAT discount.
  • Go to the cart and/or the minicart to view the product you added prior to registration

Expected result

  • Prices and totals are updated to reflect the VAT discount
    ie: product price and total should be 369,42 €.
  • Add another product and view the cart and/or minicart. This product should show the VAT discount price which is reflected on the product page.

Actual result

  • Prices and totals still show the full price in cart/minicart.
  • Add another product and view the cart and/or minicart. This product also shows as including full vat.
  • Go through to the checkout. Choose your shipping option and click next button.
  • Before proceeding with payment go back to the homepage.
  • Click the minicart and update your product quantity.
  • The prices and totals refresh to show the correct discounted price.
Confirmed P3 dev in progress Reproduced on 2.2.x Reproduced on 2.3.x S3 bug report

Most helpful comment

Hi @magento-engcom-team

Pull request has been created here.

Thank you

All 10 comments

Confirm

Hi there,

The issue seems to be that the totals are not recollected on address save.

I have implemented a work around for this issue as follows:

app/code/Vendor/Module/etc/di.xml

<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
        xsi:noNamespaceSchemaLocation="urn:magento:framework:ObjectManager/etc/config.xsd">
    <type name="Magento\Customer\Model\Address">
        <plugin name="limitless_recollect_totals" type="Vendor\Module\Plugin\RecollectTotalsPlugin" />
    </type>
</config>

app/code/Vendor/Module/Plugin/RecollectTotalsPlugin.php

<?php

namespace Vender\Module\Plugin;

use Magento\Checkout\Model\Session;
use Magento\Customer\Model\Address;

class RecollectTotalsPlugin
{
    /**
     * @var \Magento\Checkout\Model\Session
     */
    private $checkoutSession;

    public function __construct(Session $checkoutSession)
    {
        $this->checkoutSession = $checkoutSession;
    }

    public function afterSave(Address $subject, $result)
    {
        $quote = $this->checkoutSession->getQuote();
        $quote->setTriggerRecollect(true);
        $quote->getResource()->save($quote);
        return $result;
    }
}

app/code/Vendor/Module/etc/frontend/sections.xml

<?xml version="1.0"?>
<config xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:noNamespaceSchemaLocation="urn:magento:module:Magento_Customer:etc/sections.xsd">
    <action name="customer/address/formPost">
        <section name="cart"/>
        <section name="checkout-data"/>
    </action>
</config>

I have also added a preference for Magento\Tax\Model\Calculation.php and have overridden the getRateRequest() method. In here I have removed the following outer if statement only, as the $customerTaxClass is always populated and so will never be reset:

if ($customerTaxClass === null || $customerTaxClass === false) { ...

Thanks to @Vinai for his assistance with this one! :)

@tprocter-ldg want to make the fix a part of core maybe? :)

If not, we probably need a process to make bugs with known fixes as 'up for grabs'.

Will do @orlangur :)

@tprocter-ldg, thank you for research. Could you please submit pull request with your fix?

Hi @magento-engcom-team

Pull request has been created here.

Thank you

@tprocter-ldg, thank you for your report.
We were not able to reproduce this issue by following the steps you provided.
Please provide more details of your site settings, or try to reproduce this issue on a clean installation.

Hi @tprocter-ldg
Please post pull request here: https://github.com/magento/magento2/pulls So that it can be processed.

Hi @okorshenko

PR has now been posted in https://github.com/magento/magento2/pulls.

Thank you

@tprocter-ldg, thank you for your report.
We've created internal ticket(s) MAGETWO-81672 to track progress on the issue.

Was this page helpful?
0 / 5 - 0 ratings