MeoDelta Posted February 25, 2022 Share Posted February 25, 2022 Bonjour, Dans le cadre de la configuration d'un site sous Prestashop 1.7.6 pour un client je rencontre un problème dans la configuration. Mon client souhaiterait que les clients qui entrent un numéro de TVA et/ou de Siret d'un pays étranger (hors France) ne soit pas soumis à la TVA sur les prix et donc puissent payer leurs commandes en Hors Taxes. Les clients particuliers doivent cependant continuer à payer les taxes. J'ai pu mettre en place l'ajout automatique des clients professionnels étrangers à un groupe spécifique mais cela ne m'avance pas beaucoup plus. Il est certes possible de modifier l'affichage des prix en TTC ou HT dans la configuration du groupe client mais cela ne semble pas affecter le prix effectivement payé lors de la transaction. Ce n'est pas le premier client à me demander cette spécifié et cela semble bien être le fonctionnement normal pour les transactions en Europe il me semblait donc étrange qu'il n'y ait pas de solution native sur Prestashop pour la gestion de ce cas ? Merci d'avance pour votre aide. Link to comment Share on other sites More sharing options...
sergeksl2 Posted February 25, 2022 Share Posted February 25, 2022 Bonjour, Moi j'utilise le module "facturation HT pour les professionnels (v. 1.7.2) par MassonVincent" Ce module vous permet de facturer hors taxe certains groupes de clients. Voir sur https://www.ksl.eu Link to comment Share on other sites More sharing options...
Mediacom87 Posted February 25, 2022 Share Posted February 25, 2022 Bonjour, c'était un module de base de Prestashop qui .. fut abandonné par Prestashop dans la version 1.7 https://github.com/PrestaShop/vatnumber Vous pouvez néanmoins le tester pour savoir si il répond encore au besoin. Link to comment Share on other sites More sharing options...
MeoDelta Posted February 28, 2022 Author Share Posted February 28, 2022 On 2/25/2022 at 5:03 PM, sergeksl2 said: Bonjour, Moi j'utilise le module "facturation HT pour les professionnels (v. 1.7.2) par MassonVincent" Ce module vous permet de facturer hors taxe certains groupes de clients. Voir sur https://www.ksl.eu Je cherche dans un premier temps une solution gratuite si possible mais effectivement le module semble correspondre à mes besoins je le garde de côté merci. On 2/25/2022 at 5:46 PM, Mediacom87 said: Bonjour, c'était un module de base de Prestashop qui .. fut abandonné par Prestashop dans la version 1.7 https://github.com/PrestaShop/vatnumber Vous pouvez néanmoins le tester pour savoir si il répond encore au besoin. D'après la description le module semble permettre l'ajout de la TVA mais est-ce qu'il permet aussi de gérer le fait que les taxes soient facturées ou non pour les professionnels qui l'aurait renseigné ? Je ne vois rien à ce propos à première vu. Link to comment Share on other sites More sharing options...
coeos.pro Posted February 28, 2022 Share Posted February 28, 2022 il y a une heure, MeoDelta a dit : est-ce qu'il permet aussi de gérer le fait que les taxes soient facturées ou non pour les professionnels qui l'aurait renseigné ? Le module en question facture la TVA ou non en fonction des groupes de clients, il faut donc soit changer manuellement les groupes de clients soit avoir un module qui change les groupes de clients. Sinon il y a ce module qui vérifie les numéros de TVA sur VIES et facture HT les clients professionnels étrangers : https://www.coeos.pro/fr/modules-prestashop/122-numéro-de-tva.html https://addons.prestashop.com/fr/comptabilite-facturation/27158-numero-de-tva-europeen.html Link to comment Share on other sites More sharing options...
MeoDelta Posted February 28, 2022 Author Share Posted February 28, 2022 2 minutes ago, coeos.pro said: Le module en question facture la TVA ou non en fonction des groupes de clients, il faut donc soit changer manuellement les groupes de clients soit avoir un module qui change les groupes de clients. Sinon il y a ce module qui vérifie les numéros de TVA sur VIES et facture HT les clients professionnels étrangers : https://www.coeos.pro/fr/modules-prestashop/122-numéro-de-tva.html https://addons.prestashop.com/fr/comptabilite-facturation/27158-numero-de-tva-europeen.html D'accord merci beaucoup, effectivement j'ai déjà ce qu'il faut pour l'attribution des clients à un groupe en fonction du pays et du numéro du TVA donc le module conviendrait parfaitement. Je prends bien notes des deux autres qui tu me recommandes si jamais j'ai besoin de quelque chose de plus poussé à l'avenir. Link to comment Share on other sites More sharing options...
Mediacom87 Posted February 28, 2022 Share Posted February 28, 2022 Il y a 1 heure, MeoDelta a dit : D'après la description le module semble permettre l'ajout de la TVA mais est-ce qu'il permet aussi de gérer le fait que les taxes soient facturées ou non pour les professionnels qui l'aurait renseigné ? Je ne vois rien à ce propos à première vu. C'était le module officiel Prestashop qui permettait de retirer la TVA des clients ayant un n° de tva intracommunautaire renseigné. pas besoin de groupe ou autre il gère cela sur la base du n° de tva intra communautaire et donc en accord avec les règles européennes. Link to comment Share on other sites More sharing options...
ynocquet Posted May 7 Share Posted May 7 (edited) Bonjour, Pour Prestashop 1.7, il faut surcharger les classes TaxRulesTaxManagerCore et CartCore.1) Créer le fichier /override/classes/tax/TaxRulesTaxManager.php (ou créer un module dédié) et ajouter le code suivant : class TaxRulesTaxManager extends TaxRulesTaxManagerCore { public function getTaxCalculator() { if ($this->address->id_country != Configuration::get('PS_COUNTRY_DEFAULT')) { $vatNumber = $this->address->vat_number; if (empty($vatNumber)) { $id_customer = $this->address->id_customer; $context = Context::getContext(); if (isset($context->cart)) { $billingAddress = new Address((int)$context->cart->id_address_invoice); if ($billingAddress->id_country != Configuration::get('PS_COUNTRY_DEFAULT')) { $vatNumber = $billingAddress->vat_number; } } } if (!empty($vatNumber) && preg_match('/^[A-Z]{2}[A-Z0-9]{2,14}$/', $vatNumber)) return new TaxCalculator(array()); } return parent::getTaxCalculator(); } } La vérification du numéro de TVA intracommunautaire repose sur un REGEX sommaire. Vérifier le numéro de TVA à l'aide du service VIES avec la fonction suivante (fonction à exécuter de façon asynchrone en raison du temps de latence élevé du service VIES) : private function isVATValid($countryCode, $vatNumber) { $url = "http://ec.europa.eu/taxation_customs/vies/services/checkVatService"; $xmlRequest = '<?xml version="1.0" encoding="UTF-8"?> <SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="urn:ec.europa.eu:taxud:vies:services:checkVat:types"> <SOAP-ENV:Body> <ns1:checkVat> <ns1:countryCode>'.$countryCode.'</ns1:countryCode> <ns1:vatNumber>'.$vatNumber.'</ns1:vatNumber> </ns1:checkVat> </SOAP-ENV:Body> </SOAP-ENV:Envelope>'; $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $url); curl_setopt($ch, CURLOPT_POST, 1); curl_setopt($ch, CURLOPT_POSTFIELDS, $xmlRequest); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: text/xml')); $response = curl_exec($ch); curl_close($ch); $xmlResponse = simplexml_load_string($response); $valid = (string)$xmlResponse->children('http://schemas.xmlsoap.org/soap/envelope/')->Body->children()->checkVatResponse->valid; return ($valid === 'true'); } 2) Créer le fichier /override/classes/Cart.php (ou créer un module dédié) et ajouter le code suivant : class Cart extends CartCore { public function getOrderTotal($withTaxes = true, $type = Cart::BOTH, $products = null, $id_carrier = null, $use_cache = true, $keepOrderPrices = false) { $address_delivery = new Address((int)$this->id_address_delivery); if ($address_delivery->id_country != Configuration::get('PS_COUNTRY_DEFAULT')) { $vatNumber = $address_delivery->vat_number; if (empty($vatNumber)) { $address_invoice = new Address((int)$this->id_address_invoice); if ($address_invoice->id_country != Configuration::get('PS_COUNTRY_DEFAULT')) { $vatNumber = $address_invoice->vat_number; } } // Ajouter une vérification supplémentaire avec isVATValid() if (!empty($vatNumber) && preg_match('/^[A-Z]{2}[A-Z0-9]{2,14}$/', $vatNumber)) { $withTaxes = false; } } return parent::getOrderTotal($withTaxes, $type, $products, $id_carrier, $use_cache, $keepOrderPrices); } } Edited May 17 by ynocquet (see edit history) Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now