Jump to content

Générer le numéro de suivi du transport automatiquement


Recommended Posts

Bonjour,

 

Je suis sur prestashop 1.5.4.1

Je sais que la gestion du suivi du transport se fait via le back office en renseignant le numéro de suivi sur la page de la commande correspondante.

A ce moment, un mail est envoyé au client pour l'informer que la livraison est en cours et qu'il peut la suivre à travers l'URL (renseigné dans la page du transporteur) et le numéro du suivi qu'on vient de taper.

 

Je cherche à automatiser ce processus et pouvoir générer le code de suivi (suivant des règles propres à chaque commande tel que définies avec mon transporteur) pour que le numéro soit directement attribué au champs correspondant sur la commande.

(par exemple pour la commande XXXX ayant la date 11/09/13, je vais générer le numéro: 1109XXXX)

Le déclencheur de cette génération de numéro sera naturellement le passage de la commande au statut "en cours de livraison"

 

Link to comment
Share on other sites

Voila un peu de code qui pourrait te donner des idées, il se situe dans le script php principal de mon module, et permet de créditer des tickets au client quand la commande passe en status payé.

Attention: les classes Ticket et Période n'existent pas dans prestashop. Ni la table/modèle eur_order c'est juste un exemple suggérant où accrocher ton code.

Par ailleurs, pense bien à enregistrer ton hook, par exemple avec:

$this->registerHook('actionOrderStatusPostUpdate')

/* Ce hook s'exécute à chaque changement d'état de la commande*/
    public function hookActionOrderStatusPostUpdate($params) {
        //dans ce hook, on va surveiller le type de changement d'etat de la commande,
        //dans le cas de validation de la commande, on executera les actions transformant le contenu de la commande en tickets.
 
        switch ($params['newOrderStatus']->id) {
            case 1:
            case 10:
            case 11: { //les cas en attente de paiement après création commande
                //d'abord vérifier que la commande n'existe pas déja
                $sql="SELECT count(*) as count FROM "._DB_PREFIX_."eur_order WHERE id_order=".$params['id_order'];
                $result=Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
                if ($result[0]['count']==0) {
                    $eurOrder=new EurOrder();
                    $eurOrder->id_order=$params['id_order'];
                    $eurOrder->id_periode=Periode::getIdUtilisee();
                    $eurOrder->add();
                    if (!$eurOrder->id) error_log(__FILE__." ".__METHOD__.": erreur insertion eur_order");
                } else {error_log("id_order: ".$params['id_order']."Commande existante");}
                break;
            }
            default: //rien
        }
             
        switch ($params['newOrderStatus']->template) {
            case 'payment': {
                error_log("Paiement accepté: commande no:".$params['id_order']);

                //récupérer le contenu de la commande, et créer les tickets.
                //Ticket::processOrder($params['id_order']);
                if (isset($this->context->customer->id_customer)) {
                    $id_customer=$this->context->customer->id_customer;
                } else {
                    $id_customer=0; //si appel depuis le back office
                }
                $ticket=new Ticket($id_customer,Periode::getIdUtilisee());
                $ticket->processOrder($params['id_order']);
                break;
            }
            default:
                //error_log("hookActionOrderStatusPostUpdate switch default, state name: ".$params['newOrderStatus']->name);
                //!! pour éviter de passer son temps à faire des commandes factices
                //$ticket=new Ticket($this->context->customer->id_customer);
                //$ticket->processOrder($params['id_order']);
        }
Edited by spacm (see edit history)
Link to comment
Share on other sites

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 account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...