[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
This commit is contained in:
committed by
Thibault Delavallée
parent
28734ac268
commit
179c5fcaba
@@ -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
|
||||
|
||||
@@ -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>
|
||||
|
||||
Reference in New Issue
Block a user