brouzeng pascal Posted September 27, 2023 Share Posted September 27, 2023 Bonjour, Je suis sous prestashop 8.05. Mon comptable me demande la chose suivante : La tva sur les frais de port doit être la même que sur les produits, ainsi sur des épices à 5.5 % la tva des frais de port doit être à 5.5% Sur des produits à 20% la tva sur les frais de port doit être à 20% Mais si dans une même commande il y a des produits à 20% et des produits à 5.5%, la tva sur les frais de port doit être au prorata. Y aurait-il un module pour faire cela ? Ets-ce que nativement prestashop le fait ? si oui comment le parametrer ? Si ni l'un ni l'autre, dois-je faire appel a un Dev ou je peux faire des scripts moi meme avec votre aide ? Merci Link to comment Share on other sites More sharing options...
brouzeng pascal Posted October 10, 2023 Author Share Posted October 10, 2023 Un UP ? Merci Link to comment Share on other sites More sharing options...
iomedia Posted April 8 Share Posted April 8 Bonjour @brouzeng pascal, avez-vous trouvé une solution à ce problème ? J'ai un besoin identique. Merci Link to comment Share on other sites More sharing options...
iomedia Posted April 17 Share Posted April 17 On 9/27/2023 at 9:58 PM, brouzeng pascal said: Bonjour, Je suis sous prestashop 8.05. Mon comptable me demande la chose suivante : La tva sur les frais de port doit être la même que sur les produits, ainsi sur des épices à 5.5 % la tva des frais de port doit être à 5.5% Sur des produits à 20% la tva sur les frais de port doit être à 20% Mais si dans une même commande il y a des produits à 20% et des produits à 5.5%, la tva sur les frais de port doit être au prorata. Y aurait-il un module pour faire cela ? Ets-ce que nativement prestashop le fait ? si oui comment le parametrer ? Si ni l'un ni l'autre, dois-je faire appel a un Dev ou je peux faire des scripts moi meme avec votre aide ? Merci Si jamais quelqu'un chercherait à faire la même chose, voici ce que j'ai mis en place. C'est un peu différent de la demande initiale, voici le comportement: si le panier contient des produits à 5.5%, n'affiche que les transporteurs avec une taxe à 5.5% si le panier contient des produits à 5.5%, n'affiche que les transporteurs avec une taxe à 20% si le panier contient des produits à 5.5% et 20%, affiche les transporteurs avec la taxe la plus élevée (donc 20%) // override/classes/checkout/DeliveryOptionsFinder.php <?php class DeliveryOptionsFinder extends DeliveryOptionsFinderCore { public function getDeliveryOptions() { $carriers_available = parent::getDeliveryOptions(); Hook::exec('actionFilterCarrierList', ['carriers_available' => &$carriers_available]); return $carriers_available; } } public function hookActionFilterCarrierList($params) { /** @var Cart $cart */ $cart = $params['cart']; $tax = array_reduce($cart->getProducts(), static function ($carry, array $product) { return max((float)$product['rate'], $carry); }, 0.0); $params['carriers_available'] = array_filter($params['carriers_available'], static function (array $carrier) use ($tax) { return Tax::getCarrierTaxRate($carrier['id']) === $tax; }); } Dans mon cas j'ai un module custom donc j'ai rajouté un hook dans le `DeliveryOptionsFinder` mais la logique dans la fonction `hookActionFilterCarrierList` peut être directement intégrée dans la classe `DeliveryOptionsFinder` de cette manière // classes/checkout/DeliveryOptionsFinder.php // ... public function getDeliveryOptions() { // ... $tax = array_reduce($this->context->cart->getProducts(), static function ($carry, array $product) { return max((float)$product['rate'], $carry); } $carriers_available = array_filter($carriers_available, static function (array $carrier) use ($tax) { return Tax::getCarrierTaxRate($carrier['id']) === $tax; }); return $carriers_available; } 1 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