diff options
| author | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
|---|---|---|
| committer | stephanchrst <stephanchrst@gmail.com> | 2022-05-10 21:51:50 +0700 |
| commit | 3751379f1e9a4c215fb6eb898b4ccc67659b9ace (patch) | |
| tree | a44932296ef4a9b71d5f010906253d8c53727726 /addons/pos_sale/report | |
| parent | 0a15094050bfde69a06d6eff798e9a8ddf2b8c21 (diff) | |
initial commit 2
Diffstat (limited to 'addons/pos_sale/report')
| -rw-r--r-- | addons/pos_sale/report/__init__.py | 4 | ||||
| -rw-r--r-- | addons/pos_sale/report/sale_report.py | 102 |
2 files changed, 106 insertions, 0 deletions
diff --git a/addons/pos_sale/report/__init__.py b/addons/pos_sale/report/__init__.py new file mode 100644 index 00000000..7b0761d5 --- /dev/null +++ b/addons/pos_sale/report/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import sale_report diff --git a/addons/pos_sale/report/sale_report.py b/addons/pos_sale/report/sale_report.py new file mode 100644 index 00000000..ac9bed1f --- /dev/null +++ b/addons/pos_sale/report/sale_report.py @@ -0,0 +1,102 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from odoo import tools +from odoo import api, fields, models + + +class SaleReport(models.Model): + _inherit = "sale.report" + + @api.model + def _get_done_states(self): + done_states = super(SaleReport, self)._get_done_states() + done_states.extend(['pos_done', 'invoiced']) + return done_states + + state = fields.Selection(selection_add=[('pos_draft', 'New'), + ('paid', 'Paid'), + ('pos_done', 'Posted'), + ('invoiced', 'Invoiced')], string='Status', readonly=True) + + def _query(self, with_clause='', fields={}, groupby='', from_clause=''): + res = super(SaleReport, self)._query(with_clause, fields, groupby, from_clause) + + select_ = ''' + MIN(l.id) AS id, + l.product_id AS product_id, + t.uom_id AS product_uom, + sum(l.qty) AS product_uom_qty, + sum(l.qty) AS qty_delivered, + CASE WHEN pos.state = 'invoiced' THEN sum(l.qty) ELSE 0 END AS qty_invoiced, + CASE WHEN pos.state != 'invoiced' THEN sum(l.qty) ELSE 0 END AS qty_to_invoice, + SUM(l.price_subtotal_incl) / MIN(CASE COALESCE(pos.currency_rate, 0) WHEN 0 THEN 1.0 ELSE pos.currency_rate END) AS price_total, + SUM(l.price_subtotal) / MIN(CASE COALESCE(pos.currency_rate, 0) WHEN 0 THEN 1.0 ELSE pos.currency_rate END) AS price_subtotal, + (CASE WHEN pos.state != 'invoiced' THEN SUM(l.price_subtotal_incl) ELSE 0 END) / MIN(CASE COALESCE(pos.currency_rate, 0) WHEN 0 THEN 1.0 ELSE pos.currency_rate END) AS amount_to_invoice, + (CASE WHEN pos.state = 'invoiced' THEN SUM(l.price_subtotal_incl) ELSE 0 END) / MIN(CASE COALESCE(pos.currency_rate, 0) WHEN 0 THEN 1.0 ELSE pos.currency_rate END) AS amount_invoiced, + count(*) AS nbr, + pos.name AS name, + pos.date_order AS date, + CASE WHEN pos.state = 'draft' THEN 'pos_draft' WHEN pos.state = 'done' THEN 'pos_done' else pos.state END AS state, + pos.partner_id AS partner_id, + pos.user_id AS user_id, + pos.company_id AS company_id, + NULL AS campaign_id, + NULL AS medium_id, + NULL AS source_id, + extract(epoch from avg(date_trunc('day',pos.date_order)-date_trunc('day',pos.create_date)))/(24*60*60)::decimal(16,2) AS delay, + t.categ_id AS categ_id, + pos.pricelist_id AS pricelist_id, + NULL AS analytic_account_id, + pos.crm_team_id AS team_id, + p.product_tmpl_id, + partner.country_id AS country_id, + partner.industry_id AS industry_id, + partner.commercial_partner_id AS commercial_partner_id, + (sum(t.weight) * l.qty / u.factor) AS weight, + (sum(t.volume) * l.qty / u.factor) AS volume, + l.discount as discount, + sum((l.price_unit * l.discount * l.qty / 100.0 / CASE COALESCE(pos.currency_rate, 0) WHEN 0 THEN 1.0 ELSE pos.currency_rate END)) as discount_amount, + NULL as order_id + ''' + + for field in fields.keys(): + select_ += ', NULL AS %s' % (field) + + from_ = ''' + pos_order_line l + join pos_order pos on (l.order_id=pos.id) + left join res_partner partner ON (pos.partner_id = partner.id OR pos.partner_id = NULL) + left join product_product p on (l.product_id=p.id) + left join product_template t on (p.product_tmpl_id=t.id) + LEFT JOIN uom_uom u ON (u.id=t.uom_id) + LEFT JOIN pos_session session ON (session.id = pos.session_id) + LEFT JOIN pos_config config ON (config.id = session.config_id) + left join product_pricelist pp on (pos.pricelist_id = pp.id) + ''' + + groupby_ = ''' + l.order_id, + l.product_id, + l.price_unit, + l.discount, + l.qty, + t.uom_id, + t.categ_id, + pos.name, + pos.date_order, + pos.partner_id, + pos.user_id, + pos.state, + pos.company_id, + pos.pricelist_id, + p.product_tmpl_id, + partner.country_id, + partner.industry_id, + partner.commercial_partner_id, + u.factor, + pos.crm_team_id + ''' + current = '(SELECT %s FROM %s GROUP BY %s)' % (select_, from_, groupby_) + + return '%s UNION ALL %s' % (res, current) |
