Jump to content

Transporteur dupliqué plutôt que mis à jour !


Recommended Posts

Bonjour à tous,

j'ai beau chercher une solution à mon problème, je ne comprends pas d'où il vient 🙄

A chaque fois que je modifie mes transporteurs (en l'occurence, mon seul transporteur), l'entrée dans la base de données (ps_carriers) est dupliquée plutôt que d'être updaté (voir PJ)

Certes les "anciennes lignes" passent en deleted = 1, mais je me retrouve avec des problème d'ID dans le module que je développe actuellement. A quoi est dû ce comportement ? J'ai trouvé la fonction postProcess() dans la classe AdminCarriersControllerCore - et non AdminCarrierWizardControllerCore qui n'en a pas. Je ne vois rien qui sorte de l'ordinaire...

Merci d'avance pour votre aide !

Sans titre.jpg

Edited by Paolo75
Titre de topic plus explicite (see edit history)
Link to comment
Share on other sites

13 minutes ago, Eolia said:

c'est normal et très utile pour conserver la cohérence des commandes/factures

Ne vous basez pas sur l'id mais sur la référence transporteur

Bonjour Eolia,

D'accord, je comprends mieux maintenant, c'est vrai que c'est assez malin comme process.

Merci pour cette réponse rapide et pour ton aide.

Edited by Paolo75 (see edit history)
Link to comment
Share on other sites

14 hours ago, doekia said:

De plus il existe depuis toujours un hook permettant de savoir qu'une transporteur change d'id (hookUpdateCarrier)

Salut Doekia,

Pour rebondir sur cette histoire de Hook : en effet je le vois bien dans la classe AdminCarriersController.php :

Hook::exec('actionCarrierUpdate', array(
   'id_carrier' => (int)$current_carrier->id,
   'carrier' => $new_carrier
));

Question : est-il possible, depuis mon module personnel, d'écouter ce hook et d'éxécuter du code quand actionCarrierUpdate est appelé ? Comme un event listener de Symfony en gros. Je ne trouve pas d'informations à ce sujet mais j'ai peut-être mal cherché - même dans la doc. officielle. Tout simplement en déclarant une nouvelle fonction hookActionCarrierUpdate() ? Avec une variable en paramètre pour récupérer les données ?

Très concrètement, quand un transporteur est modifié, j'aimerais récupérer l'ID de la nouvelle entrée ($news_carrier->id) pour l'injecter dans une requête.

Merci d'avance pour ton aide

Edited by Paolo75 (see edit history)
Link to comment
Share on other sites

Tu as compris le principe :)

Dans ton install()

$this->registerHook('updateCarrier')

et dans ton code 

	public function hookUpdateCarrier($params) {

		$carrier = $params['carrier'];
		$id_carrier_old = (int)($params['id_carrier']);
		$id_carrier_new = (int)$carrier->id;
		if ($id_carrier_old == (int)Db::getInstance()->getValue('
									SELECT id_carrier
									FROM '._DB_PREFIX_.'ma_table 
									WHERE id_carrier = '.$id_carrier_old))
			Db::getInstance()->Execute('
									UPDATE '._DB_PREFIX_.'ma_table 
									SET id_carrier = '.$id_carrier_new.' 
									WHERE id_carrier = '.$id_carrier_old);
	}	

Le hook se déclenchera à chaque mise à jour d'un transporteur^^

  • Like 1
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...