[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:
Lucas Perais (lpe)
2017-08-07 09:51:15 +02:00
parent b5ce70e70e
commit 78014ff3ac
5 changed files with 13 additions and 14 deletions
+3
View File
@@ -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'
+6
View File
@@ -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):
+1 -3
View File
@@ -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>
+1 -10
View File
@@ -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 = {}