I am using Tax rule for some Countries, Tax rate is displaying fine in Checkout page but in Cart page, it is not displaying. I am using Custom Theme.
Magento 2 Cart – Tax Not Displaying in Cart Page
cartmagento2tax
Related Solutions
Since you've referenced a previous question of mine, I feel I should respond.
In the research I've done on modifying tax rates based on various factors (in my case, mostly an API call to a tax rate provider to discover a user's current/accurate tax rate) it seems safest to me to get out of Magento's way when possible.
By this, I mean that modifying core processes to change how tax is calculated is going to give you all sorts of fits and it may be less cumbersome and cleaner overall to instead create your own tax rates/rules dynamically based on the factors you require.
In my case it ended up being much cleaner to observe the same sales_quote_collect_totals_before
event and simply determine if an existing rate/rule has been created and can be used based on current context (in my case, postal codes). If it is, then use it, if not, then let's create a new tax rate/rule programmatically which is then available to be used during collectTotals()
.
When I say "much cleaner", the main things are what Magento will already do with your tax rates if they exist as expected. If I was trying to set the tax rate itself, then you have additional areas you need to cover so that these values display properly during checkout. In contrast, simply creating a new tax rate/rule dynamically removes this constraint and all the other areas of Magento (frontend or backend) that display/modify/use these rates will function normally as if nothing changed.
Again, just to reiterate, I did try doing this both ways, using $item->setTaxAmount()
as well as programmatically create tax rules. The module where I was modifying the item/quote's tax was much more complex and prone to error (especially front-end display issues). In the end I decided my method was better simply because we are dealing with monetary values that the customer is required to pay. I would rather have a server process that was a little "heavier" but did things correctly than one that was prone to error but was more obvious in its implementation. I cannot accept losing a customer because they were confused by the taxes during checkout.
If I understand you correctly you want to highlight what taxes are applied on cart totals.
What configuration did you have setup System>Configuration>Sales>Tax
Shopping Cart Display Settings and option:
Include Tax In Grand Total [STORE VIEW] Yes
Display Full Tax Summary [STORE VIEW] Yes
The name that's being displayed in frontend cart totals, are in Sales>Tax>Manage Tax Zone & Rates, then you edit the rate and at the bottom there are Tax Titles for each Store View.
If i understand you in a bad way - then do you want to display tax rate for shipping cost on estimated shipping cost block?
EDIT: Shipping cost tax percentage on cart page
This is kind of a hack, but I think you'll get an idea behind it and you can do whatever you want with it.
Go to /template/checkout/cart/shipping_method/available.html
Find around line ~59:
<?php $_excl = $this->getShippingPrice($_rate->getPrice(), $this->helper('tax')->displayShippingPriceIncludingTax()); ?>
<?php $_incl = $this->getShippingPrice($_rate->getPrice(), true); ?>
Above you can see how's shipping method cost is displayed on frontend. Try to add for testing purposes code like this:
<?php echo $excluding = (float)preg_replace('/\D/', '', $_excl)/100; ?>
<?php echo $including = (float)preg_replace('/\D/', '', $_incl)/100; ?>
<?php $taxamount=$including-$excluding;
$taxPercentage = ($taxamount / 100) * $including;
$percent = $taxamount/$excluding;
echo $percent_friendly = number_format( $percent * 100, 2 ) . '%';
?>
Now above the variable $excluding gets estimated shipping cost without tax amount and converts it to float number format. Same goes for $including.
Then we subtract $excluding from $including and we have variable $taxamount which's the tax amount in number format. The rest is obvious I think.
I hope you'll find a better way to implement this solution – it's simplest, baddest hack in template file.
Best Answer
Finally Got it, we need to add below line in checkout_cart_index.xml file under Magento_Checkout/Layout in your theme Directory.
Find around line number 166
Replace with