|
@@ -0,0 +1,70 @@
|
|
|
|
+# -*- encoding: utf-8 -*-
|
|
|
|
+from openerp import models, fields
|
|
|
|
+from openerp import tools
|
|
|
|
+
|
|
|
|
+class analytic_invoice_report(models.Model):
|
|
|
|
+ _name = 'analytic.invoice.report'
|
|
|
|
+ _description = 'Invoices aggregated report'
|
|
|
|
+ _auto = False
|
|
|
|
+ _rec_name = 'date'
|
|
|
|
+ _order = 'date desc'
|
|
|
|
+
|
|
|
|
+ date = fields.Date(string='Order Date', readonly=True)
|
|
|
|
+ product_id = fields.Many2one('product.product', string='Variantes', readonly=True)
|
|
|
|
+ product_tmpl_id = fields.Many2one('product.template', string='Producto', readonly=True)
|
|
|
|
+ origin = fields.Char(string='Origin', readonly=True)
|
|
|
|
+ qty = fields.Float(string='Cantidad', readonly=True)
|
|
|
|
+ number = fields.Char(string='Venta', readonly=True)
|
|
|
|
+ store_id = fields.Many2one('res.store', string='Sucursal', readonly=True)
|
|
|
|
+ subtotal_taxed = fields.Float(string='total', readonly=True)
|
|
|
|
+ standard_price = fields.Float(string='Costo', readonly=True)
|
|
|
|
+ utility = fields.Float(string='Utilidad', readonly=True)
|
|
|
|
+ categ_id = fields.Many2one('product.category', string='Categoría', readonly=True)
|
|
|
|
+
|
|
|
|
+ # WARNING: this code doesn't handle uom conversion for the moment
|
|
|
|
+ def _analytic_invoice_select(self):
|
|
|
|
+ select = """
|
|
|
|
+ SELECT
|
|
|
|
+ invoice_line.id AS id,
|
|
|
|
+ invoice.number AS number,
|
|
|
|
+ invoice.date_invoice AS date,
|
|
|
|
+ invoice_line.product_id AS product_id,
|
|
|
|
+ product.product_tmpl_id AS product_tmpl_id,
|
|
|
|
+ invoice.company_id AS company_id,
|
|
|
|
+ 'Pedido de Venta' AS origin,
|
|
|
|
+ invoice_line.quantity AS qty,
|
|
|
|
+ journal.store_id AS store_id,
|
|
|
|
+ invoice_line.price_subtotal AS subtotal_untaxed,
|
|
|
|
+ (invoice_line.quantity * invoice_line.price_unit) - (((invoice_line.quantity * invoice_line.price_unit) * invoice_line.discount) / 100) AS subtotal_taxed,
|
|
|
|
+ (array_agg(history.cost ORDER BY history.id DESC))[1] * invoice_line.quantity AS standard_price,
|
|
|
|
+ ((invoice_line.quantity * invoice_line.price_unit) - (((invoice_line.quantity * invoice_line.price_unit) * invoice_line.discount) / 100) - ((array_agg(history.cost ORDER BY history.id DESC))[1] * invoice_line.quantity)) AS utility,
|
|
|
|
+ template.categ_id
|
|
|
|
+ FROM account_invoice_line AS invoice_line
|
|
|
|
+ LEFT JOIN account_invoice AS invoice
|
|
|
|
+ ON invoice.id = invoice_line.invoice_id
|
|
|
|
+ LEFT JOIN product_product AS product
|
|
|
|
+ ON product.id = invoice_line.product_id
|
|
|
|
+ LEFT JOIN product_template AS template
|
|
|
|
+ ON template.id = product.product_tmpl_id
|
|
|
|
+ LEFT JOIN res_store_journal_rel as journal
|
|
|
|
+ ON journal.journal_id = invoice.journal_id
|
|
|
|
+ LEFT JOIN product_price_history AS history
|
|
|
|
+ ON history.product_template_id = product.product_tmpl_id
|
|
|
|
+ WHERE invoice.state IN ('open', 'paid')
|
|
|
|
+ AND invoice.type = 'out_invoice'
|
|
|
|
+ GROUP BY
|
|
|
|
+ invoice_line.id,
|
|
|
|
+ invoice.date_invoice,
|
|
|
|
+ invoice.number,
|
|
|
|
+ invoice_line.product_id,
|
|
|
|
+ product.product_tmpl_id,
|
|
|
|
+ invoice.company_id,
|
|
|
|
+ journal.store_id,
|
|
|
|
+ invoice_line.price_subtotal,
|
|
|
|
+ template.categ_id
|
|
|
|
+ """
|
|
|
|
+ return select
|
|
|
|
+
|
|
|
|
+ def init(self, cr):
|
|
|
|
+ tools.drop_view_if_exists(cr, self._table)
|
|
|
|
+ cr.execute("CREATE OR REPLACE VIEW %s AS (%s)" % (self._table, self._analytic_invoice_select()))
|