I'm surprised there isn't more interest in this as in July the exact same rules will be enforced for all EU sales as well with €150 limit.
As a UK based business I was going to ask the same thing for EU sales.
Is this achievable?
I'm surprised there isn't more interest in this as in July the exact same rules will be enforced for all EU sales as well with €150 limit.
As a UK based business I was going to ask the same thing for EU sales.
Is this achievable?
I think I've found a way to do it, with an Observer class and a special "description" pattern on the Zone Definition: [999:ZZZ]
1. Create normal Tax Rates and Tax Classes and Zone Definitions
2. In the Zone Definition (Geo Zone) for the affected country, add the pattern to the description
eg: for UK, if the threshold is 135 GBP, then the description might read: "UK VAT below threshold of [135:GBP]"
3. Ensure you have a GBP currency, and Update Exchange Rates regularly.
Drop the attached file into /includes/classes/observers/auto.max_taxable_threshold.php
Should work on v1.5.6 and v1.5.7
EDIT: See updated attachment in later post below.
.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
TNX for taking the time to look at this.
Questions ( I'm sorry if I missed the answer in the code comments )
Does this just prevent taxes from being charged on order amounts above the threshold?
and not disallow orders below the minimum threshold?
or does it allow orders below the minimum threshold to be placed?
Does it require the customer to change currency or does currency conversions apply? ie: allow order in USD even if the GBP > threshold (##£135)
In my specific case for the UK Brexit example, I have no desire or intent of creating any UK VAT account, record keeping, reporting, etc as required for orders below £135 and refusing all order placement below that amount. I have no problem operating 'business as usual' for orders above £135. I don't expect you to spend much, if any, time on my account.
Rick
RixStix (dot) com
aka: ChainWeavers (dot) com
Correct.
It doesn't restrict orders from being placed.
It auto-determines whether the amount in the cart is over the specified threshold after doing currency-conversions, so that it doesn't matter what currency the customer is shopping in. This does of course depend on your store being set up with that currency available (so that it can do the conversion) and that you regularly update the exchange rates. The side-effect of having the currencies available is that the customer "could" shop in those other currencies if you provide them a means of switching between currencies (such as with the currencies sidebox).
In its current state, this module does NOT "prevent" orders from being placed. It merely skips charging VAT if the threshold is met.
.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
Update:
This edition lets you deny checkout if the customer hasn't sufficient total in their cart to meet the threshold.
Setting the Zone Definition's description to [135:GBP:Deny] would require them to add at least 135 GBP value to their cart to allow checkout (or change their address to another zone for which you have no threshold set).
Again, when you keep your cart's exchange rates current it will automatically manage doing its calculations based on the currency described in the threshold regardless of the customer's current "shopping" currency.
EDIT: See updated version on 2021-03-30 post below...
.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
TNX DrByte,
Works exactly as expected.
Have a cup of coffee, donut, adult beverage on me.
Rick
RixStix (dot) com
aka: ChainWeavers (dot) com
Thanks for this. How would it differ in my situation as I only have GBP as a currency and will adjust the GBP equivalent to the euro tax threshold manually every month.
I suppose if you didn't want to add any other currencies you could just do the conversion by hand and specify [NNN:GBP] where NNN is the equivalent already converted to GBP.
One side-effect to that is that the alert message displayed to customers would say the price in GBP which may be confusing to them if they know about the rule in terms of the other currency.
.
Zen Cart - putting the dream of business ownership within reach of anyone!
Donate to: DrByte directly or to the Zen Cart team as a whole
Remember: Any code suggestions you see here are merely suggestions. You assume full responsibility for your use of any such suggestions, including any impact ANY alterations you make to your site may have on your PCI compliance.
Furthermore, any advice you see here about PCI matters is merely an opinion, and should not be relied upon as "official". Official PCI information should be obtained from the PCI Security Council directly or from one of their authorized Assessors.
No sure If this is an issue or not. I have been testing this out in light of the EU tax changes and think I may have hit a problem. Once you have set your billing address there is no way that you can change it if your order is below the threshold and you have used deny to prevent order below the threshold.
The code returns you to the Shopping cart each time then if you go back to the check out even if you click the change address button on the shipping address you are returned to the shopping cart.
Like I said I am not sure that this is really an issue as most people would not change their billing address once they had started, just cause an issue when testing.
You can get around this by changing line 86 from zen_redirect(zen_href_link(FILENAME_SHOPPING_CART)); to zen_redirect(zen_href_link(FILENAME_CHECKOUT_PAYMENT_ADDRESS));
This works fine for testing but probably not suitable for live, as it encourages changing the address.
I was also trying to make it work for the shopping basket instead of just at checkout to give the customer warning that their order did not meet the minimum order based on the delivery country used in the shipping estimator.
code I used was
PHP Code:
/**
* NOTIFY_HEADER_END_SHOPPING_CART
*
* Here we check for "Deny" status.
*
*/
public function updateNotifyHeaderEndShoppingCart(&$class, $eventID)
{
global $messageStack, $current_page_base;
global $order;
$taxCountryId = $_REQUEST['zone_country_id'];
$taxZoneId = 0;
$data = $this->process($order, $taxCountryId, $taxZoneId);
// if not set to Deny, we abort with a return
if (!is_array($data) || $data['status'] !== 'DENY') {
return;
}
$error_message = sprintf(TEXT_MINIMUM_ORDER_THRESHOLD_NOT_MET, $data['threshold'], $data['currency']) . '<br>';
$_SESSION['valid_to_checkout'] = false;
if (!in_array($current_page_base, ['shopping_cart', 'checkout_shipping', 'checkout_one'])) {
$messageStack->add_session('header', $error_message, 'caution');
zen_redirect(zen_href_link(FILENAME_SHOPPING_CART));
}
// else set message to current page instead of to session for redirect
$messageStack->add('header', $error_message, 'caution');
}
Mark Brittain
http:\\innerlightcrystals.co.uk\sales\
We have a hiccup today. Customer address is in the Netherlands and is receiving the Brexit ERROR during checkout.
zen-cart 1.5.6.c
I changed theby removing theCode:Zone Description: [135:GBP:Deny]eny and the error goes away.
Based upon the To Use notes, my original steps were:
Create/Insert Zone Definition:
Zone Name: UK-Brexit
Zone Description: [135:GBPeny]
Status: yellow
UK-Brexit Zone Name details:
Country: United Kingdom
Zone: All Zones
Note: Nothing done to the other 3 zone definitions: Idaho, International, USA
Customer in the Netherlands logs into their account, adds items to cart and begins checkout process.
Error message
ERROR: Orders to this destination must be greater than £135
Currency selected: USD
Currency is updated every 3rd day by CRON and was last updated 3/25/2021 @ 10am PDT
I cannot do anything to troubleshoot until after the affected customer places their order, which I expect sometime today.
Rick
RixStix (dot) com
aka: ChainWeavers (dot) com
Bookmarks