analytic_invoice_report.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970
  1. # -*- encoding: utf-8 -*-
  2. from openerp import models, fields
  3. from openerp import tools
  4. class analytic_invoice_report(models.Model):
  5. _name = 'analytic.invoice.report'
  6. _description = 'Invoices aggregated report'
  7. _auto = False
  8. _rec_name = 'date'
  9. _order = 'date desc'
  10. date = fields.Date(string='Order Date', readonly=True)
  11. product_id = fields.Many2one('product.product', string='Variantes', readonly=True)
  12. product_tmpl_id = fields.Many2one('product.template', string='Producto', readonly=True)
  13. origin = fields.Char(string='Origin', readonly=True)
  14. qty = fields.Float(string='Cantidad', readonly=True)
  15. number = fields.Char(string='Venta', readonly=True)
  16. store_id = fields.Many2one('res.store', string='Sucursal', readonly=True)
  17. subtotal_taxed = fields.Float(string='total', readonly=True)
  18. standard_price = fields.Float(string='Costo', readonly=True)
  19. utility = fields.Float(string='Utilidad', readonly=True)
  20. categ_id = fields.Many2one('product.category', string='Categoría', readonly=True)
  21. # WARNING: this code doesn't handle uom conversion for the moment
  22. def _analytic_invoice_select(self):
  23. select = """
  24. SELECT
  25. invoice_line.id AS id,
  26. invoice.number AS number,
  27. invoice.date_invoice AS date,
  28. invoice_line.product_id AS product_id,
  29. product.product_tmpl_id AS product_tmpl_id,
  30. invoice.company_id AS company_id,
  31. 'Pedido de Venta' AS origin,
  32. invoice_line.quantity AS qty,
  33. journal.store_id AS store_id,
  34. (invoice_line.quantity * invoice_line.price_unit) AS subtotal_untaxed,
  35. (invoice_line.quantity * invoice_line.price_unit) AS subtotal_taxed,
  36. (invoice_line.price_unit) AS standard_price,
  37. ((invoice_line.quantity * invoice_line.price_unit)) AS utility,
  38. template.categ_id
  39. FROM account_invoice_line AS invoice_line
  40. LEFT JOIN account_invoice AS invoice
  41. ON invoice.id = invoice_line.invoice_id
  42. LEFT JOIN product_product AS product
  43. ON product.id = invoice_line.product_id
  44. LEFT JOIN product_template AS template
  45. ON template.id = product.product_tmpl_id
  46. LEFT JOIN res_store_journal_rel as journal
  47. ON journal.journal_id = invoice.journal_id
  48. LEFT JOIN product_price_history AS history
  49. ON history.product_template_id = product.product_tmpl_id
  50. WHERE invoice.state IN ('open', 'paid')
  51. AND invoice.type = 'out_invoice'
  52. GROUP BY
  53. invoice_line.id,
  54. invoice.date_invoice,
  55. invoice.number,
  56. invoice_line.product_id,
  57. product.product_tmpl_id,
  58. invoice.company_id,
  59. journal.store_id,
  60. invoice_line.price_unit,
  61. template.categ_id
  62. """
  63. return select
  64. def init(self, cr):
  65. tools.drop_view_if_exists(cr, self._table)
  66. cr.execute("CREATE OR REPLACE VIEW %s AS (%s)" % (self._table, self._analytic_invoice_select()))