THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

Je suis en train de developper une impression automatique via GooglePrint de mes commandes passant en status payé.

Tout fonctionne avec un fichier source de test, mais quand le fichier source est "thelia/web/admin/order/pdf/invoice/5116/1", forcement cela ne marche pas.

Je cherche donc le moyen d'enregistrer dès validation de commande la facture en PDF sur l'espace web, pour ensuite pouvoir en faire ce que je veux via mon PHP lancant l'impression.

Selon-vous, quelle serait le meilleur moyen de faire cela ?

Merci d'avance !

Valentin

Offline


Hello,

Du coup, j'ai créé dans order.php le code suivant :

public function StorePdf(PdfEvent $event)
    {
       
        //créer un pdf
   
            $html2pdf = new \HTML2PDF(
            $event->getOrientation(),
            $event->getFormat(),
            $event->getLang(),
            $event->getUnicode(),
            $event->getEncoding(),
            $event->getMarges()
        );

        $html2pdf->setDefaultFont($event->getFontName());

        $html2pdf->pdf->SetDisplayMode('real');

        $html2pdf->writeHTML($event->getContent());
       
        $html2pdf->output('../test.pdf', 'F');
       
    }

Comment gere t'on l'appel à cette fonction au moment ou une commande est validée ? Je cherche mais je ne trouve pas... sad

Offline


Dans Thelia 2, pour que ton code soit invoqué, il faut écrire un module, qui permet d'inscrire un service "event listener" qui est appelé lorsqu'un événement est généré par le core.

Tu peux étudier un module qui utilise ce principe, par exemple le module InvoiceRef

Dans le cas qui t'intéresse tu peux placer ton code dans un event listener qui intercepte l'event TheliaEvents::GENERATE_PDF


OpenStudio Toulouse

Offline


Merci Roaster,

C'est en effet ce que je suis en train de faire,

Je bosse dessus et je teste wink

Merci !

Offline


Donne une priorité basse (genre 10) à ton event listener, pour qu'il soit appelé après la génération du pdf.


OpenStudio Toulouse

Offline


Ok, C'est bien le "10" de la dernière ligne ?

Je n'arrive pas à le faire fonctionner avec ce que j'ai ci-dessous... sad

<?php


namespace StorePdf\EventListeners;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\PdfEvent;
use Thelia\Model\ConfigQuery;

class OrderListener implements EventSubscriberInterface
{

    public static function getSubscribedEvents()
    {
        return [
            TheliaEvents::ORDER_AFTER_CREATE => ['StorePdf', 10]
        ];
    }
}

Offline


C'est TheliaEvents::GENERATE_PDF que tu dois utiliser


OpenStudio Toulouse

Offline


roadster31 wrote:

C'est TheliaEvents::GENERATE_PDF que tu dois utiliser

J'avais bien lu, mais c'est la validation de la commande qui est l'evenement qui m'interesse non ?

Offline


Ha oui c'est vrai. Mais tu as besoin des données pdf. Du coup tu pourrais dispatcher toi même l'event de génération du pdf pour les récupérer.


OpenStudio Toulouse

Offline


Pour le moment, vu mon niveau, je tente me concentrer sur l'essentiel.

Pour le moment, j'en suis la :

<?php


namespace StorePdf\EventListeners;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\PdfEvent;
use Thelia\Model\ConfigQuery;

class OrderListener implements EventSubscriberInterface
{
 

    public static function getSubscribedEvents()
    {
        return [
            TheliaEvents::ORDER_AFTER_CREATE => ['StorePdf', 10]
        ];
    }
	
}

Et :

<?php

namespace StorePdf;

use Propel\Runtime\ActiveQuery\Criteria;
use Propel\Runtime\Connection\ConnectionInterface;
use Thelia\Model\ConfigQuery;
use Thelia\Model\OrderQuery;
use Thelia\Module\BaseModule;
use Thelia\Core\Event\PdfEvent;
use Thelia\Core\Event\TheliaEvents;

class StorePdf extends BaseModule
{
    const DOMAIN_NAME = "StorePdf";

