Prestashop 1.4 intégration d’une tare pour les colis

Alors que Prestashop 1.6 s’apprête à pointer le bout de son nez, nous allons faire un retour sur Prestashop 1.4… Un client m’a demandé d’intégrer la gestion de la tare pour les colis, j’ai utilisé un mécanisme simple qui a l’air de bien fonctionner.


La problématique

En fait dans le cas de ce client, celui-ci indique le poids du produit dans l’article (ce qui semble logique), mais ensuite pour l’évaluation des frais de ports ce n’est pas toujours « idéal », car le carton n’est pas compté dans le poids, mais il faut tenir aussi compte des compléments pour assurer et bloquer le contenu du colis (cartons, sagex etc..)… Actuellement le client injectait la tare directement sur le produit ce qui n’était pas vraiment logique lors du cumul de plusieurs produits, car les frais de ports du panier pouvaient être du coup plus élevés.

Comment procéder ?

La méthode est assez simple à mettre en application, pour commencer il faut modifier le fichier « AdminShipping.php » sous « admin/tabs/ »  et remplacer la fonction du constructeur par :

public function __construct()
	{
	 	$this->table = 'delivery';
 		$currency = new Currency(Configuration::get('PS_CURRENCY_DEFAULT'));

 		$this->_fieldsHandling = array(
		'PS_SHIPPING_HANDLING' => array('title' => $this->l('Handling charges'), 'suffix' => $currency, 'validation' => 'isPrice', 'cast' => 'floatval'),
		'PS_SHIPPING_FREE_PRICE' => array('title' => $this->l('Free shipping starts at'), 'suffix' => $currency, 'validation' => 'isPrice', 'cast' => 'floatval'),
		'PS_SHIPPING_FREE_WEIGHT' => array('title' => $this->l('Free shipping starts at'), 'suffix' => Configuration::get('PS_WEIGHT_UNIT'), 'validation' => 'isUnsignedFloat', 'cast' => 'floatval'),
                /* Webbax - 10.03.14 - Tare */
                'PS_SHIPPING_TARE_WEIGHT' => array('title' => $this->l('Tare colis'),'suffix' => Configuration::get('PS_WEIGHT_UNIT'),'validation' => 'isUnsignedFloat', 'cast' => 'floatval'),
                /* -- */
                'PS_SHIPPING_METHOD' => array('title' => $this->l('Billing'), 'validation' => 'isBool', 'cast' => 'intval'));
		parent::__construct();
	}

Ensuite il faut ajouter un fichier d’override « Carrier.php » sous « override/classes » avec le contenu ci-dessous :

<?php
class Carrier extends CarrierCore
{

