2016-03-30 1 views
1

Je crée un rapport (vue QWEB) dans le modèle account.invoice et je souhaite résumer quelques champs pour chaque ligne de facture comme indiqué dans l'image suivante:Comment faire une somme de champs dans une vue Qweb?

enter image description here

Le problème est cette somme pas champs que je veux. Que devrais-je faire?

cantidad_producto = fields.Integer(string='Cantidad Producto', store=True, readonly=True, compute='cantidad_consolidado') 
total_precio_unitario = fields.Monetary(string='Total precio unitario', store=True, readonly=True, compute='cantidad_consolidado') 
total_precio_neto = fields.Monetary(string='Total Cantidad Producto', store=True, readonly=True, compute='cantidad_consolidado') 

Et ceci est ma fonction calculer dans le fichier account.invoice.py:

@api.one 
@api.depends('invoice_line_ids.quantity', 'invoice_line_ids.price_unit', 'invoice_line_ids.price_subtotal') 
def cantidad_consolidado(self): 
    self.cantidad_producto = sum(line.quantity for line in self.invoice_line_ids) 
    self.total_precio_unitario = sum(line.price_unit for line in self.invoice_line_ids) 
    self.total_precio_neto = sum(line.price_subtotal for line in self.invoice_line_ids 

Et enfin, voici mon code de la vue:

<p>Resumen</p> 
<table class="table table-bordered"> 
    <thead> 
    <tr> 
     <th class="text-center">Total Cantidad</th> 
     <th class="text-center">Total Precio Unitario</th> 
     <th class="text-center">Total Precio(Neto)</th> 
    </tr> 
    </thead> 
    <tbody class="invoice_tbody"> 
    <td class="text-center"> 
     <span t-esc="cantidad_producto" /> 
    </td> 
    <td class="text-center"> 
     <span t-esc="total_precio_unitario" /> 
    </td> 
    <td class="text-center"> 
     <span t-esc="total_precio_neto" /> 
    </td> 
    </tbody> 
</table> 

Pourquoi ne pas la somme champs dans le rapport? Quelqu'un pourrait me dire et m'aider s'il vous plaît.

Répondre

1

Vous devez définir une classe qui est héritée de report_sxw.rml_parse classe, dans cette classe, vous devez définir méthode init où vous devez ajouter votre nom de la méthode comme KEY de localcontext dictionnaire.

class sale_quotation_report(report_sxw.rml_parse): 

    def __init__(self, cr, uid, name, context): 
     super(sale_quotation_report, self).__init__(cr, uid, name, context=context) 
      self.localcontext.update({ 
        ‘get_total’: self._get_total, 
      }) 

    def _get_total(self, lines, field): 
     total = 0.0 
     for line in lines : 
      total += line.product_uom_qty or 0.0 
     return total 

Un besoin plus de classe à définir qui est héritée de osv.AbstractModel

class report_saleorderqweb(osv.AbstractModel): 
    _name = ‘module_name.report_sale_order_qweb’ 
    _inherit = ‘report.abstract_report’ 
    _template = ‘module_name.report_sale_order_qweb’ 
    _wrapped_report_class = sale_quotation_report 

Here, 

_name = ‘report.<module_name>.<report_name>’ 
_inherit = ‘report.abstract_report’ 
_template = ‘<module_name>.<report_name>’ 
_wrapped_report_class = <parser_class_name> 

Et enfin appeler cette méthode à partir du modèle

<t t-foreach=”docs” t-as=”o”> 
    <span t-esc=”get_total(o.order_line)”/> 
</t> 

Vous pouvez consulter Steps to create Qweb report

+0

Le lien n'est plus disponible. – Zety