Search code examples
pythonpython-2.7odoo-8odooodoo-accounting

Error while Register Payment in customer invoice odoo


I didn't understand why this happen because error shows that object or function is not iterable and this error comes from base files not from any custom modules, error shows that it's pythonic.

Here is the error traceback.

Traceback (most recent call last):
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/http.py", line 537, in _handle_exception
    return super(JsonRequest, self)._handle_exception(exception)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/http.py", line 574, in dispatch
    result = self._call_function(**self.params)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/http.py", line 310, in _call_function
    return checked_call(self.db, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/service/model.py", line 118, in wrapper
    return f(dbname, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/http.py", line 307, in checked_call
    return self.endpoint(*a, **kw)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/http.py", line 803, in __call__
    return self.method(*args, **kw)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/http.py", line 403, in response_wrap
    response = f(*args, **kw)
  File "/home/viraj/workspace/pansuriya/odoo_v8/addons/web/controllers/main.py", line 944, in call_kw
    return self._call_kw(model, method, args, kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/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/viraj/workspace/pansuriya/odoo_v8/openerp/api.py", line 250, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/addons/account_check_writing/account_voucher.py", line 93, in create
    return super(account_voucher, self).create(cr, uid, vals, context=context)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/api.py", line 250, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/addons/mail/mail_thread.py", line 381, in create
    thread_id = super(mail_thread, self).create(cr, uid, values, context=context)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/api.py", line 250, in wrapper
    return old_api(self, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/api.py", line 345, in old_api
    result = method(recs, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/models.py", line 4092, in create
    record = self.browse(self._create(old_vals))
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/api.py", line 248, in wrapper
    return new_api(self, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/api.py", line 481, in new_api
    result = method(self._model, cr, uid, *args, **kwargs)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/models.py", line 4191, in _create
    updates.append((field, '%s', current_field._symbol_set[1](vals[field])))
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/osv/fields.py", line 409, in <lambda>
    self._symbol_f = lambda x: _symbol_set_float(self, x)
  File "/home/viraj/workspace/pansuriya/odoo_v8/openerp/osv/fields.py", line 386, in _symbol_set_float
    precision, scale = digits
TypeError: 'function' object is not iterable

According to code, button_proforma_voucher method of account_voucher model should be called but control does comes upto that and error raised before that.


Solution

  • There was an issue with decimal precision definition digits_compute is working while digits not working with float field in old api code.

    This was happened because I was pulled latest code from the github for v8 earlier it was wroking but not with that latest code so I need to update that field definition.

    import openerp.addons.decimal_precision as dp
    
    
    _columns = {
        'currency_rate' : fields.float(digits_compute=dp.get_precision( 'Account' ), string='Currency Rate' ),
    }