diff --git a/addons/event_sale/models/event_registration.py b/addons/event_sale/models/event_registration.py index 3c8b4c780a9..84144973885 100644 --- a/addons/event_sale/models/event_registration.py +++ b/addons/event_sale/models/event_registration.py @@ -73,13 +73,12 @@ class EventRegistration(models.Model): 'old_ticket_name': registration.event_ticket_id.name, 'new_ticket_name': new_event_ticket.name } - user_id = registration.event_id.user_id.id or \ - registration.sale_order_id.user_id.id or \ - fallback_user_id - registration.sale_order_id.activity_schedule_with_view('mail.mail_activity_data_warning', - user_id=user_id, - views_or_xmlid='event_sale.event_ticket_id_change_exception', - render_context=render_context) + user_id = registration.event_id.user_id.id or registration.sale_order_id.user_id.id or fallback_user_id + registration.sale_order_id.activity_schedule_with_view( + 'mail.mail_activity_data_warning', + user_id=user_id, + views_or_xmlid='event_sale.event_ticket_id_change_exception', + render_context=render_context) def _action_set_paid(self): self.write({'is_paid': True}) diff --git a/addons/event_sale/models/event_ticket.py b/addons/event_sale/models/event_ticket.py index e3e666d5db3..d88ea5f4a24 100644 --- a/addons/event_sale/models/event_ticket.py +++ b/addons/event_sale/models/event_ticket.py @@ -14,25 +14,41 @@ class EventTemplateTicket(models.Model): def _default_product_id(self): return self.env.ref('event_sale.product_product_event', raise_if_not_found=False) + description = fields.Text(compute='_compute_description', copy=True, readonly=False, store=True) # product product_id = fields.Many2one( - 'product.product', string='Product', required=True, domain=[("event_ok", "=", True)], - default=_default_product_id) - price = fields.Float(string='Price', digits='Product Price') - price_reduce = fields.Float(string="Price Reduce", compute="_compute_price_reduce", digits='Product Price') + 'product.product', string='Product', required=True, + domain=[("event_ok", "=", True)], default=_default_product_id) + price = fields.Float( + string='Price', compute='_compute_price', + digits='Product Price', copy=True, readonly=False, store=True) + price_reduce = fields.Float( + string="Price Reduce", compute="_compute_price_reduce", + digits='Product Price') @api.depends('product_id') - def _compute_price_reduce(self): - for record in self: - product = record.product_id - discount = product.lst_price and (product.lst_price - product.price) / product.lst_price or 0.0 - record.price_reduce = (1.0 - discount) * record.price + def _compute_price(self): + for ticket in self: + if ticket.product_id and ticket.product_id.lst_price: + ticket.price = ticket.product_id.lst_price or 0 + elif not ticket.price: + ticket.price = 0 - @api.onchange('product_id') - def _onchange_product_id(self): - self.price = self.product_id.list_price or 0 - if not self.description and self.product_id.description_sale: - self.description = self.product_id.description_sale + @api.depends('product_id') + def _compute_description(self): + for ticket in self: + if ticket.product_id and ticket.product_id.description_sale: + ticket.description = ticket.product_id.description_sale + # initialize, i.e for embedded tree views + if not ticket.description: + ticket.description = False + + @api.depends('product_id', 'price') + def _compute_price_reduce(self): + for ticket in self: + product = ticket.product_id + discount = product.lst_price and (product.lst_price - product.price) / product.lst_price or 0.0 + ticket.price_reduce = (1.0 - discount) * ticket.price def _init_column(self, column_name): if column_name != "product_id": diff --git a/addons/event_sale/tests/test_event_internals.py b/addons/event_sale/tests/test_event_internals.py index 0f3a7ae4d08..fc6341b51a5 100644 --- a/addons/event_sale/tests/test_event_internals.py +++ b/addons/event_sale/tests/test_event_internals.py @@ -38,7 +38,6 @@ class TestEventData(TestEventSaleCommon): 'seats_max': 5, })] }) - event_type.event_type_ticket_ids._onchange_product_id() self.assertEqual(event_type.event_type_ticket_ids.description, self.event_product.description_sale) # synchronize event @@ -112,9 +111,7 @@ class TestEventTicketData(TestEventSaleCommon): ], }) first_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'First Ticket') - first_ticket._onchange_product_id() second_ticket = event.event_ticket_ids.filtered(lambda t: t.name == 'Second Ticket') - second_ticket._onchange_product_id() # force second ticket price, after calling the onchange second_ticket.write({'price': 8.0})