diff --git a/addons/pos_sale/report/sale_report.py b/addons/pos_sale/report/sale_report.py index 8238f5938ee..ac9bed1fad6 100644 --- a/addons/pos_sale/report/sale_report.py +++ b/addons/pos_sale/report/sale_report.py @@ -53,14 +53,8 @@ class SaleReport(models.Model): partner.country_id AS country_id, partner.industry_id AS industry_id, partner.commercial_partner_id AS commercial_partner_id, - (select sum(t.weight*l.qty/u.factor) from pos_order_line l - 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)) AS weight, - (select sum(t.volume*l.qty/u.factor) from pos_order_line l - 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)) AS volume, + (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 diff --git a/addons/pos_sale/tests/__init__.py b/addons/pos_sale/tests/__init__.py new file mode 100644 index 00000000000..5c825d0763a --- /dev/null +++ b/addons/pos_sale/tests/__init__.py @@ -0,0 +1,4 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +from . import test_pos_sale_report diff --git a/addons/pos_sale/tests/test_pos_sale_report.py b/addons/pos_sale/tests/test_pos_sale_report.py new file mode 100644 index 00000000000..1c1509ca4d4 --- /dev/null +++ b/addons/pos_sale/tests/test_pos_sale_report.py @@ -0,0 +1,39 @@ +# -*- coding: utf-8 -*- +# Part of Odoo. See LICENSE file for full copyright and licensing details. + +import odoo + +from odoo.addons.point_of_sale.tests.common import TestPoSCommon + + +@odoo.tests.tagged('post_install', '-at_install') +class TestPoSSaleReport(TestPoSCommon): + + def setUp(self): + super(TestPoSSaleReport, self).setUp() + self.config = self.basic_config + self.product0 = self.create_product('Product 0', self.categ_basic, 0.0, 0.0) + + def test_weight_and_volume(self): + self.product0.product_tmpl_id.weight = 3 + self.product0.product_tmpl_id.volume = 4 + + self.open_new_session() + session = self.pos_session + orders = [] + + # Process two orders + orders.append(self.create_ui_order_data([(self.product0, 3)])) + orders.append(self.create_ui_order_data([(self.product0, 1)])) + self.env['pos.order'].create_from_ui(orders) + # Duplicate the first line of the first order + session.order_ids[0].lines.copy() + + session.action_pos_session_closing_control() + + # Orders are reversed, so reports[0] will correspond to the second order + reports = self.env['sale.report'].sudo().search([('product_id', '=', self.product0.id)], order='id desc', limit=2) + self.assertEqual(reports[0].weight, 3) + self.assertEqual(reports[0].volume, 4) + self.assertEqual(reports[1].weight, 18) + self.assertEqual(reports[1].volume, 24)