Skip to Content
Menu
This question has been flagged
2 Replies
7196 Views

How to fix this error i got while migrating Odoo v10 module to Odoo v12


Odoo Server Error

Traceback (most recent call last):
  File "/odoo12/odoo12-server/odoo/http.py", line 656, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/odoo12/odoo12-server/odoo/http.py", line 314, in _handle_exception
    raise pycompat.reraise(type(exception), exception, sys.exc_info()[2])
  File "/odoo12/odoo12-server/odoo/tools/pycompat.py", line 87, in reraise
    raise value
  File "/odoo12/odoo12-server/odoo/http.py", line 698, in dispatch
    result = self._call_function(**self.params)
  File "/odoo12/odoo12-server/odoo/http.py", line 346, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/odoo12/odoo12-server/odoo/service/model.py", line 98, in wrapper
    return f(dbname, *args, **kwargs)
  File "/odoo12/odoo12-server/odoo/http.py", line 339, in checked_call
    result = self.endpoint(*a, **kw)
  File "/odoo12/odoo12-server/odoo/http.py", line 941, in __call__
    return self.method(*args, **kw)
  File "/odoo12/odoo12-server/odoo/http.py", line 519, in response_wrap
    response = f(*args, **kw)
  File "/odoo12/odoo12-server/addons/web/controllers/main.py", line 966, in call_button
    action = self._call_kw(model, method, args, {})
  File "/odoo12/odoo12-server/addons/web/controllers/main.py", line 954, in _call_kw
    return call_kw(request.env[model], method, args, kwargs)
  File "/odoo12/odoo12-server/odoo/api.py", line 759, in call_kw
    return _call_kw_multi(method, model, args, kwargs)
  File "/odoo12/odoo12-server/odoo/api.py", line 746, in _call_kw_multi
    result = method(recs, *args, **kwargs)
  File "/odoo12/custom/addons/schoo_training/models/training.py", line 272, in action_training_invoice_create
    price = new_price.values()[0] if new_price else train.test_type.lst_price
TypeError: 'dict_values' object does not support indexing


Below is my working code in Odoo v10

def action_training_invoice_create(self):
        invoice_obj = self.env["account.invoice"]
        invoice_line_obj = self.env["account.invoice.line"]
        inv_line_ids = []
        for train in self:
            if train.student:
                curr_invoice = {
                    'partner_id': train.student.partner_id.id,
                    'student' : train.student.id,
                    'account_id': train.student.partner_id.property_account_receivable_id.id,
                    'state': 'draft',
                    'date_invoice':fields.Date.today(),
                }
                inv_id = invoice_obj.create(curr_invoice)
                if inv_id:
                    prd_account_id = self._default_account()
                    if train.test_type:
                        new_price = self.pricelist_id.price_get(train.test_type.product_id.id, 1)
                        price = new_price.values()[0] if new_price else train.test_type.lst_price
                        curr_invoice_line = {
                            'name': "Charge for " + str(train.test_type.name) + " training test",
                            'product_id': train.test_type.product_id.id,
                            'price_unit': price,
                            'quantity': 1.0,
                            'invoice_id': inv_id.id,
                        }
                        inv_line_ids = invoice_line_obj.create(curr_invoice_line)
                self.write({'state': 'Awaiting Verification','invoice_id': inv_id.id})



Avatar
Discard
Author

Could someone look into my error please

Best Answer

Python3 does not return a "list" when you access the values from the dictionary but it returns "dict_values" class.

But you can convert it into the list.

Use the following code:

list(new_price.values())[0]

Check this example.

Avatar
Discard
Related Posts Replies Views Activity
0
Mar 25
692
1
Sep 20
2283
3
Dec 24
22381
2
Mar 22
5153
1
Aug 21
5471