Llamar un Metodo dentro de una clase Desde otro metodo

1,227 views
Skip to first unread message

Moises Velez Avila

unread,
Dec 15, 2016, 8:12:31 PM12/15/16
to Usuarios Odoo / OpenERP en España
Disculpe la pregunta soy nuevo en odoo y estoy apenas inicializandome y tengo unas dudas de como resolver un problema que ya llevo como 3 dias y no eh podido resolverlo, les dejo el codigo para que me puedan entender lo que quiero hacer:

Basicamente tengo una clase y metodos dentro de la clase y tengo un metodo que hace una validacion del numero de serie de los vehiculos pero no puedo hacerla llamar en metodos override create y write.

Y lo que necesito es cuando haga un onchange en la forma del campo me valide el vin.
Pero eh querido deshabilitar el boton guardar que pone por defecto, para que no permita guardar el registro si encuentra un error.

Es por eso que decidi hacer un override de create y write, pero no puedo lograr hacer llamara la funcion:

VinValidate lo que quiero es recibir los returns para que sea un metodo que pueda utillizar en varios metodos.

En los metodos onchange_vin y en los override de create y write.

Espero su ayuda.

Gracias de antemano.

 @api.onchange('vin')
 def onchange_vin(self):
    result=self.VinValidate(self)
    if result != 3:
      raise osv.except_osv(_("Error!"), _(" El numero de VIN es Invalido: " + self.vin))
 
 @staticmethod
 def VinValidate(self):

      if self.vin == 0:
        return 0

      vin_data = self.vin.upper()

      POSITIONAL_WEIGHTS = [8, 7, 6, 5, 4, 3, 2, 10, 0, 9, 8, 7, 6, 5, 4, 3, 2]
      LETTER_KEY = dict(
                    A=1, B=2, C=3, D=4, E=5, F=6, G=7, H=8,
                    J=1, K=2, L=3, M=4, N=5, P=7, R=9,
                    S=2, T=3, U=4, V=5, W=6, X=7, Y=8, Z=9,
                )
      numRomano = "X"
      largo = len(vin_data)

      digit_result = ""
      suma = 0
      i = 1
      if largo != 17:
            return 1
            #raise exceptions.ValidationError("Longitud Invalida:" + self.vin.upper())
      else:
       for x in vin_data:
           if i != 9 and x in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
             suma += (int(x) * POSITIONAL_WEIGHTS[i - 1])
           elif i != 9 and x not in ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"]:
             suma += (POSITIONAL_WEIGHTS[i - 1] * LETTER_KEY[x])

       i += 1

       resultado = (suma % 11)
       check_digit = vin_data[8]
       if resultado == 10:
        digit_result = "X"
       else:
        digit_result = resultado

        if str(resultado) != str(check_digit):
         return 2
         #raise exceptions.ValidationError("El numero de Vin no es valido:" + self.vin.upper())
        else:
         return 3

 @api.model
 def create(self, values):
     self.VinValidate(self) 
     if result != 3:
      raise osv.except_osv(_("Error!"), _(" El numero de VIN es Invalido: " + values['vin']))
     else:
      return super(autos_procesos_compras, self).create(values)

El error es:
Esto me sale al cargar la forma
 File "/odoo/custom/addons/autos/catalogs/models/compras.py", line 41, in onchange_vin
    raise osv.except_osv(_("Error!"), _(" El numero de VIN es Invalido: " + self.vin))
TypeError: cannot concatenate 'str' and 'bool' objects

Y cuando doy click en el boton guardar me sale esto:
File "/odoo/custom/addons/autos/catalogs/models/compras.py", line 91, in create
    if result != 3:
NameError: global name 'result' is not defined


da...@aizean.com

unread,
Dec 16, 2016, 3:19:21 AM12/16/16
to Usuarios Odoo / OpenERP en España
Para la primera parte no lo he entendido bien el fallo, lo seguire mirando algo mejor, pero el segundo fallo es simplemente que en el create no sabe que es result ya que no esta inicializado, y viendo tu codigo, simplemente seria cambiar la primera linea del create :
self.VinValidate(self)

por:
result = self.VinValidate(self)

Moises Velez Avila

unread,
Dec 16, 2016, 11:30:49 AM12/16/16
to openerp-s...@googlegroups.com
Ahora me sale esto, ya que le quite el  @staticmethod
porque todos los vin's me dice que son incorrectos si esa funcion me la llevo a otro archivo y lo corro funciona perfectamente.

Hice la correccion que omenta dalba y si ya no marca error, pero todos los vines marca en error y al quitar el  @staticmethod marca el siguiente error al guardar.

File "/odoo/custom/addons/autos/catalogs/models/compras.py", line 41, in onchange_vin
    result=self.VinValidate(self)
TypeError: VinValidate() takes exactly 1 argument (2 given)
Es en esta parte del codigo
 @api.model
 def create(self, values):
     result=self.VinValidate(self) 
     if result != 3:
      raise osv.except_osv(_("Error!"), _(" El numero de VIN es Invalido: " + values['vin']))
     else:
      return super(autos_procesos_compras, self).create(values)
Saludos y muchas gracias de antemano.

!!!!!!!!!!!!!!Ya me trae loco estos errores.!!!!!!!!!!!!!!!!!


--
Has recibido este mensaje porque estás suscrito a un tema del grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este tema, visita https://groups.google.com/d/topic/openerp-spain-users/8ElJXGvyiF0/unsubscribe.
Para cancelar la suscripción a este grupo y a todos sus temas, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

Juani

unread,
Dec 16, 2016, 11:34:06 AM12/16/16
to openerp-s...@googlegroups.com, Moises Velez Avila

El error te está mostrando que toma un argumento y volviéndole a dar el self te está tomando dos

Saludos

Enviado con Aquamail para Android
http://www.aqua-mail.com

El 16 de diciembre de 2016 17:31:20 Moises Velez Avila <mvel...@gmail.com> escribio:

Has recibido este mensaje porque estás suscrito al grupo "Usuarios Odoo / OpenERP en España" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openerp-spain-u...@googlegroups.com.

Moises Velez Avila

unread,
Dec 16, 2016, 11:51:10 AM12/16/16
to Usuarios Odoo / OpenERP en España, mvel...@gmail.com
Y como lo corrijo.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a openerp-spain-users+unsub...@googlegroups.com.

da...@aizean.com

unread,
Dec 21, 2016, 3:32:26 AM12/21/16
to Usuarios Odoo / OpenERP en España, mvel...@gmail.com
Al hacer self.VinValidate() ya le estas pasando el propio self, si no me equivoco de modo que no has de pasarle el parámetro self de nuevo
Reply all
Reply to author
Forward
0 new messages