Post by javier »

Hello.

In your code you reference a users_ids field that does not exist in the original view, view_task_form2 of project in odoo v13.

Here is the original Odoo code updated today in the v13 branch: https://github.com/odoo/odoo/blob/13.0/addons/project/views/project_views.xml

And in your module you reference several times a user_ids field that does not exist in that view. Attach

This is the error trace when trying to install the app:

Odoo Server Error
Traceback (most recent call last):
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 671, in apply_inheritance_specs
pre_locate=pre_locate)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/template_inheritance.py", line 230, in apply_inheritance_specs
_("Element '%s' cannot be located in parent view") % tag
ValueError: El elemento '<xpath expr="//field[@name='user_ids']">' no puede ser localizado en la vista padre

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 712, in parse
self._tag_root(de)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 674, in _tag_root
f(rec)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 674, in _tag_root
f(rec)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 577, in tag_record
record = model.
load_records([data], self.mode == 'update')
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 4176, in load_records
records = self.
load_records_create([data['values'] for data in to_create])
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 4090, in _load_records_create
return self.create(values)
File "<decorator-gen-33>", line 2, in create
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/api.py", line 336, in _model_create_multi
return create(self, arg)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 475, in create
return super(View, self).create(vals_list)
File "<decorator-gen-3>", line 2, in create
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/api.py", line 336, in _model_create_multi
return create(self, arg)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 3851, in create
fields[0].determine_inverse(batch_recs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/fields.py", line 1154, in determine_inverse
getattr(records, self.inverse)()
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 299, in inverse_arch
view.write(data)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 493, in write
res = super(View, self).write(self.
compute_defaults(vals))
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 3640, in write
real_recs._validate_fields(vals, inverse_fields)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 1212, in _validate_fields
check(self)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 387, in _check_xml
view_def = view.read_combined(['arch'])
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 745, in read_combined
arch = self.apply_view_inheritance(arch_tree, root.id, self.model)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 694, in apply_view_inheritance
source = self.apply_inheritance_specs(source, specs_tree, view_id)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 673, in apply_inheritance_specs
self.raise_view_error(str(e), inherit_id)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 614, in raise_view_error
raise ValueError(message)
ValueError: El elemento '<xpath expr="//field[@name='user_ids']">' no puede ser localizado en la vista padre

Contexto del error:
Vista project_task_view_form
[view_id: 596, xml_id: n/a, model: project.task, parent_id: 550]

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 624, in handle_exception
return super(JsonRequest, self).
handle_exception(exception)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 310, in handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/pycompat.py", line 14, in reraise
raise value
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 669, in dispatch
result = self.
call_function(**self.params)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 350, in call_function
return checked_call(self.db, *args, **kwargs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/service/model.py", line 94, in wrapper
return f(dbname, args, **kwargs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 339, in checked_call
result = self.endpoint(
a, **kw)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 915, in call
return self.method(args, **kw)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/http.py", line 515, in response_wrap
response = f(
args, **kw)
File "/opt/odoo/odoo_13_test/src/enterprise/web/controllers/main.py", line 1343, in call_button
action = self.
call_kw(model, method, args, kwargs)
File "/opt/odoo/odoo_13_test/src/enterprise/web/controllers/main.py", line 1331, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/api.py", line 387, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/api.py", line 374, in call_kw_multi
result = method(recs, *args, **kwargs)
File "<decorator-gen-61>", line 2, in button_immediate_install
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_module.py", line 73, in check_and_log
return method(self, *args, **kwargs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_module.py", line 464, in button_immediate_install
return self.
button_immediate_function(type(self).button_install)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_module.py", line 574, in button_immediate_function
modules.registry.Registry.new(self.
cr.dbname, update_module=True)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/modules/registry.py", line 86, in new
odoo.modules.load_modules(registry.db, force_demo, status, update_module)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/modules/loading.py", line 428, in load_modules
loaded_modules, update_module, models_to_check)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/modules/loading.py", line 315, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/modules/loading.py", line 225, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package, report=report)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/modules/loading.py", line 68, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 736, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 803, in convert_xml_import
obj.parse(doc.getroot())
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 721, in parse
exc_info[2]
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/pycompat.py", line 13, in reraise
raise value.with_traceback(tb)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 712, in parse
self.
tag_root(de)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 674, in _tag_root
f(rec)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 674, in _tag_root
f(rec)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/tools/convert.py", line 577, in tag_record
record = model.
load_records([data], self.mode == 'update')
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 4176, in load_records
records = self.
load_records_create([data['values'] for data in to_create])
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 4090, in _load_records_create
return self.create(values)
File "<decorator-gen-33>", line 2, in create
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/api.py", line 336, in _model_create_multi
return create(self, arg)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 475, in create
return super(View, self).create(vals_list)
File "<decorator-gen-3>", line 2, in create
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/api.py", line 336, in _model_create_multi
return create(self, arg)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 3851, in create
fields[0].determine_inverse(batch_recs)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/fields.py", line 1154, in determine_inverse
getattr(records, self.inverse)()
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 299, in inverse_arch
view.write(data)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 493, in write
res = super(View, self).write(self.
compute_defaults(vals))
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 3640, in write
real_recs._validate_fields(vals, inverse_fields)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/models.py", line 1212, in _validate_fields
check(self)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 387, in _check_xml
view_def = view.read_combined(['arch'])
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 745, in read_combined
arch = self.apply_view_inheritance(arch_tree, root.id, self.model)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 694, in apply_view_inheritance
source = self.apply_inheritance_specs(source, specs_tree, view_id)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 673, in apply_inheritance_specs
self.raise_view_error(str(e), inherit_id)
File "/opt/odoo/odoo_13/src/oca/OCB/odoo/addons/base/models/ir_ui_view.py", line 614, in raise_view_error
raise ValueError(message)
odoo.tools.convert.ParseError: "El elemento '<xpath expr="//field[@name='user_ids']">' no puede ser localizado en la vista padre

Contexto del error:
Vista project_task_view_form
[view_id: 596, xml_id: n/a, model: project.task, parent_id: 550]" while parsing /opt/odoo/odoo_13_test/src/external/bryntum_gantt_enterprise/views/project_views.xml:1, near

<odoo>
    <data>
        <record id="bryntum_gantt__view_form" model="ir.ui.view">
            <field name="name">bryntum_gantt_view_form</field>
            <field name="model">project.task</field>
            <field name="arch" type="xml">
                <BryntumGantt/>
            </field>
        </record>

    <record id="open_gantt_pro" model="ir.actions.act_window">
        <field name="name">Gantt View Pro</field>
        <field name="res_model">project.task</field>
        <field name="view_mode">BryntumGantt,map</field>
    </record>

    <menuitem name="Gantt View Pro" id="menu_bryntum_gantt_pro" parent="project.menu_main_pm" sequence="3" action="open_gantt_pro" groups="project.group_project_user,project.group_project_manager,base.group_user"/>

    <record id="project.act_project_project_2_project_task_all" model="ir.actions.act_window">
        <field name="view_mode">kanban,tree,form,calendar,pivot,graph,activity,BryntumGantt,map</field>
    </record>

    <record id="project.action_view_task" model="ir.actions.act_window">
        <field name="view_mode">kanban,tree,form,calendar,pivot,graph,BryntumGantt,activity</field>
    </record>

    <record id="project_task_view_form" model="ir.ui.view">
        <field name="name">project_task_view_form</field>
        <field name="model">project.task</field>
        <field name="inherit_id" ref="project.view_task_form2"/>
        <field name="arch" type="xml">
            <data><xpath expr="//field[@name='tag_ids']" position="after">
                <field name="planned_date_begin" attrs="{'required': [('planned_date_end', '!=', False)]}"/>
                <field name="planned_date_end" attrs="{'required': [('planned_date_begin', '!=', False)]}"/>
                <field name="percent_done"/>
                <field name="effort"/>
                <field name="scheduling_mode"/>
                <field name="constraint_type"/>
                <field name="constraint_date" widget="date"/>
                <field name="effort_driven"/>
                <field name="manually_scheduled"/>
            </xpath>
            <xpath expr="//field[@name='user_ids']" position="after">
                <field name="employee_ids" class="o_task_user_field" options="{'no_open': True, 'no_quick_create': True}" widget="many2many_avatar_user"/>
            </xpath>
            <xpath expr="//field[@name='user_ids']" position="attributes">
                <attribute name="invisible">1</attribute>
            </xpath>
        </data></field>
    </record>
    <record id="project_task_view_quick_create_form" model="ir.ui.view">
        <field name="name">project_task_view_quick_create_form</field>
        <field name="model">project.task</field>
        <field name="inherit_id" ref="project.quick_create_task_form"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='user_ids']" position="replace">
                <field name="employee_ids" class="o_task_user_field" options="{'no_open': True, 'no_quick_create': True}" widget="many2many_avatar_user"/>
            </xpath>
        </field>
    </record>

    <record id="project_task_view_tree" model="ir.ui.view">
        <field name="name">project_task_view_tree</field>
        <field name="model">project.task</field>
        <field name="inherit_id" ref="project.view_task_tree2"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='user_ids']" position="attributes">
                <attribute name="invisible">1</attribute>
            </xpath>
            <xpath expr="//field[@name='company_id']" position="before">
                <field name="employee_ids" optional="show" widget="many2many_avatar_user"/>
                <field name="percent_done"/>
                <field name="assigned_ids" widget="many2many_tags"/>
            </xpath>
        </field>
    </record>
    <record id="project_task_view_search" model="ir.ui.view">
        <field name="name">project_task_view_search</field>
        <field name="model">project.task</field>
        <field name="inherit_id" ref="project.view_task_search_form"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='user_ids']" position="after">
                <field name="employee_ids" filter_domain="[('employee_ids.name', 'ilike', self)]"/>
            </xpath>
            <xpath expr="//field[@name='user_ids']" position="attributes">
                <attribute name="invisible">1</attribute>
            </xpath>
        </field>
    </record>
    <record id="project_task_view_kanban" model="ir.ui.view">
        <field name="name">project_task_view_kanban</field>
        <field name="model">project.task</field>
        <field name="inherit_id" ref="project.view_task_kanban"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='user_ids']" position="replace">
                <field name="employee_ids"/>
            </xpath>
            <xpath expr="//kanban//div[@class='oe_kanban_bottom_right']" position="replace">
                <div class="class='oe_kanban_bottom_right'">
                    <t t-if="record.employee_ids.raw_value">
                        <field name="employee_ids" widget="many2many_avatar_user"/>
                    </t>
                </div>
            </xpath>
        </field>
    </record>
    <record id="project_task_view_pivot" model="ir.ui.view">
        <field name="name">project_task_view_pivot</field>
        <field name="model">project.task</field>
        <field name="inherit_id" ref="project.view_project_task_pivot_inherit"/>
        <field name="arch" type="xml">
            <xpath expr="//field[@name='user_ids']" position="replace">
                <field name="employee_ids" type="row"/>
            </xpath>
        </field>
    </record>

    <record id="view_edit_project_inherit_form" model="ir.ui.view">
        <field name="name">project.project.view.inherit</field>
        <field name="model">project.project</field>
        <field name="inherit_id" ref="project.edit_project"/>
        <field name="arch" type="xml">
            <xpath expr="//div[hasclass('oe_title')]" position="after">
                <div name="project_start_date">
                    <div>
                        <label for="project_start_date" class="oe_inline" string="Project start:"/>
                        <field name="project_start_date" class="oe_inline oe_input_align"/>
                    </div>
                </div>
            </xpath>
            <xpath expr="//page[@name='settings']" position="inside">
                <div class="row mt16 o_settings_container" id="gantt_view_pro_management">
                    <div id="use_collaborative_pad" class="col-12 col-lg-6 o_setting_box">
                        <div class="o_setting_left_pane">
                            <field name="bryntum_auto_scheduling"/>
                        </div>
                        <div class="o_setting_right_pane" name="pad_project_right_pane">
                            <label for="bryntum_auto_scheduling"/>
                            <div class="text-muted">
                                Auto schedule tasks
                            </div>
                        </div>
                    </div>
                    <div id="use_collaborative_pad" class="col-12 col-lg-6 o_setting_box">
                        <div class="o_setting_left_pane">
                            <field name="bryntum_user_assignment"/>
                        </div>
                        <div class="o_setting_right_pane" name="pad_project_right_pane">
                            <label for="bryntum_user_assignment"/>
                            <div class="text-muted">
                                Use user table as resource base
                            </div>
                        </div>
                    </div>
                </div>
            </xpath>
        </field>
    </record>

