Jump to content

Frais de port gratuit sur commande avec bon de réduction


Recommended Posts

Bonjour,

J'ai créé une carte cadeau avec déclinaisons de prix sur un Presta 1.7.8 et acheté le module de Mypresta Gift cards. 
Comme je n'utilise jamais de cartes cadeau si je dois payer les frais de port, et que je suppose ne pas être la seule, je souhaite que si le montant de la commande du bénéficiaire est inférieure au montant de la carte cadeau, frais de port compris, il ne doive pas les payer.

Si la personne en profite pour acheter pour plus cher, basta, elle payera les FDP.

 

Par défaut, le comportement de Prestashop applique les réductions uniquement sur le montant de la commande hors FdP.

Je souhaite donc modifier ce comportement dans le cas où le code de réduction a un nom spécifique (généré par le module de Vekia).

Vu que mes connaissances en PHP sont un peu limitées, j'ai essayé de me faire aider par ChatGPT. Qui me propose des solutions d'overrides de CartController, mais jusqu'à présent aucune n'a abouti au résultat recherché.

Est-ce que quelqu'un a déjà codé cela ? Il existe peut-être des modules mais c'est en forgeant qu'on devient forgeron et cela me permet de m'améliorer dans la personnalisation de PS.

Merci d'avance

Link to comment
Share on other sites

Merci. Mais j'aurais souhaité savoir quel fichier gère le fait que Prestashop ne prend plus en compte les FdP. J'ai tenté un override de CartController.php avec ce code, mais cela ne modifie pas le montant des frais de port

<?php

class CartControllerOverride extends CartController
{
   public function init()
{
    parent::init();

    // Vérifier si le code de réduction "Carte cadeau" est appliqué à la commande
    if ($this->isCarteCadeauDiscountApplied()) {
        // Récupérer le montant total de la commande (y compris les frais de port)
        $totalAmount = $this->context->cart->getOrderTotal(true, Cart::BOTH);

        // Vérifier si le montant total de la commande est inférieur ou égal au montant du code de réduction "Carte cadeau"
        if ($totalAmount <= $this->getCarteCadeauDiscountAmount()) {
            // Définir les frais de port à zéro
            $this->context->cart->setDeliveryOption(null);
            $this->context->cart->update();
        }
    }
    private function isCarteCadeauDiscountApplied()
{
    foreach ($this->context->cart->getCartRules() as $cartRule) {
        // Vérifier si le nom du code de réduction correspond à "Carte cadeau"
        if ($cartRule['name'] === 'Carte cadeau') {
            return true;
        }
    }
    return false;
}

 private function getCarteCadeauDiscountAmount()
{
    foreach ($this->context->cart->getCartRules() as $cartRule) {
        // Vérifier si le nom du code de réduction correspond à "Carte cadeau"
        if ($cartRule['name'] === 'Carte cadeau') {
            return $cartRule['value_real'];
        }
    }
    return 0;
}
}

 

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