THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline


Bonjour,

Avant tout je vous souhaite à tous une bonne année !

Voilà mon problème : Je travaille sur un site de vente en ligne permettant aux clients de s'inscrire en tant que particulier ou professionnel. Je veux lors de l'inscription d'un pro cocher dans son profil la case "revendeur". J'ai essayé pour le moment dans un EventListener de faire :

public function checkProAccount(CustomerCustomerFamilyEvent $event)
    {
        $customerid = $event->getCustomerId();
        $customerfamily = $event->getCustomerFamilyId();
        if ($customerfamily == 2) {
            $customer = CustomerQuery::create()->filterById($customerid)->findOne();
            $customer->setReseller(1);
        }
    }

Mais ça ne fonctionne pas, Je voudrais donc savoir si vous aviez une solution pour cocher cette case lors de l'inscription, merci !

Last edited by ronanaupetit (07-01-2016 10:00:29)

Offline


Que se passe-t-il exactement ?

Ton listener est bien appelé ?


OpenStudio Toulouse

Offline


Oui oui le Listener est bien appelé, je passe bien dedans.

Et bien il se passe que ma méthode setReseller() n'insère rien dans ma table customer, la valeur du champs devrait devenir 1 mais elle reste à 0. J'ai d'ailleurs essayé avec d'autre champs de la table comme le nom mais rien ne change.

Offline


Normal, tu ne sauves pas les changements. Voilà le code correct (et optimisé ;-) ):

if (null !== $customer = CustomerQuery::create()->findPk($customerid)) {
    $customer
        ->setReseller(1)
        ->save();
}

OpenStudio Toulouse

Offline


Je viens de faire des tests, ça ne fonctionne pas chez moi hmm

Offline


Ha.

Si ça ne fonctionne pas avec ce code, c'est que:

- soit tu ne passe pas dans le code qui fait un setReseller(). Je penche pour cette solution.
Personnellement, j'utiliserais $event->getCustomer()->getId() au lieu de $event->getCustomerId(), et je m'assurerais que la priorité de mon listener est < à celle de l'action Thelia (donc < 128).

- soit ton listener est appelé avant un autre qui écrase ta modif.


OpenStudio Toulouse

Offline


Hello !

C'est bon ça fonctionne ! J'avais effectivement une priorité trop haute, en la baissant je n'ai plus de problème !

Merci beaucoup !

Offline


Régler mon problème m'en a amené un nouveau. J'ai donc bien réussi à modifier ma table Customer, j'ai essayé ce code dans la fonction appelé lors de l'interception de l'event "AFTER_CREATECUSTOMER" et même "CUSTOMER_CUSTOMER_FAMILY_UPDATE" (en gros après la création d'un client ou après la création d'une famille de client) et la j'ai une erreur

Désolé. Une erreur s'est produite : Unable to execute INSERT statement [INSERT INTO `customer_version` (`ID`, `REF`, `TITLE_ID`, `FIRSTNAME`, `LASTNAME`, `EMAIL`, `PASSWORD`, `ALGO`, `LANG`, `DISCOUNT`, `REMEMBER_ME_SERIAL`, `CREATED_AT`, `UPDATED_AT`, `VERSION`, `VERSION_CREATED_AT`) VALUES (:p0, :p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9, :p10, :p11, :p12, :p13, :p14)]

Offline


Il y a une autre erreur affichée plus bas. Peux-tu la poster ici ?


OpenStudio Toulouse

Offline


ça ?

1: ERROR [CustomerController.php:createAction()] {220} 2016-01-06 11:59:06: Error during customer creation process : Désolé. Une erreur s'est produite : Unable to execute INSERT statement [INSERT INTO `customer_version` (`ID`, `REF`, `TITLE_ID`, `FIRSTNAME`, `LASTNAME`, `EMAIL`, `PASSWORD`, `ALGO`, `RESELLER`, `LANG`, `DISCOUNT`, `REMEMBER_ME_SERIAL`, `CREATED_AT`, `UPDATED_AT`, `VERSION`, `VERSION_CREATED_AT`) VALUES (:p0, :p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9, :p10, :p11, :p12, :p13, :p14, :p15)]. Exception was Unable to execute INSERT statement [INSERT INTO `customer_version` (`ID`, `REF`, `TITLE_ID`, `FIRSTNAME`, `LASTNAME`, `EMAIL`, `PASSWORD`, `ALGO`, `RESELLER`, `LANG`, `DISCOUNT`, `REMEMBER_ME_SERIAL`, `CREATED_AT`, `UPDATED_AT`, `VERSION`, `VERSION_CREATED_AT`) VALUES (:p0, :p1, :p2, :p3, :p4, :p5, :p6, :p7, :p8, :p9, :p10, :p11, :p12, :p13, :p14, :p15)]

Offline


En dessous tu n'as pas un autre message qui précise l'erreur SQL ?


OpenStudio Toulouse

Offline


dans log-thelia.txt non mais je viens à l'instant de régler mon problème, exactement le même code fonctionne lorsque j'intercepte "CUSTOMER_CREATEACCOUNT".
Merci en tout cas, j'ai trouvé la réponse ici (de toi) http://thelia.net/forum/viewtopic.php?id=10967