Publicidad

viernes, 3 de julio de 2015

Llamar funciones python desde Qweb Reports

Funciones Python desde Qweb Reports



    Qweb Reports el nuevo Reporteador para Odoo, ofrece muchas ventajas como lo ofrecía anteriormente RML, en ocaciones no podemos ejecutar directamente una operacion en Qweb o necesitamos tener un resultado de una funcion, esto es muy sencillo en RML, vamos a tomar como ejemplo las Facturas y voy a ejecutar un metodo desde el reporte Qweb, para calcular manualmente el total de un producto:


Qweb


<span  t-esc="line.subtotal_manual(line.price_unit,line.quantity)"/>

    Como podemos observar line es mi variable de iteracion para obtener los valores de invoice_lines, las lineas de Factura, para ejecutar un metodo llamado subtotal_manual. Este metodo que estamos utilizando no existe en el objecto account.invoice.line, así que tendremos que crearlo.

Clases Python

# -*- encoding: utf-8 -*-
############################################################################
#    (c) 2015 German Ponce Dominguez
#    All Rights Reserved.
#    info skype: german_442 email: (german.ponce@outlook.com)
############################################################################

from openerp.osv import fields, osv
from openerp.tools.translate import _
from datetime import datetime, timedelta
from openerp import SUPERUSER_ID

class account_invoice_line(osv.osv):
    _name = 'account.invoice.line'
    _inherit ='account.invoice.line'
    _columns = {

        }

    _defaults = {
        }

    def subtotal_manual(self, price, qty):
        return price*qty

    En la clase python account_invoice_line, se añade el metodo que queremos ejecutar, esto sera variable de acuerdo al objecto en donde quieran ejecutar su funcion.


4 comentarios:

  1. Hola, German podríamos descargar tu ejemplo para ayudarnos a entender mas.
    Gracias...

    ResponderEliminar
    Respuestas
    1. Hola Richard, para probarlo solo debes modificar la vista Qweb del Reporte de Factura y agregar mediante un pequeño codigo la herencia de la ultima parte, con esto funciona perfecto...

      Saludos

      Eliminar
  2. Hola German
    Antes No Me salia este error Pero hora me sale este herror nose porque
    http://localhost:8069/web/login
    Internal Server Error

    The server encountered an internal error and was unable to complete your request. Either the server is overloaded or there is an error in the application.
    Por favor Espero tu respuesta

    ResponderEliminar
    Respuestas
    1. Que tal Juanca puede ser algún error de librería, debes revisar el log del Sistema.

      Saludos

      Eliminar