El 10/09/16 a les 18:56, Luis Martinez ha escrit:
Buenas tardes, estoy tratando de modificar el módulo analytic_product de
la versión 3.4,  que ya he utilizado anteriormente, para que funcione en
la versión 3.8, al ejecutarlo previo a hacer cualquier modificación me
arroja el siguiente error:

Traceback (most recent call last):
  File "/home//trytond/protocols/dispatcher.py", line 167, in dispatch
    result = rpc.result(meth(inst, *c_args, **c_kwargs))
  File "/home//trytond/model/modelview.py", line 649, in on_change
    method()
  File "/home//trytond/model/modelview.py", line 84, in wrapper
    result = func(self, *args, **kwargs)
  File "/home//trytond/model/fields/field.py", line 89, in wrapper
    return func(self, *args, **kwargs)
  File "/home//trytond/modules/sale_pos/sale.py", line 292, in
on_change_product
    super(SaleLine, self).on_change_product()
  File "/home//trytond/model/modelview.py", line 84, in wrapper
    result = func(self, *args, **kwargs)
  File "/home//trytond/model/fields/field.py", line 89, in wrapper
    return func(self, *args, **kwargs)
  File "/home//trytond/modules/analytic_product/product.py", line 260,
in on_change_product
    res[key] = account.id
TypeError: 'sale.line' object does not support item assignment

Esta es la parte del código donde está arrojándome el error:

class AnalyticProductMixin:
    @fields.depends('product')
    def on_change_product(self):
        try:
            res = super(AnalyticProductMixin, self).on_change_product()
        except:
            res = {}

        if self.product and self.product.analytic_accounts:
            for account in self.product.analytic_accounts.accounts:
                key = 'analytic_account_%d' % account.root.id
                res[key] = account.id
        return res


A partir de la versión 3.6 los métodos on_change no deben devolver ninguna información sino que deben assignar directamente los attributos. Es un cambio necessario para que el módulo funcione en nuevas versiones.

Deberias hechar un vistazo a la categoria migración[1] de disccuss para ver los cambios que se necessitan hacer en los módulos para adaptarlos a nuevas versiones.

Si vas a migrar de la 3.4 a la 3.8, debes aplicar los cambios de 3.4 a 3.6 y de 3.6 a 3.8.

De todos modos, ya que vas a migrar modulos a nuevas versiones estaria bien que migrases a la última versión estable. En este caso 4.0


Un saludo,

[1] https://discuss.tryton.org/c/migration


--
Sergi Almacellas Abellana
www.koolpi.com
Twitter: @pokoli_srk

Responder a