chettbi Posted April 14, 2011 Share Posted April 14, 2011 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€05Jusque 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 portEt 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.05Donc 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 1 Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now