THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Order EventListener

(26-11-2019 16:09:51)


Bonjour,

J'essaye en vain de créer un EventListener dans mon module pour capter quand une commande est payé.
Dans mon EventListener je souhaite exécuter une fonction qui fonctionne quand je la teste dans un controller, donc je sais qu'elle est bonne (meme si elle est moche).
J'ai bien déclaré mon EventListener dans mon fichier config.xml.

<services>
        <service id="monstock.services" class="MonStock\EventListeners\MonStockEventListener" scope="request">
            <argument id="request" type="service"/>
            <tag name="kernel.event_subscriber"/>
        </service>

        <service id="reduce.stock" class="MonStock\EventListeners\ReduceStockEventListener">
            <argument type="service" id="request"/>
            <tag name="kernel.event_subscriber"/>
        </service>
    </services>
<?php

namespace MonStock\EventListeners;

use MonStock\MonStock;
use Symfony\Component\EventDispatcher\EventDispatcherInterface;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Action\BaseAction;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\Order\OrderAddressEvent;
use Thelia\Core\Security\AccessManager;
use Thelia\Core\Security\Resource\AdminResources;
use Thelia\Form\OrderUpdateAddress;
use Thelia\Model\ConfigQuery;
use Thelia\Model\OrderAddressQuery;
use Thelia\Model\OrderQuery;
use Thelia\Model\OrderStatusQuery;
use Thelia\Model\ProductSaleElements;
use Thelia\Model\ProductSaleElementsQuery;
use Thelia\Model\ProductQuery;
use Thelia\Model\OrderProduct;
use Thelia\Model\OrderProductQuery;
use Symfony\Component\HttpFoundation\Request;
use Doctrine\ORM\EntityManagerInterface;
use MonStock\Model\ProductFournisseurRefQuery;
use MonStock\Model\FournisseurRefQuery;

/**
 * Payline payment module
 *
 * @author Franck Allimant <franck@cqfdev.fr>
 */
class ReduceStockEventListener extends BaseAction implements EventSubscriberInterface
{
    
    /**
     * @param OrderEvent $event
     *
     * @throws \Exception if the message cannot be loaded.
     */
    public function reduceStock(OrderEvent $event)
    {

        $order = $event->getOrder();
            if ($order->isPaid()) {

                /** @var OrderProduct $orderProduct */
                foreach ($order->getOrderProducts() as $orderProduct) {
                    $pseRef = $orderProduct->getProductSaleElementsRef();

                    // Si c'est une combinaison qui a été commandée, on a l'ID.
                    // Sinon, c'est un produit simple: le retrouver par sa reférence
                    if (null !== $pse = ProductSaleElementsQuery::create()->findPk($orderProduct->getProductSaleElementsId())) {
                        $productId = $pse->getProductId();
                    } elseif (null !== $product = ProductQuery::create()->findOneByRef($orderProduct->getProductRef())) {
                        $productId = $product->getId();
                    }
                }

                //On récupère le produit
                $product = ProductQuery::create()->findPk($productId);
                $fournisseurProduct = ProductFournisseurRefQuery::create()->findPk($productId);
                $idFournisseurRef = $fournisseurProduct->getFournisseurRefId();
                $refName1 = FournisseurRefQuery::create()->findPk($idFournisseurRef);
                //On récupère la ref Produit du fournisseur
                $refName2 = $refName1->getTitle();

                //On créer l'URL avec la ref
                $url1 = "https://api.cloud.monstock.net/api/v1/productlistgeneric?attr=reference_company&value=$refName2";

                $curl = curl_init();

                
                curl_setopt_array($curl, array(
                CURLOPT_URL => $url1,
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "GET",
                CURLOPT_HTTPHEADER => array(
                    "Accept: */*",
                    "Accept-Encoding: gzip, deflate",
                    "Cache-Control: no-cache",
                    "Connection: keep-alive",
                    "Host: api.cloud.monstock.net",
                    "Postman-Token: ",
                    "User-Agent: PostmanRuntime/7.19.0",
                    "cache-control: no-cache",
                    "token: "
                ),
                ));

                $response = curl_exec($curl);
                $err = curl_error($curl);
                
                curl_close($curl);

                if ($err) {
                echo "cURL Error #:" . $err;
                } else {
                // echo $response;
                }

                $data = json_decode($response);

                //On récupère l'ID du produit sur MonStock
                $idMonStockProduct =  $data->products[0]->id;
                
                //On créer l'url avec l'ID du produit sur MonStock pour la décrémentation
                $urlReduce = "{\n\t\"reason\": \"activitytype_stockout\",\n\t\"type\": 1,\n\t\"log\": \"Log de l’ajustement\",\n\t\"adjustment\": [{\n\t\t\"branchs\":9015,\n\t\t\"location\":25919,\n\t\t\"quantity\":1,\n\t\t\"products\":$idMonStockProduct\n\t}]\n}";

                $curl2 = curl_init();

                curl_setopt_array($curl2, array(
                CURLOPT_URL => "https://api.cloud.monstock.net/api/v2/adjustment-stock-bulk/",
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_ENCODING => "",
                CURLOPT_MAXREDIRS => 10,
                CURLOPT_TIMEOUT => 30,
                CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
                CURLOPT_CUSTOMREQUEST => "POST",
                CURLOPT_POSTFIELDS => $urlReduce,
                CURLOPT_HTTPHEADER => array(
                    "Accept: */*",
                    "Accept-Encoding: gzip, deflate",
                    "Cache-Control: no-cache",
                    "Connection: keep-alive",
                    "Content-Length: 180",
                    "Content-Type: application/json",
                    "Host: api.cloud.monstock.net",
                    "Postman-Token: 1b5d653b-7ef1-4415-89a9-8dc0a91606a6,56df5724-1e21-4093-ba79-e0e304dd9c45",
                    "User-Agent: PostmanRuntime/7.19.0",
                    "cache-control: no-cache",
                    "token: "
                ),
                ));

                $response = curl_exec($curl2);
                $err = curl_error($curl2);

                curl_close($curl2);

                if ($err) {
                echo "cURL Error #:" . $err;
                } else {
                echo $response;
                }
            }
    }

    public static function getSubscribedEvents()
    {
        return array(
            TheliaEvents::ORDER_UPDATE_STATUS => array("reduceStock", 128)
        );
    }
}

Last edited by DrGonzi (26-11-2019 16:27:11)

Offline

#2 Re: Order EventListener

(26-11-2019 16:58:14)


Et il se passe quoi exactement ?


OpenStudio Toulouse

Offline

#3 Re: Order EventListener

(28-11-2019 09:21:05)


Désolé j'étais absent hier.
C'est bon mon problème est résolus, j'avais mal vidé mon cache...

Offline

#4 Re: Order EventListener

(28-11-2019 12:52:40)


Ahhhhh... Le cache...


OpenStudio Toulouse

Offline

#5 Re: Order EventListener

(28-11-2019 13:59:54)


Ah ah, c'est souvent la le problème mais je le néglige toujours trop...

Offline

#6 Re: Order EventListener

(29-11-2019 06:52:11)


Travaille en mode développement, le cache sera automatiquement invalidé


OpenStudio Toulouse