Mathias Markl
7 years ago
9 changed files with 2 additions and 329 deletions
-
133muk_web_client_refresh/models/refresh_rule.py
-
3muk_web_client_refresh/security/ir.model.access.csv
-
BINmuk_web_client_refresh/static/description/demo.mp4
-
23muk_web_client_refresh/tests/__init__.py
-
76muk_web_client_refresh/tests/test_refresh.py
-
27muk_web_client_refresh/views/refresh_menu.xml
-
65muk_web_client_refresh/views/refresh_rule_view.xml
-
2muk_web_preview_mail/tests/test_mail_parse.py
-
2muk_web_preview_rst/tests/test_rst.py
@ -1,133 +0,0 @@ |
|||
# -*- 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.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: |
|||
model._patch_method('create', rule._make_create()) |
|||
if rule.refresh_write: |
|||
model._patch_method('write', rule._make_write()) |
|||
if rule.refresh_unlink: |
|||
model._patch_method('unlink', rule._make_unlink()) |
|||
|
|||
@api.multi |
|||
def _revert_methods(self): |
|||
for rule in self: |
|||
model = self.env[rule.model.model] |
|||
for method in ['create', 'write', 'unlink']: |
|||
if getattr(rule, 'refresh_%s' % method) and hasattr(getattr(model, method), 'origin'): |
|||
model._revert_method(method) |
|||
|
|||
@api.model |
|||
def create(self, vals): |
|||
record = super(RefreshRule, self).create(vals) |
|||
record._register_hook() |
|||
modules.registry.Registry(self.env.cr.dbname).signal_changes() |
|||
return record |
|||
|
|||
@api.multi |
|||
def write(self, vals): |
|||
self._revert_methods() |
|||
result = super(RefreshRule, self).write(vals) |
|||
self._patch_methods() |
|||
modules.registry.Registry(self.env.cr.dbname).signal_changes() |
|||
return result |
|||
|
|||
@api.multi |
|||
def unlink(self): |
|||
self._revert_methods() |
|||
modules.registry.Registry(self.env.cr.dbname).signal_changes() |
|||
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('refresh', [self.env.cr.dbname, self._name, self._uid]) |
|||
|
|||
|
|||
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('refresh', [self.env.cr.dbname, self._name, self._uid]) |
|||
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('refresh', [self.env.cr.dbname, self._name, self._uid]) |
|||
return result |
|||
return unlink_refresh |
@ -1,3 +0,0 @@ |
|||
id,name,model_id:id,group_id:id,perm_read,perm_write,perm_create,perm_unlink |
|||
|
|||
access_refresh_rule_manager,refresh_rule_manager,model_muk_web_client_refresh_rule,base.group_erp_manager,1,1,1,1 |
@ -1,23 +0,0 @@ |
|||
# -*- 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/>. |
|||
# |
|||
################################################################################### |
|||
|
|||
from . import test_refresh |
|||
|
@ -1,76 +0,0 @@ |
|||
# -*- 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 os |
|||
import base64 |
|||
import unittest |
|||
|
|||
from contextlib import closing |
|||
|
|||
from odoo import _ |
|||
from odoo.tests import common |
|||
|
|||
class RefreshTestCase(common.TransactionCase): |
|||
|
|||
at_install = False |
|||
post_install = True |
|||
|
|||
def setUp(self): |
|||
super(RefreshTestCase, self).setUp() |
|||
self.partner = self.env['res.partner'].sudo() |
|||
self.model = self.env['ir.model'].sudo() |
|||
self.bus = self.env['bus.bus'].sudo() |
|||
self.rule = self.env['muk_web_client_refresh.rule'].sudo() |
|||
|
|||
def tearDown(self): |
|||
super(RefreshTestCase, self).tearDown() |
|||
|
|||
def test_refresh_rule(self): |
|||
start = self.bus.search([], count=True) |
|||
model = self.model.search([('model', '=', 'res.partner')], limit=1) |
|||
rule = self.rule.create({ |
|||
'name': "TestRule", |
|||
'model': model.id, |
|||
'refresh_create': True, |
|||
'refresh_write': True, |
|||
'refresh_unlink': True}) |
|||
partner = self.partner.create({ |
|||
'name': "Test", |
|||
}) |
|||
create = self.bus.search([], count=True) |
|||
self.assertTrue(start < create) |
|||
partner.write({'name': "Rename"}) |
|||
write = self.bus.search([], count=True) |
|||
self.assertTrue(write > create) |
|||
partner.unlink() |
|||
delete = self.bus.search([], count=True) |
|||
self.assertTrue(write < delete) |
|||
rule.write({'refresh_create': False}) |
|||
start = self.bus.search([], count=True) |
|||
partner = self.partner.create({ |
|||
'name': "Test", |
|||
}) |
|||
create = self.bus.search([], count=True) |
|||
self.assertTrue(start == create) |
|||
rule.unlink() |
|||
partner.unlink() |
|||
delete = self.bus.search([], count=True) |
|||
self.assertTrue(start == delete) |
@ -1,27 +0,0 @@ |
|||
<?xml version="1.0" encoding="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/>. |
|||
--> |
|||
|
|||
<odoo> |
|||
|
|||
<menuitem id="cat_menu_refresh" |
|||
name="Auto Refresh" |
|||
sequence="50" |
|||
parent="base.menu_custom" /> |
|||
|
|||
</odoo> |
@ -1,65 +0,0 @@ |
|||
<?xml version="1.0" encoding="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/>. |
|||
--> |
|||
|
|||
<odoo> |
|||
|
|||
<record id="view_refresh_rule_tree" model="ir.ui.view"> |
|||
<field name="name">muk_web_client_refresh_rule.tree</field> |
|||
<field name="model">muk_web_client_refresh.rule</field> |
|||
<field name="arch" type="xml"> |
|||
<tree string="Document Settings"> |
|||
<field name="name" /> |
|||
<field name="model"/> |
|||
<field name="refresh_create" /> |
|||
<field name="refresh_write" /> |
|||
<field name="refresh_unlink" /> |
|||
</tree> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="view_refresh_rule_form" model="ir.ui.view"> |
|||
<field name="name">muk_web_client_refresh_rule.form</field> |
|||
<field name="model">muk_web_client_refresh.rule</field> |
|||
<field name="arch" type="xml"> |
|||
<form string="Refresh Rule"> |
|||
<sheet> |
|||
<group string="General"> |
|||
<field name="name"/> |
|||
<field name="model"/> |
|||
</group> |
|||
<group string="Access Rights"> |
|||
<field name="refresh_create"/> |
|||
<field name="refresh_write"/> |
|||
<field name="refresh_unlink"/> |
|||
</group> |
|||
</sheet> |
|||
</form> |
|||
</field> |
|||
</record> |
|||
|
|||
<record id="action_refresh_rule" model="ir.actions.act_window"> |
|||
<field name="name">Rules</field> |
|||
<field name="res_model">muk_web_client_refresh.rule</field> |
|||
<field name="view_mode">tree,form</field> |
|||
</record> |
|||
|
|||
<menuitem id="menu_dms_settings" name="Rules" |
|||
parent="cat_menu_refresh" action="action_refresh_rule" /> |
|||
|
|||
</odoo> |
Write
Preview
Loading…
Cancel
Save
Reference in new issue