Bonjour @emmadigital,
@sarah_dev et @sandrine_auto ont raison, la version 1.7.3.0 de PrestaShop ne propose pas nativement de mécanisme pour ajouter des frais ou des réductions basés sur le mode de paiement directement dans l'interface d'administration. Les règles panier sont puissantes, mais ne permettent pas de cibler le paiement.
Pour implémenter cette logique, il faut passer par une modification du code. Voici une approche qui implique d'écraser la classe Cart et le contrôleur OrderController afin d'injecter la logique de frais :
Créez ou modifiez le fichier override/classes/Cart.php :
class CartCore extends ObjectModel
{
public $id_selected_payment_module = null;
public function setPaymentModuleSelected($id_module)
{
$this->id_selected_payment_module = (int)$id_module;
}
public function getOrderTotal($withTaxes = true, $type = Cart::BOTH, $products = null, $id_carrier = null, $use_cache = true)
{
$total = parent::getOrderTotal($withTaxes, $type, $products, $id_carrier, $use_cache);
Créez ou modifiez le fichier override/controllers/front/OrderController.php :
class OrderControllerCore extends OrderController
{
public function postProcess()
{
parent::postProcess();
// Capture l'ID du module de paiement lorsque le client le sélectionne
if (Tools::isSubmit('submitPayment') || Tools::isSubmit('confirmPayment')) {
$id_module = (int)Tools::getValue('id_module');
if ($id_module) {
$this->context->cart->setPaymentModuleSelected($id_module);
Après avoir ajouté ces fichiers, assurez-vous de supprimer le fichier cache/class_index.php (si vous êtes en mode production) ou de désactiver/réactiver un module pour que PrestaShop prenne en compte les overrides. Vérifiez les noms exacts de vos modules PayPal et Klarna (souvent ps_paypal ou klarna) dans le code.
Pour la réduction par virement bancaire, la solution la plus simple sans développement complexe serait de créer un code de réduction spécifique à communiquer aux clients qui choisissent ce mode de paiement, mais cela reste manuel.