123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137 |
- # -*- encoding: utf-8 -*-
- from openerp import models, fields
- from openerp import tools
- class pos_sale_report(models.Model):
- _name = 'pos.sale.report'
- _description = 'POS orders and Sale orders 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)
- user_id = fields.Many2one(
- 'res.users', string='User', readonly=True) # Add this line for user_id
- # company_id = fields.Many2one(
- # 'res.company', string='Company', 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 _sale_order_select(self):
- select = """
- SELECT
- --min(invoice_line.id)*-1 AS id,
- invoice_line.id*-1 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.user_id AS user_id,
- invoice.company_id AS company_id,
- 'Pedido de Venta' AS origin,
- --sum(invoice_line.quantity) AS qty,
- invoice_line.quantity AS qty,
- journal.store_id AS store_id,
- invoice_line.price_subtotal AS subtotal_untaxed,
- --invoice_line.discount,
- --((invoice_line.quantity * invoice_line.price_unit) * invoice_line.discount) / 100 AS amount_discount,
- (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 res_users AS users
- ON users.id = invoice.user_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.user_id,
- invoice.company_id,
- journal.store_id,
- invoice_line.price_subtotal,
- template.categ_id
- """
- return select
- def _pos_order_select(self):
- select = """
- SELECT
- --min(pol.id) AS id,
- pol.id AS id,
- po.name AS number,
- po.date_order::date AS date,
- pol.product_id AS product_id,
- product.product_tmpl_id AS product_tmpl_id,
- po.user_id AS user_id,
- po.company_id AS company_id,
- 'TPV' AS origin,
- --sum(pol.qty) AS qty,
- pol.qty AS qty,
- journal.store_id AS store_id,
- pol.price_subtotal_incl AS subtotal_untaxed,
- pol.price_subtotal_incl AS subtotal_taxed,
- (array_agg(history.cost ORDER BY history.id DESC))[1] * pol.qty AS standard_price,
- (pol.price_subtotal_incl - ((array_agg(history.cost ORDER BY history.id DESC))[1] * pol.qty)) AS utility,
- template.categ_id
- FROM pos_order_line AS pol
- LEFT JOIN pos_order AS po
- ON po.id = pol.order_id
- LEFT JOIN res_users AS users
- ON users.id = po.user_id
- LEFT JOIN product_product AS product
- ON product.id = pol.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 = po.sale_journal
- LEFT JOIN product_price_history AS history
- ON history.product_template_id = product.product_tmpl_id
- WHERE po.state IN ('paid', 'done', 'invoiced')
- GROUP BY
- pol.id,
- po.name,
- po.date_order,
- pol.product_id,
- product.product_tmpl_id,
- po.user_id,
- po.company_id,
- journal.store_id,
- pol.price_subtotal_incl,
- 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 UNION %s)" % (
- self._table, self._sale_order_select(), self._pos_order_select()))
|