Bonjour @marion75,
C'est un comportement classique avec les hooks de type 'Before' si les modifications ne sont pas explicitement persistées ou rechargées. Dans le contexte de hookActionValidateOrderBefore, même si $this->runCartDiscountSync modifie l'objet Cart en mémoire, ces changements ne sont pas automatiquement sauvegardés en base de données et peuvent être ignorés par le processus de création de commande.
Pour résoudre ce problème, il faut s'assurer que les modifications apportées par runCartDiscountSync sont bien enregistrées et que le panier est rafraîchi avant la finalisation de la commande. Voici une modification à apporter à votre hook dans conorderdis/conorderdis.php :
function hookActionValidateOrderBefore($params)
{
if (!(int) Configuration::get('CONORDERDIS_ENABLED')) {
return;
}
if (!isset($params['cart']) || !($params['cart'] instanceof Cart)) {
return;
}
$this->runCartDiscountSync($params['cart'], true);
$params['cart']->save();
L'ajout de $params['cart']->save(); va écrire les modifications du panier en base de données. Ensuite, $params['cart']->getProducts(true); force le rechargement des produits du panier et de leurs prix à partir de la base de données, en tenant compte des réductions fraîchement sauvegardées. Cela garantit que la validation de la commande s'effectuera avec les données les plus à jour.