Tableau des tarifs d'expédition en fonction du prix APRES REMISE – Magento

Magento a un bug assez important qui permet au module d'expédition de calculer les frais d'expédition sans remise ni règles d'expédition (si elles sont appliquées).

Il m'a fallu des heures pour trouver une solution de contournement, donc si vous l'utilisez, j'apprécierais vraiment que vous fassiez référence à ce blog.

Comment je l'ai réparé

Aller à :

/app/code/local/Mage/Shipping/Model/Carrier/Tablerate.php

Ajoutez le code suivant vers la ligne 77 (dans la fonction collectRates) :

$s_price = $request->getPackageValueWithDiscount();
$request->setPackageValue($s_price);

Désormais, les frais d'expédition sont calculés sur le sous-total moins la remise. J'espère que cela résoudra le problème (c'est le cas dans la version 1.7)

Réflexions de 26 sur « Table rates shipping based on price AFTER DISCOUNT – Magento »

  1. Merci, cela a résolu notre problème de calcul des frais d'expédition lors de l'utilisation de coupons de réduction dans Magento 1.6.1.

  2. Merci pour cela. Fonctionne dans la version 1.8.1.0

    J'ai été surpris que ce genre de chose ait vraiment besoin d'un « hack » ! 🙂

  3. Bonjour, désolé, j'ai quelques problèmes pour appliquer ces lignes. J'utilise une extension gratuite pour les tarifs d'expédition « MATRIXRATE ». Peut-être que cela est différent à cause de cette extension ?

  4. Bonjour,

    finalement cela a fonctionné pour moi en utilisant une matrice de tarifs d'expédition lors du changement de « PackageValue » pour « PackageValueWithDiscount » et lorsque je remarque que vous devez avoir la méthode d'expédition \'tablerates\' active (dans sytem - méthodes d'expédition), même si la feuille de calcul est vide, alors le plugin \'matrixrates\' obtient également le sous-total correct.

    Merci, cordialement.

  5. Où ajouter ?????/
    fonction publique collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
    si (!$this->getConfigFlag('active')) {
    retourner faux;
    }

    // exclure le prix des produits virtuels de la valeur du package s'il est préconfiguré
    si (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) {
    foreach ($request->getAllItems() comme $item) {
    si ($item->getParentItem()) {
    continuer;
    }
    si ($item->getHasChildren() && $item->isShipSeparately()) {
    foreach ($item->getChildren() comme $child) {
    si ($child->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValue() – $child->getBaseRowTotal());
    }
    }
    } elseif ($item->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValue() – $item->getBaseRowTotal());
    }

  6. Cela n'a pas fonctionné pour moi dans la version 1.9. Peut-être que je rate quelque chose ? Si quelqu'un le fait fonctionner dans la version 1.9, pouvez-vous le publier dans un fichier et un code ? Merci

  7. Salut.
    J'utilise une règle de panier de promotion :
    – Livraison gratuite lorsque le pays est l’Espagne
    – Le sous-total est égal ou supérieur à 49,59 euros.

    Lorsque les gens ont 49,59 euros dans le panier, cela fonctionne bien.

    J'ai une règle de panier de promotion :
    – Code de réduction 10%

    Mais lorsqu'un coupon de réduction de 10% est appliqué, la livraison est toujours gratuite et le sous-total est inférieur à 49,59 avec le coupon appliqué.

    Comment puis-je le résoudre ?
    Merci beaucoup.

    PD : J'utilise 2 modules avec tablerates.csv configuré.

  8. Ping : Magento, Versand per Table-Tarifs & Rabattgutschein - alexander-steireif.com

  9. Salut ,

    Super merci, ça m'a fait gagner beaucoup de temps. Cela a fonctionné pour moi dans Magento 1.9.0.1. Merci mon pote.

    J'ai remplacé getPackageValue par getPackageValueWithDiscount dans le fichier Tablerate.php.

    1. Salut,

      Lorsque je soumets la commande, j'obtiens un message d'erreur après avoir modifié le code : « Une erreur s'est produite lors du traitement de votre commande… veuillez spécifier une erreur de méthode d'expédition dans Magento avec le tarif du tableau ». S'il vous plaît, aidez-moi à résoudre ce problème.

  10. Je deviens fou, je fais exactement comme ci-dessus mais cela ne fonctionnera pas dans la version 1.9.2.4

    fonction publique collectRates(Mage_Shipping_Model_Rate_Request $request->getPackageValueWithDiscount())
    {
    si (!$this->getConfigFlag('active')) {
    retourner faux;
    }

    // exclure le prix des produits virtuels de la valeur du package s'il est préconfiguré
    si (!$this->getConfigFlag('include_virtual_price') && $request->getAllItems()) {
    foreach ($request->getAllItems() comme $item) {
    si ($item->getParentItem()) {
    continuer;
    }
    si ($item->getHasChildren() && $item->isShipSeparately()) {
    foreach ($item->getChildren() comme $child) {
    si ($child->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValueWithDiscount() – $child->getBaseRowTotal());
    }
    }
    } elseif ($item->getProduct()->isVirtual()) {
    $request->setPackageValue($request->getPackageValueWithDiscount() – $item->getBaseRowTotal());
    }
    }
    }

  11. Juste pour clarifier ce que Raul a dit pour Matrixrate.php, il s'agit d'un plugin d'applications de boutique en ligne. Ce hack fonctionne parfaitement sur Magento 1.9.2.4

    ajoutez ce code en haut de la fonction collectRates

    $s_price = $request->getPackageValueWithDiscount();
    $request->setPackageValue($s_price);

    Ensuite, remplacez tout le code « getPackageValue » par « getPackageValueWithDiscount »

    Merci pour ce fil.
    -J

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

fr_FRFrançais
Défiler vers le haut