THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

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

Offline

#1 Mon module CustomerRef

(26-02-2015 09:17:34)


Bonjour,

Suite au passage de la version 2.0.4 a la 2.1.2 de thelia
Apparemment mon module de personnalisation de la ref client ne fonctionne plus

je ne vois pas pourquoi, je n'utilise pas d'instruction obsolete

lien vers le module

Ce que je constate :
toutes les instructions marchent bien sauf que je me retrouve avec :
SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ '78-1' pour la clef 'PRIMARY'

Dois je mettre a jour la table customer_version au lieu de customer ?

dans les logs a la creation d'un nouveau client, je vois dans cet ordre

- INSERT INTO `customer`.....
- INSERT INTO `address`....
- UPDATE `customer` SET `REF`='nouvelle ref'.....
- INSERT INTO `customer_version`...........
puis ERROR .... SQLSTATE[23000]: Integrity constraint violation: ......
puis ERROR .... [CustomerController.php:createAction()] {228} ....... Error during customer creation process : Désolé. Une erreur s'est produite : Unable to execute INSERT statement  [INSERT INTO `customer_version`.......

je bloque complet, une piste ?
Merci

Last edited by zzuutt (26-02-2015 09:29:42)

Offline

#2 Re: Mon module CustomerRef

(26-02-2015 10:13:45)


Dans OrderListener.php (Order ?!) Essaie de recharger le customer au lieu de prendre celui de l'event :

$customer = CustomerQuery::create()->findByPk($event->getCustomer()->getId());

OpenStudio Toulouse

Offline

#3 Re: Mon module CustomerRef

(26-02-2015 10:36:14)


J'ai renomme le fichier en CustomerListener
j'ai teste avec

$customer = CustomerQuery::create()->findPk($event->getCustomer()->getId());

j'ai la meme erreur

54: INFO [ConnectionWrapper.php:log()] {653} 2015-02-26 10:30:30: INSERT INTO `customer_version` (`ID`, `REF`, `TITLE_ID`, `FIRSTNAME`, `LASTNAME`, `EMAIL`, `PASSWORD`, `ALGO`, `LANG`, `REMEMBER_ME_SERIAL`, `CREATED_AT`, `UPDATED_AT`, `VERSION`, `VERSION_CREATED_AT`) VALUES (81, '1502000', 1, 'titi', 'Polo', 'moi@toi.fr', '$2y$10$/7kspmDM0f4FcZW36P7yt.6KeRnbLQn7Y1qEnngqt/MyUye2aGokS', 'PASSWORD_BCRYPT', '1', '54eee7b6e38f9', '2015-02-26 10:30:30', '2015-02-26 10:30:30', 1, '2015-02-26 10:30:30')
55: INFO [ConnectionWrapper.php:log()] {653} 2015-02-26 10:30:30: UPDATE `config` SET `VALUE`='1', `UPDATED_AT`='2015-02-26 10:30:30' WHERE config.ID=79
56: INFO [ConnectionWrapper.php:log()] {653} 2015-02-26 10:30:31: SELECT order.ID, order.REF, order.CUSTOMER_ID, order.INVOICE_ORDER_ADDRESS_ID, order.DELIVERY_ORDER_ADDRESS_ID, order.INVOICE_DATE, order.CURRENCY_ID, order.CURRENCY_RATE, order.TRANSACTION_REF, order.DELIVERY_REF, order.INVOICE_REF, order.DISCOUNT, order.POSTAGE, order.POSTAGE_TAX, order.POSTAGE_TAX_RULE_TITLE, order.PAYMENT_MODULE_ID, order.DELIVERY_MODULE_ID, order.STATUS_ID, order.LANG_ID, order.CART_ID, order.CREATED_AT, order.UPDATED_AT, order.VERSION, order.VERSION_CREATED_AT, order.VERSION_CREATED_BY FROM `order` WHERE order.CUSTOMER_ID=81
57: ERROR [Propel.php:log()] {284} 2015-02-26 10:30:31: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicata du champ '81-1' pour la clef 'PRIMARY'
58: ERROR [CustomerController.php:createAction()] {228} 2015-02-26 10:30:31: Error during customer creation process : Désolé. Une erreur s'est produite : Unable to execute INSERT statement [INSERT INTO `customer_version`.....

