Jump to content

Hook UpdateOrderStatus non pris en compte dans un module


Recommended Posts

Bonjour,

 

Après avoir passé une bonne après-midi hier à trouver un moyen de faire fonctionner le hook (UpdateOrderStatus) d'un module acheté sur le shop, je viens poster ici pour savoir si quelqu'un pourrait m'aider à débloquer la situation.

 

J'ai acheté le module Rue Du Commerce qui permet d'importer les commandes passées sur RdC dans le BO de Prestashop.

Pour expliquer le fonctionnement général : la récupération des commandes se fait au travers d'un webservice qui renvoie un flux XML. Le module parse ce flux et créé ensuite les comptes et commandes nécessaires.

Par la suite, lorsque le statut de l'un de ces commandes est mis-à-jour, le module envoie à son tour un flux XML au webservice pour indiquer les nouveaux statuts. Ce qui permet aux client de voir l'avancement de leur commande depuis leur compte RdC.

 

Cette dernière partie est donc réalisée lors du changement de statut d'une commande.

Pour se faire le code est saisi dans le hook UpdateOrderStatus. Le soucis étant que ce hook semble être ignoré par Prestashop, alors même qu'il est enregistré lors de l'installation du module.

 

Lors de mes tests j'ai tenté d'afficher des données au travers de Firebug, de créer un fichier sur le serveur etc, mais rien n'y fait. Le hook semble ne jamais être appelé.

 

Je vous poste ci-dessous deux parties de code : l'installation du module avec l'enregistrement du hook et le hook lui-même.

 

 

public function install()
 {
global $cookie;
$pass = true ;
require_once(dirname(__FILE__).'/classes/VoBase.class.php');
require_once(dirname(__FILE__).'/classes/RDC_CsvManager.class.php');
require_once(dirname(__FILE__).'/classes/RDC_CategoryManager.class.php');
require_once(dirname(__FILE__).'/classes/RDC_DeliveryManager.class.php');
require_once(dirname(__FILE__).'/classes/RDC_FeatureCsvManager.class.php');
require_once(dirname(__FILE__).'/classes/RDC_FeatureManager.class.php');
require_once(dirname(__FILE__).'/classes/RDC_Manager.class.php');
require_once(dirname(__FILE__).'/classes/RDC_Util.class.php');
foreach($this->_config as $key => $value)
  if ( ! Configuration::updateValue($key, (is_array($value) ? base64_encode(serialize($value)) : $value) ) )
	$pass = false ;
if(!$this->_createtable())
  $pass = false;
// Extra Field
$rq = Db::getInstance()->ExecuteS('SHOW FIELDS FROM `' . _DB_PREFIX_ . 'product`');
$tablefields = array();
foreach($rq as $item)
{
  $tablefields[] = $item['Field'];
}
foreach($this->_fields as $field)
{
  if(in_array($field['field'], $tablefields))
	continue;
  if ( ! $this->_addProductExtField($field) )
	$pass = false ;
}
// Extra Field
if ( ! $this->_addMarketPlaceField() )
  $pass = false ;

if(!parent::install() OR
   ! $this->installModuleTab('ProductsRDC', array(1=>'Rue du Commerce', 2=>'Rue du Commerce'), 1) OR
   ! $this->installModuleTab('OrdersRDC', array(1=>'Rue du Commerce', 2=>'Rue du Commerce'), 3) OR
   ! $this->_createCustomer() OR
   ! $this->registerHook('BackOfficeHeader') OR
   ! $this->registerHook('AdminOrder') OR
   ! $this->registerHook('updateOrderStatus') )
  $pass = false ;

return($pass) ;
 }

 

 

