Files
odoo_source/addons/web_planner/models/web_planner.py
T
Denis Ledoux 29147f4a4a [FIX] web_planner: links to modules form
This partially reverts rev. 84ade6a861

In this specific part of the code, the goal wasn't
to check if the module was part of the installed modules,
but if the module was part the "known" modules, in order
to jump on its form.

Besides, as this link is most of the time used
to install the according module, it's quite dummy
to search it within the installed modules.

Before this revision, trying to click on the "Install" links
in the planners linked to an empty module form, instead
of the according module form.

opw-667407
2016-02-01 11:13:55 +01:00

73 lines
3.2 KiB
Python

# -*- coding: utf-8 -*-
from urllib import urlencode
from openerp import api, models, fields
class Planner(models.Model):
"""Planner Model.
Each Planner has link to an ir.ui.view record that is a template used
to display the planner pages.
Each Planner has link to ir.ui.menu record that is a top menu used to display the
planner launcher(progressbar)
Method _prepare_<planner_application>_data(self, cr, uid, context) that
generate the values used to display in specific planner pages
"""
_name = 'web.planner'
_description = 'Planner'
@api.model
def _get_planner_application(self):
return []
name = fields.Char(string='Name', required=True)
menu_id = fields.Many2one('ir.ui.menu', string='Menu', required=True)
view_id = fields.Many2one('ir.ui.view', string='Template', required=True)
progress = fields.Integer(string="Progress Percentage")
# data field is used to store the data filled by user in planner(JSON Data)
data = fields.Text(string='Data')
tooltip_planner = fields.Html(string='Planner Tooltips', translate=True)
planner_application = fields.Selection('_get_planner_application', string='Planner Application', required=True)
active = fields.Boolean(string="Active", default=True, help="If the active field is set to False, it will allow you to hide the planner. This change requires a refreshing a your page.")
@api.model
def render(self, template_id, planner_app):
# prepare the planner data as per the planner application
values = {
'prepare_backend_url': self.prepare_backend_url,
'is_module_installed': self.is_module_installed,
}
planner_find_method_name = '_prepare_%s_data' % planner_app
if hasattr(self, planner_find_method_name):
values.update(getattr(self, planner_find_method_name)()) # update the default value
return self.env['ir.ui.view'].browse(template_id).render(values=values)
@api.model
def prepare_backend_url(self, action_xml_id, view_type='list', module_name=None):
""" prepare the backend url to the given action, or to the given module view.
:param action_xml_id : the xml id of the action to redirect to
:param view_type : the view type to display when redirecting (form, kanban, list, ...)
:param module_name : the name of the module to display (if action_xml_id is 'open_module_tree'), or
to redirect to if the action is not found.
:returns url : the url to the correct page
"""
params = dict(view_type=view_type)
# setting the action
action = self.env.ref(action_xml_id, False)
if action:
params['action'] = action.id
else:
params['model'] = 'ir.module.module'
# setting the module
if module_name:
module = self.env['ir.module.module'].sudo().search([('name', '=', module_name)], limit=1)
if module:
params['id'] = module.id
return "/web#%s" % (urlencode(params),)
@api.model
def is_module_installed(self, module_name=None):
return module_name in self.env['ir.module.module']._installed()