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)