public function hookUpdateOrderStatus($params)
 {
global $cookie ;
global $_LANGMAIL;
$shipping_number = null ;

// TEST
$file = fopen(_PS_MODULE_DIR_.$this->name.'/temp/export.txt', 'w+');
fwrite($file, RDC_WebService::shipItems($order, $shipping_number) );
fclose($file);
require_once(_PS_MODULE_DIR_.$this->name.'/classes/Order/RDC_Order.class.php');
require_once(_PS_MODULE_DIR_.$this->name.'/classes/RDC_OrderManager.class.php');
// Carriers
//
$id_order		   = intval($params['id_order']) ;

if ( ! ($order = new RDC_Order($id_order)) )   return(false) ;
// Not a rue duc order
//
if ( strtolower($order->module) != $this->name ) return ;
// Config
//
$sentstate		  = Configuration::get('RDC_SENT_ORDERS_STATUS') ;
$id_lang			= intval($order->id_lang) ;
// Matching Order Status
//
if ( $params['newOrderStatus']->id != $sentstate)	 return(false) ;
$address = new Address($order->id_address_delivery);
// The field is not set - warn about the configuration
//
if ( ! isset($order->shipping_number) )
	  Configuration::updateValue('RDC_SHIPPING_NUM_NOT_SET', true) ;
else  $shipping_number = $order->shipping_number ;
require_once(_PS_MODULE_DIR_ . '/' . $this->name . '/classes/RDC_WebService.class.php');
$merchant = unserialize(base64_decode(Configuration::get('RDC_MERCHANT')));
// Send new order status to RDC
//
/*if ( isset($merchant['test']) && ! $merchant['test'] )
{
	// TEST
	$file = fopen(_PS_MODULE_DIR_.$this->name.'/temp/export.txt', 'w+');
 fwrite($file, RDC_WebService::shipItems($order, $shipping_number) );
 fclose($file);
}*/

return(true) ;
 }

 

Merci d'avance :)

Pour ma part je vais continuer à chercher une solution, mais je vous avoue être à court d'idée...

Link to comment
Share on other sites

Comme quoi la nuit porte conseil...

 

Je me suis rendu compte que lors de l'installation du module, le greffage de celui-ci au hook n'est pas enregistré en base de données. Pour quelle raison ? C'est encore un mystère et je continu à enquêter :ph34r:

Link to comment
Share on other sites

Le module est presque fonctionnel...

Je trouve tout de même préjudiciable que des modules soient mis en vente sur l'addon shop sans vérification de leur bon fonctionnement...

 

 

Reste un dernier point à résoudre.

Le module doit pouvoir envoyé le code de track de l'expédition auprès du webservice de RdC. Hors celui-ci n'est saisi qu'une fois le statut de la commande mis à jour (passage en Livraison en cours).

Du coup le hook updateOrderStatus ne permet pas de récupérer le code de tracking, puisqu'il est saisi après le changement de statut.

 

Je n'ai pas trouvé de hook attaché au changement du tracking code.

Vous auriez une idée de comment renseigner le module de la saisie de code ?

Link to comment
Share on other sites

Avez-vous contacté l'auteur du module pour ces problèmes ?

L'auteur avait été contacté et souhaitait un accès à la boutique pour faire les modifications nécessaires. Bien sûr je n'ai pas eu l'aval de la direction pour cela, et les modifications se sont donc faites en interne.

 

Reste que l'auteur disait en avoir pour 20 minutes tout au plus. Chose dont je doute très fortement quand je vois les modifications que j'ai du apporter au module pour le faire fonctionner correctement (calculs faux lors des imports, portions de codes inutiles etc).

A 150€ le module on pourrait s'attendre à quelque chose de fonctionnel et ayant été testé.

 

