from odoo import http from odoo.http import request def _redirect_to_login_if_public(path): """Manual login-required redirect - see community_classifieds for why this is needed instead of auth='user' (a bug in this Odoo version's own SessionExpiredException -> login-redirect handling).""" if request.env.user._is_public(): return request.redirect(f'/web/login?redirect={path}') return None class BenefitsController(http.Controller): @http.route(['/benefits'], type='http', auth='public', website=True, sitemap=True) def benefits_directory(self, **kwargs): centres = request.env['community.benefit.partner'].sudo().search([('active', '=', True)]) return request.render('community_benefits.benefits_directory_page', {'centres': centres}) @http.route(['/my/benefits'], type='http', auth='public', website=True) def my_benefits(self, **kwargs): redirect = _redirect_to_login_if_public('/my/benefits') if redirect: return redirect partner = request.env.user.partner_id benefits = request.env['community.benefit'].sudo().search( request.env['community.benefit']._entitled_domain_for_partner(partner) ) benefits = benefits.filtered(lambda benefit: benefit.is_entitled(partner)) return request.render('community_benefits.portal_my_benefits', {'benefits': benefits})