Odoo Add Button that should redirect to my Module View - odoo-14

I am using a module similar to this one: HR Org Chart
I want to open the view by clicking on a button in Profile Section.
I referred here: Reference
I am getting this error:
Odoo Server Error
Traceback (most recent call last):
File "/home/arijit/Project/odoo/odoo/src/odoo/tools/convert.py", line 678, in _tag_root
f(rec)
File "/home/arijit/Project/odoo/odoo/src/odoo/tools/convert.py", line 493, in _tag_record
model = env[rec_model]
File "/home/arijit/Project/odoo/odoo/src/odoo/api.py", line 533, in __getitem__
return self.registry[model_name]._browse(self, (), ())
File "/home/arijit/Project/odoo/odoo/src/odoo/modules/registry.py", line 177, in __getitem__
return self.models[model_name]
KeyError: 'ir.ui.client'
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/arijit/Project/odoo/odoo/src/odoo/addons/base/models/ir_http.py", line 237, in _dispatch
result = request.dispatch()
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 683, in dispatch
result = self._call_function(**self.params)
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 359, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/arijit/Project/odoo/odoo/src/odoo/service/model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 347, in checked_call
result = self.endpoint(*a, **kw)
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 912, in __call__
return self.method(*args, **kw)
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 531, in response_wrap
response = f(*args, **kw)
File "/home/arijit/Project/odoo/odoo/src/addons/web/controllers/main.py", line 1367, in call_button
action = self._call_kw(model, method, args, kwargs)
File "/home/arijit/Project/odoo/odoo/src/addons/web/controllers/main.py", line 1355, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "/home/arijit/Project/odoo/odoo/src/odoo/api.py", line 456, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "/home/arijit/Project/odoo/odoo/src/odoo/api.py", line 443, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "<decorator-gen-77>", line 2, in button_immediate_upgrade
File "/home/arijit/Project/odoo/odoo/src/odoo/addons/base/models/ir_module.py", line 73, in check_and_log
return method(self, *args, **kwargs)
File "/home/arijit/Project/odoo/odoo/src/odoo/addons/base/models/ir_module.py", line 656, in button_immediate_upgrade
return self._button_immediate_function(type(self).button_upgrade)
File "/home/arijit/Project/odoo/odoo/src/odoo/addons/base/models/ir_module.py", line 595, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "/home/arijit/Project/odoo/odoo/src/odoo/modules/registry.py", line 89, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "/home/arijit/Project/odoo/odoo/src/odoo/modules/loading.py", line 465, in load_modules
processed_modules += load_marked_modules(cr, graph,
File "/home/arijit/Project/odoo/odoo/src/odoo/modules/loading.py", line 362, in load_marked_modules
loaded, processed = load_module_graph(
File "/home/arijit/Project/odoo/odoo/src/odoo/modules/loading.py", line 221, in load_module_graph
load_data(cr, idref, mode, kind='data', package=package)
File "/home/arijit/Project/odoo/odoo/src/odoo/modules/loading.py", line 69, in load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind)
File "/home/arijit/Project/odoo/odoo/src/odoo/tools/convert.py", line 734, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate)
File "/home/arijit/Project/odoo/odoo/src/odoo/tools/convert.py", line 800, in convert_xml_import
obj.parse(doc.getroot())
File "/home/arijit/Project/odoo/odoo/src/odoo/tools/convert.py", line 720, in parse
self._tag_root(de)
File "/home/arijit/Project/odoo/odoo/src/odoo/tools/convert.py", line 682, in _tag_root
raise ParseError('while parsing %s:%s, near\n%s' % (
Exception
The above exception was the direct cause of the following exception:
Traceback (most recent call last):
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 639, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/arijit/Project/odoo/odoo/src/odoo/http.py", line 315, in _handle_exception
raise exception.with_traceback(None) from new_cause
odoo.tools.convert.ParseError: while parsing /home/arijit/Project/odoo/odoo/src/addons/hr_organizational_chart/views/show_employee_chart.xml:21, near
<record id="action_organizational_chart" model="ir.ui.client">
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<div id="o_work_employee_main" position="after">
<div id="o_employee_right">
<button name="%(hr_organization_chart.action_organizational_chart)d" type="action" string="Submit"/>
</div>
</div>
</field>
</record>
I want to add a button in the Employee profile section which should open up the module chart view.
Trying something like this to add the button in my profile section:
<field name="inherit_id" ref="hr.view_employee_form"/>
<field name="arch" type="xml">
<div id="o_work_employee_main" position="after">
<div id="o_employee_right">
<button name="%(hr_organization_chart.action_organizational_chart)d" type="action" string="Submit" />
</div>
</div>
</field>

The action_organizational_chart you want to reference from button is of type ir.ui.client which is not an action, its a view.
You should first create an ir.actions.act_window action that reference to your view, and then reference your button to that action instead of your view.

Related

How to add a Chatter in existing odoo module

I am trying to add a chatter in fleet in Vehicles Services Logs
and it give me this error when I am trying to update the inherit module that responsible to add the chatter,
this is the model:
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class Fleet_Chatter_service(models.Model):
_name = 'fleet.chatter.service'
_inherit = ['fleet.vehicle.log.services', 'mail.thread', 'ir.needaction_mixin']
_description = "fleet chatter in cost and service"
this is the view:
<odoo>
<record model="ir.ui.view" id="odt_fleet_service_chatter_form">
<field name="name">odt.fleet.chatter.service</field>
<field name="model">fleet.chatter.service</field>
<field name="inherit_id" ref="fleet.fleet_vehicle_log_services_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form/sheet" position="after">
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread" />
</div>
</xpath>
</field>
</record>
</odoo>
and this is the error:
Error:
Odoo Server Error
Traceback (most recent call last): File
"C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 394, in check_xml
self.postprocess_and_fields(view.model, view_doc, view.id) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 961, in postprocess_and_fields
self.raise_view_error(('Model not found: %(model)s') % dict(model=model), view_id) File
"C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 614, in raise_view_error
raise ValueError(message) ValueError: Model not found: fleet.chatter.service
Error context: View odt.fleet.chatter.service [view_id: 2990,
xml_id: n/a, model: fleet.chatter.service, parent_id: 494]
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File
"C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 712, in parse
self._tag_root(de) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 674, in
_tag_root
f(rec) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 577, in _tag_record
record = model._load_records([data], self.mode == 'update') File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 4168, in
_load_records
records = self._load_records_create([data['values'] for data in to_create]) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line
4082, in _load_records_create
return self.create(values) File "", line 2, in create File "C:\odt_work\zawaj\odoo-13\odoo\api.py", line 336, in
_model_create_multi
return create(self, arg) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 475, in create
return super(View, self).create(vals_list) File "", line 2, in create File
"C:\odt_work\zawaj\odoo-13\odoo\api.py", line 336, in
_model_create_multi
return create(self, arg) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 3843, in create
fields[0].determine_inverse(batch_recs) File "C:\odt_work\zawaj\odoo-13\odoo\fields.py", line 1155, in
determine_inverse
getattr(records, self.inverse)() File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 299, in _inverse_arch
view.write(data) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 493, in write
res = super(View, self).write(self._compute_defaults(vals)) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 3632, in write
real_recs._validate_fields(vals, inverse_fields) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 1206, in
_validate_fields
check(self) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 396, in check_xml
raise ValidationError("%s\n\n%s" % (("Error while validating view"), tools.ustr(e))) odoo.exceptions.ValidationError: ('Error while
validating view\n\nModel not found: fleet.chatter.service\n\nError
context:\nView odt.fleet.chatter.service\n[view_id: 2990, xml_id:
n/a, model: fleet.chatter.service, parent_id: 494]', None)
During handling of the above exception, another exception occurred:
Traceback (most recent call last): File
"C:\odt_work\zawaj\odoo-13\odoo\http.py", line 624, in
_handle_exception
return super(JsonRequest, self)._handle_exception(exception) File "C:\odt_work\zawaj\odoo-13\odoo\http.py", line 310, in
_handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2]) File
"C:\odt_work\zawaj\odoo-13\odoo\tools\pycompat.py", line 14, in
reraise
raise value File "C:\odt_work\zawaj\odoo-13\odoo\http.py", line 669, in dispatch
result = self._call_function(**self.params) File "C:\odt_work\zawaj\odoo-13\odoo\http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs) File "C:\odt_work\zawaj\odoo-13\odoo\service\model.py", line 94, in wrapper
return f(dbname, *args, **kwargs) File "C:\odt_work\zawaj\odoo-13\odoo\http.py", line 339, in checked_call
result = self.endpoint(*a, **kw) File "C:\odt_work\zawaj\odoo-13\odoo\http.py", line 915, in call
return self.method(*args, **kw) File "C:\odt_work\zawaj\odoo-13\odoo\http.py", line 515, in response_wrap
response = f(*args, **kw) File "c:\odt_work\zawaj\odoo-13\addons\web\controllers\main.py", line 1343,
in call_button
action = self._call_kw(model, method, args, kwargs) File "c:\odt_work\zawaj\odoo-13\addons\web\controllers\main.py", line 1331,
in _call_kw
return call_kw(request.env[model], method, args, kwargs) File "C:\odt_work\zawaj\odoo-13\odoo\api.py", line 387, in call_kw
result = _call_kw_multi(method, model, args, kwargs) File "C:\odt_work\zawaj\odoo-13\odoo\api.py", line 374, in _call_kw_multi
result = method(recs, *args, **kwargs) File "", line 2, in button_immediate_upgrade File
"C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_module.py", line
72, in check_and_log
return method(self, *args, **kwargs) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_module.py", line
634, in button_immediate_upgrade
return self._button_immediate_function(type(self).button_upgrade) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_module.py",
line 573, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True) File "C:\odt_work\zawaj\odoo-13\odoo\modules\registry.py", line 86, in
new
odoo.modules.load_modules(registry._db, force_demo, status, update_module) File
"C:\odt_work\zawaj\odoo-13\odoo\modules\loading.py", line 419, in
load_modules
force, status, report, loaded_modules, update_module, models_to_check) File
"C:\odt_work\zawaj\odoo-13\odoo\modules\loading.py", line 315, in
load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check File "C:\odt_work\zawaj\odoo-13\odoo\modules\loading.py", line 225, in
load_module_graph
load_data(cr, idref, mode, kind='data', package=package, report=report) File
"C:\odt_work\zawaj\odoo-13\odoo\modules\loading.py", line 68, in
load_data
tools.convert_file(cr, package.name, filename, idref, mode, noupdate, kind, report) File
"C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 736, in
convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 803, in
convert_xml_import
obj.parse(doc.getroot()) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 721, in parse
exc_info[2] File "C:\odt_work\zawaj\odoo-13\odoo\tools\pycompat.py", line 13, in
reraise
raise value.with_traceback(tb) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 712, in parse
self._tag_root(de) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 674, in
_tag_root
f(rec) File "C:\odt_work\zawaj\odoo-13\odoo\tools\convert.py", line 577, in _tag_record
record = model._load_records([data], self.mode == 'update') File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 4168, in
_load_records
records = self._load_records_create([data['values'] for data in to_create]) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line
4082, in _load_records_create
return self.create(values) File "", line 2, in create File "C:\odt_work\zawaj\odoo-13\odoo\api.py", line 336, in
_model_create_multi
return create(self, arg) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 475, in create
return super(View, self).create(vals_list) File "", line 2, in create File
"C:\odt_work\zawaj\odoo-13\odoo\api.py", line 336, in
_model_create_multi
return create(self, arg) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 3843, in create
fields[0].determine_inverse(batch_recs) File "C:\odt_work\zawaj\odoo-13\odoo\fields.py", line 1155, in
determine_inverse
getattr(records, self.inverse)() File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 299, in _inverse_arch
view.write(data) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 493, in write
res = super(View, self).write(self._compute_defaults(vals)) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 3632, in write
real_recs._validate_fields(vals, inverse_fields) File "C:\odt_work\zawaj\odoo-13\odoo\models.py", line 1206, in
_validate_fields
check(self) File "C:\odt_work\zawaj\odoo-13\odoo\addons\base\models\ir_ui_view.py",
line 396, in check_xml
raise ValidationError("%s\n\n%s" % (("Error while validating view"), tools.ustr(e))) odoo.tools.convert.ParseError: "Error while
validating view
Model not found: fleet.chatter.service
Error context:
View `odt.fleet.chatter.service`
[view_id: 2990, xml_id: n/a, model: fleet.chatter.service, parent_id: 494]
None" while parsing file:/c:/odt_work/zawaj/zawaj_custom/odt_fleet_chatter/views/chatter_service_view.xml:1, near
<odoo>
<record model="ir.ui.view" id="odt_fleet_service_chatter_form">
<field name="name">odt.fleet.chatter.service</field>
<field name="model">fleet.chatter.service</field>
<field name="priority" eval="50"/>
<field name="inherit_id" ref="fleet.fleet_vehicle_log_services_view_form"/>
<field name="arch" type="xml">
<xpath expr="//form/sheet" position="after">
<div class="oe_chatter">
<field name="message_follower_ids" widget="mail_followers"/>
<field name="activity_ids" widget="mail_activity"/>
<field name="message_ids" widget="mail_thread"/>
</div>
</xpath>
</field>
</record>
</odoo>
Try to inherit "mail.activity.mixin" as well since it is the one that adds the "activity_ids" field which you use in your view.
# -*- coding: utf-8 -*-
from odoo import models, fields, api
class Fleet_Chatter_service(models.Model):
_name = 'fleet.chatter.service'
_inherit = [
'fleet.vehicle.log.services', 'mail.thread',
'mail.activity.mixin', 'ir.needaction_mixin'
]
_description = "fleet chatter in cost and service"
Inherit "mail.thread" in your class:
class Fleet_Chatter_service(models.Model):
_name = 'fleet.chatter.service'
_inherit = ['mail.thread', 'another.module.needed']
Now you have to add the chatter inside your view:
In case of custom view, put it just after the :
<div class="oe_chatter">
<field name="message_ids" widget="mail_thread"/>
</div>
Same if you are working on an inherited view, use this Xpath :
<xpath expr="//form/sheet" position="after">
<div class="oe_chatter">
<field name="message_ids" widget="mail_thread"/>
</div>
</xpath>
Regards,

