Jump to content

Commande avec Bon de réduction & Remboursement


Recommended Posts

Bonjour,


J'ai un soucis sur une boutique, un client a acheté 3 produits, disons à 100 € chacun.

Le client a utilisé un bon de réduction pour cette commande, lui permettant d'obtenir 40% de réduction sur la totalité.


Total commande TTC : 300 €
Total réduction TTC : 120 €
Total final TTC : 180 €

Jusque là, tout va bien.

Je dois annuler un produit dans cette commande et procéder à un remboursement.
Je coche donc la case rembourser, et générer un avoir pour le produit en question.

L'avoir se génère correctement, mais d'un montant incorrect (100€ au lieu de 60€).

Y-a-t-il une solution autre que bidouiller la base de données pour modifier le montant de l'avoir ?
Je ne veux pas que la cliente reçoive l'email avec l'avoir à 100€... alors qu'en réalité il doit faire 60€.


En me penchant un peu plus sur le problème, je vois que la réduction correspond à une ligne dans la facture, et non sur un produit (en modifiant son tarif). Est-ce dû à ça ?


Je ne souhaite pas rembourser 100€ alors que le client n'a payé que 60€...


Merci,
Vincent

Link to comment
Share on other sites

  • 2 weeks later...

Bonjour,


Je suis content de voir que je ne suis pas le seul à trouver ce "comportement" anormal.


J'ai déjà reporté un bug sur le tracker il y a quelques jours,


http://www.prestashop.com/bug_tracker/view/6338/


Mais hélas... Aucune réponse


En testant Presta 1.4, je me suis rendu compte que le fonctionnement était malheureusement identique.


Vincent

Link to comment
Share on other sites

Bonjour

je vois que ce post suscite un certain intérêt, ce qui est logique.

Le problème est complexe :
1/ on doit rembourser le bon de réduction soit en montant en Euros, soit en %.
2/On ne peut pas rembourser le bon de réduction dans son entier si le client ne retourne qu'un produit sur 3
(dans l'exemple cité ci-dessus, si on ne retourne q'un seul produit, on rembourse donc 40E de bon et surtout pas 120...)

Une solution "provisoire" serait d'ajouter un champ à la table "ps_order_slip", par exemple "order_slip_discount", et dans le back-office, de pourvoir indiquer un montant "à la main" lors de la création d'un avoir, pour arriver sur le bon montant.

Ca se passe dans tabs/adminOrders.php...je vais essayer de m'y mettre.

@ bientôt

Link to comment
Share on other sites

Bonjour,


Le soucis est que la réduction apparaît sur une ligne de la facture.

Pour faire bien, il faudrait que la réduction soit appliquée sur chaque produit concerné par le bon de réduction (comme pour les soldes/promotions).

Le montant de l'avoir serait alors correct lors d'un retour.

C'est donc plus complexe que ça. Même si cette solution fonctionne (modifier le montant de l'avoir dans la base de données), elle est loin d'être pratique.

Il faudrait modifier la gestion du bon de réduction, afin de permettre l'application de la réduction sur chaque produit, et non sur le total commande.


Vincent

Link to comment
Share on other sites

Re,

le problème c'est que le bon de réduction ne fonctionne pas comme ça.

Au niveau comptable, il est considéré comme un moyen de paiement (une sorte de chèque) offert au client pour régler sa facture.
C'est pour ça qu'il se défalque sur le montant TTC, alors que les remises/promotions se défalquent sur le montant HT des produits.
D'ailleurs vous avez du remarquer que la gestion des bons de réductions se fait dans l'onglet "Paiement" de Prestashop
?

Donc si on défalque sur un avoir le bon de réduction ligne par ligne de produits, on va imputer le montant total de produit HT, ce qui est comptablement faux. Et ce bon aurait alors le même comportement qu'une remise, alors que ce n'est pas la même chose en comptabilité.

Et vu qu'il s'agit comptablement d'un moyen de paiement, il est normal qu'il apparaisse sur une seule ligne de facture, dans le calcul des montants totaux.
Dans votre exemple, le client doit bien 300E (et pas 180), mais il en paye 180 de sa poche, et le reste avec son bon d'achat.

Par contre si vos aviez pratiqué une remise/promotion de 40% sur chaque article, alors à ce moment là le montant dû aurait bien été de 180E.

Il y a donc une nuance, qui est de nature comptable.

Amicalement.
PS : si ma solution "provisoire" intéresse par hasard quelqu'un, elle est en bonne voie d'avancement...

Link to comment
Share on other sites

Bon, voici toujours une solution. Surement pas la meilleure, mais en attendant une prise en compte par l'équipe Prestashop...


Création d'un champ de saisie dans la fiche de gestion d'une commande (sous Réinjecter - Générer un avoir - Bon de réduction)

Aller dans Admin > Tabs > AdminOrders.php
(Faire une copie de sauvegarde de AdminOrders.php)