    public function getDeliveryPriceByWeight($totalWeight, $id_zone)
    {
            // Webbax - 10.03.14 - ajout tare
            $totalWeight=$totalWeight + Configuration::get('PS_SHIPPING_TARE_WEIGHT');
            // --
            $cache_key = $this->id.'_'.$totalWeight.'_'.$id_zone;
            if (!isset(self::$priceByWeight[$cache_key]))
            {
                    $result = Db::getInstance(_PS_USE_SQL_SLAVE_)->getRow('
                    SELECT d.`price`
                    FROM `'._DB_PREFIX_.'delivery` d
                    LEFT JOIN `'._DB_PREFIX_.'range_weight` w ON (d.`id_range_weight` = w.`id_range_weight`)
                    WHERE d.`id_zone` = '.(int)($id_zone).'
                    AND '.(float)($totalWeight).' >= w.`delimiter1`
                    AND '.(float)($totalWeight).' < w.`delimiter2`
                    AND d.`id_carrier` = '.(int)($this->id).'
                    ORDER BY w.`delimiter1` ASC');
                    if (!isset($result['price']))
                            self::$priceByWeight[$cache_key] = $this->getMaxDeliveryPriceByWeight($id_zone);
                    else
                            self::$priceByWeight[$cache_key] = $result['price'];
            }
            return self::$priceByWeight[$cache_key];
    }

}
?>

Grâce à ces modifications, il y’a donc un nouveau champ dans le back-office (sous Transporteurs) qui permet d’ajouter la tare sur l’ensemble du colis.

La tare permet de réaliser des économies

Cela pourrait sembler exagéré… mais en intégrant un système de tare, vous pourrez mieux évaluer le cout réel de l’expédition… Bien sûr il va s’agir d’une tare moyenne évaluée sur les cas « généraux », mais cela va permettre d’éviter certains débordement, car à la poste on ne rigole pas… chaque gramme compte et cela est pénible lorsque le poids de l’emballage fait passer les frais du client à l’échelle supérieure.

Et pourquoi ne pas utiliser les frais de manutention ?

Le problème est que les frais de manutention sont fixes… alors qu’une variation de poids supplémentaire entraîne un surcoût variable selon la tranche de poids du transporteur. Suivant la zone de livraison (surtout si c’est l’étranger), des frais de manutentions seraient trop insuffisants, le système de tare et donc bien plus adapté.

Bilan

Non Prestashop 1.4 n’est pas encore mort ! 😀 J’ai trouvé que cette manière d’implémenter la tare était très simple et diablement efficace. Pour Prestashop 1.5 je me suis pas amusé à faire l’essai, mais la logique doit-être plus ou moins la même, sauf qu’il faudra cette fois overrider le comportement dû fichier « AdminShippingController.php ». Il faut noter aussi que sous Prestashop 1.5 vous pouvez ajouter des frais supplémentaires d’expédition spécifique par produits (dans l’onglet « transport » de la fiche produit).

Notez mon billet, Google va adorer :
1 étoiles - J'aime pas !2 étoiles - Bof !3 étoiles - Bien !4 étoiles - Très bien !5 étoiles - Génial ! (Soyez le premier à noter ce billet)
Loading...

7 commentaires sur “Prestashop 1.4 intégration d’une tare pour les colis”

  1. Bonjour et merci pour l’astuce 🙂
    Je ne sais pas si je vais m’y lancer dans des modifications de la source, mais ça fait au moins une solution à ce problème récurrent…
    Je n’ai pas non plus l’impression que la 1.6 propose plus de solutions. Dommage !

    1. Hello,

      Effectivement sous Prestashop 1.6 cette notion de tare n’est toujours pas présente.

      Reste à voir si un patch du même genre peut-être applicable sur cette version (en gardant la logique du code ci-dessus)… je n’ai pas fait le test.

      Merci pour votre visite !

  2. Bonjour,

    Je suis sur prestashop 1.6, et je suis confronté au même problème de tare.
    En cherchant une solution sur internet je suis tombé sur votre site qui me parait intéressant.

    Avez vous essayé de l’adapté pour la version 1.6 ?
    J’ai voulu le faire mais je ne suis pas un expert, cela ne pas fonctionné.

    Ou peut être auriez-vous une autre solution ?

    Merci

  3. https://store.enter-solutions.com/fr/43-module-colisage.html a 129€ le module pour juste régler le problème du poids de l’emballage… Oui pour une structure de moyenne a grosse, mais non pour une petite structure.
    L’idéal serait d’avoir une case après le poids du produit dans la fiche produit/Livraison afin d’entrer produit par produit le poids de son emballage et faire en sorte que celui ci soit fait a la tare du produit. Pas simple simple a faire mais certainement possible.
    Voila un top top tuto a proposer… Ou si trop de travail a réaliser ! Voila un Top Top de petit module a vendre. Mais pas a 130 euro
    Je ne savais pas ou te mettre ça, j’ai trouvé que ca va re actualiser ton tuto deja vieux vieux 🙂 Trés bonne journée a toi et a tous.

    1. Hello,

      Merci d’avoir suggéré ce module Prestashop pour améliorer l’expédition. Une idée à développer aussi serait dans le sens de pouvoir définir le coût d’expédition en fonction du pois volumétrique pour être vraiment très précis ça viendra peut-être dans les prochaines versions… qui sait.

      A bientôt !

Laisser un commentaire

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