In trying to migrate app/module to odoo 13 I get KeyError: 'tax_line_ids'

In trying to migrate a module from odoo 11 to 13 I get the error KeyError: 'tax_line_ids'. Please help me solve this issue.
It's a brazilian module for billets
I've put "->" in the lines where tax_line_ids are detected in code. Somebody help me please. I can't find this module easily 'cause it's brazilian. The company that made it in odoo 11 now works with another company which charges for the billets so they stopped updating
Odoo Server Error
Traceback (most recent call last):
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 624, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 310, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "C:\Users\Eliane\Documents\Odoo\server\odoo\tools\pycompat.py", line 14, in reraise
raise value
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 669, in dispatch
result = self._call_function(**self.params)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 350, in _call_function
return checked_call(self.db, *args, **kwargs)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\service\model.py", line 94, in wrapper
return f(dbname, *args, **kwargs)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 915, in __call__
return self.method(*args, **kw)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\http.py", line 515, in response_wrap
response = f(*args, **kw)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\addons\web\controllers\main.py", line 1326, in call_button
action = self._call_kw(model, method, args, kwargs)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\addons\web\controllers\main.py", line 1314, in _call_kw
return call_kw(request.env[model], method, args, kwargs)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\api.py", line 387, in call_kw
result = _call_kw_multi(method, model, args, kwargs)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\api.py", line 374, in _call_kw_multi
result = method(recs, *args, **kwargs)
File "<decorator-gen-60>", line 2, in button_immediate_install
File "C:\Users\Eliane\Documents\Odoo\server\odoo\addons\base\models\ir_module.py", line 72, in check_and_log
return method(self, *args, **kwargs)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\addons\base\models\ir_module.py", line 463, in button_immediate_install
return self._button_immediate_function(type(self).button_install)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\addons\base\models\ir_module.py", line 573, in _button_immediate_function
modules.registry.Registry.new(self._cr.dbname, update_module=True)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\modules\registry.py", line 86, in new
odoo.modules.load_modules(registry._db, force_demo, status, update_module)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\modules\loading.py", line 423, in load_modules
loaded_modules, update_module, models_to_check)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\modules\loading.py", line 315, in load_marked_modules
perform_checks=perform_checks, models_to_check=models_to_check
File "C:\Users\Eliane\Documents\Odoo\server\odoo\modules\loading.py", line 201, in load_module_graph
registry.setup_models(cr)
File "C:\Users\Eliane\Documents\Odoo\server\odoo\modules\registry.py", line 266, in setup_models
dependencies[field] = set(field.resolve_depends(model))
File "C:\Users\Eliane\Documents\Odoo\server\odoo\fields.py", line 695, in resolve_depends
field = field_model._fields[fname]
-> KeyError: 'tax_line_ids'
file 1
class AccountInvoice(models.Model):
_inherit = 'account.move'
#api.depends('invoice_line_ids.price_subtotal',
'invoice_line_ids.price_total',
-> 'tax_line_ids.amount',
'currency_id', 'company_id')
in file 1 still
#api.model
def tax_line_move_line_get(self):
res = super(AccountInvoice, self).tax_line_move_line_get()
done_taxes = []
-> for tax_line in sorted(self.tax_line_ids, key=lambda x: -x.sequence):
if tax_line.amount and tax_line.tax_id.deduced_account_id:
tax = tax_line.tax_id
done_taxes.append(tax.id)
res.append({
'invoice_tax_line_id': tax_line.id,
'tax_line_id': tax_line.tax_id.id,
'type': 'tax',
'name': tax_line.name,
'price_unit': tax_line.amount * -1,
'quantity': 1,
'price': tax_line.amount * -1,
'account_id': tax_line.tax_id.deduced_account_id.id,
'account_analytic_id': tax_line.account_analytic_id.id,
'invoice_id': self.id,
'tax_ids': [(6, 0, done_taxes)]
if tax_line.tax_id.include_base_amount else []
})
return res
another xml file
-> <field name="tax_line_ids" position="after">
<group name="documentos_relacionados" string="Documentos Relacionados">
<field colspan="4" nolabel="1" name="fiscal_document_related_ids">
<tree>
<field name="document_type"/>
<field name="access_key"/>
<field name="serie"/>
<field name="internal_number"/>
</tree>
The field tax_line_ids is no longer available.
If you check the commit you will see that o.tax_line_ids was replaced by o.line_ids.filtered(lambda line: line.tax_line_id).
Try to replace o.tax_line_ids with o.line_ids.filtered(lambda line: line.tax_line_id) in your methods.
Remplace tax_line_ids.amount with line_ids.tax_line_id.amount in depends decorator.
Use another field in the XML definition.

