From 78014ff3acd1f2e7820775f327ad36867288106e Mon Sep 17 00:00:00 2001 From: "Lucas Perais (lpe)" Date: Thu, 3 Aug 2017 16:29:52 +0200 Subject: [PATCH] [FIX] website_event, _sale: protect against inactive products Commit 14d1f6f6c11f463375ad6066a74813535755c453 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 --- addons/event/models/event.py | 3 +++ addons/event_sale/models/event.py | 6 ++++++ addons/website_event/controllers/main.py | 4 +--- .../website_event/views/website_event_templates.xml | 3 ++- addons/website_event_sale/controllers/main.py | 11 +---------- 5 files changed, 13 insertions(+), 14 deletions(-) diff --git a/addons/event/models/event.py b/addons/event/models/event.py index ff3ba12f57a..17abb5c1268 100644 --- a/addons/event/models/event.py +++ b/addons/event/models/event.py @@ -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' diff --git a/addons/event_sale/models/event.py b/addons/event_sale/models/event.py index 1110072837d..0021bdbf022 100644 --- a/addons/event_sale/models/event.py +++ b/addons/event_sale/models/event.py @@ -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): diff --git a/addons/website_event/controllers/main.py b/addons/website_event/controllers/main.py index 9970d7f511e..045402055cc 100644 --- a/addons/website_event/controllers/main.py +++ b/addons/website_event/controllers/main.py @@ -165,13 +165,11 @@ class WebsiteEventController(http.Controller): @http.route(['/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) diff --git a/addons/website_event/views/website_event_templates.xml b/addons/website_event/views/website_event_templates.xml index 918c59e3d1e..f260c8506a5 100644 --- a/addons/website_event/views/website_event_templates.xml +++ b/addons/website_event/views/website_event_templates.xml @@ -303,7 +303,8 @@