<?php
namespace App\EventListener;
use Sylius\Bundle\ResourceBundle\Event\ResourceControllerEvent;
use Symfony\Component\Security\Http\Event\InteractiveLoginEvent;
use Doctrine\ORM\EntityManagerInterface;
use App\Entity\SiteSacZipSelection;
use App\Services\PPMCErpSynchroService;
use App\Exception\PPMCSynchroException;
use App\Entity\Customer\Customer;
use Carbon\Carbon;
use DateTime;
use Symfony\Component\Messenger\MessageBusInterface;
use App\Message\SyncCustomer;
use Symfony\Component\Process\Process;
use Symfony\Component\HttpFoundation\Session\SessionInterface;
/**
* Créer ou met à jour un client dans Generix lorsque :
* - Le client modifie ses informations (les adresses livraisons ne sont pas prise en compte)
* - Un nouveau client s'inscrit
* - On créer un nouveau client dans l'admin
*/
class CustomerResourceGenerixAddOrUpdateListener
{
private $ppmcErpSynchroService;
private $bus;
private $session;
public function __construct(PPMCErpSynchroService $ppmcErpSynchroService, MessageBusInterface $bus, SessionInterface $session)
{
$this->ppmcErpSynchroService = $ppmcErpSynchroService;
$this->bus = $bus;
$this->session = $session;
}
public function onLogin(InteractiveLoginEvent $event) {
$this->session->set('on_login', true);
}
/**
* Mise à jour des informations client dans Generix
* après mise à jour sur le site (post update)
*/
public function onPostUpdate(ResourceControllerEvent $event)
{
$customer = $event->getSubject();
// echo 'ici';
// exit();
// Il faut que le client possède un id generix.
$this->bus->dispatch(new SyncCustomer($customer->getId(), true));
// $customerGenerixId = $customer->getGenerixIdCustomer();
// if (empty($customerGenerixId) == false) {
// try {
// $this->ppmcErpSynchroService->updateCustomerGenerix($customerGenerixId, $customer);
// } catch (PPMCSynchroException $e) {
// // On ignore ce genre d'erreur, car c'est des timeout
// // ou service indisponible.
// }
// }
}
/**
* Création d'un nouveau client dans generix
* avant de le créer sur le site, pour récupérer son id generix
*/
public function onPostCreate(ResourceControllerEvent $event)
{
$customer = $event->getSubject();
$this->session->set('on_subscribe', true);
try {
$processActions = ['/usr/bin/php', '/home/ppmcdev/bin/console', 'ppmc:sync-customer', '--customerId='.$customer->getId()];
$process = new Process($processActions);
$process->run(function ($type, $buffer) {});
// $result = $this->ppmcErpSynchroService->addCustomerGenerix($customer);
// $customer->setGenerixIdCustomer($result->getIdCustomerGenerixId());
// $customer->setGenerixIdCardCustomer($result->getGiftCardGenerixId());
// Complète d'autres informations, eventuellement
// if (empty($customer->getFirstName()) == true) {
// $customer->setFirstName($result->getFirstName());
// }
// if (empty($customer->getLastName()) == true) {
// $customer->setLastName($result->getLastName());
// }
// if (empty($customer->getBirthday()) == true) {
// if (empty($result->getBirthday()) == false) {
// $customer->setBirthday(
// Carbon::createFromFormat(
// 'Y-m-d',
// $result->getBirthday()
// )->toDateTime()
// );
// }
// }
// if (empty($customer->getPhoneNumber()) == true) {
// $customer->setPhoneNumber(empty($result->getPhoneNumber()) ? null : $result->getPhoneNumber());
// }
// $customer->setOriginOfCustomer(empty($result->getOrigin()) ? Customer::DEFAULT_ORIGIN_OF_CUSTOMER : $result->getOrigin());
// $this->bus->dispatch(new SyncCustomer($customer->getId()));
// Puis on met à jour dans Generix
// $this->ppmcErpSynchroService->updateCustomerGenerix($result->getIdCustomerGenerixId(), $customer);
$customer->setLastSynchroDate(new DateTime());
} catch (PPMCSynchroException $e) {
// On ignore ce genre d'erreur, car c'est des timeout
// ou service indisponible.
}
}
}