Jump to content

[Prestashop 1.5.2] Fonctionnement réduction sur un produit


Recommended Posts

Bonjour,

 

Je m'arrache les cheveux sur le fonctionnement des réductions... Sur la versions 1.2 de Prestashop, on choisissait directement la réduction sur la fiche du produit, très simplement et ça fonctionnait très bien.

 

Là, j'ai un produit dont le prix de vente HT est de 25.84€, ce qui fait 30.90 € avec les taxes, très bien. Mais si je donne des prix spécifiques comme un prix fixé à 22€, ou des réductions de 10% à partir d'un produit (j'ai les bonnes périodes de dates), absolument rien ne change. Sur le front, j'ai toujours 30.90€ et même si je coche en solde, il n’apparaît pas plus dans le module (totalement bugué) de promotion (mais c'est un autre problème ça...).

 

Je veux que si un produit est vendu 30€ et que je lui mets une réduction de 50%, il apparaît à 15€ sur le site, ça ne me parait pas compliqué comme fonctionnement.

 

Une explication ?

 

Merci !

Link to comment
Share on other sites

Bon... J'ai mis les mains dedans et j'ai remonté la chaine des fonctions et j'ai trouvé ce qui bloquait et comment le corriger, mais pas pourquoi c'est comme ça.

 

Le problème venait de l'appel à la configuration PS_SPECIFIC_PRICE_FEATURE_ACTIVE qui va regarder si la notion de prix spécifique est activé ou non. Et bien cet appel effectué comme ceci :

 

Configuration::get('PS_SPECIFIC_PRICE_FEATURE_ACTIVE');

 

ne renvoyait rien (ou plutôt null). Etrange vu que j'ai bien ce paramètre dans ma table configuration et que la valeur est à 1. Bref, d'accord, j'ai testé avec une autre clé :

 

Configuration::get('PS_LANG_DEFAULT');

 

Et là, je récupère bien une valeur, tout va bien. D'accord...

 

Je vais voir dans la classe configuration et je vois qu'il y a une méthode GetInt qui ignore la langue, je test donc :

 

Configuration::getInt('PS_SPECIFIC_PRICE_FEATURE_ACTIVE');

 

Eureka, ça fonctionne ! Pourquoi, quel est le problème avec la lang ? Mystère.

 

Du coup, j'ai surchargé la fonction isFeatureActive de la classe SpecificPrice qui a pour rôle de contrôler si la fonctionnalité de prix spécifique est active ou non, de cette façon :

 

public static function isFeatureActive()
{

 static $feature_active = null;

 if ($feature_active === null)
	  $feature_active = Configuration::get('PS_SPECIFIC_PRICE_FEATURE_ACTIVE');

 // Nouveauté ici !
 if($feature_active === null)
	  $feature_active = Configuration::getInt('PS_SPECIFIC_PRICE_FEATURE_ACTIVE');
 // Fin nouveauté

 return $feature_active;
}

 

Si Get ne renvoie rien, on essaye avec GetInt...

Après, le patch est simple et peut être amélioré (en mettant le deuxième IF dans le premier pour optimisé, c'est ce que j'ai fait de mon coté mais j'ai voulu rester clair ici) et je pense que ça pourrait poser problème pour certain s'il y a des différences de configuration entre les langues mais je ne sais même pas comment c'est possible...

 

Bref, ça a fonctionné pour moi, je dois être le seul au monde à avoir eu ce problème bizarre mais au cas où, voici comme j'ai résolu le problème, si ça peut éviter à des gens de perdre des heures de développement...

 

Je précise que je ne suis absolument pas un développeur Prestashop et que si c'est de l'hérésie pour certain de faire comme ça, et bien, ça a le mérite de fonctionner contrairement à Prestashop de manière générale ;).

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