From 06cfed738e86e2505624c3df6aef2d4d90916cd5 Mon Sep 17 00:00:00 2001 From: roen-odoo Date: Mon, 4 Mar 2024 13:52:25 +0000 Subject: [PATCH] [FIX] pos_sale: take "done" orders into account for the sales count Current behavior: Orders from a closed pos that were not invoiced are not taken into account in the sales count (can be seen in the "Sales" smart button) Steps to reproduce: - Create a new product P1 - Sell this product in the PoS without invoicing it - Close the PoS session - Go to the "Sales" smart button of the product P1 - You will see that the sales count is not incremented opw-3726153 closes odoo/odoo#156926 X-original-commit: a579d9f00b0a9bc51a872925ae41bc285ba3e155 Signed-off-by: Vlad Stroia (vlst) Signed-off-by: Robin Engels (roen) --- addons/pos_sale/report/sale_report.py | 2 +- addons/pos_sale/tests/test_pos_sale_flow.py | 36 +++++++++++++++++++++ 2 files changed, 37 insertions(+), 1 deletion(-) diff --git a/addons/pos_sale/report/sale_report.py b/addons/pos_sale/report/sale_report.py index b5007ba0f7b..0e56aff8509 100644 --- a/addons/pos_sale/report/sale_report.py +++ b/addons/pos_sale/report/sale_report.py @@ -10,7 +10,7 @@ class SaleReport(models.Model): @api.model def _get_done_states(self): done_states = super()._get_done_states() - done_states.extend(['paid', 'invoiced']) + done_states.extend(['paid', 'invoiced', 'done']) return done_states state = fields.Selection( diff --git a/addons/pos_sale/tests/test_pos_sale_flow.py b/addons/pos_sale/tests/test_pos_sale_flow.py index 31264f50966..e0282f592f9 100644 --- a/addons/pos_sale/tests/test_pos_sale_flow.py +++ b/addons/pos_sale/tests/test_pos_sale_flow.py @@ -389,3 +389,39 @@ class TestPoSSale(TestPointOfSaleHttpCommon): pos_order = self.env['pos.order'].search([], order='id desc', limit=1) self.assertTrue(pos_order.account_move.line_ids[0].analytic_distribution, "Analytic distribution should be set on the invoice line") self.assertEqual(pos_order.account_move.line_ids[0].analytic_distribution.get(str(self.analytic_account_partner_a_1.id)), 100) + + def test_order_sales_count(self): + self.main_pos_config.open_ui() + current_session = self.main_pos_config.current_session_id + partner_1 = self.env['res.partner'].create({'name': 'Test Partner'}) + order = self.env['pos.order'].create({ + 'company_id': self.env.company.id, + 'session_id': current_session.id, + 'partner_id': partner_1.id, + 'pricelist_id': partner_1.property_product_pricelist.id, + 'lines': [(0, 0, { + 'name': "OL/0001", + 'product_id': self.desk_pad.id, + 'price_unit': self.desk_pad.lst_price, + 'discount': 0.0, + 'qty': 1.0, + 'tax_ids': [], + 'price_subtotal': self.desk_pad.lst_price, + 'price_subtotal_incl': self.desk_pad.lst_price, + })], + 'amount_total': self.desk_pad.lst_price, + 'amount_tax': 0.0, + 'amount_paid': 0.0, + 'amount_return': 0.0, + 'last_order_preparation_change': '{}' + }) + payment_context = {"active_ids": order.ids, "active_id": order.id} + order_payment = self.env['pos.make.payment'].with_context(**payment_context).create({ + 'amount': order.amount_total, + 'payment_method_id': current_session.payment_method_ids[0].id, + }) + order_payment.with_context(**payment_context).check() + + current_session.close_session_from_ui() + self.env.flush_all() + self.assertEqual(self.desk_pad.sales_count, 1)