diff --git a/website_sale_aplicoop/controllers/website_sale.py b/website_sale_aplicoop/controllers/website_sale.py index b6019c7..2c4a02f 100644 --- a/website_sale_aplicoop/controllers/website_sale.py +++ b/website_sale_aplicoop/controllers/website_sale.py @@ -542,25 +542,49 @@ class AplicoopWebsiteSale(WebsiteSale): return product_supplier_info def _get_delivery_product_display_price(self, delivery_product, pricelist=None): - """Return delivery product price for display (tax included).""" + """Return delivery product price for display (list_price + taxes). + + Important: delivery cost must be based on product list_price and taxes, + not on commercial pricelist rules (discounts/markups), to avoid inflating + shipping price unexpectedly. + """ if not delivery_product: return 5.74 - pricelist = pricelist or self._resolve_pricelist() - if not pricelist: - return float(delivery_product.list_price or 0.0) - try: - pricing = self._get_pricing_info( - delivery_product, - pricelist, - quantity=1.0, - partner=request.env.user.partner_id, + base_price = float(delivery_product.list_price or 0.0) + website = request.website + partner = request.env.user.partner_id + company = ( + website.company_id or delivery_product.company_id or request.env.company ) - return float(pricing.get("price", delivery_product.list_price) or 0.0) + + product_taxes = delivery_product.sudo().taxes_id._filter_taxes_by_company( + company + ) + fiscal_position = website.fiscal_position_id.sudo() + taxes = ( + fiscal_position.map_tax(product_taxes) + if product_taxes + else product_taxes + ) + + if not taxes: + return base_price + + # Use website currency for display computation. + currency = website.currency_id + totals = taxes.compute_all( + base_price, + currency=currency, + quantity=1.0, + product=delivery_product, + partner=partner, + ) + return float(totals.get("total_included", base_price) or 0.0) except Exception as e: _logger.warning( - "_get_delivery_product_display_price: Error getting delivery price for product %s (id=%s): %s. Using list_price fallback.", + "_get_delivery_product_display_price: Error computing delivery display price for product %s (id=%s): %s. Using list_price fallback.", delivery_product.name, delivery_product.id, str(e),