How can I migrate a custom submenu with ir.actions.server from Odoo9 to Odoo12?

I have a module with custom submenu for transfers in Odoo9.
In the xml, I have this code:
<record id='action_menu_location_transfer_server' model='ir.actions.server'>
<field name="name">Custom Transfers</field>
<field name="model_id" ref="model_wizard_location_transfers_internal_transfer"/>
<field name="state">code</field>
<field name="code">action = self.custom_get_transfer_views(cr, uid, context=context)</field>
<field eval="True" name="condition"/>
</record>
<menuitem id="menu_refund_returns"
name="Custom Transfers"
action="action_menu_location_transfer_server"
parent="stock.menu_stock_warehouse_mgmt"
sequence="1"
groups="base.group_user"/>
But in Odoo12, if I try to use the code, it shows this error:
Odoo Server Error
Traceback (most recent call last):
File "/etc/odoo/server12/odoo/tools/safe_eval.py", line 350, in safe_eval
return unsafe_eval(c, globals_dict, locals_dict)
File "", line 1, in <module>
NameError: name 'self' is not defined
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "/etc/odoo/server12/odoo/http.py", line 656, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/etc/odoo/server12/odoo/http.py", line 314, in _handle_exception
raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
File "/etc/odoo/server12/odoo/tools/pycompat.py", line 87, in reraise
raise value
File "/etc/odoo/server12/odoo/http.py", line 698, in dispatch
result = self._call_function(**self.params)
File "/etc/odoo/server12/odoo/http.py", line 346, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/etc/odoo/server12/odoo/service/model.py", line 97, in wrapper
return f(dbname, *args, **kwargs)
File "/etc/odoo/server12/odoo/http.py", line 339, in checked_call
result = self.endpoint(*a, **kw)
File "/etc/odoo/server12/odoo/http.py", line 941, in __call__
return self.method(*args, **kw)
File "/etc/odoo/server12/odoo/http.py", line 519, in response_wrap
response = f(*args, **kw)
File "/etc/odoo/server12/addons/web/controllers/main.py", line 1269, in run
result = request.env['ir.actions.server'].browse([action_id]).run()
File "/etc/odoo/server12/odoo/addons/base/models/ir_actions.py", line 553, in run
res = func(action, eval_context=eval_context)
File "/etc/odoo/server12/odoo/addons/base/models/ir_actions.py", line 444, in run_action_code_multi
safe_eval(action.sudo().code.strip(), eval_context, mode="exec", nocopy=True) # nocopy allows to return 'action'
File "/etc/odoo/server12/odoo/tools/safe_eval.py", line 373, in safe_eval
pycompat.reraise(ValueError, ValueError('%s: "%s" while evaluating\n%r' % (ustr(type(e)), ustr(e), expr)), exc_info[2])
File "/etc/odoo/server12/odoo/tools/pycompat.py", line 86, in reraise
raise value.with_traceback(tb)
File "/etc/odoo/server12/odoo/tools/safe_eval.py", line 350, in safe_eval
return unsafe_eval(c, globals_dict, locals_dict)
File "", line 1, in <module>
ValueError: <class 'NameError'>: "name 'self' is not defined" while evaluating
'action = self.custom_get_transfer_views(cr, uid, context=context)'
What is the problem with the code for Odoo 12?
I have tried with self, record, object and nothing changes.
you can try this
<record id='action_menu_location_transfer_server' model='ir.actions.server'>
<field name="name">Custom Transfers</field>
<field name="model_id" ref="model_wizard_location_transfers_internal_transfer"/>
<field name="state">code</field>
<field name="code">model.custom_get_transfer_views()</field>
<field eval="True" name="condition"/>
</record>
the 'cr, uid,' no longer used in v12,
you can add the code of the 'custom_get_transfer_views' method to correct

