THELIA Forum

Welcome to the THELIA support and discusssion forum

Announcement

Rejoignez la communauté sur le Discord Thelia : https://discord.gg/YgwpYEE3y3

Offline


Bonjour,

Si j'ajoute un code promo (outils/code promo) et que je la valide dans une commande, le montant remisé s'affiche correctement.

Exemple : 30€-1€=29€

Par contre, avec la ligne suivante, j'envoie le total à payer à mon module de paiement :

$order_total = $this->getCurrentOrderTotalAmount(true,true,true);
Le résultat est 30€

Je n'arrive pas a comprendre pourquoi ce n'est pas 29€...

La fonction suivante prend pourtant bien en compte le discount...

public function getTotalAmount($discount = true)
    {
        $total = 0;

        foreach ($this->getCartItems() as $cartItem) {
            $subtotal = $cartItem->getRealPrice();

            $subtotal *= $cartItem->getQuantity();

            $total += $subtotal;
        }

        if ($discount) {
            // discount value is taxed see ISSUE #1476
            $total -= $this->getDiscount();

            if ($total < 0) {
                $total = 0;
            }
        }

Offline


Que se passe-t-il si tu utilises $order->getTotalAmount(); ($order vient de la méthode pay() du module de paiement.


OpenStudio Toulouse

Offline


Merci,

ca fontionne très bien dans ce cas... Mais alors quel est l'interet de getCurrentOrderTotalAmount(true,true,true); ?

Offline


Il y a sans doute un bug dans cette méthode. Peux-tu poster une issue sur github ?


OpenStudio Toulouse

Offline

Offline

Offline


En fait, la méthode getCurrentOrderTotalAmount() ne peut pas être utilisée dans la méthode pay() d'un module de paiement :

     * A convenient method to get the current order total, with or without tax, discount or postage.
     * This method operates on the order currently in the user's session, and should not be used to
     * get the total amount of an order already stored in the database. For such orders, use
     * Order::getTotalAmount() method.

En effet, dans pay(), l'order a déjà été créé en base de données, et les coupons ont été retirés de la session du client. Il faut donc utiliser $order->getTotalAmount().

Par contre, getCurrentOrderTotalAmount() peut par contre être utilisée dans les modules de livraison ou tous ceux qui ont besoin du total du panier, AVANT que le bouton "Payer" aie été cliqué par le client.


OpenStudio Toulouse

Offline


Bien vu oui, J'aurai du lire correctement... Shame on me !