THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Hello!

J'ai un petit souci sur mes modules de livraison.

Quand je modifie le statut d'une commande dans l'admin pour la passer à "Envoyée", les mails de confirmation s'envoient deux fois...

Les deux modules de livraison ont ce code

TheliaEvents::ORDER_UPDATE_STATUS => ["updateStatus", 100],

et les fonctions "updateStatus" ne comporte pas de boucle...

    public function updateStatus(OrderEvent $event)
    {
        $order = $event->getOrder();
        $localPickupPlus = new LocalPickupPlus();

        if ($order->isSent() && $order->getDeliveryModuleId() == $localPickupPlus->getModuleModel()->getId()) {
            $contactEmail = ConfigQuery::getStoreEmail();

            if ($contactEmail) {

                $message = MessageQuery::create()
                    ->filterByName('mail_local_pickup_plus')
                    ->findOne();

                if (false === $message) {
                    throw new \Exception("Failed to load message 'mail_local_pickup_plus'.");
                }

                $order = $event->getOrder();
                $customer = $order->getCustomer();
                $package = $order->getDeliveryRef();
                $this->mailer->sendEmailMessage(
                    'mail_local_pickup_plus',
                    [$contactEmail => ConfigQuery::getStoreName()],
                    [$customer->getEmail() => $customer->getFirstname() . " " . $customer->getLastname()],
                    [
                        'customer_id' => $customer->getId(),
                        'order_id' => $order->getId(),
                        'order_ref' => $order->getRef(),
                        'order_date' => $order->getCreatedAt(),
                        'update_date' => $order->getUpdatedAt(),
                        'package' => $package,
                    ]
                );

                Tlog::getInstance()->debug(
                    "Local Pickup Plus shipping message sent to customer " . $customer->getEmail()
                );
            } else {
                $customer = $order->getCustomer();
                Tlog::getInstance()->debug(
                    "Local Pickup Plus shipping message no contact email customer_id ".$customer->getId()
                );
            }
        }
    }

J'ai cherché dans les modules installés s'il y avait un dispatchEvent ORDER_UPDATE_STATUS qui ferait doublon, mais non...

Quelqu'un aurait une idée d'où ça pourrait provenir ?

Last edited by Elyos (20-04-2024 09:01:45)


Aide les autres, ils t'aideront en retour.

Offline


Bon...

J'ai voulu trouver tous les listeners pour l'event "action.order.updateStatus" en lançant :

/usr/bin/php8.2-cli bin/console  debug:event-dispatcher action.order.updateStatus

Mais ça m'a sorti des erreurs dans mes plugins => PRATIQUE, j'ai pu corriger les erreurs (même si ça fonctionnait avec, il n'y avait que des "Call to a member function getSession() on null")

Une fois fait, voilà ce que j'ai :


Registered Listeners for "action.order.updateStatus" Event
==========================================================

------- ------------------------------------------------------------------------- ----------
  Order   Callable                                                                  Priority
------- ------------------------------------------------------------------------- ----------
  #1      Thelia\Action\Order::updateStatus()                                       128
  #2      Payzen\EventListener\SendConfirmationEmail::updateStatus()                128
  #3      ExportEbp\EventListener\ExportEbpEvents::saveForEBP()                     128
  #4      OrderProcess\EventListener\OrderProcessEvents::updateStatus()             128
  #5      Virement\Listener\SendPaymentConfirmationEmail::sendConfirmationEmail()   128
  #6      Mandat\Listener\SendPaymentConfirmationEmail::sendConfirmationEmail()     128
  #7      JpaDelivery\EventListeners\JpaDeliveryEvents::updateStatus()              100
  #8      LocalPickupPlus\EventListeners\LocalPickupPlusEvents::updateStatus()      100
  #9      JpaDelivery\EventListeners\JpaDeliveryEvents::updateStatus()              100
  #10     LocalPickupPlus\EventListeners\LocalPickupPlusEvents::updateStatus()      100
  #11     Thelia\Action\Coupon::orderStatusChange()                                 10
------- ------------------------------------------------------------------------- ----------

J'ai bien mes listeners enregistrés en double... mais pourquoi? Comment ? neutral sad yikes hmm mad roll


Aide les autres, ils t'aideront en retour.

Offline


Elyos wrote:

J'ai bien mes listeners enregistrés en double... mais pourquoi? Comment ?

mad  mad  mad  mad  mad  mad  mad  mad  mad

Mais c'est bien sûr !!!!
Le config.xml fait doublon avec l'autoconfigure...

Bon bah j'aurais ptet les mêmes soucis autres parts...

Je vais devoir tout checker.


Aide les autres, ils t'aideront en retour.

Offline


Par contre, avec l'autoconfigure, dans le config XML, ce qui peut poser problème c'est les services uniquement ? Le reste ça ne gêne pas au fonctionnement ? (ça va override ?)


Aide les autres, ils t'aideront en retour.

Offline


Le config.xml fait doublon avec l'autoconfigure...

Un classique big_smile


OpenStudio Toulouse