odoo-addon-base-view-inheritance-extension 15.0.2.0.2__py3-none-any.whl → 15.0.2.1.0__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- odoo/addons/base_view_inheritance_extension/README.rst +11 -1
- odoo/addons/base_view_inheritance_extension/__manifest__.py +1 -1
- odoo/addons/base_view_inheritance_extension/models/ir_ui_view.py +36 -0
- odoo/addons/base_view_inheritance_extension/readme/CONTRIBUTORS.rst +1 -0
- odoo/addons/base_view_inheritance_extension/readme/USAGE.rst +9 -0
- odoo/addons/base_view_inheritance_extension/static/description/index.html +9 -2
- odoo/addons/base_view_inheritance_extension/tests/test_base_view_inheritance_extension.py +67 -0
- {odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info → odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info}/METADATA +12 -2
- {odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info → odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info}/RECORD +11 -11
- {odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info → odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info}/WHEEL +1 -1
- {odoo_addon_base_view_inheritance_extension-15.0.2.0.2.dist-info → odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info}/top_level.txt +0 -0
|
@@ -7,7 +7,7 @@ Extended view inheritance
|
|
|
7
7
|
!! This file is generated by oca-gen-addon-readme !!
|
|
8
8
|
!! changes will be overwritten. !!
|
|
9
9
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
10
|
-
!! source digest: sha256:
|
|
10
|
+
!! source digest: sha256:451c550ec60d392a9f2695aafd54df29237b459c7ce416407b224483fa3c3ebd
|
|
11
11
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
12
12
|
|
|
13
13
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
|
|
@@ -73,6 +73,15 @@ to refer to some xmlid, say ``%(xmlid)s``.
|
|
|
73
73
|
$domain_to_add
|
|
74
74
|
</attribute>
|
|
75
75
|
|
|
76
|
+
**Add domain with AND/OR join operator (AND if missed) for key in attrs**
|
|
77
|
+
|
|
78
|
+
.. code-block:: xml
|
|
79
|
+
|
|
80
|
+
<attribute name="$attribute" operation="attrs_domain_add"
|
|
81
|
+
key="$attrs_key" join_operator="OR">
|
|
82
|
+
$domain_to_add_to_attrs_key
|
|
83
|
+
</attribute>
|
|
84
|
+
|
|
76
85
|
Known issues / Roadmap
|
|
77
86
|
======================
|
|
78
87
|
|
|
@@ -107,6 +116,7 @@ Contributors
|
|
|
107
116
|
* Carlos Dauden
|
|
108
117
|
|
|
109
118
|
* Iván Todorovich <ivan.todorovich@camptocamp.com>
|
|
119
|
+
* Carlos Serra-Toro <carlos.serra@braintec.com>
|
|
110
120
|
|
|
111
121
|
Maintainers
|
|
112
122
|
~~~~~~~~~~~
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
# License LGPL-3.0 or later (https://www.gnu.org/licenses/lgpl.html).
|
|
4
4
|
{
|
|
5
5
|
"name": "Extended view inheritance",
|
|
6
|
-
"version": "15.0.2.0
|
|
6
|
+
"version": "15.0.2.1.0",
|
|
7
7
|
"development_status": "Mature",
|
|
8
8
|
"author": "Therp BV,Odoo Community Association (OCA)",
|
|
9
9
|
"license": "LGPL-3",
|
|
@@ -189,6 +189,42 @@ class IrUiView(models.Model):
|
|
|
189
189
|
node.attrib[attribute_name] = new_value
|
|
190
190
|
return source
|
|
191
191
|
|
|
192
|
+
@api.model
|
|
193
|
+
def inheritance_handler_attributes_attrs_domain_add(self, source, specs):
|
|
194
|
+
"""Implement attrs_domain_add
|
|
195
|
+
|
|
196
|
+
<attribute name="$attribute" operation="attrs_domain_add"
|
|
197
|
+
key="$attrs_key" join_operator="OR">
|
|
198
|
+
$domain_to_add_to_attrs_key
|
|
199
|
+
</attribute>
|
|
200
|
+
"""
|
|
201
|
+
node = self.locate_node(source, specs)
|
|
202
|
+
for attribute_node in specs:
|
|
203
|
+
attribute_name = attribute_node.get("name")
|
|
204
|
+
key = attribute_node.get("key")
|
|
205
|
+
join_operator = attribute_node.get("join_operator") or "AND"
|
|
206
|
+
old_value = node.get(attribute_name) or ""
|
|
207
|
+
if old_value:
|
|
208
|
+
old_value = ast.literal_eval(
|
|
209
|
+
self.var2str_domain_text(old_value.strip())
|
|
210
|
+
)
|
|
211
|
+
old_domain_attrs = old_value.get(key)
|
|
212
|
+
new_domain = ast.literal_eval(
|
|
213
|
+
self.var2str_domain_text(attribute_node.text.strip())
|
|
214
|
+
)
|
|
215
|
+
if join_operator == "OR":
|
|
216
|
+
new_value = expression.OR([old_domain_attrs, new_domain])
|
|
217
|
+
else:
|
|
218
|
+
new_value = expression.AND([old_domain_attrs, new_domain])
|
|
219
|
+
old_value[key] = new_value
|
|
220
|
+
new_value = self.str2var_domain_text(str(old_value))
|
|
221
|
+
else:
|
|
222
|
+
# We must ensure that the domain definition has not line breaks because
|
|
223
|
+
# in update mode the domain cause an invalid syntax error
|
|
224
|
+
new_value = "{'%s': %s}" % (key, attribute_node.text.strip())
|
|
225
|
+
node.attrib[attribute_name] = new_value
|
|
226
|
+
return source
|
|
227
|
+
|
|
192
228
|
@api.model
|
|
193
229
|
def var2str_domain_text(self, domain_str):
|
|
194
230
|
"""Replaces var names with str names to allow eval without defined vars"""
|
|
@@ -31,3 +31,12 @@ to refer to some xmlid, say ``%(xmlid)s``.
|
|
|
31
31
|
condition="$field_condition" join_operator="OR">
|
|
32
32
|
$domain_to_add
|
|
33
33
|
</attribute>
|
|
34
|
+
|
|
35
|
+
**Add domain with AND/OR join operator (AND if missed) for key in attrs**
|
|
36
|
+
|
|
37
|
+
.. code-block:: xml
|
|
38
|
+
|
|
39
|
+
<attribute name="$attribute" operation="attrs_domain_add"
|
|
40
|
+
key="$attrs_key" join_operator="OR">
|
|
41
|
+
$domain_to_add_to_attrs_key
|
|
42
|
+
</attribute>
|
|
@@ -1,4 +1,3 @@
|
|
|
1
|
-
<?xml version="1.0" encoding="utf-8"?>
|
|
2
1
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
|
|
3
2
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
|
|
4
3
|
<head>
|
|
@@ -367,7 +366,7 @@ ul.auto-toc {
|
|
|
367
366
|
!! This file is generated by oca-gen-addon-readme !!
|
|
368
367
|
!! changes will be overwritten. !!
|
|
369
368
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
370
|
-
!! source digest: sha256:
|
|
369
|
+
!! source digest: sha256:451c550ec60d392a9f2695aafd54df29237b459c7ce416407b224483fa3c3ebd
|
|
371
370
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! -->
|
|
372
371
|
<p><a class="reference external image-reference" href="https://odoo-community.org/page/development-status"><img alt="Mature" src="https://img.shields.io/badge/maturity-Mature-brightgreen.png" /></a> <a class="reference external image-reference" href="http://www.gnu.org/licenses/lgpl-3.0-standalone.html"><img alt="License: LGPL-3" src="https://img.shields.io/badge/licence-LGPL--3-blue.png" /></a> <a class="reference external image-reference" href="https://github.com/OCA/server-tools/tree/15.0/base_view_inheritance_extension"><img alt="OCA/server-tools" src="https://img.shields.io/badge/github-OCA%2Fserver--tools-lightgray.png?logo=github" /></a> <a class="reference external image-reference" href="https://translation.odoo-community.org/projects/server-tools-15-0/server-tools-15-0-base_view_inheritance_extension"><img alt="Translate me on Weblate" src="https://img.shields.io/badge/weblate-Translate%20me-F47D42.png" /></a> <a class="reference external image-reference" href="https://runboat.odoo-community.org/builds?repo=OCA/server-tools&target_branch=15.0"><img alt="Try me on Runboat" src="https://img.shields.io/badge/runboat-Try%20me-875A7B.png" /></a></p>
|
|
373
372
|
<p>This module was written to make it simple to add custom operators for view
|
|
@@ -413,6 +412,13 @@ to refer to some xmlid, say <tt class="docutils literal">%(xmlid)s</tt>.</p>
|
|
|
413
412
|
</span>$domain_to_add<span class="w">
|
|
414
413
|
</span><span class="nt"></attribute></span>
|
|
415
414
|
</pre>
|
|
415
|
+
<p><strong>Add domain with AND/OR join operator (AND if missed) for key in attrs</strong></p>
|
|
416
|
+
<pre class="code xml literal-block">
|
|
417
|
+
<span class="nt"><attribute</span><span class="w"> </span><span class="na">name=</span><span class="s">"$attribute"</span><span class="w"> </span><span class="na">operation=</span><span class="s">"attrs_domain_add"</span><span class="w">
|
|
418
|
+
</span><span class="na">key=</span><span class="s">"$attrs_key"</span><span class="w"> </span><span class="na">join_operator=</span><span class="s">"OR"</span><span class="nt">></span><span class="w">
|
|
419
|
+
</span>$domain_to_add_to_attrs_key<span class="w">
|
|
420
|
+
</span><span class="nt"></attribute></span>
|
|
421
|
+
</pre>
|
|
416
422
|
</div>
|
|
417
423
|
<div class="section" id="known-issues-roadmap">
|
|
418
424
|
<h1><a class="toc-backref" href="#toc-entry-2">Known issues / Roadmap</a></h1>
|
|
@@ -447,6 +453,7 @@ If you spotted it first, help us to smash it by providing a detailed and welcome
|
|
|
447
453
|
</ul>
|
|
448
454
|
</li>
|
|
449
455
|
<li>Iván Todorovich <<a class="reference external" href="mailto:ivan.todorovich@camptocamp.com">ivan.todorovich@camptocamp.com</a>></li>
|
|
456
|
+
<li>Carlos Serra-Toro <<a class="reference external" href="mailto:carlos.serra@braintec.com">carlos.serra@braintec.com</a>></li>
|
|
450
457
|
</ul>
|
|
451
458
|
</div>
|
|
452
459
|
<div class="section" id="maintainers">
|
|
@@ -250,3 +250,70 @@ class TestBaseViewInheritanceExtension(TransactionCase):
|
|
|
250
250
|
)
|
|
251
251
|
with self.assertRaisesRegex(TypeError, "Attribute `domain` is not a dict"):
|
|
252
252
|
self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
|
|
253
|
+
|
|
254
|
+
def test_attrs_domain_add_join_operator_or(self):
|
|
255
|
+
"""Test that we can add an OR domain to an existing attrs key."""
|
|
256
|
+
self._test_attrs_domain_add(join_operator="OR")
|
|
257
|
+
|
|
258
|
+
def test_attrs_domain_add_join_operator_and(self):
|
|
259
|
+
"""Test that we can add an AND domain to an existing attrs key."""
|
|
260
|
+
self._test_attrs_domain_add(join_operator="AND")
|
|
261
|
+
|
|
262
|
+
def _test_attrs_domain_add(self, join_operator):
|
|
263
|
+
"""Test that we can add a domain to an existing attrs domain key."""
|
|
264
|
+
source = etree.fromstring(
|
|
265
|
+
"""
|
|
266
|
+
<form>
|
|
267
|
+
<field
|
|
268
|
+
name="ref"
|
|
269
|
+
attrs="{
|
|
270
|
+
'invisible': [('state', '=', 'draft')],
|
|
271
|
+
'required': [('state', '=', False)],
|
|
272
|
+
}"
|
|
273
|
+
/>
|
|
274
|
+
</form>
|
|
275
|
+
"""
|
|
276
|
+
)
|
|
277
|
+
specs = etree.fromstring(
|
|
278
|
+
"""
|
|
279
|
+
<field name="ref" position="attributes">
|
|
280
|
+
<attribute name="attrs" operation="attrs_domain_add"
|
|
281
|
+
key="required" join_operator="%s">
|
|
282
|
+
[('state', '!=', 'draft')]
|
|
283
|
+
</attribute>
|
|
284
|
+
</field>
|
|
285
|
+
"""
|
|
286
|
+
% (join_operator,)
|
|
287
|
+
)
|
|
288
|
+
res = self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
|
|
289
|
+
self.assertEqual(
|
|
290
|
+
res.xpath('//field[@name="ref"]')[0].attrib["attrs"],
|
|
291
|
+
"{'invisible': [('state', '=', 'draft')], "
|
|
292
|
+
"'required': ['%s', ('state', '=', False), ('state', '!=', 'draft')]}"
|
|
293
|
+
% ("|" if join_operator == "OR" else "&"),
|
|
294
|
+
)
|
|
295
|
+
|
|
296
|
+
def test_attrs_domain_add_no_attrs(self):
|
|
297
|
+
"""Test attrs_domain_add if there is no attrs: attrs is created."""
|
|
298
|
+
source = etree.fromstring(
|
|
299
|
+
"""
|
|
300
|
+
<form>
|
|
301
|
+
<field name="ref"/>
|
|
302
|
+
</form>
|
|
303
|
+
"""
|
|
304
|
+
)
|
|
305
|
+
specs = etree.fromstring(
|
|
306
|
+
"""
|
|
307
|
+
<field name="ref" position="attributes">
|
|
308
|
+
<attribute name="attrs" operation="attrs_domain_add"
|
|
309
|
+
key="required" join_operator="OR">
|
|
310
|
+
[('state', '!=', 'draft')]
|
|
311
|
+
</attribute>
|
|
312
|
+
</field>
|
|
313
|
+
"""
|
|
314
|
+
)
|
|
315
|
+
res = self.env["ir.ui.view"].apply_inheritance_specs(source, specs)
|
|
316
|
+
self.assertEqual(
|
|
317
|
+
res.xpath('//field[@name="ref"]')[0].attrib["attrs"],
|
|
318
|
+
"{'required': [('state', '!=', 'draft')]}",
|
|
319
|
+
)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.1
|
|
2
2
|
Name: odoo-addon-base-view-inheritance-extension
|
|
3
|
-
Version: 15.0.2.0
|
|
3
|
+
Version: 15.0.2.1.0
|
|
4
4
|
Summary: Adds more operators for view inheritance
|
|
5
5
|
Home-page: https://github.com/OCA/server-tools
|
|
6
6
|
Author: Therp BV,Odoo Community Association (OCA)
|
|
@@ -25,7 +25,7 @@ Extended view inheritance
|
|
|
25
25
|
!! This file is generated by oca-gen-addon-readme !!
|
|
26
26
|
!! changes will be overwritten. !!
|
|
27
27
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
28
|
-
!! source digest: sha256:
|
|
28
|
+
!! source digest: sha256:451c550ec60d392a9f2695aafd54df29237b459c7ce416407b224483fa3c3ebd
|
|
29
29
|
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
|
|
30
30
|
|
|
31
31
|
.. |badge1| image:: https://img.shields.io/badge/maturity-Mature-brightgreen.png
|
|
@@ -91,6 +91,15 @@ to refer to some xmlid, say ``%(xmlid)s``.
|
|
|
91
91
|
$domain_to_add
|
|
92
92
|
</attribute>
|
|
93
93
|
|
|
94
|
+
**Add domain with AND/OR join operator (AND if missed) for key in attrs**
|
|
95
|
+
|
|
96
|
+
.. code-block:: xml
|
|
97
|
+
|
|
98
|
+
<attribute name="$attribute" operation="attrs_domain_add"
|
|
99
|
+
key="$attrs_key" join_operator="OR">
|
|
100
|
+
$domain_to_add_to_attrs_key
|
|
101
|
+
</attribute>
|
|
102
|
+
|
|
94
103
|
Known issues / Roadmap
|
|
95
104
|
======================
|
|
96
105
|
|
|
@@ -125,6 +134,7 @@ Contributors
|
|
|
125
134
|
* Carlos Dauden
|
|
126
135
|
|
|
127
136
|
* Iván Todorovich <ivan.todorovich@camptocamp.com>
|
|
137
|
+
* Carlos Serra-Toro <carlos.serra@braintec.com>
|
|
128
138
|
|
|
129
139
|
Maintainers
|
|
130
140
|
~~~~~~~~~~~
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
odoo/addons/base_view_inheritance_extension/README.rst,sha256=
|
|
1
|
+
odoo/addons/base_view_inheritance_extension/README.rst,sha256=HAqMHl6_fGR2dR4jhzEstrIiZfhC8RT5GHZJvdLApZM,4371
|
|
2
2
|
odoo/addons/base_view_inheritance_extension/__init__.py,sha256=X9EJGOE2GtZbS0G82PtSXmWSZ_R8jEM0rlJTDliQjp4,21
|
|
3
|
-
odoo/addons/base_view_inheritance_extension/__manifest__.py,sha256=
|
|
3
|
+
odoo/addons/base_view_inheritance_extension/__manifest__.py,sha256=Z56NJXtlxfLKWzbRakbvWTmitHbftCgyjQp2rns79cY,616
|
|
4
4
|
odoo/addons/base_view_inheritance_extension/demo/ir_ui_view.xml,sha256=UMFWbOJOnWSvpy9DdFNyFKwFf6YIlD6hnguHsbTA1n8,1219
|
|
5
5
|
odoo/addons/base_view_inheritance_extension/i18n/base_view_inheritance_extension.pot,sha256=knOWHe2nMwnZcY2zZiRUmMpFSvuuwo9DnJYtFhxKZs8,850
|
|
6
6
|
odoo/addons/base_view_inheritance_extension/i18n/ca.po,sha256=xFKkpPiT_RVTTR0H7ZzB2PW6M7aDhRzYhdiCoiRq6mY,1262
|
|
@@ -12,16 +12,16 @@ odoo/addons/base_view_inheritance_extension/i18n/it.po,sha256=0gDsGhu0G-QUmhB_pH
|
|
|
12
12
|
odoo/addons/base_view_inheritance_extension/i18n/sl.po,sha256=EY6zKcR8nRRsfpjrKK2_CVqFXnUVPjSBOAkI4-voRYw,1265
|
|
13
13
|
odoo/addons/base_view_inheritance_extension/i18n/tr.po,sha256=xaYd2V2mHhQIeLqUpsE4VL3mHbT0DQVNbT9_jCXLc0I,1272
|
|
14
14
|
odoo/addons/base_view_inheritance_extension/models/__init__.py,sha256=SjKfc8ocbCImvP5DpGQbS0hWmQRYPjtzJdyio6TPII0,25
|
|
15
|
-
odoo/addons/base_view_inheritance_extension/models/ir_ui_view.py,sha256=
|
|
16
|
-
odoo/addons/base_view_inheritance_extension/readme/CONTRIBUTORS.rst,sha256=
|
|
15
|
+
odoo/addons/base_view_inheritance_extension/models/ir_ui_view.py,sha256=xhYckU6Jc1TT8WdlkMFKmefZ5dGsuxJ12vzaX1ZwTJA,9843
|
|
16
|
+
odoo/addons/base_view_inheritance_extension/readme/CONTRIBUTORS.rst,sha256=er1wsP0tAgTprk5TY_A9qnHgOIfb9-v9CgD6ooWGifg,252
|
|
17
17
|
odoo/addons/base_view_inheritance_extension/readme/DESCRIPTION.rst,sha256=pamURJDYfLUcZtHl0ZvXTtzKO1LvHlhhYIND05AMzbk,88
|
|
18
18
|
odoo/addons/base_view_inheritance_extension/readme/ROADMAP.rst,sha256=Cz02ovrYCAgtqjY3nTSnikVgWaKPcWLP-bsuJxCTlKw,56
|
|
19
|
-
odoo/addons/base_view_inheritance_extension/readme/USAGE.rst,sha256=
|
|
19
|
+
odoo/addons/base_view_inheritance_extension/readme/USAGE.rst,sha256=qVIT8mE5xZVenXbqbWFEqx9bwbF4w-2jgEzdBYKSkAg,1099
|
|
20
20
|
odoo/addons/base_view_inheritance_extension/static/description/icon.png,sha256=6xBPJauaFOF0KDHfHgQopSc28kKvxMaeoQFQWZtfZDo,9455
|
|
21
|
-
odoo/addons/base_view_inheritance_extension/static/description/index.html,sha256=
|
|
21
|
+
odoo/addons/base_view_inheritance_extension/static/description/index.html,sha256=XBsAH9k6shRbjzVpcr9nk8xjsvSEjDPTXFdnv45X31Y,16318
|
|
22
22
|
odoo/addons/base_view_inheritance_extension/tests/__init__.py,sha256=kTcGsgnWhpM7vII3sEdNX5XVxDHHqRc5KdrxInG6GSw,51
|
|
23
|
-
odoo/addons/base_view_inheritance_extension/tests/test_base_view_inheritance_extension.py,sha256=
|
|
24
|
-
odoo_addon_base_view_inheritance_extension-15.0.2.0.
|
|
25
|
-
odoo_addon_base_view_inheritance_extension-15.0.2.0.
|
|
26
|
-
odoo_addon_base_view_inheritance_extension-15.0.2.0.
|
|
27
|
-
odoo_addon_base_view_inheritance_extension-15.0.2.0.
|
|
23
|
+
odoo/addons/base_view_inheritance_extension/tests/test_base_view_inheritance_extension.py,sha256=GyP7z63l7Y5EbvAlYcCEpeKMe4PEFm22VFaHRH9_uG8,11595
|
|
24
|
+
odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/METADATA,sha256=L2vnu-7d_iIHTO4vECIC4Efkq8G7PIFVnnszF94qgg0,5009
|
|
25
|
+
odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/WHEEL,sha256=GJ7t_kWBFywbagK5eo9IoUwLW6oyOeTKmQ-9iHFVNxQ,92
|
|
26
|
+
odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/top_level.txt,sha256=qBj40grFkGOfDZ2WDSw3y1RnDlgG0u8rP8pvGNdbz4w,5
|
|
27
|
+
odoo_addon_base_view_inheritance_extension-15.0.2.1.0.dist-info/RECORD,,
|