Prestashop livraison, interdire les codes postaux DOM TOM pour la France

Prestashop
1.7

Difficulté
3/4

Durée
20′

Vous livrez des produits vers les DOM TOM ? Prestashop n’effectue pas de contrôle de cohérence entre le code postal et le pays. Prestashop contrôle uniquement le format du code postal. Un client qui commande des DOM DOM ( Martinique, Guadeloupe, Réunion…) aura le pays France sélectionné par défaut dans le pays. Et comme il est Français, il ne pense pas forcément à chercher dans la liste des pays Martinique ou Guadeloupe 😉  Et là c’est la catastrophe, car dans les DOM TOM la majorité des produits et livraisons sont HT et le calcul des frais de port va être calculé pour la France ! Pas cool hein 🙁

On avait déjà fait un tutoriel pour la solution en Prestashop 1.6, qui se basait sur du javascript. Hélas cette solution ne fonctionne plus avec la 1.7 🙁  Bon on a une solution pour vous ouf 🙂 Attention toutefois, la sulution proposée dans ce tuto est plus technique que pour la version 1.6 !

Quelques prérequis seront nécessaires pour la compréhension de ce tutoriel :

Rappel sur l’architecture d’un module Prestashop 1.7

Les modules de Prestashop se situent dans le dossier « modules » situé à la racine du site. Exemple pour notre module monModule :

  • modules/monModule/views/css : contient tous les fichiers CSS
  • modules/monModule/views/img : contient toutes les images
  • modules/monModule/views/js : contient tous les scripts javascript
  • modules/monModule/translations : contient toutes les traductions
  • modules/monModule/views/templates/*.tpl : les templates des pages du module, ils contiennent du code html et smarty
  • modules/monModule/override/ : contient les fichiers qui overrident des classes ou controllers

Utiliser un hook de Prestashop

La solution consiste à utiliser un nouveau hook qui a été introduit dans le version 1.7.1. Ce hook permet de faire un contrôle sur les champs du formulaire adresse qui est utilisé dans les différents écran de Prestashop (compte client, tunnel de commande)  :

hookActionValidateCustomerAddressForm

Voici un exemple de code simple pour contrôler la validiter du code postal avec le pays France sélectionné dans l’adresse :

    public function hookActionValidateCustomerAddressForm($params)
    {
        $is_valid = true;

        $form = $params['form'];
        $country = $form->getField("id_country");
        $id_country = $country->getValue();
        if ($id_country==8) { // Id pays France par défaut
            $zip = $form->getField("postcode");
            $zipcode = (int)$zip->getValue();
            if ($zipcode > 96000) {
                $country->addError($this->l('Invalid country according to zip code - should be a DOM TOM one'));
                $is_valid=false;
            }
        }
        return $is_valid;
    }


Attention dans cet exemple on présuppose que le pays France à l’Id 8 (identifiant de la configuration par défaut de Prestashop). Si vous avez changé la configuration des pays, du genre créé un pays France métropolitaine, il vous faudra changer le test ==8 avec votre id.

Créer un module Prestashop

Pour implémenter ce hook il faut donc créer un module Prestashop. L’objectif de ce tuto n’est pas vous apprendre à coder un module Prestashop, aussi nous vous recommandons de lire la documentation développeur de pour plus d’informations.

Notre module Prestashop

SI vous ne vous sentez pas l’âme d’un développeur ou ne voulez pas risquer de faire des erreurs et bloquer votre boutique, n’hésitez pas à acheter notre module.