[TYPO3-commerce] Different tax rates based on country
Bartbogdan
bdubelaar at sundayafternoon.nl
Wed Apr 28 10:29:11 CEST 2010
Hi Georg,
Thanks for your extensive reply. Based on your hints and hints from
Morten Olsen I've come to the following working solution:
// This hook is used to alter the gross sum in the listing view
function processMarkerBasketInformation($markerArray, &$basket, $parentObject){
if(($parentObject->MYSESSION["billing"]["country"]) != "NLD" AND
($parentObject->conf['ordernumber_prefix'] == "R")){
$markerArray['###SUM_GROSS###'] = $markerArray['###SUM_NET###'];
}
return $markerArray;
}
// This hook is used to alter the actual prices before payment. The new
prices will "stick" and also show up on the invoice.
function prepayment($payment, &$basket, $parentObject){
if(($parentObject->MYSESSION["billing"]["country"]) != "NLD" AND
($parentObject->conf['ordernumber_prefix'] == "R")){
if (is_array($basket->basket_items)) {
foreach($basket->basket_items as &$basketItem) {
$basketItem->setPriceGross($basketItem->get_price_net());
$basketItem->article->tax = 0;
$basketItem->recalculate_item_sums();
}
}
$basket->recalculate_sums();
$basket->store_data();
}
return;
}
In the conditions I'm using I check if the billing country is other
then the Netherlands (checking of delivery country could be added like
in your example). I also check if the customer is a retail customer, in
our retail shop all orders are being prefixed with R.
Thanks again,
Bart
Op 2010-04-27 11:33:25 +0200, zei "Georg Schönweger"
<georg.schoenweger at gmail.com>:
> Hi Bart,
>
> we are calculating the delivery and payment costs based on the user
> selected country. In order to do this we are showing in the basket only
> the net price, and only in the last step (listing) we are showing the
> gross price. There the prices gets changed based on the user selected
> country. I think you could do the something similar for tax rates. We
> are using the Hook "preSwitch" in pi3/class.tx_..._pi3.php which gets
> executed before the calculation of gross price is made. In your hook
> method you can set something like:
>
> function preSwitch($currentStep,$lThis) {
> if($currentStep == "listing" || $currentStep == "finish" ||
> $currentStep == "payment") {
> // code will be executed only in last step..
> $curCountry = $lThis->MYSESSION["delivery"]["country"] ?
> $lThis->MYSESSION["delivery"]["country"] :
> $lThis->MYSESSION["billing"]["country"];
> $basketObj = $GLOBALS['TSFE']->fe_user->tx_commerce_basket;
> ....
>
> $basketObj->changePrices($articleUid,$newPriceGross,$newPriceNet); //
> just as an example..
>
> $basketObj->store_data(); // store in DB, maybe you don't need
> this..
> $basketObj->recalculate_sums();
> }
> }
>
> you can see it in action: http://www.snillo.it
>
> By the way i would like to say thanks for this great commerce extension!
> Because of the flexibility of commerce we can sell personalized products
> (t-shirts, gadgets ecc.), dynamic categories / dynamic products only by
> using hooks.
>
> regards,
> Georg
>
> Am 27.04.2010 10:20, schrieb Erik Sokoll:
>> Hello Bart,
>> this example only solves the problem if you have to show, or not to show
>> the tax depending on the region you are going to buy (see listing
>> below). So it's only 'TAX=YES' or 'TAX=NO'.
>>
>> There is only one special situation: If the shop sells to (german)
>> dealers/merchant... let's say B2B in Germany... the dealer has to pay
>> the tax in the end but while browsing the webpage he needs to see NET
>> prices. So for products his ID (in this case 3) gets NET templates and
>> only for checkout id 3 has the GROSS template.
>>
>> Here a small listing, regarding Germany:
>> B2C-D Tax is shown
>> B2B-D Tax is not shown but has to be payed in the end
>> B2C-EU Tax is shown
>> B2B-EU No Tax at all
>> B2C-WORLD No Tax at all
>> B2B-WORLD No Tax at all
>>
>> (ok... you could break this down to 3 groups but we need it like this)
>>
>> About your problem, it is maybe what you need. Because the billing has
>> to be done regarding the law of the country where you are going to sell.
>> Here we have (at the moment) 19 or 7 percent an it sticks to a certain
>> article. Only some "groups" don't need to pay the tax at all.
>>
>> If you want to set the tax free from the product and want to sell the
>> same product with e.g. 5, 16, 20 and 47.11 percent, I guess you have to
>> create articles more often and than restrict them to groups.
>> But I have no idea in which case you will need this.
>>
>> Greetings...
>> Erik
>>
>>
>> Bartbogdan schrieb:
>>> This way you could hide all gross prices. But this doesn't solve the
>>> billing problem, right?
>>> Somehow the tax should actually be changed in the order and the gross
>>> price should be recalculated. I'm trying to find the proper hook to call
>>> before payment, but it's hard to find one. Many hooks exist to alter the
>>> price after payment, but that doesn't help. As it should be changed on
>>> the basis of the selected country I was trying to use the hook that is
>>> called when adding a delivery article, but there I'm only able to change
>>> the price of the regular articles (not the payment and delivery
>>> articles), and the changes don't "stick". Any help in finding the proper
>>> hook is appreciated!
>>
>>> Best regards,
>>
>>> Bart
>>
>>
>>
>>> Op 2010-04-20 12:09:21 +0200, zei Erik Sokoll <erik at t3media.de>:
>>
>>> I did it by CONDITIONs and choose a different template (e.g.
>>> product.tmpl and product_net.tmpl) if the user belongs to a specific
>>> FE_users group.
>>
>>> [usergroup = 3,5,6,7]
>>> plugin.tx_commerce_pi1.templateFile =
>>> fileadmin/templates/ext/commerce/product_netto.html
>>> plugin.tx_commerce_pi2.templateFile =
>>> fileadmin/templates/ext/commerce/basket_netto.html
>>> [else]
>>> plugin.tx_commerce_pi1.templateFile =
>>> fileadmin/templates/ext/commerce/product.html
>>> plugin.tx_commerce_pi2.templateFile =
>>> fileadmin/templates/ext/commerce/basket.html
>>> [end]
>>
>>> But remember that in this case you have to move the user to this group.
>>> In our case it's not (yet) done automatically and on the other side a
>>> human has to decide if the user e.g. has the 'licence' to deal inside
>>> Germany.
>>
>>> Anyhow you might use other conditions which fit your needs.
>>
>>> Greetings...
>>> Erik
>>
>>
>>> Bartbogdan schrieb:
>>>>>> Hi all,
>>>>>>
>>>>>> Is there a way to apply a different tax rate based on the destination
>>>>>> country? We would like to apply a tax rate of 0% when shipping to
>>>>>> retailers in foreign countries.
>>>>>>
>>>>>> Best regards,
>>>>>>
>>>>>> Bart
>>>>>>
>>>>>> _______________________________________________
>>>>>> TYPO3-project-commerce mailing list
>>>>>> TYPO3-project-commerce at lists.typo3.org
>>>>>>
>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-project-commerce
>>
>>
>>
>>> _______________________________________________
>>> TYPO3-project-commerce mailing list
>>> TYPO3-project-commerce at lists.typo3.org
>>> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-project-commerce
>>
>>
>>
>>
> _______________________________________________
> TYPO3-project-commerce mailing list
> TYPO3-project-commerce at lists.typo3.org
> http://lists.typo3.org/cgi-bin/mailman/listinfo/typo3-project-commerce
More information about the TYPO3-project-commerce
mailing list