diff --git a/addons/sale_mrp/models/sale.py b/addons/sale_mrp/models/sale.py
index 87bf820240a58c1373332700b37842e49da6ca52..0c401ce99b110d52d032a020c1f84cb1bf1d3cac 100644
--- a/addons/sale_mrp/models/sale.py
+++ b/addons/sale_mrp/models/sale.py
@@ -14,16 +14,21 @@ class SaleOrder(models.Model):
 
     @api.depends('procurement_group_id.stock_move_ids.created_production_id.procurement_group_id.mrp_production_ids')
     def _compute_mrp_production_count(self):
-        data = self.env['procurement.group'].read_group([('sale_id', 'in', self.ids), ('mrp_production_ids', '!=', False)], ['id'], ['sale_id'])
+        data = self.env['procurement.group'].read_group([('sale_id', 'in', self.ids)], ['ids:array_agg(id)'], ['sale_id'])
         mrp_count = dict()
         for item in data:
-            mrp_count[item['sale_id'][0]] = item['sale_id_count']
+            procurement_groups = self.env['procurement.group'].browse(item['ids'])
+            mrp_count[item['sale_id'][0]] = len(
+                set(procurement_groups.stock_move_ids.created_production_id.ids) |
+                set(procurement_groups.mrp_production_ids.ids))
         for sale in self:
             sale.mrp_production_count = mrp_count.get(sale.id)
 
     def action_view_mrp_production(self):
         self.ensure_one()
-        mrp_production_ids = self.env['mrp.production'].search([('procurement_group_id.sale_id', '=', self.id)]).ids
+        procurement_groups = self.env['procurement.group'].search([('sale_id', 'in', self.ids)])
+        mrp_production_ids = set(procurement_groups.stock_move_ids.created_production_id.ids) |\
+            set(procurement_groups.mrp_production_ids.ids)
         action = {
             'res_model': 'mrp.production',
             'type': 'ir.actions.act_window',
@@ -31,12 +36,12 @@ class SaleOrder(models.Model):
         if len(mrp_production_ids) == 1:
             action.update({
                 'view_mode': 'form',
-                'res_id': mrp_production_ids[0],
+                'res_id': mrp_production_ids.pop(),
             })
         else:
             action.update({
                 'name': _("Manufacturing Orders Generated by %s", self.name),
-                'domain': [('id', 'in', mrp_production_ids)],
+                'domain': [('id', 'in', list(mrp_production_ids))],
                 'view_mode': 'tree,form',
             })
         return action
diff --git a/addons/sale_mrp/tests/test_multistep_manufacturing.py b/addons/sale_mrp/tests/test_multistep_manufacturing.py
index b0ab1d0988e78545bf2d68c675186e3b72bab37c..13b5e43191527d85e2406c7a9ed9c49921feb507 100644
--- a/addons/sale_mrp/tests/test_multistep_manufacturing.py
+++ b/addons/sale_mrp/tests/test_multistep_manufacturing.py
@@ -82,6 +82,11 @@ class TestMultistepManufacturing(TestMrpCommon):
         self.sale_order.action_confirm()
         # Get manufactured procurement
         mo_procurement = self.MrpProduction.search([('origin', '=', self.sale_order.name)])
+        mo = self.env['mrp.production'].search([
+            ('origin', '=', self.sale_order.name),
+            ('product_id', '=', self.product_manu.id),
+        ])
+        self.assertEqual(self.sale_order.action_view_mrp_production()['res_id'], mo.id)
         self.assertEqual(mo_procurement.location_src_id.id, self.warehouse.pbm_loc_id.id, "Source loction does not match.")
         self.assertEqual(mo_procurement.location_dest_id.id, self.warehouse.lot_stock_id.id, "Destination location does not match.")
 
diff --git a/addons/sale_mrp/tests/test_sale_mrp_flow.py b/addons/sale_mrp/tests/test_sale_mrp_flow.py
index 8787610642ba89c177fa447d1fcf0ea6513013ba..4c9bde734de97dd69851982b186d646d5f2a9dd9 100644
--- a/addons/sale_mrp/tests/test_sale_mrp_flow.py
+++ b/addons/sale_mrp/tests/test_sale_mrp_flow.py
@@ -295,6 +295,9 @@ class TestSaleMrpFlow(ValuationReconciliationTestCommon):
         order = order_form.save()
         order.action_confirm()
 
+        # Verify buttons are working as expected
+        self.assertEqual(order.mrp_production_count, 1, "User should see the closest manufacture order in the smart button")
+
         # ===============================================================================
         #  Sales order of 10 Dozen product A should create production order
         #  like ..
diff --git a/addons/sale_mrp/tests/test_sale_mrp_procurement.py b/addons/sale_mrp/tests/test_sale_mrp_procurement.py
index 4de6c6d0a4cf19770211b76dc1b0af78891f5bdf..513f581155deba7a9a98bebcebf50f1199aed2b9 100644
--- a/addons/sale_mrp/tests/test_sale_mrp_procurement.py
+++ b/addons/sale_mrp/tests/test_sale_mrp_procurement.py
@@ -69,6 +69,9 @@ class TestSaleMrpProcurement(TransactionCase):
         mo = self.env['mrp.production'].search([('origin', 'like', sale_order_so0.name)], limit=1)
         self.assertTrue(mo, 'Manufacturing order has not been generated')
 
+        # Check the mo is displayed on the so
+        self.assertEqual(mo.id, sale_order_so0.action_view_mrp_production()['res_id'])
+
     def test_sale_mrp_pickings(self):
         """ Test sale of multiple mrp products in MTO
         to avoid generating multiple deliveries
@@ -162,6 +165,9 @@ class TestSaleMrpProcurement(TransactionCase):
 
         sale_order_so0.action_confirm()
 
+        # Verify buttons are working as expected
+        self.assertEqual(sale_order_so0.mrp_production_count, 2, "User should see the correct number of manufacture orders in smart button")
+
         pickings = sale_order_so0.picking_ids
 
         # One delivery...