diff --git a/addons/pos_sale/report/sale_report.py b/addons/pos_sale/report/sale_report.py index ac9bed1fad6ef0cebcd88c660d09ede9db06ce08..cda5e0b6d330a9698bdc96a58228ef219d2065c7 100644 --- a/addons/pos_sale/report/sale_report.py +++ b/addons/pos_sale/report/sale_report.py @@ -19,9 +19,9 @@ class SaleReport(models.Model): ('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) - + def _select_pos(self, fields=None): + if not fields: + fields = {} select_ = ''' MIN(l.id) AS id, l.product_id AS product_id, @@ -62,7 +62,9 @@ class SaleReport(models.Model): for field in fields.keys(): select_ += ', NULL AS %s' % (field) + return select_ + def _from_pos(self): from_ = ''' pos_order_line l join pos_order pos on (l.order_id=pos.id) @@ -74,7 +76,9 @@ class SaleReport(models.Model): LEFT JOIN pos_config config ON (config.id = session.config_id) left join product_pricelist pp on (pos.pricelist_id = pp.id) ''' + return from_ + def _group_by_pos(self): groupby_ = ''' l.order_id, l.product_id, @@ -97,6 +101,13 @@ class SaleReport(models.Model): u.factor, pos.crm_team_id ''' - current = '(SELECT %s FROM %s GROUP BY %s)' % (select_, from_, groupby_) + return groupby_ + + def _query(self, with_clause='', fields=None, groupby='', from_clause=''): + if not fields: + fields = {} + res = super()._query(with_clause, fields, groupby, from_clause) + current = '(SELECT %s FROM %s GROUP BY %s)' % \ + (self._select_pos(fields), self._from_pos(), self._group_by_pos()) return '%s UNION ALL %s' % (res, current) diff --git a/addons/sale/report/sale_report.py b/addons/sale/report/sale_report.py index 76ec14762917a4e2e8db19fd412a33b0779bc622..db5e9c71db5f2eebae78508833fd3c153089da99 100644 --- a/addons/sale/report/sale_report.py +++ b/addons/sale/report/sale_report.py @@ -58,9 +58,9 @@ class SaleReport(models.Model): order_id = fields.Many2one('sale.order', 'Order #', readonly=True) - def _query(self, with_clause='', fields={}, groupby='', from_clause=''): - with_ = ("WITH %s" % with_clause) if with_clause else "" - + def _select_sale(self, fields=None): + if not fields: + fields = {} select_ = """ coalesce(min(l.id), -s.id) as id, l.product_id as product_id, @@ -101,7 +101,9 @@ class SaleReport(models.Model): for field in fields.values(): select_ += field + return select_ + def _from_sale(self, from_clause=''): from_ = """ sale_order_line l right outer join sale_order s on (s.id=l.order_id) @@ -113,7 +115,9 @@ class SaleReport(models.Model): left join product_pricelist pp on (s.pricelist_id = pp.id) %s """ % from_clause + return from_ + def _group_by_sale(self, groupby=''): groupby_ = """ l.product_id, l.order_id, @@ -138,8 +142,14 @@ class SaleReport(models.Model): l.discount, s.id %s """ % (groupby) + return groupby_ - return '%s (SELECT %s FROM %s GROUP BY %s)' % (with_, select_, from_, groupby_) + def _query(self, with_clause='', fields=None, groupby='', from_clause=''): + if not fields: + fields = {} + with_ = ("WITH %s" % with_clause) if with_clause else "" + return '%s (SELECT %s FROM %s GROUP BY %s)' % \ + (with_, self._select_sale(fields), self._from_sale(from_clause), self._group_by_sale(groupby)) def init(self): # self._table = sale_report