Jump to content

Archived

This topic is now archived and is closed to further replies.

helohelo

invoice and VAT rules thats legal for European Uni

Recommended Posts

For E.U VAT_intracom_v3.4,

This is the updated catalog/includes/classes/order.php you have to change if you don't want taxes with the following conditions:

the billing company field is not NULL

AND

the billing tva_intracom field is not NULL

AND

the billing country is different than the STORE_COUNTRY

AND

the delivery country is different than the STORE_COUNTRY

 

 

[code<?php
/*
$Id: order.php,v 1.33 2003/06/09 22:25:35 hpdl Exp $

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright © 2003 osCommerce

Released under the GNU General Public License
*/

class order {
var $info, $totals, $products, $customer, $delivery, $content_type;

function order($order_id = '') {
$this->info = array();
$this->totals = array();
$this->products = array();
$this->customer = array();
$this->delivery = array();

if (tep_not_null($order_id)) {
$this->query($order_id);
} else {
$this->cart();
}
}

function query($order_id) {
global $languages_id;

$order_id = tep_db_prepare_input($order_id);
//Add for TVA_intracom_v3.4 : "billing_tva_intracom"
$order_query = tep_db_query("select customers_id, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_tva_intracom, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
$order = tep_db_fetch_array($order_query);

$totals_query = tep_db_query("select title, text from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "' order by sort_order");
while ($totals = tep_db_fetch_array($totals_query)) {
$this->totals[] = array('title' => $totals['title'],
'text' => $totals['text']);
}

$order_total_query = tep_db_query("select text from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "' and class = 'ot_total'");
$order_total = tep_db_fetch_array($order_total_query);

$shipping_method_query = tep_db_query("select title from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "' and class = 'ot_shipping'");
$shipping_method = tep_db_fetch_array($shipping_method_query);

$order_status_query = tep_db_query("select orders_status_name from " . TABLE_ORDERS_STATUS . " where orders_status_id = '" . $order['orders_status'] . "' and language_id = '" . (int)$languages_id . "'");
$order_status = tep_db_fetch_array($order_status_query);

$this->info = array('currency' => $order['currency'],
'currency_value' => $order['currency_value'],
'payment_method' => $order['payment_method'],
'cc_type' => $order['cc_type'],
'cc_owner' => $order['cc_owner'],
'cc_number' => $order['cc_number'],
'cc_expires' => $order['cc_expires'],
'date_purchased' => $order['date_purchased'],
'orders_status' => $order_status['orders_status_name'],
'last_modified' => $order['last_modified'],
'total' => strip_tags($order_total['text']),
'shipping_method' => ((substr($shipping_method['title'], -1) == ':') ? substr(strip_tags($shipping_method['title']), 0, -1) : strip_tags($shipping_method['title'])));

$this->customer = array('id' => $order['customers_id'],
'name' => $order['customers_name'],
'company' => $order['customers_company'],
'street_address' => $order['customers_street_address'],
'suburb' => $order['customers_suburb'],
'city' => $order['customers_city'],
'postcode' => $order['customers_postcode'],
'state' => $order['customers_state'],
'country' => $order['customers_country'],
'format_id' => $order['customers_address_format_id'],
'telephone' => $order['customers_telephone'],
'email_address' => $order['customers_email_address']);

$this->delivery = array('name' => $order['delivery_name'],
'company' => $order['delivery_company'],
'street_address' => $order['delivery_street_address'],
'suburb' => $order['delivery_suburb'],
'city' => $order['delivery_city'],
'postcode' => $order['delivery_postcode'],
'state' => $order['delivery_state'],
'country' => $order['delivery_country'],
'format_id' => $order['delivery_address_format_id']);

if (empty($this->delivery['name']) && empty($this->delivery['street_address'])) {
$this->delivery = false;
}

$this->billing = array('name' => $order['billing_name'],
'company' => $order['billing_company'],
//BOF for TVA_intracom_v3.4
'tva_intracom' => $order['billing_tva_intracom'],
// EOF for TVA_intracom_v3.4
'street_address' => $order['billing_street_address'],
'suburb' => $order['billing_suburb'],
'city' => $order['billing_city'],
'postcode' => $order['billing_postcode'],
'state' => $order['billing_state'],
'country' => $order['billing_country'],
'format_id' => $order['billing_address_format_id']);

$index = 0;
$orders_products_query = tep_db_query("select orders_products_id, products_id, products_name, products_model, products_price, products_tax, products_quantity, final_price from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");
while ($orders_products = tep_db_fetch_array($orders_products_query)) {
$this->products[$index] = array('qty' => $orders_products['products_quantity'],
'id' => $orders_products['products_id'],
'name' => $orders_products['products_name'],
'model' => $orders_products['products_model'],
'tax' => $orders_products['products_tax'],
'price' => $orders_products['products_price'],
'final_price' => $orders_products['final_price']);

$subindex = 0;
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "' and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'");
if (tep_db_num_rows($attributes_query)) {
while ($attributes = tep_db_fetch_array($attributes_query)) {
$this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options'],
'value' => $attributes['products_options_values'],
'prefix' => $attributes['price_prefix'],
'price' => $attributes['options_values_price']);

$subindex++;
}
}

$this->info['tax_groups']["{$this->products[$index]['tax']}"] = '1';

$index++;
}
}

function cart() {
global $customer_id, $sendto, $billto, $cart, $languages_id, $currency, $currencies, $shipping, $payment;

$this->content_type = $cart->get_content_type();

//Add for TVA_intracom_v3.4 : "ab.entry_tva_intracom"
$customer_address_query = tep_db_query("select c.customers_firstname, c.customers_lastname, c.customers_telephone, c.customers_email_address, ab.entry_company, ab.entry_tva_intracom, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, co.countries_id, co.countries_name, co.countries_iso_code_2, co.countries_iso_code_3, co.address_format_id, ab.entry_state from " . TABLE_CUSTOMERS . " c, " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) left join " . TABLE_COUNTRIES . " co on (ab.entry_country_id = co.countries_id) where c.customers_id = '" . (int)$customer_id . "' and ab.customers_id = '" . (int)$customer_id . "' and c.customers_default_address_id = ab.address_book_id");
$customer_address = tep_db_fetch_array($customer_address_query);

$shipping_address_query = tep_db_query("select ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format_id, ab.entry_state from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) left join " . TABLE_COUNTRIES . " c on (ab.entry_country_id = c.countries_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)$sendto . "'");
$shipping_address = tep_db_fetch_array($shipping_address_query);

//Add for TVA_intracom_v3.4 : "ab.entry_tva_intracom"
$billing_address_query = tep_db_query("select ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_tva_intracom, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format_id, ab.entry_state from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) left join " . TABLE_COUNTRIES . " c on (ab.entry_country_id = c.countries_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)$billto . "'");
$billing_address = tep_db_fetch_array($billing_address_query);

$tax_address_query = tep_db_query("select ab.entry_country_id, ab.entry_zone_id from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $billto : $sendto) . "'");
$tax_address = tep_db_fetch_array($tax_address_query);

$this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
'currency' => $currency,
'currency_value' => $currencies->currencies[$currency]['value'],
'payment_method' => $payment,
'cc_type' => (isset($GLOBALS['cc_type']) ? $GLOBALS['cc_type'] : ''),
'cc_owner' => (isset($GLOBALS['cc_owner']) ? $GLOBALS['cc_owner'] : ''),
'cc_number' => (isset($GLOBALS['cc_number']) ? $GLOBALS['cc_number'] : ''),
'cc_expires' => (isset($GLOBALS['cc_expires']) ? $GLOBALS['cc_expires'] : ''),
'shipping_method' => $shipping['title'],
'shipping_cost' => $shipping['cost'],
'subtotal' => 0,
'tax' => 0,
'tax_groups' => array(),
'comments' => (isset($GLOBALS['comments']) ? $GLOBALS['comments'] : ''));

if (isset($GLOBALS[$payment]) && is_object($GLOBALS[$payment])) {
$this->info['payment_method'] = $GLOBALS[$payment]->title;

if ( isset($GLOBALS[$payment]->order_status) && is_numeric($GLOBALS[$payment]->order_status) && ($GLOBALS[$payment]->order_status > 0) ) {
$this->info['order_status'] = $GLOBALS[$payment]->order_status;
}
}

$this->customer = array('firstname' => $customer_address['customers_firstname'],
'lastname' => $customer_address['customers_lastname'],
'company' => $customer_address['entry_company'],
'street_address' => $customer_address['entry_street_address'],
'suburb' => $customer_address['entry_suburb'],
'city' => $customer_address['entry_city'],
'postcode' => $customer_address['entry_postcode'],
'state' => ((tep_not_null($customer_address['entry_state'])) ? $customer_address['entry_state'] : $customer_address['zone_name']),
'zone_id' => $customer_address['entry_zone_id'],
'country' => array('id' => $customer_address['countries_id'], 'title' => $customer_address['countries_name'], 'iso_code_2' => $customer_address['countries_iso_code_2'], 'iso_code_3' => $customer_address['countries_iso_code_3']),
'format_id' => $customer_address['address_format_id'],
'telephone' => $customer_address['customers_telephone'],
'email_address' => $customer_address['customers_email_address']);

$this->delivery = array('firstname' => $shipping_address['entry_firstname'],
'lastname' => $shipping_address['entry_lastname'],
'company' => $shipping_address['entry_company'],
'street_address' => $shipping_address['entry_street_address'],
'suburb' => $shipping_address['entry_suburb'],
'city' => $shipping_address['entry_city'],
'postcode' => $shipping_address['entry_postcode'],
'state' => ((tep_not_null($shipping_address['entry_state'])) ? $shipping_address['entry_state'] : $shipping_address['zone_name']),
'zone_id' => $shipping_address['entry_zone_id'],
'country' => array('id' => $shipping_address['countries_id'], 'title' => $shipping_address['countries_name'], 'iso_code_2' => $shipping_address['countries_iso_code_2'], 'iso_code_3' => $shipping_address['countries_iso_code_3']),
'country_id' => $shipping_address['entry_country_id'],
'format_id' => $shipping_address['address_format_id']);

$this->billing = array('firstname' => $billing_address['entry_firstname'],
'lastname' => $billing_address['entry_lastname'],
'company' => $billing_address['entry_company'],
//BOF for n? TVA_intracom_v3.4
'tva_intracom' => $billing_address['entry_tva_intracom'],
// EOF for TVA_intracom_v3.4
'street_address' => $billing_address['entry_street_address'],
'suburb' => $billing_address['entry_suburb'],
'city' => $billing_address['entry_city'],
'postcode' => $billing_address['entry_postcode'],
'state' => ((tep_not_null($billing_address['entry_state'])) ? $billing_address['entry_state'] : $billing_address['zone_name']),
'zone_id' => $billing_address['entry_zone_id'],
'country' => array('id' => $billing_address['countries_id'], 'title' => $billing_address['countries_name'], 'iso_code_2' => $billing_address['countries_iso_code_2'], 'iso_code_3' => $billing_address['countries_iso_code_3']),
'country_id' => $billing_address['entry_country_id'],
'format_id' => $billing_address['address_format_id']);

$index = 0;
$products = $cart->get_products();
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
$this->products[$index] = array('qty' => $products[$i]['quantity'],
'name' => $products[$i]['name'],
'model' => $products[$i]['model'],
'tax' => tep_get_tax_rate($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
'tax_description' => tep_get_tax_description($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
'price' => $products[$i]['price'],
'final_price' => $products[$i]['price'] + $cart->attributes_price($products[$i]['id']),
'weight' => $products[$i]['weight'],
'id' => $products[$i]['id']);

if ($products[$i]['attributes']) {
$subindex = 0;
reset($products[$i]['attributes']);
while (list($option, $value) = each($products[$i]['attributes'])) {
$attributes_query = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . (int)$products[$i]['id'] . "' and pa.options_id = '" . (int)$option . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . (int)$value . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . (int)$languages_id . "' and poval.language_id = '" . (int)$languages_id . "'");
$attributes = tep_db_fetch_array($attributes_query);

$this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options_name'],
'value' => $attributes['products_options_values_name'],
'option_id' => $option,
'value_id' => $value,
'prefix' => $attributes['price_prefix'],
'price' => $attributes['options_values_price']);

$subindex++;
}
}
// BOF for TVA_intracom_v3.4
if ($this->billing['company'] != '' && $this->billing['tva_intracom'] != '' && $this->billing['country']['id'] != STORE_COUNTRY && $this->delivery['country']['id'] != STORE_COUNTRY) {
$shown_price = $this->products[$index]['final_price'] * $this->products[$index]['qty'];
$this->info['subtotal'] += $shown_price;
} else {
// EOF for TVA_intracom_v3.4

$shown_price = tep_add_tax($this->products[$index]['final_price'], $this->products[$index]['tax']) * $this->products[$index]['qty'];
$this->info['subtotal'] += $shown_price;
// BOF for TVA_intracom_v3.4
}
// EOF for TVA_intracom_v3.4

// BOF for TVA_intracom_v3.4
if ($this->billing['company'] != '' && $this->billing['tva_intracom'] != '' && $this->billing['country']['id'] != STORE_COUNTRY && $this->delivery['country']['id'] != STORE_COUNTRY) {
$products_tax = 0;
$products_tax_description = NO_TAX;
} else {
// EOF for TVA_intracom_v3.4
$products_tax = $this->products[$index]['tax'];
$products_tax_description = $this->products[$index]['tax_description'];
// BOF for TVA_intracom_v3.4
}
// EOF for TVA_intracom_v3.4

if (DISPLAY_PRICE_WITH_TAX == 'true') {
$this->info['tax'] += $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
if (isset($this->info['tax_groups']["$products_tax_description"])) {
$this->info['tax_groups']["$products_tax_description"] += $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
} else {
$this->info['tax_groups']["$products_tax_description"] = $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
}
} else {
$this->info['tax'] += ($products_tax / 100) * $shown_price;
if (isset($this->info['tax_groups']["$products_tax_description"])) {
$this->info['tax_groups']["$products_tax_description"] += ($products_tax / 100) * $shown_price;
} else {
$this->info['tax_groups']["$products_tax_description"] = ($products_tax / 100) * $shown_price;
}
}

$index++;
}

if (DISPLAY_PRICE_WITH_TAX == 'true') {
$this->info['total'] = $this->info['subtotal'] + $this->info['shipping_cost'];
} else {
$this->info['total'] = $this->info['subtotal'] + $this->info['tax'] + $this->info['shipping_cost'];
}
}
}
?>
[/code]

 

Test it and if you don't find buggs (I think you will not...), I will post an updated contribution E.U VAT_intracom_v3.4

 

Enjoy ;)


JeanLuc

OsC: MS2

Share this post


Link to post
Share on other sites

hello!

sorry missed your public post about order .php

 

I think we have one misunderstanding. Companies outside EU and private persones outside EU DO NOT PAY TAXES ATT ALL


Keesjan

Share this post


Link to post
Share on other sites

hello!

sorry missed your public post about order .php

 

I am agree with you about the companies outside EU but the pb is to be sure that the customer IS a company:

 

 

 

It is a non-european company outside from the EU (billing address) of the store with a shipping address outside the EU, there is NO VAT.

 

 

  There is no way to prove it so I apply VAT and if it is a company, this company will get back the tax after...

sorry, you are right. i did not add this becuse we agreed on that already. i will try to be so complete in my communication as possible.

 

 

A company without VAT number (within EU) :

 

I don't understand what you mean: ALL the european companies must have a VAT number, it is the law, now. So, if we have a VAT number, of course it is a company inside EU, if we haven't, may be it's a european company but we can't make an invoice without VAT because we haven't the VAT number.

I toaly agree, you are right. i meant: private person fil in company name with fals vat or no vat at all.

 

 

I think we have 2 misunderstanding.

1-Companies outside EU and private persones outside EU DO NOT PAY TAXES ATT ALL for electronic services. Thsi is done to give us , european ship owners, the sam advantages as our united state collegues. All other rules inside eu apply: in same eu countrey as shop=vat in eu but not in shop countrey only no vat if valid vat is given. I surely agree that when someone is joking about vat number he should pay the vat. Only varified vat numbers from companies in eu country shouls get the no vat invoice.

2-bases in EU, what does that mean? From my accountent: Its the purchase relationship between shopowner and client that defines the base of the purchasing company . What does this mean: that the billing adress defines where the company is based. THIS IS ALSO FOR FYSICAL GOODS! and electronic services also.

 

I prefer the following because they're is always a shipping address in OSC:

 

QUOTE 

We notice that the only way to don't have VAT is only for a company with a VAT number, which is not of the same country of the store

with a shipping address outside of the store country OR

with ONLY virtual products in order (electronic service for ex..)

Sorry I do not understand: is there a way in oscommerce to define if a product is physical good or non physical good like service? is the shipping adres also there when its a service? in your explanation of version 3.4 yoy say this:

 

 

the billing company field is not NULL

AND

the billing tva_intracom field is not NULL

AND

the billing country is different than the STORE_COUNTRY

AND

the delivery country is different than the STORE_COUNTRY

I think last rule must be:

the billing country is different than the STORE_COUNTRY

because headquarter in lets say germany pays for it but the shipping is made to france. the billing adress is in germany and this defines the countrey where thsi company is based!

 

SO

We notice that the only way to don't have VAT is only for a company with a VAT number, which is not of the same country of the store

with a shipping address outside of the store country OR

with ONLY virtual products in order (electronic service for ex..)

 

should be: ( i think)

We notice that the only way to don't have VAT is only for a company with a VALID VAT number, which is not of the same country of the store

with a BILLING address outside of the store country OR WHEN BILLING ADRESS IS OUTSIDE EU)

 

or did you not apply last rule (OR WHEN BILLING ADRESS IS OUTSIDE EU) because thsi is done with tax zones already?


Keesjan

Share this post


Link to post
Share on other sites
should be: ( i think)

We notice that the only way to don't have VAT is only for a company with a VALID VAT number, which is not of the same country of the store

with a BILLING address outside of the store country OR WHEN BILLING ADRESS IS OUTSIDE EU)

I always thought that for physical product, the "export" notion was dependant of the place where the product is delivered: outside the country where the product was bought... So I think that for physical product, the shipping address is important for including VAT or not... I think that if a foreign company (in EU or not) buy a product but for delivering in the same country as the shop, it is not export so VAT is included in the invoice...

 

or did you not apply last rule (OR WHEN BILLING ADRESS IS OUTSIDE EU) because thsi is done with tax zones already?

What do you mean?


JeanLuc

OsC: MS2

Share this post


Link to post
Share on other sites
or did you not apply last rule (OR WHEN BILLING ADRESS IS OUTSIDE EU) because thsi is done with tax zones already?

Ok, I understand the solution for electronics services. Reading this post:

For having no taxes on the electronics services outside EU, I have to create a Tax class called "Electronic services 0%", create a tax zone called "EU" with the 15 countries and create a tax rate of X% (amount of the shop country) only for "electronic service 0%" in "EU".

So the tax will be paid only by european...

 

There is 6 months I work with OsC and I understand this only now... :rolleyes:


JeanLuc

OsC: MS2

Share this post


Link to post
Share on other sites

Try to make an company eu order with vat

the vat is face afcourse. is this why the vat is added?

 

Order #19 (Delivered)

Order Date: Friday 13 February, 2004 Order Total: $35.51

Delivery Address

denmark bv

denmark kopenhagen

kopenlane 12

kopenhage, 6828kx

strunlub, Denmark

 

Products

1 x Pro Plan $42.26

Billing Information

Billing Address

denmark bv

denmark kopenhagen

kopenlane 12

kopenhage, 6828kx

strunlub, Denmark

N? TVA intracom :

DK12345678

Payment Method

Credit Card

 

Sub-Total: $35.51

Total: $35.51

Order History

02/13/2004 Delivered


Keesjan

Share this post


Link to post
Share on other sites

now same account with company name filled in, no vat givven:

so the vat is counted, seem sok, only the amount for vat is not named (see red)

 

Delivery Address (Edit)

companyfake

denmark no vat

ggerger 56

rqrf

kopenhage, 2345rf

fryyuj, Denmark

 

Products (Edit)

1 x Pro Plan*** $42.26 (Inc.VAT)

$35.51(Ex.VAT)

Billing Information

Billing Address (Edit)

companyfake

denmark no vat

ggerger 56

rqrf

kopenhage, 2345rf

fryyuj, Denmark

Payment Method (Edit)

Credit Card

 

Sub-Total: $42.26

: $6.75Total: $42.26

Payment Information

Credit Card: Visa

Credit Card Owner: denmark no vat

Credit Card Number: 4111XXXXXXXX1111

Credit Card Expiry Date: May, 2004


Keesjan

Share this post


Link to post
Share on other sites
May be some experiment encoder can explain me how to know in catalog/includes/classes/order.php there is only virtual products in the cart...

 

Ok I found: think it's:

if ($order->content_type == 'virtual') { ... }

virtual?

How does osc know a product is virtual?

Can I sett this in admin somewhere?

Iam working with osc for 3 month now but this is the first time I here from it ;)


