[FIX] website_event, _sale: protect against inactive products
Commit 14d1f6f6c1 responded to the need to have clean server answers for SEO purposes
and specifically when the products on event tickets have been archived
BUT
it introduced an infinite redirect loop when the event was in state == done
This present commit normalize the behavior in a comprehensive manner and cleans up the code a bit
OPW 757117
Closes #18667
This commit is contained in:
@@ -276,6 +276,9 @@ class EventEvent(models.Model):
|
||||
for attendee in self.registration_ids.filtered(filter_func):
|
||||
self.env['mail.template'].browse(template_id).send_mail(attendee.id, force_send=force_send)
|
||||
|
||||
@api.multi
|
||||
def _is_event_registrable(self):
|
||||
return True
|
||||
|
||||
class EventRegistration(models.Model):
|
||||
_name = 'event.registration'
|
||||
|
||||
@@ -24,6 +24,12 @@ class Event(models.Model):
|
||||
event_ticket_ids = fields.One2many('event.event.ticket', 'event_id', string='Event Ticket',
|
||||
default=lambda self: self._default_tickets(), copy=True)
|
||||
|
||||
@api.multi
|
||||
def _is_event_registrable(self):
|
||||
self.ensure_one()
|
||||
if not self.event_ticket_ids:
|
||||
return True
|
||||
return all(self.event_ticket_ids.with_context(active_test=False).mapped(lambda t: t.product_id.active))
|
||||
|
||||
class EventTicket(models.Model):
|
||||
|
||||
|
||||
@@ -165,13 +165,11 @@ class WebsiteEventController(http.Controller):
|
||||
|
||||
@http.route(['/event/<model("event.event"):event>/register'], type='http', auth="public", website=True)
|
||||
def event_register(self, event, **post):
|
||||
if event.state == 'done':
|
||||
return request.redirect("/event/%s" % slug(event))
|
||||
|
||||
values = {
|
||||
'event': event,
|
||||
'main_object': event,
|
||||
'range': range,
|
||||
'registrable': event._is_event_registrable()
|
||||
}
|
||||
return request.render("website_event.event_description_full", values)
|
||||
|
||||
|
||||
@@ -303,7 +303,8 @@
|
||||
<template id="event_description_full">
|
||||
<t t-call="website_event.event_details">
|
||||
<div class="col-md-8">
|
||||
<t t-call="website_event.registration_template"/>
|
||||
<div t-if="event.state == 'done' or not registrable" class="alert alert-info">Registration for this event is now closed</div>
|
||||
<t t-if="event.state != 'done' and registrable" t-call="website_event.registration_template"/>
|
||||
<div class="clearfix"/>
|
||||
<hr/>
|
||||
<div itemprop="description" t-field="event.description"></div>
|
||||
|
||||
@@ -3,7 +3,6 @@
|
||||
|
||||
from odoo import http, _
|
||||
from odoo.addons.website_event.controllers.main import WebsiteEventController
|
||||
from odoo.addons.website.models.website import slug
|
||||
from odoo.http import request
|
||||
|
||||
|
||||
@@ -11,16 +10,8 @@ class WebsiteEventSaleController(WebsiteEventController):
|
||||
|
||||
@http.route(['/event/<model("event.event"):event>/register'], type='http', auth="public", website=True)
|
||||
def event_register(self, event, **post):
|
||||
if event.state == 'done':
|
||||
return request.redirect("/event/%s" % slug(event))
|
||||
|
||||
event = event.with_context(pricelist=request.website.get_current_pricelist().id)
|
||||
values = {
|
||||
'event': event,
|
||||
'main_object': event,
|
||||
'range': range,
|
||||
}
|
||||
return request.render("website_event.event_description_full", values)
|
||||
return super(WebsiteEventSaleController, self).event_register(event, **post)
|
||||
|
||||
def _process_tickets_details(self, data):
|
||||
ticket_post = {}
|
||||
|
||||
Reference in New Issue
Block a user