diff options
| author | Sébastien Mottet (oms) <oms@odoo.com> | 2020-04-27 11:53:01 +0000 |
|---|---|---|
| committer | Thibault Delavallée <tde@odoo.com> | 2020-05-19 10:14:39 +0000 |
| commit | 179c5fcaba9432a6f1f8af984ce3d7226a385dc1 (patch) | |
| tree | daf713e3760fdfaf656b49f0280cf550e394c61f | |
| parent | 28734ac268c7ef24c78e32223b9a4398e96cdb93 (diff) | |
[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
| -rw-r--r-- | addons/event/models/event_ticket.py | 18 | ||||
| -rw-r--r-- | 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 @@ </t> </select> <div t-else="" class="text-danger"> - <span t-if="not ticket.sale_available and not ticket.is_expired and ticket.start_sale_date < datetime.date.today()" >Sold Out</span> + <span t-if="not ticket.sale_available and not ticket.is_expired and ticket.is_launched()" >Sold Out</span> <span t-if="ticket.is_expired">Expired</span> </div> </div> |