Keesjan

Share this post


Link to post
Share on other sites

Downloadable products are virtual. In the core code, this is the only way to implement them (without code changes). In the Credit Class and Gift Voucher contribution, products with zero weight are also treated as virtual.

 

Hth,

Matt


Always back up before making changes.

Share this post


Link to post
Share on other sites
For E.U VAT_intracom_v3.4,

This is the updated catalog/includes/classes/order.php you have to change if you don't want taxes with the following conditions:

the billing company field is not NULL

AND

the billing tva_intracom field is not NULL

AND

the billing country is different than the STORE_COUNTRY

AND

the delivery country is different than the STORE_COUNTRY

 

 

[code<?php
/*
$Id: order.php,v 1.33 2003/06/09 22:25:35 hpdl Exp $

osCommerce, Open Source E-Commerce Solutions
http://www.oscommerce.com

Copyright ? 2003 osCommerce

Released under the GNU General Public License
*/

class order {
var $info, $totals, $products, $customer, $delivery, $content_type;

function order($order_id = '') {
$this->info = array();
$this->totals = array();
$this->products = array();
$this->customer = array();
$this->delivery = array();

if (tep_not_null($order_id)) {
$this->query($order_id);
} else {
$this->cart();
}
}

function query($order_id) {
global $languages_id;

$order_id = tep_db_prepare_input($order_id);
//Add for TVA_intracom_v3.4 : "billing_tva_intracom"
$order_query = tep_db_query("select customers_id, customers_name, customers_company, customers_street_address, customers_suburb, customers_city, customers_postcode, customers_state, customers_country, customers_telephone, customers_email_address, customers_address_format_id, delivery_name, delivery_company, delivery_street_address, delivery_suburb, delivery_city, delivery_postcode, delivery_state, delivery_country, delivery_address_format_id, billing_name, billing_company, billing_tva_intracom, billing_street_address, billing_suburb, billing_city, billing_postcode, billing_state, billing_country, billing_address_format_id, payment_method, cc_type, cc_owner, cc_number, cc_expires, currency, currency_value, date_purchased, orders_status, last_modified from " . TABLE_ORDERS . " where orders_id = '" . (int)$order_id . "'");
$order = tep_db_fetch_array($order_query);

$totals_query = tep_db_query("select title, text from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "' order by sort_order");
while ($totals = tep_db_fetch_array($totals_query)) {
$this->totals[] = array('title' => $totals['title'],
'text' => $totals['text']);
}

$order_total_query = tep_db_query("select text from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "' and class = 'ot_total'");
$order_total = tep_db_fetch_array($order_total_query);

$shipping_method_query = tep_db_query("select title from " . TABLE_ORDERS_TOTAL . " where orders_id = '" . (int)$order_id . "' and class = 'ot_shipping'");
$shipping_method = tep_db_fetch_array($shipping_method_query);

$order_status_query = tep_db_query("select orders_status_name from " . TABLE_ORDERS_STATUS . " where orders_status_id = '" . $order['orders_status'] . "' and language_id = '" . (int)$languages_id . "'");
$order_status = tep_db_fetch_array($order_status_query);

$this->info = array('currency' => $order['currency'],
'currency_value' => $order['currency_value'],
'payment_method' => $order['payment_method'],
'cc_type' => $order['cc_type'],
'cc_owner' => $order['cc_owner'],
'cc_number' => $order['cc_number'],
'cc_expires' => $order['cc_expires'],
'date_purchased' => $order['date_purchased'],
'orders_status' => $order_status['orders_status_name'],
'last_modified' => $order['last_modified'],
'total' => strip_tags($order_total['text']),
'shipping_method' => ((substr($shipping_method['title'], -1) == ':') ? substr(strip_tags($shipping_method['title']), 0, -1) : strip_tags($shipping_method['title'])));

$this->customer = array('id' => $order['customers_id'],
'name' => $order['customers_name'],
'company' => $order['customers_company'],
'street_address' => $order['customers_street_address'],
'suburb' => $order['customers_suburb'],
'city' => $order['customers_city'],
'postcode' => $order['customers_postcode'],
'state' => $order['customers_state'],
'country' => $order['customers_country'],
'format_id' => $order['customers_address_format_id'],
'telephone' => $order['customers_telephone'],
'email_address' => $order['customers_email_address']);

$this->delivery = array('name' => $order['delivery_name'],
'company' => $order['delivery_company'],
'street_address' => $order['delivery_street_address'],
'suburb' => $order['delivery_suburb'],
'city' => $order['delivery_city'],
'postcode' => $order['delivery_postcode'],
'state' => $order['delivery_state'],
'country' => $order['delivery_country'],
'format_id' => $order['delivery_address_format_id']);

if (empty($this->delivery['name']) && empty($this->delivery['street_address'])) {
$this->delivery = false;
}

$this->billing = array('name' => $order['billing_name'],
'company' => $order['billing_company'],
//BOF for TVA_intracom_v3.4
'tva_intracom' => $order['billing_tva_intracom'],
// EOF for TVA_intracom_v3.4
'street_address' => $order['billing_street_address'],
'suburb' => $order['billing_suburb'],
'city' => $order['billing_city'],
'postcode' => $order['billing_postcode'],
'state' => $order['billing_state'],
'country' => $order['billing_country'],
'format_id' => $order['billing_address_format_id']);

$index = 0;
$orders_products_query = tep_db_query("select orders_products_id, products_id, products_name, products_model, products_price, products_tax, products_quantity, final_price from " . TABLE_ORDERS_PRODUCTS . " where orders_id = '" . (int)$order_id . "'");
while ($orders_products = tep_db_fetch_array($orders_products_query)) {
$this->products[$index] = array('qty' => $orders_products['products_quantity'],
'id' => $orders_products['products_id'],
'name' => $orders_products['products_name'],
'model' => $orders_products['products_model'],
'tax' => $orders_products['products_tax'],
'price' => $orders_products['products_price'],
'final_price' => $orders_products['final_price']);

$subindex = 0;
$attributes_query = tep_db_query("select products_options, products_options_values, options_values_price, price_prefix from " . TABLE_ORDERS_PRODUCTS_ATTRIBUTES . " where orders_id = '" . (int)$order_id . "' and orders_products_id = '" . (int)$orders_products['orders_products_id'] . "'");
if (tep_db_num_rows($attributes_query)) {
while ($attributes = tep_db_fetch_array($attributes_query)) {
$this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options'],
'value' => $attributes['products_options_values'],
'prefix' => $attributes['price_prefix'],
'price' => $attributes['options_values_price']);

$subindex++;
}
}

$this->info['tax_groups']["{$this->products[$index]['tax']}"] = '1';

$index++;
}
}

function cart() {
global $customer_id, $sendto, $billto, $cart, $languages_id, $currency, $currencies, $shipping, $payment;

$this->content_type = $cart->get_content_type();

//Add for TVA_intracom_v3.4 : "ab.entry_tva_intracom"
$customer_address_query = tep_db_query("select c.customers_firstname, c.customers_lastname, c.customers_telephone, c.customers_email_address, ab.entry_company, ab.entry_tva_intracom, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, co.countries_id, co.countries_name, co.countries_iso_code_2, co.countries_iso_code_3, co.address_format_id, ab.entry_state from " . TABLE_CUSTOMERS . " c, " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) left join " . TABLE_COUNTRIES . " co on (ab.entry_country_id = co.countries_id) where c.customers_id = '" . (int)$customer_id . "' and ab.customers_id = '" . (int)$customer_id . "' and c.customers_default_address_id = ab.address_book_id");
$customer_address = tep_db_fetch_array($customer_address_query);

$shipping_address_query = tep_db_query("select ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format_id, ab.entry_state from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) left join " . TABLE_COUNTRIES . " c on (ab.entry_country_id = c.countries_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)$sendto . "'");
$shipping_address = tep_db_fetch_array($shipping_address_query);

//Add for TVA_intracom_v3.4 : "ab.entry_tva_intracom"
$billing_address_query = tep_db_query("select ab.entry_firstname, ab.entry_lastname, ab.entry_company, ab.entry_tva_intracom, ab.entry_street_address, ab.entry_suburb, ab.entry_postcode, ab.entry_city, ab.entry_zone_id, z.zone_name, ab.entry_country_id, c.countries_id, c.countries_name, c.countries_iso_code_2, c.countries_iso_code_3, c.address_format_id, ab.entry_state from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) left join " . TABLE_COUNTRIES . " c on (ab.entry_country_id = c.countries_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)$billto . "'");
$billing_address = tep_db_fetch_array($billing_address_query);

$tax_address_query = tep_db_query("select ab.entry_country_id, ab.entry_zone_id from " . TABLE_ADDRESS_BOOK . " ab left join " . TABLE_ZONES . " z on (ab.entry_zone_id = z.zone_id) where ab.customers_id = '" . (int)$customer_id . "' and ab.address_book_id = '" . (int)($this->content_type == 'virtual' ? $billto : $sendto) . "'");
$tax_address = tep_db_fetch_array($tax_address_query);

$this->info = array('order_status' => DEFAULT_ORDERS_STATUS_ID,
'currency' => $currency,
'currency_value' => $currencies->currencies[$currency]['value'],
'payment_method' => $payment,
'cc_type' => (isset($GLOBALS['cc_type']) ? $GLOBALS['cc_type'] : ''),
'cc_owner' => (isset($GLOBALS['cc_owner']) ? $GLOBALS['cc_owner'] : ''),
'cc_number' => (isset($GLOBALS['cc_number']) ? $GLOBALS['cc_number'] : ''),
'cc_expires' => (isset($GLOBALS['cc_expires']) ? $GLOBALS['cc_expires'] : ''),
'shipping_method' => $shipping['title'],
'shipping_cost' => $shipping['cost'],
'subtotal' => 0,
'tax' => 0,
'tax_groups' => array(),
'comments' => (isset($GLOBALS['comments']) ? $GLOBALS['comments'] : ''));

if (isset($GLOBALS[$payment]) && is_object($GLOBALS[$payment])) {
$this->info['payment_method'] = $GLOBALS[$payment]->title;

if ( isset($GLOBALS[$payment]->order_status) && is_numeric($GLOBALS[$payment]->order_status) && ($GLOBALS[$payment]->order_status > 0) ) {
$this->info['order_status'] = $GLOBALS[$payment]->order_status;
}
}

$this->customer = array('firstname' => $customer_address['customers_firstname'],
'lastname' => $customer_address['customers_lastname'],
'company' => $customer_address['entry_company'],
'street_address' => $customer_address['entry_street_address'],
'suburb' => $customer_address['entry_suburb'],
'city' => $customer_address['entry_city'],
'postcode' => $customer_address['entry_postcode'],
'state' => ((tep_not_null($customer_address['entry_state'])) ? $customer_address['entry_state'] : $customer_address['zone_name']),
'zone_id' => $customer_address['entry_zone_id'],
'country' => array('id' => $customer_address['countries_id'], 'title' => $customer_address['countries_name'], 'iso_code_2' => $customer_address['countries_iso_code_2'], 'iso_code_3' => $customer_address['countries_iso_code_3']),
'format_id' => $customer_address['address_format_id'],
'telephone' => $customer_address['customers_telephone'],
'email_address' => $customer_address['customers_email_address']);

$this->delivery = array('firstname' => $shipping_address['entry_firstname'],
'lastname' => $shipping_address['entry_lastname'],
'company' => $shipping_address['entry_company'],
'street_address' => $shipping_address['entry_street_address'],
'suburb' => $shipping_address['entry_suburb'],
'city' => $shipping_address['entry_city'],
'postcode' => $shipping_address['entry_postcode'],
'state' => ((tep_not_null($shipping_address['entry_state'])) ? $shipping_address['entry_state'] : $shipping_address['zone_name']),
'zone_id' => $shipping_address['entry_zone_id'],
'country' => array('id' => $shipping_address['countries_id'], 'title' => $shipping_address['countries_name'], 'iso_code_2' => $shipping_address['countries_iso_code_2'], 'iso_code_3' => $shipping_address['countries_iso_code_3']),
'country_id' => $shipping_address['entry_country_id'],
'format_id' => $shipping_address['address_format_id']);

$this->billing = array('firstname' => $billing_address['entry_firstname'],
'lastname' => $billing_address['entry_lastname'],
'company' => $billing_address['entry_company'],
//BOF for n? TVA_intracom_v3.4
'tva_intracom' => $billing_address['entry_tva_intracom'],
// EOF for TVA_intracom_v3.4
'street_address' => $billing_address['entry_street_address'],
'suburb' => $billing_address['entry_suburb'],
'city' => $billing_address['entry_city'],
'postcode' => $billing_address['entry_postcode'],
'state' => ((tep_not_null($billing_address['entry_state'])) ? $billing_address['entry_state'] : $billing_address['zone_name']),
'zone_id' => $billing_address['entry_zone_id'],
'country' => array('id' => $billing_address['countries_id'], 'title' => $billing_address['countries_name'], 'iso_code_2' => $billing_address['countries_iso_code_2'], 'iso_code_3' => $billing_address['countries_iso_code_3']),
'country_id' => $billing_address['entry_country_id'],
'format_id' => $billing_address['address_format_id']);

$index = 0;
$products = $cart->get_products();
for ($i=0, $n=sizeof($products); $i<$n; $i++) {
$this->products[$index] = array('qty' => $products[$i]['quantity'],
'name' => $products[$i]['name'],
'model' => $products[$i]['model'],
'tax' => tep_get_tax_rate($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
'tax_description' => tep_get_tax_description($products[$i]['tax_class_id'], $tax_address['entry_country_id'], $tax_address['entry_zone_id']),
'price' => $products[$i]['price'],
'final_price' => $products[$i]['price'] + $cart->attributes_price($products[$i]['id']),
'weight' => $products[$i]['weight'],
'id' => $products[$i]['id']);

if ($products[$i]['attributes']) {
$subindex = 0;
reset($products[$i]['attributes']);
while (list($option, $value) = each($products[$i]['attributes'])) {
$attributes_query = tep_db_query("select popt.products_options_name, poval.products_options_values_name, pa.options_values_price, pa.price_prefix from " . TABLE_PRODUCTS_OPTIONS . " popt, " . TABLE_PRODUCTS_OPTIONS_VALUES . " poval, " . TABLE_PRODUCTS_ATTRIBUTES . " pa where pa.products_id = '" . (int)$products[$i]['id'] . "' and pa.options_id = '" . (int)$option . "' and pa.options_id = popt.products_options_id and pa.options_values_id = '" . (int)$value . "' and pa.options_values_id = poval.products_options_values_id and popt.language_id = '" . (int)$languages_id . "' and poval.language_id = '" . (int)$languages_id . "'");
$attributes = tep_db_fetch_array($attributes_query);

$this->products[$index]['attributes'][$subindex] = array('option' => $attributes['products_options_name'],
'value' => $attributes['products_options_values_name'],
'option_id' => $option,
'value_id' => $value,
'prefix' => $attributes['price_prefix'],
'price' => $attributes['options_values_price']);

$subindex++;
}
}
// BOF for TVA_intracom_v3.4
if ($this->billing['company'] != '' && $this->billing['tva_intracom'] != '' && $this->billing['country']['id'] != STORE_COUNTRY && $this->delivery['country']['id'] != STORE_COUNTRY) {
$shown_price = $this->products[$index]['final_price'] * $this->products[$index]['qty'];
$this->info['subtotal'] += $shown_price;
} else {
// EOF for TVA_intracom_v3.4

$shown_price = tep_add_tax($this->products[$index]['final_price'], $this->products[$index]['tax']) * $this->products[$index]['qty'];
$this->info['subtotal'] += $shown_price;
// BOF for TVA_intracom_v3.4
}
// EOF for TVA_intracom_v3.4

// BOF for TVA_intracom_v3.4
if ($this->billing['company'] != '' && $this->billing['tva_intracom'] != '' && $this->billing['country']['id'] != STORE_COUNTRY && $this->delivery['country']['id'] != STORE_COUNTRY) {
$products_tax = 0;
$products_tax_description = NO_TAX;
} else {
// EOF for TVA_intracom_v3.4
$products_tax = $this->products[$index]['tax'];
$products_tax_description = $this->products[$index]['tax_description'];
// BOF for TVA_intracom_v3.4
}
// EOF for TVA_intracom_v3.4

if (DISPLAY_PRICE_WITH_TAX == 'true') {
$this->info['tax'] += $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
if (isset($this->info['tax_groups']["$products_tax_description"])) {
$this->info['tax_groups']["$products_tax_description"] += $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
} else {
$this->info['tax_groups']["$products_tax_description"] = $shown_price - ($shown_price / (($products_tax < 10) ? "1.0" . str_replace('.', '', $products_tax) : "1." . str_replace('.', '', $products_tax)));
}
} else {
$this->info['tax'] += ($products_tax / 100) * $shown_price;
if (isset($this->info['tax_groups']["$products_tax_description"])) {
$this->info['tax_groups']["$products_tax_description"] += ($products_tax / 100) * $shown_price;
} else {
$this->info['tax_groups']["$products_tax_description"] = ($products_tax / 100) * $shown_price;
}
}

$index++;
}

if (DISPLAY_PRICE_WITH_TAX == 'true') {
$this->info['total'] = $this->info['subtotal'] + $this->info['shipping_cost'];
} else {
$this->info['total'] = $this->info['subtotal'] + $this->info['tax'] + $this->info['shipping_cost'];
}
}
}
?>
[/code]

 

Test it and if you don't find buggs (I think you will not...), I will post an updated contribution E.U VAT_intracom_v3.4

 

Enjoy ;)

Hi jean luc,

I forgot to tell:

this is working!

 

I only have the vat display problem as toled in the pm..

But you can include this in the contri i think.


Keesjan

Share this post


Link to post
Share on other sites

I inserted the TVA_intracom contribution. When I print an invoice, I don't see an VAT-number of the customer.

 

Is this because I didn't insert an "legal ans correct"-VAT-number?

Where is it displayed when insertion is OK?

Share this post


Link to post
Share on other sites

Hi,

thats right.

Jean Luc only implimented the shop owner VAT on the invoice.

I also want the costumers VAt shown on the invoice so he knows his vat number is really registrated.

But he, the VAt IS checked at the EU site! Isn't that great already?


Keesjan

Share this post


Link to post
Share on other sites
Hi,

........

But he, the VAt IS checked at the EU site! Isn't that great already?

Yes, it really is great contribution.

 

But still I miss some features. I will post a new reply for my next question.

Share this post


Link to post
Share on other sites

OK, so I miss the VAT-number of the customer on the invoice.

Someone know how to fix this?

 

Now my next problem is:

in catalog/admin/customers.php all my customers are displayed. When I want to edit a customer, the VAT-number-field is empty. When I mannually insert/edit it it is really inserted/edited in the database. When I go back to edit the customer, again the VAT-number is not displayed.

Who knows how to fix this?

 

:D :D :D :D Me!

 

I rechecked the file admin/customers.php and there was some code from the PriceModInstaal-Contribution in which the $customers_query = tep_db_query the a.entry_tva_intracom was absent.

 

Commenting this out, reuploading and it is fixed! :lol:

Share this post


Link to post
Share on other sites
OK, so I miss the VAT-number of the customer on the invoice.

Someone know how to fix this?

I want it to be dusplayed above the ENTRY_PAYMENT_METHOD

 

Please help!

Share this post


Link to post
Share on other sites
We notice that the only way to don't have VAT is only for a company with a VAT number, which is not of the same country of the store

with a shipping address outside of the store country OR

with ONLY virtual products in order (electronic service for ex..)

 

should be: ( i think)

We notice that the only way to don't have VAT is only for a company with a VALID VAT number, which is not of the same country of the store

with a BILLING address outside of the store country OR WHEN BILLING ADRESS IS OUTSIDE EU)

 

or did you not apply last rule (OR WHEN BILLING ADRESS IS OUTSIDE EU) because thsi is done with tax zones already?

Hi,

 

I'm also trying to setup the VAT correctky.

I agree with this post, but I can't get to work properly.... :unsure:

Neither with zones or other solution.

How can we made a "look-up" of the zone where the billing country is, so on ecan decide if it's IN or OUT the EU?

 

BTW: great work with this VAT stuff!!

Share this post


Link to post
Share on other sites

wel yust add the contribution for vat eu intracommunitaire as mentioned in this thread.

Make 3 Vat zones when you are in europe.

one for your home country

one for rest europe

one for world

 

and read read all over the place to set it all correct.

 

succes


Keesjan

Share this post


Link to post
Share on other sites

Hi hellohello!

 

Thanks for your reply.

I've already add those 3 zones.

But, since the tax calculation is based on the shipping address, rather than the billing address, the zones don't do it.... (or I'm missing something here??? :blink: )

Share this post


Link to post
Share on other sites

I've found a solution for the tax calculation being based in the shipping address instead of the billing address! :D

In the catalog/includes/classes/order.php find the

 

$tax_address_query

 

replace it by the $billing_address_query (find it a couple of lines before).

In the following line:

$billing_address = tep_db_fetch_array($tax_address_query);

 

replace it by:

$billing_address = tep_db_fetch_array($billing_address_query);

 

And that's it!

You now have the tax calculated according to the billing address.

With this canhge and the alterations made by JeanLuc this should work fine for the EU VAT rules.

Share this post


Link to post
Share on other sites

this thread gave me more information than all my reading of legal condition in europe .. so thanks all ,im gonna now give a try... special thnks to jean luc for beginning the contribution work !


MS2

Share this post


Link to post
Share on other sites

There is a javascript error - it is easily fixed.

 

In form_check.js.php, the function check_form has two calls to the function check_company around line 113.

 

The function check_company has errors.

 

There is no need to even use this function, as check_input does the same job.

 

Just change the lines

 

check_company("company", 2, "The Company Name must contain a minimum of 2 characters.");
 check_company("tva_intracom", 10, "The VAT intracom number of your Company must contain a minimum of 10 characters.");

 

to

 

check_input("company", 2, "The Company Name must contain a minimum of 2 characters.");
 check_input("tva_intracom", 10, "The VAT intracom number of your Company must contain a minimum of 10 characters.");

 

and delete check_company

 

function check_company(field_name, field_size, message) {
if ( form.elements[company].value != '' && form.elements[field_name].value < field_size ) {
       error = true;
 error_message = error_message + "* " + message + "\n";
}
}

 

Otherwise, a great contrib!

Share this post


Link to post
Share on other sites

Hi All and thank you Jean Luc... I have a question

 

Is this contribution now complete?

 

I made a quick install on a test site and there are errors all over the place, the validation isn't working and the vat is not taken off a registered company with a vat number.

 

If I understand this contribution correctly it is supposed to do exactlt what is perfectly correct.

 

Charge vat to companies who do not provide a vat number and who are in the same country as the store. This is correct.

 

So whats the set-up requirements? I don't understand putting a contribution forward if there are no instructions. It may as well be a jigsaw ;)

 

If this contribution doesn't do

Charge vat to companies who do not provide a vat number and who are in the same country as the store.  This is correct.

 

could someone please let me know asap and if anyone has this contriubuton running could you post the link please, pareticulalry if you are in the UK

 

Andrew

Share this post


Link to post
Share on other sites

Hi All

 

I have installed this contrib now and I am happy so far (there are no errors) however I have a similar problem to what I have read in one of the replies, the respoonse was read read read!!

 

How is this contrib turning off the tax for the registered business with a valid vat number not in the country of the shop?

 

I am in the UK the only people not paying tax will be companies with valid vat numbers and in an eu cuntry other than the UK simple, but how is this mod turning off the tax for said registered company?

 

Andrew

Share this post


Link to post
Share on other sites

PS I have already added a tax zone and added all countries in the EU tax zone

 

I am or was presuming that this worked like this

 

registered vat number reconised turn off tax, simple!

 

no valid registered vat number keep taxes as they are :)

 

Andrew

Share this post


Link to post
Share on other sites

×