Field not exist in odoo

I have error
2016-08-03 08:07:05,005 29822 ERROR odoov8 openerp.addons.base.ir.ir_ui_view: Field `shipaddr` not exist
My model extend sale.order:
from openerp.osv import osv, fields
class sale_order(osv.osv):
_inherit = 'sale.order'
_columns = {
#shipaddr = fields.Many2many('res.partner', string="Shipping address", readonly=False),
'shipaddr' : fields.many2many('res.partner', 'vips_shop_order_to_ship_rel', 'order_id', 'shipping_address_id', string="Shipping address"),
}
While I not added template for view all work fine (field not created but i haven't error)
<record model="ir.ui.view" id="sale_order_shipaddr_form_view">
<field name="name">order.shipaddr</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Shipping address">
<group>
<field name="shipaddr"/>
</group>
</page>
</notebook>
</field>
</record>
After added this template I receive error in top. I received also this:
2016-08-03 08:07:05,022 29822 ERROR odoov8 werkzeug: Error on request:
Traceback (most recent call last):
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 177, in run_wsgi
execute(self.server.app)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/serving.py", line 165, in execute
application_iter = app(environ, start_response)
File "/home/skif/odoo/openerp/service/server.py", line 291, in app
return self.app(e, s)
File "/home/skif/odoo/openerp/service/wsgi_server.py", line 216, in application
return application_unproxied(environ, start_response)
File "/home/skif/odoo/openerp/service/wsgi_server.py", line 202, in application_unproxied
result = handler(environ, start_response)
File "/home/skif/odoo/openerp/http.py", line 1293, in __call__
return self.dispatch(environ, start_response)
File "/home/skif/odoo/openerp/http.py", line 1267, in __call__
return self.app(environ, start_wrapped)
File "/usr/local/lib/python2.7/dist-packages/werkzeug/wsgi.py", line 588, in __call__
return self.app(environ, start_response)
File "/home/skif/odoo/openerp/http.py", line 1431, in dispatch
ir_http = request.registry['ir.http']
File "/home/skif/odoo/openerp/http.py", line 349, in registry
return openerp.modules.registry.RegistryManager.get(self.db) if self.db else None
File "/home/skif/odoo/openerp/modules/registry.py", line 339, in get
update_module)
File "/home/skif/odoo/openerp/modules/registry.py", line 370, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/home/skif/odoo/openerp/modules/loading.py", line 351, in load_modules
force, status, report, loaded_modules, update_module)
File "/home/skif/odoo/openerp/modules/loading.py", line 255, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/home/skif/odoo/openerp/modules/loading.py", line 176, in load_module_graph
_load_data(cr, module_name, idref, mode, kind='data')
File "/home/skif/odoo/openerp/modules/loading.py", line 118, in _load_data
tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
File "/home/skif/odoo/openerp/tools/convert.py", line 900, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/home/skif/odoo/openerp/tools/convert.py", line 986, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/home/skif/odoo/openerp/tools/convert.py", line 852, in parse
self._tags[rec.tag](self.cr, rec, n, mode=mode)
File "/home/skif/odoo/openerp/tools/convert.py", line 762, in _tag_record
id = self.pool['ir.model.data']._update(cr, self.uid, rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode, context=rec_context )
File "/home/skif/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/home/skif/odoo/openerp/addons/base/ir/ir_model.py", line 1065, in _update
res_id = model_obj.create(cr, uid, values, context=context)
File "/home/skif/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/home/skif/odoo/openerp/addons/base/ir/ir_ui_view.py", line 255, in create
context=context)
File "/home/skif/odoo/openerp/api.py", line 268, in wrapper
return old_api(self, *args, **kwargs)
File "/home/skif/odoo/openerp/api.py", line 372, in old_api
result = method(recs, *args, **kwargs)
File "/home/skif/odoo/openerp/models.py", line 4094, in create
record = self.browse(self._create(old_vals))
File "/home/skif/odoo/openerp/api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "/home/skif/odoo/openerp/api.py", line 508, in new_api
result = method(self._model, cr, uid, *args, **old_kwargs)
File "/home/skif/odoo/openerp/models.py", line 4285, in _create
recs._validate_fields(vals)
File "/home/skif/odoo/openerp/api.py", line 266, in wrapper
return new_api(self, *args, **kwargs)
File "/home/skif/odoo/openerp/models.py", line 1271, in _validate_fields
raise ValidationError('
'.join(errors))
ParseError: "ValidateError
Field(s) `arch` failed against a constraint: Invalid view definition
Error details:
Field `shipaddr` not exist
Context error:
View `order.shipaddr`
[view_id: 1642, xml_id: n/a, model: sale.order, parent_id: 582]" while parsing /home/skif/odoo/my-modules/vips_shop/views/sale_order.xml:5, near
<record model="ir.ui.view" id="sale_order_shipaddr_form_view">
<field name="name">order.shipaddr</field>
<field name="model">sale.order</field>
<field name="inherit_id" ref="sale.view_order_form"/>
<field name="arch" type="xml">
<notebook position="inside">
<page string="Shipping address">
<group>
<field name="shipaddr"/>
</group>
</page>
</notebook>
</field>
</record>
Why did not create a field in my model?
__openerp__.py
{
###
# any module necessary for this one to work correctly
'depends': ['base','sale', 'product', 'vips_vc'],
###
}
Module sale is using osv.osv model. Documentation for Odoo8 specified model.Model for create columns. I can not find doc for osv. This construction i wrote using code other modules. May be it not right.
Where have I error? Where am I can read doc for osv?
Thanks to Rawly for answer
In file openerp.py I fogot to add 'import sale_order'.
Now this file contains:
import controllers
import models
import partner
import product
import sale_order
As you see I added sale_order.
All working fine

OpenERP - Smsclient module

I try to install this module on Odoo https://apps.openerp.com/apps/7.0/smsclient/ but it fails during the installation, so i can't even try it as an sms solution for Odoo. Did anybody manage to install it? Or can suggest me another module to send sms via Odoo?
Here is the trace
Traceback (most recent call last):
File "/home/user/odoo/odoo/openerp/http.py", line 500, in _handle_exception
return super(JsonRequest, self)._handle_exception(exception)
File "/home/user/odoo/odoo/openerp/http.py", line 517, in dispatch
result = self._call_function(**self.params)
File "/home/user/odoo/odoo/openerp/http.py", line 283, in _call_function
return checked_call(self.db, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/service/model.py", line 113, in wrapper
return f(dbname, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/http.py", line 280, in checked_call
return self.endpoint(*a, **kw)
File "/home/user/odoo/odoo/openerp/http.py", line 733, in __call__
return self.method(*args, **kw)
File "/home/user/odoo/odoo/openerp/http.py", line 376, in response_wrap
response = f(*args, **kw)
File "/home/user/odoo/odoo/addons/web/controllers/main.py", line 948, in call_button
action = self._call_kw(model, method, args, {})
File "/home/user/odoo/odoo/addons/web/controllers/main.py", line 936, in _call_kw
return getattr(request.registry.get(model), method)(request.cr, request.uid, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/addons/base/module/module.py", line 450, in button_immediate_install
return self._button_immediate_function(cr, uid, ids, self.button_install, context=context)
File "/home/user/odoo/odoo/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/addons/base/module/module.py", line 497, in _button_immediate_function
registry = openerp.modules.registry.RegistryManager.new(cr.dbname, update_module=True)
File "/home/user/odoo/odoo/openerp/modules/registry.py", line 324, in new
openerp.modules.load_modules(registry._db, force_demo, status, update_module)
File "/home/user/odoo/odoo/openerp/modules/loading.py", line 358, in load_modules
loaded_modules, update_module)
File "/home/user/odoo/odoo/openerp/modules/loading.py", line 263, in load_marked_modules
loaded, processed = load_module_graph(cr, graph, progressdict, report=report, skip_modules=loaded_modules, perform_checks=perform_checks)
File "/home/user/odoo/odoo/openerp/modules/loading.py", line 182, in load_module_graph
_load_data(cr, module_name, idref, mode, kind='data')
File "/home/user/odoo/odoo/openerp/modules/loading.py", line 118, in _load_data
tools.convert_file(cr, module_name, filename, idref, mode, noupdate, kind, report)
File "/home/user/odoo/odoo/openerp/tools/convert.py", line 899, in convert_file
convert_xml_import(cr, module, fp, idref, mode, noupdate, report)
File "/home/user/odoo/odoo/openerp/tools/convert.py", line 985, in convert_xml_import
obj.parse(doc.getroot(), mode=mode)
File "/home/user/odoo/odoo/openerp/tools/convert.py", line 851, in parse
self._tags[rec.tag](self.cr, rec, n, mode=mode)
File "/home/user/odoo/odoo/openerp/tools/convert.py", line 765, in _tag_record
id = self.pool['ir.model.data']._update(cr, self.uid, rec_model, self.module, res, rec_id or False, not self.isnoupdate(data_node), noupdate=self.isnoupdate(data_node), mode=self.mode, context=rec_context )
File "/home/user/odoo/odoo/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/addons/base/ir/ir_model.py", line 1051, in _update
res_id = model_obj.create(cr, uid, values, context=context)
File "/home/user/odoo/odoo/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/addons/base/ir/ir_ui_view.py", line 264, in create
context=context)
File "/home/user/odoo/odoo/openerp/api.py", line 237, in wrapper
return old_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/api.py", line 332, in old_api
result = method(recs, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/models.py", line 3977, in create
record = self.browse(self._create(old_vals))
File "/home/user/odoo/odoo/openerp/api.py", line 235, in wrapper
return new_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/api.py", line 464, in new_api
result = method(self._model, cr, uid, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/models.py", line 4158, in _create
recs._validate_fields(vals)
File "/home/user/odoo/odoo/openerp/api.py", line 235, in wrapper
return new_api(self, *args, **kwargs)
File "/home/user/odoo/odoo/openerp/models.py", line 1299, in _validate_fields
raise ValidationError('\n'.join(errors))
ParseError: "ValidateError
Field(s) `arch` failed against a constraint: Invalid view definition
Error details:
Element '<field name="mobile">' cannot be located in parent view
Error context:
View `ir.actions.server.form.inherit`
[view_id: 345, xml_id: n/a, model: ir.actions.server, parent_id: 13]" while parsing /home/user/odoo/odoo/openerp/addons/smsclient/serveraction_view.xml:4, near
<record model="ir.ui.view" id="view_server_statistics_graph">
<field name="name">ir.actions.server.form.inherit</field>
<field name="model">ir.actions.server</field>
<field name="inherit_id" ref="base.view_server_action_form"/>
<field name="arch" type="xml">
<data><field name="mobile" position="after">
<field name="sms_server" invisible="1"/>
<field name="sms_template_id" domain="[('sms_template','=',True)]" attrs="{'required':[('state','=','sms')]}"/>
</field>
<field name="sms" position="attributes">
<attribute name="invisible">1</attribute>
<attribute name="required">0</attribute>
<attribute name="attrs">{}</attribute>
</field>
</data></field>
</record>