diff --git a/stock_inventory_verification_request/models/stock_slot_verification_request.py b/stock_inventory_verification_request/models/stock_slot_verification_request.py index 33af4c0d3af0..64666b5309f3 100644 --- a/stock_inventory_verification_request/models/stock_slot_verification_request.py +++ b/stock_inventory_verification_request/models/stock_slot_verification_request.py @@ -100,6 +100,8 @@ def _compute_created_inventory_count(self): column1="slot_verification_request_id", column2="move_line_id", string="Involved Stock Moves", + compute="_compute_involved_move_lines", + store=False, ) involved_move_line_count = fields.Integer( compute="_compute_involved_move_line_count" @@ -110,6 +112,8 @@ def _compute_created_inventory_count(self): column1="slot_verification_request_id", column2="quant_id", string="Involved Inventory Quants", + compute="_compute_involved_quants", + store=False, ) involved_quant_count = fields.Integer(compute="_compute_involved_quant_count") created_inventory_ids = fields.One2many( @@ -120,6 +124,29 @@ def _compute_created_inventory_count(self): ) created_inventory_count = fields.Integer(compute="_compute_created_inventory_count") + @api.depends("location_id", "product_id", "lot_id", "state") + def _compute_involved_move_lines(self): + for rec in self: + # Only compute when state is 'open' to prevent irrelevant data accumulation. + # No need to accumulate movements for a 'solved' or 'cancelled' + # SVR a lot of time after resolution. + if rec.state == "open": + rec.involved_move_line_ids = self.env["stock.move.line"].search( + rec._get_involved_move_lines_domain() + ) + else: + rec.involved_move_line_ids = self.env["stock.move.line"] + + @api.depends("location_id", "product_id", "lot_id", "state") + def _compute_involved_quants(self): + for rec in self: + if rec.state == "open": + rec.involved_quant_ids = self.env["stock.quant"].search( + rec._get_involved_quants_domain() + ) + else: + rec.involved_quant_ids = self.env["stock.quant"] + def _get_involved_move_lines_domain(self): domain = [ "|", @@ -140,24 +167,8 @@ def _get_involved_quants_domain(self): domain.append(("lot_id", "=", self.lot_id.id)) return domain - def _get_involved_quants_and_locations(self): - involved_move_lines = self.env["stock.move.line"].search( - self._get_involved_move_lines_domain() - ) - involved_quants = self.env["stock.quant"].search( - self._get_involved_quants_domain() - ) - return involved_move_lines, involved_quants - def action_confirm(self): self.write({"state": "open"}) - for rec in self: - ( - involved_moves_lines, - involved_quants, - ) = rec._get_involved_quants_and_locations() - rec.involved_move_line_ids = involved_moves_lines - rec.involved_quant_ids = involved_quants return True def action_cancel(self): diff --git a/stock_inventory_verification_request/tests/test_verification_request.py b/stock_inventory_verification_request/tests/test_verification_request.py index ea96633c9c83..3df17dbea79e 100644 --- a/stock_inventory_verification_request/tests/test_verification_request.py +++ b/stock_inventory_verification_request/tests/test_verification_request.py @@ -76,7 +76,7 @@ def setUp(self): } ).action_apply_inventory() - def test_svr_creation(self): + def test_01_svr_creation(self): """Tests the creation of Slot Verification Requests.""" inventory = self.obj_inventory.create( { @@ -104,7 +104,7 @@ def test_svr_creation(self): for quant in inventory.stock_quant_ids: quant.action_open_svr() - def test_svr_workflow(self): + def test_02_svr_workflow(self): """Tests workflow of Slot Verification Request.""" test_svr = self.env["stock.slot.verification.request"].create( { @@ -135,7 +135,7 @@ def test_svr_workflow(self): "Slot Verification Request not marked as cancelled.", ) - def test_view_methods(self): + def test_03_view_methods(self): """Tests the methods used to handle de UI.""" test_svr = self.env["stock.slot.verification.request"].create( { @@ -152,7 +152,7 @@ def test_view_methods(self): test_svr.action_view_move_lines() test_svr.action_view_quants() - def test_svr_full_workflow(self): + def test_04_svr_full_workflow(self): test_svr = self.env["stock.slot.verification.request"].create( { "location_id": self.test_loc.id, @@ -182,7 +182,7 @@ def test_svr_full_workflow(self): "Slot Verification Request not marked as cancelled.", ) - def test_user_permissions_on_svr(self): + def test_05_user_permissions_on_svr(self): """Tests that users without the correct permissions cannot change SVR state.""" test_svr = self.env["stock.slot.verification.request"].create( { @@ -197,17 +197,69 @@ def test_user_permissions_on_svr(self): with self.assertRaises(AccessError): test_svr.with_user(self.user).action_solved() + def test_06_action_view_methods(self): + """Tests the view methods in Slot Verification Request.""" + svr = self.obj_svr.create( + { + "location_id": self.test_loc.id, + "state": "wait", + "product_id": self.product1.id, + } + ) + svr.action_view_move_lines() + svr.action_view_quants() + svr.action_create_inventory_adjustment() + svr.action_view_inventories() + + def test_07_involved_move_lines_compute(self): + move = self.obj_move.create( + { + "name": "Test Move", + "product_id": self.product1.id, + "product_uom_qty": 10, + "product_uom": self.product1.uom_id.id, + "location_id": self.test_loc.id, + "location_dest_id": self.test_loc.id, + } + ) + move._action_confirm() + move._action_assign() + move_line = move.move_line_ids[0] + test_svr = self.obj_svr.create( + { + "location_id": self.test_loc.id, + "state": "wait", + "product_id": self.product1.id, + } + ) + test_svr.action_confirm() + self.assertEqual( + test_svr.state, "open", "Slot Verification Request not confirmed properly." + ) + self.assertIn( + move_line, + test_svr.involved_move_line_ids, + "Move line not found in involved_move_line_ids", + ) -def test_action_view_methods(self): - """Tests the view methods in Slot Verification Request.""" - svr = self.obj_svr.create( - { - "location_id": self.test_loc.id, - "state": "wait", - "product_id": self.product1.id, - } - ) - svr.action_view_move_lines() - svr.action_view_quants() - svr.action_create_inventory_adjustment() - svr.action_view_inventories() + def test_08_involved_quants_compute(self): + self.quant3 = self.env["stock.quant"].create( + { + "location_id": self.test_loc.id, + "product_id": self.product1.id, + "quantity": 20.0, + } + ) + test_svr = self.obj_svr.create( + { + "location_id": self.test_loc.id, + "state": "wait", + "product_id": self.product1.id, + } + ) + test_svr.action_confirm() + self.assertIn( + self.quant3, + test_svr.involved_quant_ids, + "Quant3 not found in involved_quant_ids", + ) diff --git a/stock_inventory_verification_request/views/stock_slot_verification_request_view.xml b/stock_inventory_verification_request/views/stock_slot_verification_request_view.xml index 2dfd7575bbb3..afdbd0186ad7 100644 --- a/stock_inventory_verification_request/views/stock_slot_verification_request_view.xml +++ b/stock_inventory_verification_request/views/stock_slot_verification_request_view.xml @@ -11,6 +11,7 @@ + @@ -71,6 +72,7 @@ type="object" class="oe_stat_button" icon="fa-building-o" + attrs="{'invisible':[('created_inventory_count', '=', 0)]}" > - +