Je viens de réussir à mettre en place mon système de paiement avec suppression des réductions, je partage la démarche pour ceux qui se retrouveraient dans le même cas.
Au final j'ai opté pour un override de la classe CartRule :
// === Code ajouté au début de la fonction checkValidity() de CartRule === $isSubscriptionLive = Db::getInstance()->getValue(' SELECT count(*) FROM ' . _DB_PREFIX_ . 'ogone_cloned_cart WHERE id_cart = ' . (int) $context->cart->id . ' AND id_customer = ' . (int) $context->cart->id_customer . ' '); // Si abonnement est en cours et 1er versement déjà effectué if($isSubscriptionLive > 0){ return false; } // === Code exécuté au moment du clone de mon panier === // Ajout du nouveau cart à la liste pour pouvoir l'identifier comme non affecté par les réductions $result = Db::getInstance()->insert('ogone_cloned_cart', array( 'id_ogone_cloned' => NULL, 'id_cart' => (int) $new_cart->id, 'id_initial_cart' => (int) $subscription->id_cart, 'id_customer' => (int) $new_cart->id_customer, 'date_add' => date('Y-m-d H:i:s') ));
Les données passent par une table faite spécialement pour l'occasion et qui permettent à checkValidity() de savoir si le panier dois ou non recevoir une réduction
En espérant que ça servira à certains, Enjoy