I have a custom module on my odoo server that clients need to pay extra for use, but they can use it for free as a demo for a month. On install the module creates an entry in demo.installation model, where the module name and date of install are saved.
From the date I've got a "timer". I need to show the timer in the menu. I've badly extended the menu following this question https://www.odoo.com/forum/help-1/question/odoo10-how-to-inherit-templates-of-web-module-119140
I now need to show the remaining days in the menu.
I've override the web.Home controllers web_client method to check and add to the context.
@http.route('/web', type='http', auth="none")
def web_client(self, s_action=None, **kw):
ensure_db()
if not request.session.uid:
return werkzeug.utils.redirect('/web/login', 303)
if kw.get('redirect'):
return werkzeug.utils.redirect(kw.get('redirect'), 303)
request.uid = request.session.uid
# DODELAVA ZA TIMER
demo_install = request.env['demo.installation'].search([])
try:
context = request.env['ir.http'].webclient_rendering_context()
except:
return werkzeug.utils.redirect('/web/login?error=access')
if len(demo_install) > 0:
demo_install = demo_install[0]
demos_obj = self.get_expiration_dict(demo_install)
# NE DELUJEJO COMPUTED POLJA
if demos_obj['expires'] < 0:
msg = u'Your demo time is over! The module will be deleted in {} days!'.format(demos_obj['deletes'])
context['message'] = msg
return request.render('odoo13_demo_timer.expiry_message', qcontext=context)
else:
demos_obj['message'] = u'Your demo will end in {} days. The module will be deleted in {} days!'.format(demos_obj['expires'], demos_obj['deletes'])
if demos_obj['expires'] <= 2:
demos_obj['message_class'] = 'red'
elif demos_obj['expires'] <= 7:
demos_obj['message_class'] = 'yellow'
elif demos_obj['expires'] > 7:
demos_obj['message_class'] = 'green'
context['demo_timer'] = demos_obj
try:
response = request.render('web.webclient_bootstrap', qcontext=context)
response.headers['X-Frame-Options'] = 'DENY'
return response
except AccessError:
return werkzeug.utils.redirect('/web/login?error=access')
The menu templet looks like
<?xml version="1.0" encoding="UTF-8"?>
<templates id="template" xml:space="preserve">
<t t-extend="Menu">
<t t-jquery='.o_menu_sections' t-operation='after'>
<t t-if="demo_timer">
<ul class="nav navbar-nav navbar-right demo_time_placeholder">
<li t-attf-class="{{ demo_timer['message_class'] }}"><t t-esc="demo_timer['message']" /></li>
</ul>
</t>
<ul class="full">FOO BAR</ul>
</t>
</t>
</templates>
The problem is that there is no section "demo_timer" in the context that is passed to the template.
How can I pass values in context so I can use them in the menu?