[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
This commit is contained in:
@@ -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:
|
||||
|
||||
@@ -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'),
|
||||
|
||||
@@ -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 < 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 < 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>
|
||||
|
||||
Reference in New Issue
Block a user