diff --git a/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js b/addons/pos_sale/static/src/js/OrderManagementScreen/SaleOrderManagementScreen.js
index f13542a2df59f41de01524cbec10776b4401beff..89fc720473a4db7746dd4e4be7bf3a3387e1bb5a 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 8b2db558ad0d7f846a60c82b6e2e2c18933b9f9d..310f2bc79122394495f728522e3079a1dae077c3 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',