     public function StorePdf(PdfEvent $event)
    {
       
		//créer un pdf
	
			$html2pdf = new \HTML2PDF(
            $event->getOrientation(),
            $event->getFormat(),
            $event->getLang(),
            $event->getUnicode(),
            $event->getEncoding(),
            $event->getMarges()
        );

        $html2pdf->setDefaultFont($event->getFontName());

        $html2pdf->pdf->SetDisplayMode('real');

        $html2pdf->writeHTML($event->getContent());
		
		$html2pdf->output('../print/test2.pdf', 'F');
		
    }

}

Pas de message d'erreur, la commande se valide mais mon fichier n'est pas créé.

Offline


Si je met ma fonction dans le listener, j'ai "Catchable fatal error: Argument 1 passed to StorePdf\EventListeners\OrderListener::StorePdf() must be an instance of Thelia\Core\Event\PdfEvent, instance of Thelia\Core\Event\Order\OrderEvent given in OrderListener.php on line 13

J'ai beau regarder d'autres exemples et la doc, je n'arrive pas a m'y retrouver.

<?php


namespace StorePdf\EventListeners;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\PdfEvent;
use Thelia\Model\ConfigQuery;

class OrderListener implements EventSubscriberInterface
{
	public function StorePdf(PdfEvent $event)
    {
       
		//créer un pdf
	
			$html2pdf = new \HTML2PDF(
            $event->getOrientation(),
            $event->getFormat(),
            $event->getLang(),
            $event->getUnicode(),
            $event->getEncoding(),
            $event->getMarges()
        );

        $html2pdf->setDefaultFont($event->getFontName());

        $html2pdf->pdf->SetDisplayMode('real');

        $html2pdf->writeHTML($event->getContent());
		
		$html2pdf->output('../print/test2.pdf', 'F');
		
    }

    public static function getSubscribedEvents()
    {
        return [
            TheliaEvents::ORDER_AFTER_CREATE => ['StorePdf', 10]
        ];
    }
	
}

Offline


Il faut que la methode StorePdf soit dans l'event listener pour pouvoir être appelée


OpenStudio Toulouse

Offline


roadster31 wrote:

Il faut que la methode StorePdf soit dans l'event listener pour pouvoir être appelée

Exact, c'est ce que je voulais faire (30s avant ta réponse), mais je dois louper un truc...

Offline


Hello,

Je n'arrive pas à comprendre pourquoi j'ai ce message d'erreur :

Catchable fatal error: Argument 1 passed to StorePdf\EventListeners\StorePdflistener::StorePdf() must be an instance of Thelia\Core\Event\PdfEvent, instance of Thelia\Core\Event\Order\OrderEvent given in /homepages/7/d453476029/htdocs/thelia/local/modules/StorePdf/EventListeners/StorePdfListener.php on line 11

J'ai loupé quoi ?

Merci !

<?php
namespace StorePdf\EventListeners;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Thelia\Core\Event\Order\OrderEvent;
use Thelia\Core\Event\TheliaEvents;
use Thelia\Core\Event\PdfEvent;
use Thelia\Model\ConfigQuery;

class StorePdflistener implements EventSubscriberInterface
{
	public function StorePdf(PdfEvent $event)
    {
       
		//créer un pdf
	
			$html2pdf = new \HTML2PDF(
            $event->getOrientation(),
            $event->getFormat(),
            $event->getLang(),
            $event->getUnicode(),
            $event->getEncoding(),
            $event->getMarges()
        );

        $html2pdf->setDefaultFont($event->getFontName());

        $html2pdf->pdf->SetDisplayMode('real');

        $html2pdf->writeHTML($event->getContent());
		
		$html2pdf->output('../print/test2.pdf', 'F');
		
    }

    public static function getSubscribedEvents()
    {
        return [
            TheliaEvents::ORDER_AFTER_CREATE => ['StorePdf', 10]
        ];
    }
	
}

Offline


L'argument de la méthode StorePdf doit être un OrderEvent, c'est ce type d'event qui est envoyé.


OpenStudio Toulouse

Offline


Ok merci,

Mais quand en argument je met OrderEvent, mes methodes (GetOrientation() par exemple), ne sont plus reconnues du coup ?

Last edited by valentin121212 (23-04-2019 14:28:23)