diff --git a/addons/event_sale/models/event_registration.py b/addons/event_sale/models/event_registration.py index 521f931d5ce..0d307ae2064 100644 --- a/addons/event_sale/models/event_registration.py +++ b/addons/event_sale/models/event_registration.py @@ -8,7 +8,6 @@ from odoo.tools import float_is_zero class EventRegistration(models.Model): _inherit = 'event.registration' - is_paid = fields.Boolean('Is Paid') # TDE FIXME: maybe add an onchange on sale_order_id sale_order_id = fields.Many2one('sale.order', string='Sales Order', ondelete='cascade', copy=False) sale_order_line_id = fields.Many2one('sale.order.line', string='Sales Order Line', ondelete='cascade', copy=False) @@ -16,7 +15,7 @@ class EventRegistration(models.Model): ('to_pay', 'Not Paid'), ('paid', 'Paid'), ('free', 'Free'), - ], compute="_compute_payment_status", compute_sudo=True) + ], compute="_compute_payment_status", compute_sudo=True, store=True) utm_campaign_id = fields.Many2one(compute='_compute_utm_campaign_id', readonly=False, store=True, ondelete="set null") utm_source_id = fields.Many2one(compute='_compute_utm_source_id', readonly=False, @@ -24,17 +23,13 @@ class EventRegistration(models.Model): utm_medium_id = fields.Many2one(compute='_compute_utm_medium_id', readonly=False, store=True, ondelete="set null") - @api.depends('is_paid', 'sale_order_id.currency_id', 'sale_order_line_id.price_total') + @api.depends('sale_order_id.state', 'sale_order_id.currency_id', 'sale_order_line_id.price_total') def _compute_payment_status(self): - for record in self: - so = record.sale_order_id - so_line = record.sale_order_line_id - if not so or float_is_zero(so_line.price_total, precision_digits=so.currency_id.rounding): - record.payment_status = 'free' - elif record.is_paid: - record.payment_status = 'paid' + for so_line, registrations in self.grouped('sale_order_line_id').items(): + if not so_line or float_is_zero(so_line.price_total, precision_digits=so_line.currency_id.rounding): + registrations.payment_status = 'free' else: - record.payment_status = 'to_pay' + registrations.payment_status = 'to_pay' @api.depends('sale_order_id') def _compute_utm_campaign_id(self): @@ -125,7 +120,7 @@ class EventRegistration(models.Model): render_context=render_context) def _action_set_paid(self): - self.write({'is_paid': True}) + self.write({'payment_status': 'paid'}) def _get_registration_summary(self): res = super(EventRegistration, self)._get_registration_summary() diff --git a/addons/event_sale/models/sale_order_line.py b/addons/event_sale/models/sale_order_line.py index 86ae6787c35..05cf43caa5c 100644 --- a/addons/event_sale/models/sale_order_line.py +++ b/addons/event_sale/models/sale_order_line.py @@ -36,7 +36,7 @@ class SaleOrderLine(models.Model): if confirm: existing_registrations.filtered(lambda self: self.state not in ['open', 'cancel']).action_confirm() if mark_as_paid: - existing_registrations.filtered(lambda self: not self.is_paid)._action_set_paid() + existing_registrations.filtered(lambda self: self.payment_status == 'to_pay')._action_set_paid() if cancel_to_draft: existing_registrations.filtered(lambda self: self.state == 'cancel').action_set_draft() diff --git a/addons/event_sale/report/event_sale_report.py b/addons/event_sale/report/event_sale_report.py index 799aa2fcaf5..7bb64ad7db3 100644 --- a/addons/event_sale/report/event_sale_report.py +++ b/addons/event_sale/report/event_sale_report.py @@ -39,7 +39,6 @@ class EventSaleReport(models.Model): sale_price = fields.Float('Revenues', readonly=True) sale_price_untaxed = fields.Float('Untaxed Revenues', readonly=True) invoice_partner_id = fields.Many2one('res.partner', string='Invoice Address', readonly=True) - is_paid = fields.Boolean('Is Paid', readonly=True) payment_status = fields.Selection(string="Payment Status", selection=[ ('to_pay', 'Not Paid'), ('paid', 'Paid'), @@ -81,7 +80,7 @@ SELECT event_registration.active AS active, event_registration.sale_order_id AS sale_order_id, event_registration.sale_order_line_id AS sale_order_line_id, - event_registration.is_paid AS is_paid, + event_registration.payment_status AS payment_status, event_event.event_type_id AS event_type_id, event_event.date_begin AS event_date_begin, @@ -109,12 +108,7 @@ SELECT sale_order_line.price_subtotal / CASE COALESCE(sale_order.currency_rate, 0) WHEN 0 THEN 1.0 ELSE sale_order.currency_rate END / sale_order_line.product_uom_qty - END AS sale_price_untaxed, - CASE - WHEN sale_order_line.price_total = 0 THEN 'free' - WHEN event_registration.is_paid THEN 'paid' - ELSE 'to_pay' - END payment_status""" + (',\n ' + ',\n '.join(select) if select else '') + END AS sale_price_untaxed""" + (',\n ' + ',\n '.join(select) if select else '') def _from_clause(self, *join_): # Extra clauses formatted as `column1`, `column2`... diff --git a/addons/event_sale/views/event_registration_views.xml b/addons/event_sale/views/event_registration_views.xml index bb9cd5b3285..9464d03aed1 100644 --- a/addons/event_sale/views/event_registration_views.xml +++ b/addons/event_sale/views/event_registration_views.xml @@ -48,8 +48,8 @@ - - + +