base_install_request/wizard/base_module_install_request.py

88 lines
3.3 KiB
Python
Raw Normal View History

# -*- coding: utf-8 -*-
# Part of Odoo. See LICENSE file for full copyright and licensing details.
from odoo import api, fields, models, _
from odoo.exceptions import UserError
class BaseModuleInstallRequest(models.TransientModel):
_name = "base.module.install.request"
_description = "Module Activation Request"
_rec_name = "module_id"
module_id = fields.Many2one(
'ir.module.module', string="Module", required=True,
domain=[('state', '=', "uninstalled")],
ondelete='cascade', readonly=True,
)
user_id = fields.Many2one('res.users', default=lambda self: self.env.user, required=True)
user_ids = fields.Many2many('res.users', string="Send to:", compute='_compute_user_ids')
body_html = fields.Html('Body')
@api.depends('module_id')
def _compute_user_ids(self):
users = self.env.ref('base.group_system').users
self.user_ids = [(6, 0, users.ids)]
def action_send_request(self):
mail_template = self.env.ref('base_install_request.mail_template_base_install_request')
menu_id = self.env.ref('base.menu_apps').id
for user in self.user_ids:
render_ctx = dict(self.env.context, partner=user.partner_id, menu_id=menu_id)
mail_template.with_context(render_ctx).send_mail(
self.id,
force_send=True,
email_layout_xmlid='mail.mail_notification_light')
return {
'type': 'ir.actions.client',
'tag': 'display_notification',
'params': {
'type': 'success',
'message': _('Your request has been successfully sent'),
'next': {'type': 'ir.actions.act_window_close'},
}
}
class BaseModuleInstallReview(models.TransientModel):
_name = "base.module.install.review"
_description = "Module Activation Review"
_rec_name = "module_id"
module_id = fields.Many2one(
'ir.module.module', string="Module", required=True,
domain=[('state', '=', "uninstalled")],
ondelete='cascade', readonly=True,
)
module_ids = fields.Many2many(
'ir.module.module', string="Depending Apps", compute='_compute_modules_description')
modules_description = fields.Html(compute='_compute_modules_description')
@api.depends('module_id')
def _compute_modules_description(self):
for wizard in self:
apps = wizard._get_depending_apps(wizard.module_id)
wizard.module_ids = [(6, 0, apps.ids)]
wizard.modules_description = self.env["ir.qweb"]._render(
"base_install_request.base_module_install_review_description", {'apps': apps})
@api.model
def _get_depending_apps(self, module):
if not module:
raise UserError(_('No module selected.'))
if module.state == "installed":
raise UserError(_('The module is already installed.'))
deps = module.upstream_dependencies()
apps = module | deps.filtered(lambda d: d.application)
for dep in deps:
apps |= dep.upstream_dependencies()
return apps
def action_install_module(self):
self.ensure_one()
self.module_id.button_immediate_install()
return {
'type': 'ir.actions.client',
'tag': 'home',
}