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.
Hola, German podrĆamos descargar tu ejemplo para ayudarnos a entender mas.
ResponderBorrarGracias...
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...
BorrarSaludos
Hola German
ResponderBorrarAntes 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
Que tal Juanca puede ser algĆŗn error de librerĆa, debes revisar el log del Sistema.
BorrarSaludos
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
ResponderBorrarQue 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 ?
BorrarHola 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.
BorrarEn 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
Tendras algun correo y pueda enviarte mi modulito y me puedas ayudar, solo necesito es como la guia para terminar de enteder je
BorrarFunciona tambien para odoo 10?
ResponderBorrarSi, funciona desde Odoo 8 hasta Odoo 10
BorrarBuenas tardes, yo necesito bajarla tabla de subtotal al final de la pƔgina. me puede ayudar por favor?
ResponderBorrar