THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline

#1 Point relay Chronopost

(17-09-2020 14:41:26)


Hello !

Je suis en train d'ajouter Chronopost Relay (Je quitte mondial relay parce que c'est vraiment nul..).

J'affiche la liste des points relais autour de mon client... Je vais ajouter un bouton pour sélectionner le point relais et mettre à jour, avant passage à l'étape suivante, l'adresse de livraison par celle du point relais.

Comment faire cela ?

Offline

#2 Re: Point relay Chronopost

(17-09-2020 16:16:31)


Le plus simple est de s'inspirer de ce qui a été fait sur le module MondialRelay smile


OpenStudio Toulouse

Offline

#3 Re: Point relay Chronopost

(17-09-2020 16:17:54)


Bien vu ! Je suis déja dessus pour comprendre comment ca marche wink

Je posterai ici si j'ai besoin d'aide ou quand le script sera fait.

Offline

#4 Re: Point relay Chronopost

(17-09-2020 22:09:43)


Hello,

$orderAddress = OrderAddressQuery::create()->findPK($orderEvent->getDeliveryAddress());

$orderAddress->setLastname('TEST')->save();

En faisant ca, je rentre bien dans la boucle, mais dans Order/Invoice, l'adresse ne change pas... Et impossible de retrouver "TEST" dans ma base de donnée d'ailleurs..

il me manque quoi ?

Offline

#5 Re: Point relay Chronopost

(18-09-2020 07:35:36)


Il te manque d'avoir bien étudié le module MondialRelay. Ce que tu as écrit ne peut pas fonctionner.

La mise à jour de l'adresse se passe ici : https://github.com/thelia-modules/Mondi … r.php#L320


OpenStudio Toulouse

Offline

#6 Re: Point relay Chronopost

(18-09-2020 08:09:52)


Merci,

Quand je met

$orderAddress = OrderAddressQuery::create()->findPK($orderEvent->getOrder()->getDeliveryOrderAddressId());
            $orderAddress->setLastname('TEST')->save();

setlastName n'est pas reconnu : Call to a member function setLastname() on null

avec $orderEvent->getDeliveryAddress()); je récupère bien le bon numéro de l'adresse, et le traitement ne génère pas d'erreur.

J'ai bien vu comment fonctionne la mise a jour d'adresse, mais je bloque malgré tout.

Offline

#7 Re: Point relay Chronopost

(18-09-2020 10:31:16)


$orderAddress est nul. Ça veut dire que le client n'a pas encore défini son adresse de livraison.

Le code que je t'ai indiqué doit être exécuté dans un event listener qui écoute l'évènement TheliaEvents::ORDER_SET_DELIVERY_MODULE. Lorsque cet évènement est dispatché, l'adresse de livraison est définie.


OpenStudio Toulouse

Offline

#8 Re: Point relay Chronopost

(18-09-2020 10:42:40)


Merci,

mais du coup, c'est ce que je fais :

TheliaEvents::ORDER_SET_DELIVERY_MODULE => array('updateOrderDeliveryAddress', 256),

public function updateOrderDeliveryAddress(OrderEvent $orderEvent)
    {
        if ($this->checkModule($orderEvent->getDeliveryModule())) {
           
        $orderAddress = OrderAddressQuery::create()->findPK($orderEvent->getOrder()->getDeliveryOrderAddressId());
        $orderAddress->setLastname('TEST')->save();
       

        }
        return ;
    }

et sur Order/Invoice, le "TEST" n'apparait pas dans le champ Lastname

Offline

#9 Re: Point relay Chronopost

(18-09-2020 14:51:02)


Le problème, c'est 256. Cette priorité est trop élevée, et elle implique que ta méthode est appelée avant Thelia, qui a une priorité de 128. Du coup l'order n'a pas encore été mis à jour.

La doc Thelia wrote:

If you want to execute your custom action before the default action, you have to declare a priority greater than 128. Also if you want it to be declared after the default action you have to declare a priority lesser than 128 (if you don’t declare priority is like you have declaring a priority equal to 0).

