From bc1b5e134bee183072507fd86c044403b502e22b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Thibault=20Delavall=C3=A9e?= Date: Wed, 1 Apr 2020 14:20:07 +0000 Subject: [PATCH] [FIX] website_event: better sold out computation Purpose of this commit is to remove some complex check embedded in templates and replace them by a computed unstored field. It eases definition and understanding. Its computation has been cleaned, so that sold out appears only when tickets are really sold out, not if their end sales date is reached. Sold out label is displayed in both event list and event specific page views in frontend. Small spacing issues in frontend registration form are also fixed. Task ID 2228189 Community PR odoo/odoo#48652 X-original-commit: c36cf90e7b83d2424b2f52ad8a2fec0bf367e8d8 --- addons/event/models/event_event.py | 15 ++++++++++++ addons/website_event/controllers/main.py | 1 - .../website_event/views/event_templates.xml | 24 ++++++++++++------- 3 files changed, 30 insertions(+), 10 deletions(-) diff --git a/addons/event/models/event_event.py b/addons/event/models/event_event.py index d8e60bb373c..89d31e3c8da 100644 --- a/addons/event/models/event_event.py +++ b/addons/event/models/event_event.py @@ -170,6 +170,9 @@ class EventEvent(models.Model): event_registrations_open = fields.Boolean( 'Registration open', compute='_compute_event_registrations_open', compute_sudo=True, help='Registrations are open if event is not ended, seats are available on event and if tickets are sellable if ticketing is used.') + event_registrations_sold_out = fields.Boolean( + 'Sold Out', compute='_compute_event_registrations_sold_out', compute_sudo=True, + help='Event is sold out if no more seats are available on event. If ticketing is used and all tickets are sold out event is sold out.') start_sale_date = fields.Date( 'Start sale date', compute='_compute_start_sale_date', help='If ticketing is used, this is the lowest starting sale date of tickets.') @@ -268,6 +271,18 @@ class EventEvent(models.Model): start_dates = [ticket.start_sale_date for ticket in event.event_ticket_ids if ticket.start_sale_date] event.start_sale_date = min(start_dates) if start_dates else False + @api.depends('event_ticket_ids.sale_available') + def _compute_event_registrations_sold_out(self): + for event in self: + if event.seats_limited and not event.seats_available: + event.event_registrations_sold_out = True + elif event.event_ticket_ids: + event.event_registrations_sold_out = not any( + ticket.seats_available > 0 if ticket.seats_limited else True for ticket in event.event_ticket_ids + ) + else: + event.event_registrations_sold_out = False + @api.depends('date_tz', 'date_begin') def _compute_date_begin_tz(self): for event in self: diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index ea484cab7a8..4c23c3165dc 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -208,7 +208,6 @@ class WebsiteEventController(http.Controller): urls = event._get_event_resource_urls() values = { 'event': event, - 'sold_out': all(not ticket.sale_available and not ticket.is_expired for ticket in event.event_ticket_ids), 'main_object': event, 'range': range, 'google_url': urls.get('google_url'), diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml index c1d73b6d07b..adc517eb938 100644 --- a/addons/website_event/views/event_templates.xml +++ b/addons/website_event/views/event_templates.xml @@ -237,9 +237,13 @@ @@ -535,12 +539,12 @@
- Registrations are closed - Tickets for this Event are Sold Out + Tickets for this Event are Sold Out + Registrations are closed
-
@@ -603,7 +607,9 @@
- +