Définition du bug PrestaShop

Un bug est un problème dans l’outil, n’affichant pas la bonne information, ou un message d’erreur ou une page blanche…

Ici, je vais vous présenter la résolution à apporter pour corriger un problème non sans importance : les décimales sur les données de la fiche produit ou déclinaison. Prix, Ecotaxe, etc… toutes ces données qui peuvent la plupart du temps avoir besoin d’un nombre à virgule, et qui l’empêche par la mauvaise utilisation de prestashop.

Voici la solution :

Correctifs au bug

Prestashop 1.7

En version 1.7, le fichier AdminModelAdapter.php dans le dossier /src/PrestaShopBundle/Model/Product contient la donnée importante. En effet, aux lignes 326 (si aucune modification de ce fichier), vous retrouverez les codes suivants :

$form_data['combinations'][$k]['attribute_price'] = abs(
     $floatParser->fromString($combination['attribute_price'])
);
$form_data['combinations'][$k]['attribute_weight'] = abs(
     $floatParser->fromString($combination['attribute_weight'])
);
$form_data['combinations'][$k]['attribute_unity'] = abs(
     $floatParser->fromString($combination['attribute_unity'])
);

Vous pouvez donc ajouter, pour chaque champ nécessaire, une combinaison de code qui servira à rendre les décimales possibles (exemple ci-dessous pour le prix d’achat) :

$form_data['combinations'][$k]['attribute_wholesale_price'] = abs(
     $floatParser->fromString($combination['attribute_wholesale_price'])
);

Il est possible de le faire pour tous les champs voulus (ecotaxe ou autre), il suffit de changer la valeur du champ (ici « attribute_wholesale_price » par celui souhaité, par exemple « ecotax »).

Versions antérieures de Prestashop

Dans les versions antérieures de Prestashop, la fonction floatParser n’existe pas (en natif). Il faut donc aller dans le même fichier, ligne 265 et remplacer :

 $form_data['combinations'][$k]['attribute_price'] = abs($combination['attribute_price']); 

Par :

 $form_data['combinations'][$k]['attribute_price'] = abs(str_replace(',', '.', $combination['attribute_price']));