Offline

#4 Re: Mon module CustomerRef

(26-02-2015 11:07:55)


Bon, manifestement le numéro de version n'est pas incrémenté dans Propel. C'est étrange.

Tu peux débugger et voir ce qui se passe en ligne 1452 de Model/Base/Customer.php ?


OpenStudio Toulouse

Offline

#5 Re: Mon module CustomerRef

(26-02-2015 11:48:46)


Oui apparemment  setVersion reste a 1

$this->isNew() ? 1 : $this->getLastVersionNumber($con) + 1

fichier log:
setVersion =1
INSERT INTO `customer`....
INSERT INTO `address`.....
ca genere le nouveau CustomerRef
setVersion = 1
UPDATE `customer` SET `REF`='1502000',......
createVersion = TRUE
INSERT INTO `customer_version`..........
UPDATE `config` SET `VALUE`='1'......
createVersion = TRUE
ERROR Duplicata du champ '88-1'

le 1er INSERT INTO `customer_version`.......... ne devrait il pas s'executer avant l'appel du module CustomerRef (AFTER_CREATECUSTOMER) ?

comme suite:

setVersion =1
INSERT INTO `customer`....
INSERT INTO `address`.....
createVersion = TRUE
INSERT INTO `customer_version`..........

EVENT::AFTER_CREATECUSTOMER

ca genere le nouveau CustomerRef
setVersion = 2
UPDATE `customer` SET `REF`='1502000',......
UPDATE `config` SET `VALUE`='1'......
createVersion = TRUE
INSERT INTO `customer_version`..........

Last edited by zzuutt (26-02-2015 15:29:12)

Offline

#6 Re: Mon module CustomerRef

(26-02-2015 15:48:47)


Ca devrait. Mais c'est Propel qui décide, pas Thelia.

Je suppose que isNew() n'est pas ré-initialisé, c'est peut-être un bug Propel. Tu devrais essayer de faire $category->setNew(false) ; avant le save()


OpenStudio Toulouse

Offline

#7 Re: Mon module CustomerRef

(26-02-2015 16:50:25)


si j'ai bien compris helas cela ne change rien toujours le meme log

Offline

#8 Re: Mon module CustomerRef

(26-02-2015 17:20:53)


Manu m'a soufflé une suggestion: essaie de ne pas faire de save() sur le customer dans ton event listener, parce qu'en fait il se déroule PENDANT le save.

D'ou le problème de isNew().


OpenStudio Toulouse

Offline

#9 Re: Mon module CustomerRef

(26-02-2015 17:51:16)


si je supprime save()
il n'y a plus d'erreur, mais la Ref du client n'est pas changee

UPDATE `customer` SET `REF`='1502000',......      n'est pas execute

sad

Offline

#10 Re: Mon module CustomerRef

(26-02-2015 18:37:07)


OK, OK. On va faire simple :

Utilises donc un autre event, genre CUSTOMER_CREATEACCOUNT, en te plaçant après le core ( priorité > 128)


OpenStudio Toulouse

Offline

#11 Re: Mon module CustomerRef

(27-02-2015 08:48:38)


Parfait avec

TheliaEvents::CUSTOMER_CREATEACCOUNT => ['implementCustomer', 100]

j'ai bien dans les logs

setVersion =1
INSERT INTO `customer`....
INSERT INTO `address`.....
createVersion = TRUE
INSERT INTO `customer_version`..........

EVENT::CUSTOMER_CREATEACCOUNT

ca genere le nouveau CustomerRef
setVersion = 2
UPDATE `customer` SET `REF`='1502000',......
createVersion = TRUE
INSERT INTO `customer_version`..........
UPDATE `config` SET `VALUE`='1'......

Merci !

j'ouvre une issue pour l'event ?

Last edited by zzuutt (27-02-2015 08:51:39)

Offline

#12 Re: Mon module CustomerRef

(27-02-2015 09:16:45)


j'ouvre une issue pour l'event ?

Non, pas la peine, c'est plutôt un problème d'utilisation de Propel.


OpenStudio Toulouse