From ed0e6e9cb6a9a83c27d7bb19f13cddde00983eaa Mon Sep 17 00:00:00 2001
From: roen-odoo <roen@odoo.com>
Date: Wed, 17 May 2023 09:21:23 +0000
Subject: [PATCH] [FIX] pos_sale: fix test and traceback when pos_loyalty is
 not installed

Current behavior:
When pos_loyalty is not installed,the
`test_settle_order_with_promotions` was failing. Also if the user tries
to settle an order he would get a traceback.

The issue was introduced here: https://github.com/odoo/odoo/pull/119673

opw-3247545

closes odoo/odoo#121603

Signed-off-by: Joseph Caburnay (jcb) <jcb@odoo.com>
---
 .../js/OrderManagementScreen/SaleOrderManagementScreen.js    | 2 +-
 addons/pos_sale/tests/test_pos_sale_flow.py                  | 5 +++++
 2 files changed, 6 insertions(+), 1 deletion(-)

diff --git a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js
index f13542a2df59..89fc720473a4 100644
--- a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js
+++ b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js
@@ -293,7 +293,7 @@ odoo.define('pos_sale.SaleOrderManagementScreen', function (require) {
             sale_order[0].amount_unpaid = saleOrdersAmountUnpaid[sale_order[0].id];
 
             const sale_lines = await this._getSOLines(sale_order[0].order_line);
-            const promo_products_to_remove = this.env.pos.promo_programs.flatMap(program => program.promo_code_usage === 'no_code_needed' ? program.discount_line_product_id[0] : []);
+            const promo_products_to_remove = this.env.pos.promo_programs ? this.env.pos.promo_programs.flatMap(program => program.promo_code_usage === 'no_code_needed' ? program.discount_line_product_id[0] : []) : [];
             sale_order[0].order_line = sale_lines.filter(line => !promo_products_to_remove.includes(line.product_id[0]));
 
             return sale_order[0];
diff --git a/addons/pos_sale/tests/test_pos_sale_flow.py b/addons/pos_sale/tests/test_pos_sale_flow.py
index 8b2db558ad0d..310f2bc79122 100644
--- a/addons/pos_sale/tests/test_pos_sale_flow.py
+++ b/addons/pos_sale/tests/test_pos_sale_flow.py
@@ -121,6 +121,11 @@ class TestPoSSale(TestPointOfSaleHttpCommon):
         self.assertEqual(orderline_product_b.move_ids.product_uom_qty, 1)
 
     def test_settle_order_with_promotions(self):
+        if not self.env["ir.module.module"].search([("name", "=", "pos_coupon"), ("state", "=", "installed")]):
+            self.skipTest("pos_coupon module is required for this test")
+        if not self.env["ir.module.module"].search([("name", "=", "sale_coupon"), ("state", "=", "installed")]):
+            self.skipTest("sale_coupon module is required for this test")
+
         self.promotion_program = self.env['coupon.program'].create({
             'name': '50% on current order',
             'program_type': 'promotion_program',
-- 
GitLab