Je continue donc à penser que les modules mis en vente sur la plateforme de Prestashop devraient être soumis à validation (si ce n'est pas déjà le cas). L'air de rien ce genre de situation peut ternir l'image de l'application et de son équipe.

 

Pour ma part je vais lister toutes les modifications que j'ai du apporter à celui-ci (et il y en a un bon paquet) et contacter à nouveau l'auteur à ce sujet.

Le module fonctionne enfin, mais il nous sera revenu bien plus cher que les 150€ initiaux...

Edited by Franck..m (see edit history)
Link to comment
Share on other sites

Les modules sur Addons sont soumis à validation et sont refusés si un bug est détecté.

 

Le problème des modules c'est que ce n'est pas un produit indépendant. Le fait qu'il fonctionne sur une boutique ne veut pas dire qu'il fonctionnera sur une autre (normalement si mais il y a tellement de cas particulier).

Cela peut dépendre

  • du serveur,
  • de la version de Prestashop,
  • de la version de PHP,
  • de la version de MySQL,
  • des modules PHP activés ou non,
  • des limitations appliqués ou non par le serveurs,
  • des autres modules Prestashop,
  • du client qui sait ou non installer correctement un module (pas d’offense, je ne vise personne)
  • dans ce cas d'un serveur externe
  • ...

la liste est longue.

 

L'auteur avait été contacté et souhaitait un accès à la boutique pour faire les modifications nécessaires. Bien sûr je n'ai pas eu l'aval de la direction pour cela, et les modifications se sont donc faites en interne.

En tant que développeur je ne comprend pas ce fonctionnement. Un ordinateur de la société ne fonctionne plus, vous le réparez vous même ? quelle différence avec un module ? Au besoin vous faites signer un contrat de confidentialité.

 

Le développeur aurait peut être mis 20 minutes, il connait son module, peut être même ce bug précis. en tout cas il aurait su où chercher.

Link to comment
Share on other sites

Les modules sur Addons sont soumis à validation et sont refusés si un bug est détecté.

 

Le problème des modules c'est que ce n'est pas un produit indépendant. Le fait qu'il fonctionne sur une boutique ne veux pas dire qu'il fonctionnera sur une autre (normalement si mais il y a tellement de cas particulier).

Cela peut dépendre

  • du serveur,
  • de la version de Prestashop,
  • de la version de PHP,
  • de la version de MySQL,
  • des modules PHP activés ou non,
  • des limitations appliqués ou non par le serveurs,
  • des autres modules Prestashop,
  • du client qui sait ou non installer correctement un module (pas d’offense, je ne vise personne)
  • dans ce cas d'un serveur externe
  • ...

la liste est longue.

Pour ce module en particulier, je t'assure qu'on est obligé de le retoucher pour qu'il fonctionne correctement. ne serait-ce que pour que l'import des commandes depuis RdC soient récupérées avec un total correct (par défaut, le calcul effectué par le module est faux).

 

Après je suis d'accord sur le reste.

Mais quand tu retrouves à revoir le code de l'intégralité du module (ne serait-ce que pour l'optimisation en terme de temps d'exécution), tu finis par te poser des questions.

 

 

En tant que développeur je ne comprend pas ce fonctionnement. Un ordinateur de la société ne fonctionne plus, vous le réparez vous même ? quelle différence avec un module ? Au besoin vous faites signer un contrat de confidentialité.

 

Le développeur aurait peut être mis 20 minutes, il connait son module, peut être même ce bug précis. en tout cas il aurait su où chercher.

 

Pour la première question je ne sais pas trop quoi répondre. Dans le fond je suis d'accord, mais dans les faits c'est souvent comme cela que ça se passe...

Pour la seconde remarque par contre j'émets un gros doute. L'auteur aurait peut-être résolu le problème posé en début de topic, mais il s'avère que sa résolution dévoilait ensuite d'autres soucis. Une vraie cascade.

Link to comment
Share on other sites

Pour ce module en particulier, je t'assure qu'on est obligé de le retoucher pour qu'il fonctionne correctement. ne serait-ce que pour que l'import des commandes depuis RdC soient récupérées avec un total correct (par défaut, le calcul effectué par le module est faux).

 

L'équipe addons valide les modules sur un comporte standart pour vérifier qu'il s'intègre à Prestashop.

Ils ne font pas une validation fonctionnelle totale du module.

Par exemple, pour ce calcul, ils vérifient que le calcul est fait, mais je doute qu'ils vérifient qu'il est exact.

 

C'est au développeur à assurer les tests exhaustifs et le support du module

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...