Jump to content

Problème génération d'avoir pour un produit avec réduction % et bon de réduction


Recommended Posts

Bonjour,

Alors, je vous prévient tout de suite, c'est un cas à la c**, mais j'ai réussi à tomber dessus.

Donc j'ai un produit à 70€ TTC (tva 19.6) au quel j'ajoute une réduction de 10% => il devient donc à 63€ TTC
Je le met dans mon panier,
J'ajoute un bon de réduction àn 20€ (cumulable et tout le blabla)
Je continu mon achat, frais de port à 26€05 ect. ect.

Je vois ma facture, aucun soucis :
total produit TTC : 63€
total réduc : 20 €
total livraison : 26€02
total à payer : 69€05

Jusque là tout va bien.

Là ou ça se complique, c'est lorsque je vais dans la fiche commande dans le BO, je fait un remboursement du produit :
- générer un avoir
- inclure les frais de port

Et là... l'avoir indique un remboursement de 71€05... pour une commande payée à 69€05, vous voyez le soucis.
J'ai donc creusé le problème. Lors de la génération de l'avoir :
- il y a le prix du produit (70€) au quel on soustrait le bon de reduction (20€), et SEULEMENT ensuite, la réduction (10%) est appliquée (et ensuite + 26€05 de frais de port)

((70-20)*10%)+26.05 = 50*10% + 26.05 = 45 + 26.05 = 71.05


Donc pourquoi la réduction s'applique au bon de réduction ?

J'ai trouvé la fonction qui pourrai être incriminée dans la classe OrderSlip.php :

static public function getOrdersSlipProducts($orderSlipId, $order)
   {
       $discounts = $order->getDiscounts(true);
       $productsRet = self::getOrdersSlipDetail($orderSlipId);
       $products = $order->getProductsDetail();
       $tmp = array();
       foreach ($productsRet as $slip_detail)
           $tmp[$slip_detail['id_order_detail']] = $slip_detail['product_quantity'];
       $resTab = array();
       foreach ($products as $key => $product)
           if (isset($tmp[$product['id_order_detail']]))
           {
               $resTab[$key] = $product;
               $resTab[$key]['product_quantity'] = $tmp[$product['id_order_detail']];
               if (sizeof($discounts))
               {
                   $order->setProductPrices($product);
                   $realProductPrice = $resTab[$key]['product_price'];
                   foreach ($discounts as $discount)
                   {
                       if ($discount['id_discount_type'] == 1)
                           $resTab[$key]['product_price'] -= $realProductPrice * ($discount['value'] / 100);
                       elseif ($discount['id_discount_type'] == 2)
                           $resTab[$key]['product_price'] -= (($discount['value'] * ($product['product_price_wt'] / $order->total_products_wt)) / (1.00 + ($product['tax_rate'] / 100)));
                   }                
               }
           }
       return $order->getProducts($resTab);
   }



C'est probablement cette ligne là qui est en cause :

$resTab[$key]['product_price'] -= (($discount['value'] * ($product['product_price_wt'] / $order->total_products_wt)) / (1.00 + ($product['tax_rate'] / 100)));



Mais j'ai du mal à comprendre ce qu'elle fait, et à quoi elle sert :/

Donc je vous demande votre aide, et aussi, si vous aussi vous rencontrez ce problème.

Je vous avoue que je n'ai pas encore parcourue le bug tracker pour voir si le bug est déjà signalé et/ou résolut. JE le ferai qd j'aurai confirmation que je ne suis pas la seule à avec le problème.


Merci à tous,
Chettbi

  • Like 1
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...