From 179c5fcaba9432a6f1f8af984ce3d7226a385dc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Mottet=20=28oms=29?= Date: Mon, 27 Apr 2020 11:53:01 +0000 Subject: [PATCH] [FIX] (website_)event: fix 'sold out' display condition on frontend One condition among other to determine if SOLD OUT should be displayed for a ticket is start_sale_date < current date. However is start_sale_date is not set a traceback is raised. Moreover timezones are not taken into account when comparing dates, which may create issues. A tool method 'is_launched' has been added to overcome this problem. It works like the already existing field 'is_expired'. Its value is computed based on start_sale_date and event_id.date_tz. This will be changed into a not stored computed field in master. Task ID 2244487 PR #51503 X-original-commit: 9f81e126cdb1ce79ef26077a708cad8a7614031f --- addons/event/models/event_ticket.py | 18 ++++++++++++------ addons/website_event/views/event_templates.xml | 2 +- 2 files changed, 13 insertions(+), 7 deletions(-) diff --git a/addons/event/models/event_ticket.py b/addons/event/models/event_ticket.py index 2d55a20aa35..3e96eb78d8c 100644 --- a/addons/event/models/event_ticket.py +++ b/addons/event/models/event_ticket.py @@ -82,14 +82,10 @@ class EventTicket(models.Model): else: ticket.is_expired = False - @api.depends('start_sale_date', 'end_sale_date', 'event_id.date_tz', 'seats_available', 'seats_max') + @api.depends('is_expired', 'start_sale_date', 'event_id.date_tz', 'seats_available', 'seats_max') def _compute_sale_available(self): for ticket in self: - ticket = ticket._set_tz_context() - current_date = fields.Date.context_today(ticket) - if (ticket.start_sale_date and ticket.start_sale_date > current_date) or \ - ticket.end_sale_date and ticket.end_sale_date < current_date or \ - ticket.seats_available <= 0 and ticket.seats_max > 0: + if not ticket.is_launched() or ticket.is_expired or (ticket.seats_max and ticket.seats_available <= 0): ticket.sale_available = False else: ticket.sale_available = True @@ -142,3 +138,13 @@ class EventTicket(models.Model): def _set_tz_context(self): self.ensure_one() return self.with_context(tz=self.event_id.date_tz or 'UTC') + + def is_launched(self): + # TDE FIXME: in master, make a computed field, easier to use + self.ensure_one() + if self.start_sale_date: + ticket = self._set_tz_context() + current_date = fields.Date.context_today(ticket) + return ticket.start_sale_date < current_date + else: + return True diff --git a/addons/website_event/views/event_templates.xml b/addons/website_event/views/event_templates.xml index 911b6b7bcf2..b4fc8565d82 100644 --- a/addons/website_event/views/event_templates.xml +++ b/addons/website_event/views/event_templates.xml @@ -599,7 +599,7 @@
- Sold Out + Sold Out Expired