Funciones Odoo (Onchange) - leninsvg/Odoo GitHub Wiki

Onchange

Por medio de esta funcion se puede interactuar dinamicammente con la vista, y hacer un formulario dinamico. Su uso se lo realiza por medio de dos formas.

@api.onchange

El siguiente ejemplo muestra su sintaxis de uso.

@api.onchange('organizerAccount','code')
def getCode(self):
    if self.organizerAccount:
        self.code=self.organizerAccount.code

Primeramente en el decorador se pasa los campos intuitivos, que quiere decir. Si alguno de estos campos es modificado en la vista la funcion onchange sera ejecutada. @api.onchange('field','field') En este caso cualquiera de los fields es ejecuatado en la vista la funcion onchange sera ejecutada.

Una ves que se ejecute la accion se puede realizar acciones como seteaar valore a una campo a calcular un campo dinamicamente.

on_change con @api.multi

A diferencia del anterior este decorador nesesita ayuda de la vista. Para su uso, su sintaxis es la siguiente:

XML

<field name="centerCost" on_change="onchange_CalculateAmount(auxValue,centerCost,context)"/>

En el xml se define el elemento disparador, en este caso es centerCost. Seguido de esto se pasan los valores que ocupara el metodo onchange.

Para su uso se tiene que pasar desde el XML todos los campos que se ocupara en el metodo. En mi caso voy a usar (auxValue,centerCost,context).

Codigo .py

@api.multi
def onchange_CalculateAmount(self,auxValue,centerCost,context):
    values = {}
    domain = {}
    if centerCost:
        values['amount']=context["amount"]*auxValue/100
    return {'value': values, 'domain':domain}

Aqui se construye el metodo. En este metodo se tiene que construir un arreglo, por medio del cual retornaremos los valores a nuestra vista. values = {} domain = {}.

Una ves que tenemos nuestos arreglos asignamos valores a los campos para que retornen dinamicamente. *values['amount']=context["amount"]auxValue/100

Finalmente retornamos el resultado a la vista. return {'value': values, 'domain':domain}