From 756c5b4922120dffba9e601c3dcc35d13530a1f3 Mon Sep 17 00:00:00 2001 From: Victor Feyens Date: Mon, 17 Jan 2022 15:44:39 +0000 Subject: [PATCH] [REF] event_sale: correctly compute discount for event tickets Discount wasn't computed the same way in backend sale flows and e-commerce flows. Now the pricelist discount policy will be considered in the core logic of event_sale. Part-of: odoo/odoo#82374 --- addons/event_sale/models/event_ticket.py | 2 -- addons/event_sale/models/sale_order.py | 20 ++++++++------------ 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/addons/event_sale/models/event_ticket.py b/addons/event_sale/models/event_ticket.py index cf63a780bef..b796fc7d2ec 100644 --- a/addons/event_sale/models/event_ticket.py +++ b/addons/event_sale/models/event_ticket.py @@ -53,8 +53,6 @@ class EventTemplateTicket(models.Model): def _compute_price_reduce(self): for ticket in self: product = ticket.product_id - # TODO drop price field usage - # and ideally remove this whole price_reduce logic # seems strange to not apply pricelist logic but still use pricelist discount... discount = ( product.lst_price - product._get_contextual_price() diff --git a/addons/event_sale/models/sale_order.py b/addons/event_sale/models/sale_order.py index 5e84fce5b74..a1cbff67c77 100644 --- a/addons/event_sale/models/sale_order.py +++ b/addons/event_sale/models/sale_order.py @@ -134,14 +134,9 @@ class SaleOrderLine(models.Model): super(SaleOrderLine, self-event_lines)._compute_price_unit() for line in event_lines: if not line.product_id or line._origin.product_id != line.product_id: + # Note: this also computes the price for new lines :) super(SaleOrderLine, line)._compute_price_unit() - @api.depends('event_ticket_id') - def _compute_discount(self): - """Do not compute the discount on event lines, it's always included in the price.""" - event_lines = self.filtered('event_ticket_id') - super(SaleOrderLine, self-event_lines)._compute_discount() - @api.depends('event_ticket_id') def _compute_name(self): """Override to add the compute dependency. @@ -173,12 +168,13 @@ class SaleOrderLine(models.Model): def _get_display_price(self): if self.event_ticket_id and self.event_id: - # FIXME this is strange - # price_reduce is the price after discount - # shouldn't we leave the discount computation to sale - # and use the non reduced price here (aka price field) - return self.event_ticket_id.with_context( + event_ticket = self.event_ticket_id.with_context( pricelist=self.order_id.pricelist_id.id, - uom=self.product_uom.id).price_reduce + uom=self.product_uom.id + ) + if self.order_id.pricelist_id.discount_policy == 'with_discount': + return event_ticket.price_reduce + else: + return event_ticket.price else: return super()._get_display_price()