diff --git a/models/analytic_structure.py b/models/analytic_structure.py index 4fd3d3f64d452ba3472e7ceda387567f6a39ef2c_bW9kZWxzL2FuYWx5dGljX3N0cnVjdHVyZS5weQ==..b422df8b2dfe0c85ebff3039a9e03c89df2eabb3_bW9kZWxzL2FuYWx5dGljX3N0cnVjdHVyZS5weQ== 100644 --- a/models/analytic_structure.py +++ b/models/analytic_structure.py @@ -299,7 +299,7 @@ else: # No analytic structure defined for this field, hide it. modifiers = json.loads(match.get("modifiers", "{}")) - modifiers["invisible"] = modifiers["tree_invisible"] = True + modifiers["invisible"] = modifiers["column_invisible"] = True modifiers["required"] = False match.set("invisible", "true") match.set("required", "false") @@ -345,4 +345,11 @@ ) view["fields"].update(elem_fields_def) + # Prepare the "modifiers" attribute normally dynamically added. + # Specifics here: + # * We compare against explicit attributes in the view. This + # way we avoid all-read-only fields as the main + # "analytic_dimensions" pseudo-field is read-only. + # * When comparing, handle column_invisible -> invisible (see + # odoo/osv/orm.py > transfer_node_to_modifiers). modifiers = json.loads(elem.attrib.get("modifiers", "{}")) @@ -348,3 +355,12 @@ modifiers = json.loads(elem.attrib.get("modifiers", "{}")) + modifiers = json.dumps( + { + attr: value + for attr, value in modifiers.items() + if elem.attrib.get(_MODIFIER_TO_ATTR.get(attr, attr)) + in ("True", "true", "1") + } + ) + # Now we can insert the fields in the view's architecture. for field in elem_fields: @@ -349,16 +365,8 @@ # Now we can insert the fields in the view's architecture. for field in elem_fields: - attrs = {"name": field} - attrs["modifiers"] = json.dumps( - { - attr: value - for attr, value in list(modifiers.items()) - if elem.attrib.get(attr, "False") - in ("True", "true", "1") - } - ) - for attr, value in list(elem.attrib.items()): - if attr in ["name", "prefix", "suffix", "modifiers"]: + attrs = {"modifiers": modifiers, "name": field} + for attr, value in elem.attrib.items(): + if attr in ("name", "prefix", "suffix", "modifiers"): continue attrs[attr] = value parent.append(etree.Element("field", attrs)) @@ -368,3 +376,8 @@ view["arch"] = etree.tostring(doc) return view + + +# Used above in analytic_fields_view_get to compare "modifiers" vs explicit +# attributes. See odoo/osv/orm.py > transfer_node_to_modifiers. +_MODIFIER_TO_ATTR = {"column_invisible": "invisible"}