You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
134 lines
4.8 KiB
134 lines
4.8 KiB
# -*- coding: utf-8 -*-
|
|
|
|
###################################################################################
|
|
#
|
|
# Copyright (C) 2017 MuK IT GmbH
|
|
#
|
|
# This program is free software: you can redistribute it and/or modify
|
|
# it under the terms of the GNU Affero General Public License as
|
|
# published by the Free Software Foundation, either version 3 of the
|
|
# License, or (at your option) any later version.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
# GNU Affero General Public License for more details.
|
|
#
|
|
# You should have received a copy of the GNU Affero General Public License
|
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|
#
|
|
###################################################################################
|
|
|
|
import logging
|
|
|
|
from odoo import _
|
|
from odoo import models, modules, api, fields
|
|
from odoo.exceptions import ValidationError, AccessError
|
|
|
|
_logger = logging.getLogger(__name__)
|
|
|
|
class RefreshRule(models.Model):
|
|
_name = 'muk_web_client_refresh_config.rule'
|
|
_description = "Auto Refresh Rule"
|
|
|
|
name = fields.Char(
|
|
string="Name",
|
|
required=True)
|
|
|
|
model = fields.Many2one(
|
|
'ir.model',
|
|
string="Model",
|
|
required=True,
|
|
help="Select model for which you want to refresh the corresponding views.")
|
|
|
|
refresh_create = fields.Boolean(
|
|
string="Refresh on Create",
|
|
default=True)
|
|
|
|
refresh_write = fields.Boolean(
|
|
string="Refresh on Writes",
|
|
default=True)
|
|
|
|
refresh_unlink = fields.Boolean(
|
|
string="Refresh on Unlink",
|
|
default=True)
|
|
|
|
_sql_constraints = [
|
|
('model_uniq', 'unique(model)',
|
|
("There is already a rule defined on this model."))
|
|
]
|
|
|
|
def _register_hook(self):
|
|
super(RefreshRule, self)._register_hook()
|
|
return self._patch_methods()
|
|
|
|
@api.multi
|
|
def _patch_methods(self):
|
|
for rule in self:
|
|
model = self.env[rule.model.model]
|
|
if rule.refresh_create and not hasattr(model, "rule_refresh_create"):
|
|
model._patch_method('create', rule._make_create())
|
|
setattr(type(model), "rule_refresh_create", True)
|
|
if rule.refresh_write and not hasattr(model, "rule_refresh_write"):
|
|
model._patch_method('write', rule._make_write())
|
|
setattr(type(model), "rule_refresh_write", True)
|
|
if rule.refresh_unlink and not hasattr(model, "rule_refresh_unlink"):
|
|
model._patch_method('unlink', rule._make_unlink())
|
|
setattr(type(model), "rule_refresh_unlink", True)
|
|
|
|
@api.multi
|
|
def _revert_methods(self):
|
|
for rule in self:
|
|
model = self.env[rule.model._name]
|
|
for method in ['create', 'write', 'unlink']:
|
|
if getattr(rule, 'refresh_%s' % method) and hasattr(getattr(model, method), 'origin'):
|
|
model._revert_method(method)
|
|
delattr(type(model), 'refresh_ruled_%s' % method)
|
|
|
|
@api.model
|
|
def create(self, vals):
|
|
record = super(RefreshRule, self).create(vals)
|
|
record._register_hook()
|
|
modules.registry.RegistryManager.signal_registry_change(self.env.cr.dbname)
|
|
return record
|
|
|
|
@api.multi
|
|
def write(self, vals):
|
|
super(RefreshRule, self).write(vals)
|
|
self._register_hook()
|
|
modules.registry.RegistryManager.signal_registry_change(self.env.cr.dbname)
|
|
return True
|
|
|
|
@api.multi
|
|
def unlink(self):
|
|
self._revert_methods()
|
|
modules.registry.RegistryManager.signal_registry_change(self.env.cr.dbname)
|
|
return super(RefreshRule, self).unlink()
|
|
|
|
@api.multi
|
|
def _make_create(self):
|
|
@api.model
|
|
@api.returns('self', lambda value: value.id)
|
|
def create_refresh(self, vals, **kwargs):
|
|
result = create_refresh.origin(self, vals, **kwargs)
|
|
self.env['bus.bus'].sendone("%s_refresh" % self.env.cr.dbname, self._name)
|
|
return result
|
|
return create_refresh
|
|
|
|
@api.multi
|
|
def _make_write(self):
|
|
@api.multi
|
|
def write_refresh(self, vals, **kwargs):
|
|
result = write_refresh.origin(self, vals, **kwargs)
|
|
self.env['bus.bus'].sendone("%s_refresh" % self.env.cr.dbname, self._name)
|
|
return result
|
|
return write_refresh
|
|
|
|
@api.multi
|
|
def _make_unlink(self):
|
|
@api.multi
|
|
def unlink_refresh(self, **kwargs):
|
|
result = unlink_refresh.origin(self, **kwargs)
|
|
self.env['bus.bus'].sendone("%s_refresh" % self.env.cr.dbname, self._name)
|
|
return result
|
|
return unlink_refresh
|