From 008918ce867eaa1a0c95211398473ad0e65848e7 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Tue, 11 Aug 2026 13:14:38 +0530 Subject: [PATCH] test: job card start and completion blocked until material transfer (cherry picked from commit c95705dc64489069d4b7042700f5a7b0b4620168) # Conflicts: # erpnext/manufacturing/doctype/job_card/test_job_card.py --- .../doctype/job_card/test_job_card.py | 29 +++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index a50d0cba62b..ea87a89022f 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -249,7 +249,36 @@ class TestJobCard(FrappeTestCase): # JC is Completed with excess transfer self.assertEqual(job_card.status, "Completed") +<<<<<<< HEAD @change_settings("Manufacturing Settings", {"job_card_excess_transfer": 0}) +======= + def test_job_card_actions_blocked_until_material_transfer(self): + "Start and Complete must wait for the transfer when RMs move against Job Card." + self.transfer_material_against = "Job Card" + self.source_warehouse = "Stores - _TC" + + self.generate_required_stock(self.work_order) + job_card = frappe.get_last_doc("Job Card", {"work_order": self.work_order.name}) + + self.assertRaises(frappe.ValidationError, job_card.start_timer, start_time=now()) + self.assertRaises(frappe.ValidationError, job_card.complete_job_card, qty=2, for_quantity=2) + + transfer_entry = make_stock_entry_from_jc(job_card.name) + transfer_entry.insert() + transfer_entry.submit() + + job_card.reload() + job_card.append("time_logs", {"from_time": "2024-03-01 08:00:00"}) + job_card.save() + job_card.complete_job_card( + qty=2, for_quantity=2, pending_qty=0, process_loss_qty=0, end_time="2024-03-01 09:00:00" + ) + + job_card.reload() + self.assertEqual(flt(job_card.total_completed_qty), 2) + + @ERPNextTestSuite.change_settings("Manufacturing Settings", {"job_card_excess_transfer": 0}) +>>>>>>> c95705dc64 (test: job card start and completion blocked until material transfer) def test_job_card_excess_material_transfer_block(self): self.transfer_material_against = "Job Card" self.source_warehouse = "Stores - _TC"