Onchange en Openerp “Paso a Paso”!!!


Siempre que hago algo y  no lo documento tengo que pasar horas buscando en la red y aunque normalmente encuentro algo mejor o lo que estaba buscándome molesta usar 1 hora mas o menos buscando algo que ya había buscado y solucionado es por esta razón que cree el blog y la segunda para compartir mis problemas y soluciones a temas técnicos principalmente lo que me gusta y en lo que trabajo!

En esta ocasión traigo una entrada dedicada a onchange esta valiosa herramienta  o código, que hará ver nuestras vistas mas profesionales y hará que nuestro cliente sepa que hemos trabajado duro para cumplir con nuestro trabajo y con sus expectativas ademas dejamos el Software Libre muy en alto al hacer esto 😀 (Trabajar como si fuera para Dios, como no somos perfectos ni de cerca :S , por lo menos podemos intentar hacer el trabajo de esta manera :D)

Onchange, no encontré un definición si la tienen bienvenida!! Mas o menos es simplemente hacer que al cambiar el valor de un campo a mano este se represente en otro con cambios o sin ellos….

Por ejemplo si ingresamos el nombre de un cliente y quisiéramos saber su crédito sin ingresar a la vista form de este o  verlo desde la vista tree o para hacer la búsqueda creo que el onchange nos salvara la vida :D, ya que no tienes que guardar para ver cambios ni nada parecido…. se hacen en el momento que sales del campo 😀

Bueno como nada es exageradamente fácil aun en openerp o python, primero tenemos que crear un método que nos llamara al método onchange dentro de nuestra clase y luego agregar el método a la vista form en el archivo XML

Uno de las soluciones de StackOverflow fue la que me ayudo y es esta:

def onchange_bbb(self, cr, uid, ids, bbb, context=None):
 vals = {'aaa': bbb}
 return {'value': vals}

Este pequeño código es la parte lógica del programa onchange que intentamos hacer, nos debemos fijar primero en que bbb se encuentra dentro de los argumentos y en vals(valores) el primer valor es el que va a cambiar y el segundo es el que vamos a meter a mano

Así nos quedaría la vista Form del XML

field name="aaa"/>
<field name="bbb" on_change="onchange_bbb(bbb)"/>
<field name="ccc"/>
<field name="ddd"/>

y nos debemos fijar que bbb es quien cambia aaa y por esto el onchange lo lleva este campo y no el otro :D…. esta es la parte fácil en Internet encontrar esto y hacer un cambio de un campo normal a uno dentro de many2one, pero de many2one a uno fuera de este la situación es diferente y no encontré nada en Internet por lo menos no me funcionaron :S…. tenia un código por ay de otro modulo que buscaba un average y use la forma de búsqueda self.pool.get y browse y agregue esa linea al código y ya hace lo que les cuento 😀

def onchange_method(self, cr, uid, ids, campo1111, context=None):
name=self.pool.get('res.partner').browse(cr, uid,campo1111, context=context)
vals = {'campo2222' : name.campo1111}
return {'value': vals}

Si nos fijamos he cambiado todo, o no, no la respuesta esta en que bbb contiene  varios campos y entre ellos a campo1111 y por lo tanto al agregar este campo veremos el cambio en la vista que nos interesa sobre el campo2222…

field name="aaa"/>
<field name="bbb" on_change="onchange_method(bbb)"/>
<field name="campo2222"/>
<field name="ddd"/>

Espero les alla gustado y mas importante lo hayan implementado con éxito… a la brevedad escribiré como agregar el interesante botón imprimir Reporte con su método para nuestros módulos y hablare un poco de la criptografia y los SSL

 

 

 

 

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s