Publicidad

viernes, 2 de octubre de 2015

Campos Seleccion Calculados en Odoo

Crear un Campo Calculado de Tipo Seleccion



Si trabajamos con campos calculados en Odoo y nos hemos enfrentado a obtener un valor de un campo SelecciĆ³n o RelaciĆ³n, observamos que en la nueva tabla el resultado es correcto obtenemos el resultado pero no tenemos la etiqueta correcta. Esto se soluciona haciendo uso del atributo "selection".

Ejemplo:
def _get_states(self, cr, uid, ids, fieldnames, args, context=None):
    res = {}
    state = 'draft'
    #### Aqui meteriamos el codigo para obtener el Estado del registro que necesitaramos #####
    return res[ids[0]] = state

lista_estados = [
                ('draft','Borrador')
                ('done','Realizado')
                ]

'state': fields.function(_get_states, type='selection',method=True,  selection=lista_estados, string="Estado"),


La misma regla aplica para los campos Relacion (Related):

lista_estados = [
                ('draft','Borrador')
                ('confirmed','Confirmado')
                ('done','Realizado')
                ('cancel','Cancelado')
                ]

'state': fields.related('invoice_id','state', type='selection',method=True,  selection=lista_estados, string="Estado"),

6 comentarios:

  1. Buenos dias, estoy tratando se hacer un reporte con aeroo reports, pero al mostrar un campo seleccion en el reporte solo muestra numeros (claves) pero no el nombre o valor de dicho campo seleccion. Hay alguna forma de hacer que muestre el valor del campo y no el indice?? Gracias

    ResponderBorrar
    Respuestas
    1. Hola, normalmente los campos selecciĆ³n estan conformados por 2 valores, el primero es el texto que se guarda en Base de Datos y el Segundo el Texto para la aplicaciĆ³n. Si deseas mostrar un valor distinto al de la clave de la selecciĆ³n, debes usar condicionantes y en base a esto poner el valor, por ejemplo if o.state == 'cancel':
      "Documento Cancelado".

      El ejemplo anterior solo es para darte una idea.

      Borrar
    2. Existe una soluciĆ³n:

      texto_estado = str(dict(Modelo._fields['campo_selection'].selection).get(Modelo.campo_selection))

      Borrar
  2. Buenas tardes, antetodo disculpen que escriba por este medio... estoy trabajando con la version 10 de Odoo, y se me presentĆ³ un problema con el modulo de nĆ³minas el cual presentare a continuacion.

    necesito calcular los Sabados Trabajados y/o los permisos remunerados pero no se como colocar en la regla salarial sin tener que colocar el worked_days.CODIGOX.number_od_days podran ayudarme por favor

    ResponderBorrar
    Respuestas
    1. yo pienso que es mas facil que calcules los dias por un campo manual. saludos

      Borrar