Vers la ligne 780 trouver :

if ((!$order->hasBeenDelivered() AND $order->hasBeenPaid()) OR ($order->hasBeenDelivered() AND Configuration::get('PS_ORDER_RETURN')))
                   echo '
                   <input type="checkbox" id="generateCreditSlip" name="generateCreditSlip" class="button"> '.$this->l('Generate a credit slip').'

                   <input type="checkbox" id="generateDiscount" name="generateDiscount" class="button"> '.$this->l('Generate a voucher').'

<input type="checkbox" id="shippingBack" name="shippingBack" class="button" /> '.$this->l('Repay shipping costs').'
';




Remplacer par

if ((!$order->hasBeenDelivered() AND $order->hasBeenPaid()) OR ($order->hasBeenDelivered() AND Configuration::get('PS_ORDER_RETURN')))
                   /* 4eme ligne ajoutée pour créer un champ de saisie remboursement de BON réduction */ 
                   echo '
                   <input type="checkbox" id="generateCreditSlip" name="generateCreditSlip" class="button"> '.$this->l('Generate a credit slip').'

                   <input type="checkbox" id="generateDiscount" name="generateDiscount" class="button"> '.$this->l('Generate a voucher').'

<input type="checkbox" id="shippingBack" name="shippingBack" class="button" /> '.$this->l('Repay shipping costs').'

                   <input type="input" id="discountBack" name="discountBack" /> '.$this->l('Remb. bon achat').'
';




Enregistrer cette info en Base de données


1- Accéder à la base de données :

Dans la table "ps_order_slip", créer le nouveau champ order_slip_discount
colonne/nom : order_slip_discount - Type : DECIMAL - taille/valeur : 17,2

2- ouvrir classes > orderslip.php
(faire une copie de sauvegarde de ce fichier)

Après

/** @var integer */
public        $shipping_cost;



ajouter

    /* Ajout remboursement bon de réduction */
   /** @var decimal */
   public        $order_slip_discount;



puis vers ligne 54, sous

$fields['shipping_cost'] = intval($this->shipping_cost);



ajouter

/* Ajout remboursement bon de réduction */
$fields['order_slip_discount'] = $_POST['discountBack'];
/* Fin du rajout */




Modifier le pdf affichant une facture d'avoir


Aller dans classes/ PDF.php
En faire une copie de sauvegarde.

vers la ligne 467, après

if (!self::$orderSlip)
           {
               $taxDiscount = self::$order->getTaxesAverageUsed();
               if ($taxDiscount != 0)
                   $priceBreakDown['totalWithoutTax'] -= Tools::ps_round(self::$order->total_discounts / (1 + self::$order->getTaxesAverageUsed() * 0.01), 2);
               else
                   $priceBreakDown['totalWithoutTax'] -= self::$order->total_discounts;
               $priceBreakDown['totalWithTax'] -= self::$order->total_discounts;
           }



ajouter

            if (self::$orderSlip)
           {
               self::$order->total_discounts = self::$orderSlip->order_slip_discount;
               $priceBreakDown['totalWithTax'] -= self::$orderSlip->order_slip_discount;    
           }




Enfin, vers ligne 505, remplacer

    if (!self::$orderSlip AND self::$order->total_discounts != '0.00')



par

if (self::$order->total_discount != '0.00')



En tous cas chez moi, ça marche.
Amicalement

Link to comment
Share on other sites

  • 2 weeks later...
  • 3 weeks later...
  • 1 year later...

Bonjour shopme

 

houla c'est vieux !

EN reprenant mon fichier, voici ce que je trouve

 

 

echo '
<input type="checkbox" id="generateCreditSlip" name="generateCreditSlip" class="button" onclick="toogleShippingCost(this)" /> <label for="generateCreditSlip" style="float:none; font-weight:normal;">'.$this->l('Generate a credit slip').'</label><br />
<input type="checkbox" id="generateDiscount" name="generateDiscount" class="button" onclick="toogleShippingCost(this)" /> <label for="generateDiscount" style="float:none; font-weight:normal;">'.$this->l('Generate a voucher').'</label><br />
<input type="input" id="discountBack" name="discountBack" /> <label for="shippingBack" style="float:none; font-weight:normal;">'.$this->l('Remb. bon achat').'</label><br /></span>';

 

Il manquait apparemment la dernière ligne.

Attention hack fait sur un Prestashop version 1.3, je ne sais pas ce que ça donne sur une 1.4...

Amicalement

Link to comment
Share on other sites

  • 2 years later...

Bonjour, petit Up sur ce soucis... je suis en version 1.4.5

 

Quelqu-un depuis ce temps aurais t-il trouvé un solution fiable ? ou existe t-il un module pour regler ce soucis de remboursement/bon de réduction et facturation correcte ?

 

Merci pour vos reponses ?

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