Ajouter une ligne dans le calcul du total de la commande

  • De le 21 septembre 2012
  • Difficulté : 3/4

Ajouter une ligne dans le calcul du total de la commande Dans des cas particuliers, ajouter une taxe supplémentaire ou une remise spécifique sur la commande est utile, en fonction par exemple du pays, du type de livraison, du mode de paiement ou encore du sous-total de la commande. Le module "fee" gère l'ajout de cette nouvelle ligne. (Développé à partir d'un Magento CE 1.7)

Introduction

Par défaut Magento comptabilise pour une commande : un sous-total, un frais de port, une tva et une éventuelle remise. A partir de ces 4 lignes le montant total est calculé.

Le module "fee" ajoute une nouvelle ligne à ce calcul : une taxe supplémentaire, une nouvelle remise, un avoir, ou n'importe quel type de donnée que vous souhaiteriez additionner. Une règle spécifique décide d'appliquer ou non cette ligne selon des critères que vous devez définir, par exemple si le paiement sélectionné est PayPal ou si le pays de livraison est différent du pays d'expédition.

La ligne supplémentaire apparaît sur l'ensemble des totaux présentés par Magento :

Frontend

  • Panier
  • Tunnel de commande
  • Historique de la commande
  • Facture PDF
  • E-mails

Backend

  • Aperçu de la commande
  • Facture
  • Facture PDF
  • Remboursement
  • Remboursement PDF
Total avec fee

Notez que ce module est une base, il ne peut être utilisé en l'état, à moins que vous ne souhaitiez appliquer systématiquement un montant fixe ;). Il vous fera gagner un temps précieux sur l'intégration d'une nouvelle ligne, mais reste à développer la règle qui déterminera si les frais doivent être appliqués ou non.

Téléchargement

Installation

Il suffit de copier le contenu du dossier app puis de rafraîchir le cache. Le module ne contient aucune surcharge.

A ce stade si vous ajoutez un produit au panier vous obtenez :

Ligne avec taxe supplémentaire

Développement

Editez la classe Magentix_Fee_Model_Fee. C'est ici qu'il vous faudra déterminer le montant ainsi que la règle à appliquer :

app/code/local/Magentix/Fee/Model/Fee.php

<?php

class Magentix_Fee_Model_Fee extends Varien_Object
{
    const FEE_AMOUNT = 20;

    public static function getFee()
    {
        return self::FEE_AMOUNT;
    }

    public static function canApply($address)
    {
        //put here your business logic to check if fee should be applied or not
        return true;
    }
}

Exemple

Dans l'exemple suivant nous appliquons une taxe de 5€ si le pays de livraison est différent du pays d’expédition (France) :

app/code/local/Magentix/Fee/Model/Fee.php

<?php

class Magentix_Fee_Model_Fee extends Varien_Object
{
    const FEE_AMOUNT = 5;

    public static function getFee()
    {
        return self::FEE_AMOUNT;
    }

    public static function canApply($address)
    {
        if($address->getAddressType() == 'shipping' && $address->getCountryId() != 'FR') {
            return true;
        }

        return false;
    }
}

Bug Tracker

Si vous rencontrez des bugs ou souhaitez de nouvelles fonctionnalités, n'hésitez pas à créer une nouvelle issue au projet : Magentix Fee Module Issues

Le module "fee" pour Magento a été réalisée à partir d'une extension développée initialement par Excellence Technologies.

commentaires

Commentez cet article : Ajouter une ligne dans le calcul du total de la commande