(cf. https://doc.thelia.net/en/documentation … tions.html )

Utilise une priorité de 64, comme le fait le module MondialRelay (https://github.com/thelia-modules/MondialRelay/blob/50a58017c7b77cde6ecc41ab4e890dd6b0380205/EventListeners/DeliveryListener.php#L425 ) , et l'order sera bien reseigné au moment où ta méthode sera appelée.

Je te recommande d'utiliser un debugger, c'est une bonne manière de voir quel code est exécuté, et ce que contiennent les variables.


OpenStudio Toulouse

Offline

#10 Re: Point relay Chronopost

(20-09-2020 14:42:28)


Re !

Oui, en effet, j'avais déjà changé les priorités, mais rien n'y fait, je tourne en rond. Mon adresse sur Order/Invoice reste inchangée...

vers quel piste dois-je me tourner pour que l'adresse de livraison soit celle du point relais ? le code est le meme que mondial relay... je desespère

public function updateOrderDeliveryAddress(OrderEvent $orderEvent)
    {
        if ($this->checkModule($orderEvent->getDeliveryModule())) {
            if (null !== $orderAddress = OrderAddressQuery::create()->findPK($orderEvent->getDeliveryAddress())) {
                $orderAddress
                    ->setPhone('TEST')
                    ->save();

                //ici je fais un test qui m'envoie une notification sur mon mobile avec l'ID de l'adresse, et je recois bien la notification, ce qui prouve que setphone est bien réalisé ?

            }

        }
        return ;
    }

    public static function getSubscribedEvents()
    {
        return array(
            TheliaEvents::ORDER_SET_DELIVERY_MODULE => array(array('setChronopostPickupPointDeliveryType', 64),array('updateOrderDeliveryAddress', 64)),
            TheliaEvents::ORDER_BEFORE_PAYMENT => array(array('saveChronopostPickupPointOrder', 256))
        );
    }

Offline

#11 Re: Point relay Chronopost

(21-09-2020 07:34:28)


Utilise un debugger pour voir ce qu'il se passe.


OpenStudio Toulouse

Offline

#12 Re: Point relay Chronopost

(21-09-2020 17:17:40)


Re,

Mon site etant online, je vais eviter pour le moment.

Pour bien confirmer, quand est emis l'event TheliaEvents::ORDER_BEFORE_PAYMENT ?

MondiaRelay le sollicite, je tente de faire pareil, mais moi je n'arrive pas à entrer dedans.

Offline

#13 Re: Point relay Chronopost

(21-09-2020 21:02:05)


Tu as bien déclaré ton EventListener dans le config.xml de ton module ?


OpenStudio Toulouse

Offline

#14 Re: Point relay Chronopost

(21-09-2020 21:17:08)


Oui, car je viens m’insérer dans SetDeliveryType.php du module Chronopost relais.

Offline

#15 Re: Point relay Chronopost

(21-09-2020 22:06:12)


Tu travailles en mode développement, ou alors tu vides bien le cache après chaque modif ?


OpenStudio Toulouse

Offline

#16 Re: Point relay Chronopost

(21-09-2020 22:24:25)


Oui, vidé à chaque fois.

quand je met ca :      $addresselivraison
                            ->setCity("TEST")
                            ->save();

                    var_dump($addresselivraison);

J'ai bien le "test" dans City.

Mais juste ensuite, sur Order/Invoice, je ne retrouve pas le "test" sur mon template (Ni dans ma commande si la valide d'ailleurs)
J'ai demandé au Template d'afficher le ID de l'adresse, qui est le bon...

Offline

#17 Re: Point relay Chronopost

(22-09-2020 09:45:18)


C'est parce que tu ne vas pas chercher l'adresse au bon endroit ! Tu utilises $orderEvent->getDeliveryAddress(), alors qu'il faut utiliser $event->getOrder()->getDeliveryOrderAddressId()

if (null !== $orderAddress = OrderAddressQuery::create()->findPK($event->getOrder()->getDeliveryOrderAddressId())) {

Tout ça c'est déjà écrit dans l'event listener de MondialRelay : https://github.com/thelia-modules/Mondi … r.php#L320

Tu fais comme c'est fait dans MondialRelay sans essayer d'inventer des choses et ça va marcher.


OpenStudio Toulouse

Offline

#18 Re: Point relay Chronopost

(22-09-2020 10:55:54)


Bien vu,

Mais ce que tu me donnes dans mondial relay est appelé avec ORDER BEFORE PAYMENT, et non pas a ORDER_SET_DELIVERY_MODULE.

Dans MR, c'est updateCurrentDeliveryAddress qui est appelé en 1er avec ORDER_SET_DELIVERY_MODULE.

Je créé pour CHRONOPOST la meme chose, appelée avec  ORDER_SET_DELIVERY_MODULE, et avec le code qui suit, je me retrouve donc avec une $orderaddress qui est NULL.

if (null !== $orderAddress = OrderAddressQuery::create()->findPK($event->getOrder()->getDeliveryOrderAddressId())) {

Offline

#19 Re: Point relay Chronopost

(06-10-2020 15:43:44)


RE !

Bon, vu que je n'ai pas avancé, et que le module a subit une mise à jour, je viens de repartir de 0...

Je reste bloqué sur order/invoice, le clic sur le bouton "choose the pickup point" ne redirige pas vers order/pay. caché vidé.

image

J'ai loupé quoi ?

Offline

#20 Re: Point relay Chronopost

(06-10-2020 17:56:38)


Bon, ca marche... !

La base de données n'avait pas été correctement crée, il manquait une table dans ma base... chronopost_pickup_point_order_address

J'espère que ca servira à d'autres wink

Allons résoudre les erreurs sur ChronopostLabel maintenant !!! wink

Offline

#21 Re: Point relay Chronopost

(14-10-2020 23:33:53)


Hello !

Pour info, j'ai été obligé de remplacer :

<route id="chronopost.pickup.point.set.address" path="/chronopost/pickup-point/save">
        <default key="_controller">ChronopostPickupPoint\Controller\ChronopostPickupPointRelayController::saveAddressAction</default>
    </route>

par :

<route id="chronopost.pickup.point.set.address" path="/chronopost/pickup-point/save">
        <default key="_controller">ChronopostPickupPoint\Controller\ChronopostPickupPointRelayController::saveAddressAction</default>
        <default key="not-logged">1</default>
    </route>

Sinon le passage vers la page Order/invoice (Au moment du clic sur le relais voulu) ne se faisait que connecté au backoffice. BUG lorsque le backoffice est déconnecté.

Offline

#22 Re: Point relay Chronopost

(15-10-2020 07:59:39)


BUG lorsque le backoffice est déconnecté.

Bug ? Ça ne veut rien dire "bug" ! Il se passe quoi exactement ?


OpenStudio Toulouse

Offline

#23 Re: Point relay Chronopost

(15-10-2020 08:39:28)


Hello.

Je l'ai expliqué : le passage vers la page Order/invoice (Au moment du clic sur le relais voulu) ne se faisait que connecté au backoffice.

Offline

#24 Re: Point relay Chronopost

(15-10-2020 16:55:08)


J'ai bien compris. Ma question était: que se passe-t-il exactement lorsque tu es déconnecté du BO ?

Je subodore que ton contrôleur ChronopostPickupPoint\Controller\ChronopostPickupPointRelayController hérite de BaseAdminController au lieu de BaseFrontController, et que du coup il y a un de contrôle la connexion au BO.


OpenStudio Toulouse

Offline

#25 Re: Point relay Chronopost

(15-10-2020 16:58:59)


Il ne se passe rien, on reste sur Order/delivery.

Mais bien vu, en effet le controleur herite de baseadmincontroller... Issue à declarer ?

https://github.com/thelia-modules/Chron … roller.php

Last edited by valentin (15-10-2020 17:01:07)