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.


11 comentarios:

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

    ResponderBorrar
    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

      Borrar
  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

    ResponderBorrar
    Respuestas
    1. Que tal Juanca puede ser algĆŗn error de librerĆ­a, debes revisar el log del Sistema.

      Saludos

      Borrar
  3. Buenas noches, hice esto tal cual y me dice AttributeError: 'account.invoice.line' object has no attribute 'subtotal_manual' porque?...no entiendo...ya estoy desesperada necesito ayuda!!!! por fis

    ResponderBorrar
    Respuestas
    1. Que tal Joyza, si no te reconoce el metodo puede ser que la herencia no este correcta o que al llamar desde Qweb no lo hagas con la variable de iteraciĆ³n correcta. Podrias comentar como lo estas mandando a ejecutar en tu Reporte ?

      Borrar
    2. Hola en mi modelo hice esa funcion tal cual exactamente igual y lo llame tal cual como lo tienes en mi xml....si creo mi problema es el qweb.

      En mi report.py cree esto
      from odoo import api, models

      class ParticularReport(models.AbstractModel):
      _name = 'report.prueba.accoun_invoice_factura'
      @api.model
      def render_html(self, docids, data=None):
      report_obj = self.env['report']
      report = report_obj._get_report_from_name('module.accoun_invoice_factura')
      docargs = {
      'doc_ids': docids,
      'doc_model': report.model,
      'docs': self,
      }
      return report_obj.render('module.report_name', docargs)

      pero sinceramente por donde paso mi metodo o en mi mismo report.py en mi carpeta reporte coloco mi funcion? o la hago en mi modelo?...de verdad estoy confundida y desesperada porque lo que quiero es llamar mi metodo para calcular un % descuento....agradecida

      Borrar
    3. Tendras algun correo y pueda enviarte mi modulito y me puedas ayudar, solo necesito es como la guia para terminar de enteder je

      Borrar
  4. Buenas tardes, yo necesito bajarla tabla de subtotal al final de la pƔgina. me puede ayudar por favor?

    ResponderBorrar