Taxes are calculated using the address in the customer profile. A customer can just register with an address from a country without taxes, set his default shipping address to this address, then checkout and enter another address. He should pay taxes based on the shipping address entered during checkout, but he isn't because magento uses the profile data to calculate the taxes! How to change this?
You can just go to
System->Configuration->Tax->Calculation Settings and set the field
Tax Calculation Based On to
This way if the user tries to trick you and fills in the default address a country without taxes, he will see the catalog prices without taxes, but when he tries to checkout and fills in a different shipping address the prices will change to include taxes.
My experience has been that taxes are not always calculated purely based on the data in the order but sometimes based on the actions that the user takes in the checkout. My expectation was that taxes would be calculated based on order data alone.
I setup Magento admin tax to use the shipping address for taxes. I then create 2 orders with identical values.
- billing address is UK,
- shipping address is Canada, BC
- When order is placed tax is correctly calculated to use BC tax
- Identical data as used above except:
- In the checkout, the user switches from ship-to-shipping-address, to ship-to-billing-address, and then switches back again.
- When the order is placed, the tax is now calculated incorrectly.
In both of these orders, the data in the order page in Magento admin appears to be identical except for the tax. This leads me to think that the tax calculation is not based purely on the order data but also on user actions in some cases.
Perhaps this is a bug in the checkout extension we're using and it has broken the tax calculation when the order is placed. This seems like the most likely cause.