Skip to content

Commit d8018a3

Browse files
committed
[FIX] function_pattern_chunk_run allow_commit
1 parent fc8844d commit d8018a3

4 files changed

Lines changed: 66 additions & 28 deletions

File tree

pattern_import_export/data/queue_job_function_data.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
<field name="model_id" ref="model_pattern_chunk" />
1616
<field name="method">run</field>
1717
<field name="channel_id" ref="channel_pattern_import" />
18+
<field name="allow_commit" eval="True" />
1819
</record>
1920
<record id="job_function_pattern_chunk_check_last" model="queue.job.function">
2021
<field name="model_id" ref="model_pattern_chunk" />

pattern_import_export/demo/demo.xml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,12 @@
2121
<field name="model_id">res.company</field>
2222
<field name="user_id" />
2323
</record>
24+
<record id="demo_filter_categories" model="ir.filters">
25+
<field name="name">Main category</field>
26+
<field name="domain">[("active", "=", True)]</field>
27+
<field name="model_id">res.partner.category</field>
28+
<field name="user_id" />
29+
</record>
2430

2531
<!--Exports-->
2632
<record id="demo_export" model="ir.exports">
@@ -68,6 +74,7 @@
6874
<field name="name">category_id/name</field>
6975
<field name="export_id" ref="pattern_import_export.demo_export" />
7076
<field name="add_select_tab" eval="True" />
77+
<field name="tab_filter_id" ref="demo_filter_categories" />
7178
</record>
7279
<record id="demo_export_m2m_line_1" model="ir.exports.line">
7380
<field name="name">id</field>

pattern_import_export/models/ir_exports_line.py

Lines changed: 54 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@ def _get_last_relation_field(self, model, path, level=1):
5959
path = path + "/"
6060
field, path = path.split("/", 1)
6161
if path:
62-
next_model = self.env[model]._fields[field]._related_comodel_name
63-
next_field = path.split("/", 1)[0]
64-
if self.env[next_model]._fields[next_field]._related_comodel_name:
65-
return self._get_last_relation_field(next_model, path, level=level + 1)
62+
field_obj = self.env[model]._fields.get(field)
63+
if field_obj:
64+
next_model = getattr(field_obj, "_related_comodel_name", False)
65+
if next_model and next_model in self.env:
66+
next_field = path.split("/", 1)[0]
67+
next_field_obj = self.env[next_model]._fields.get(next_field)
68+
if next_field_obj and getattr(next_field_obj, "_related_comodel_name", False):
69+
return self._get_last_relation_field(next_model, path, level=level + 1)
6670
return field, model, level
6771

6872
@api.depends("name", "add_select_tab")
@@ -78,30 +82,54 @@ def _compute_required_fields(self):
7882
"tab_filter_id",
7983
"add_select_tab",
8084
]
81-
if record.name:
82-
required = []
83-
field, model, level = self._get_last_relation_field(
84-
record.model1_id.model, record.name
85-
)
86-
ftype = self.env[model]._fields[field].type
87-
if ftype in ["many2one", "many2many"]:
88-
level += 1
89-
hidden_fields.remove("add_select_tab")
90-
for idx in range(2, level + 1):
91-
required.append(f"field{idx}_id")
92-
if ftype in ["one2many", "many2many"]:
93-
required.append("number_occurence")
94-
if ftype in "one2many":
95-
required.append("sub_pattern_config_id")
96-
record.required_fields = ",".join(required)
97-
if record.add_select_tab:
98-
# this field is optionnal
99-
required.append("tab_filter_id")
100-
hidden_fields = list(set(hidden_fields) - set(required))
101-
record.hidden_fields = ",".join(hidden_fields)
102-
else:
85+
86+
if not record.name:
10387
record.required_fields = ""
10488
record.hidden_fields = ""
89+
continue
90+
91+
required = []
92+
93+
field, model, level = self._get_last_relation_field(
94+
record.model1_id.model, record.name
95+
)
96+
97+
if model not in self.env:
98+
record.required_fields = ""
99+
record.hidden_fields = ",".join(hidden_fields)
100+
continue
101+
102+
model_obj = self.env[model]
103+
104+
field_obj = model_obj._fields.get(field)
105+
if not field_obj:
106+
record.required_fields = ""
107+
record.hidden_fields = ",".join(hidden_fields)
108+
continue
109+
110+
ftype = field_obj.type
111+
112+
if ftype in ["many2one", "many2many"]:
113+
level += 1
114+
if "add_select_tab" in hidden_fields:
115+
hidden_fields.remove("add_select_tab")
116+
117+
for idx in range(2, level + 1):
118+
required.append(f"field{idx}_id")
119+
120+
if ftype in ["one2many", "many2many"]:
121+
required.append("number_occurence")
122+
123+
if ftype == "one2many":
124+
required.append("sub_pattern_config_id")
125+
126+
if record.add_select_tab:
127+
required.append("tab_filter_id")
128+
129+
record.required_fields = ",".join(required)
130+
131+
hidden_fields = list(set(hidden_fields) - set(required))
132+
record.hidden_fields = ",".join(hidden_fields)
105133

106134
def _inverse_name(self):
107135
super()._inverse_name()

pattern_import_export/tests/test_pattern_export.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -393,7 +393,9 @@ def test_get_metadata(self):
393393
tab_country_name = (
394394
f"({self.filter_countries_1.id}) {self.filter_countries_1.name}"
395395
)
396-
self.assertEqual(list(tabs.keys()), [tab_country_name, "Tags"])
396+
filter_categories = self.env.ref("pattern_import_export.demo_filter_categories")
397+
tab_category_name = f"({filter_categories.id}) {filter_categories.name}"
398+
self.assertEqual(list(tabs.keys()), [tab_country_name, tab_category_name])
397399
self.assertEqual(
398400
tabs[tab_country_name],
399401
{
@@ -403,7 +405,7 @@ def test_get_metadata(self):
403405
},
404406
)
405407
self.assertEqual(
406-
tabs["Tags"],
408+
tabs[tab_category_name],
407409
{
408410
"headers": ["name"],
409411
"data": [

0 commit comments

Comments
 (0)