summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThibault Delavallée <tde@odoo.com>2020-04-01 14:20:07 +0000
committerThibault Delavallée <tde@odoo.com>2020-04-03 11:07:56 +0000
commitbc1b5e134bee183072507fd86c044403b502e22b (patch)
tree67bd8ddbfc3d1a2768a62570131c62e5db741608
parentb29b4bcbfc61aab1035de1f8b0cb9c796cd4bc58 (diff)
[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
-rw-r--r--addons/event/models/event_event.py15
-rw-r--r--addons/website_event/controllers/main.py1
-rw-r--r--addons/website_event/views/event_templates.xml24
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 @@
<!-- Footer -->
<footer
t-attf-class="small align-self-end w-100 #{opt_events_list_cards and 'card-footer' or ((not opt_events_list_columns) and 'border-top mx-4 mt-auto pt-2' or 'border-top py-2')}">
- <span class="text-danger"
- t-if="event.seats_limited and not event.seats_available">
- Sold Out
+ <span t-if="not event.event_registrations_open" class="text-danger">
+ <t t-if="event.event_registrations_sold_out">
+ Sold Out
+ </t>
+ <t t-else="">
+ Registrations Closed
+ </t>
</span>
</footer>
</div>
@@ -535,12 +539,12 @@
</t>
<t t-else="">
<div class="col-md-8">
- <em t-if="not sold_out or event.date_end &lt; datetime.datetime.now()">Registrations are <b>closed</b></em>
- <em t-else="">Tickets for this Event are <b>Sold Out</b></em>
+ <em t-if="event.event_registrations_sold_out">Tickets for this Event are <b>Sold Out</b></em>
+ <em t-else="">Registrations are <b>closed</b></em>
</div>
- <button class="btn btn-danger ml-3 col-md-4 py-2" disabled="1">
- <span t-if="not sold_out or event.date_end &lt; datetime.datetime.now()">Registrations Closed</span>
- <span t-else="">Sold Out</span>
+ <button class="btn btn-danger ml-3 col-md-4 py-2" disabled="1">
+ <span t-if="event.event_registrations_sold_out">Sold Out</span>
+ <span t-else="">Registrations Closed</span>
</button>
</t>
</div>
@@ -603,7 +607,9 @@
</div>
<div class="row no-gutters">
<div class="col-md-4 offset-md-8 py-2 pl-md-0 pr-md-2">
- <button type="submit" class="btn btn-primary o_wait_lazy_js btn-block a-submit" disabled="" t-attf-id="#{event.id}">Register<t t-if="event.seats_limited">(Available seats: <t t-esc="event.seats_available"/>)</t></button>
+ <button type="submit" class="btn btn-primary o_wait_lazy_js btn-block a-submit" disabled="" t-attf-id="#{event.id}">
+ Register<t t-if="event.seats_limited"> (Available seats: <t t-esc="event.seats_available"/>)</t>
+ </button>
</div>
</div>
</div>