</data>
</odoo>

Thank You.
Kind Regards.

Attachments
user_ids.png
user_ids.png (40.71 KiB) Viewed 268 times

Post by giot »

Hi javier, this indeed looks like an inheritance problem, but I don't fully understand how you got there:

  1. You're installing the bryntum_gantt_enterprise module on an OCB-sourced build; are you succesfully adding Odoo's enterprise repo as a source on top?
  2. User_ids is a field introduced on project.task in 15.0 so just to be sure, you're building from the 13.0 version of our app?

Meanwhile, let me also doublecheck on any faults that might have crept in on our side when updating 13.0 field definitions.


Post by giot »

Hello again javier, in the mean time I've found a problem with the latest commit in our 13.0 code so it looks like we have to deploy a fix. The Github issue can be found here


Post by javier »

Hello Giot.

You say: In the mean time I've found a problem with the latest
commit in our 13.0 code so it looks like we have to deploy a fix.

So, are you going to correct it and send us the correct module for V13 Enterprise?

Thank You.


Post by giot »

Hi Javier, I expect us to correct it yes although it is now first in the hands of our developers.

We will notify you here if a fix has been applied to this particular problem. Then our module will also have been updated on Odoo's App Store.

From there you should be able to re-download and apply the changes to your build. Thanks for sticking with us in the mean time!


Post by mats »

New version available, try re-downloading now?


Post Reply