From 2c131d5819d0479ff33380809e82a1d3ad0146f2 Mon Sep 17 00:00:00 2001 From: Mihir Kandoi Date: Sat, 1 Aug 2026 14:05:22 +0530 Subject: [PATCH] test(job_card): cover the completion qty split guard --- .../manufacturing/doctype/job_card/job_card.py | 4 +--- .../doctype/job_card/test_job_card.py | 15 +++++++++++++++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/erpnext/manufacturing/doctype/job_card/job_card.py b/erpnext/manufacturing/doctype/job_card/job_card.py index 579a7aa0036..3f17822ebe5 100644 --- a/erpnext/manufacturing/doctype/job_card/job_card.py +++ b/erpnext/manufacturing/doctype/job_card/job_card.py @@ -1708,9 +1708,7 @@ class JobCard(Document): return precision = self.precision("total_completed_qty") - accounted_qty = ( - flt(kwargs.qty) + flt(kwargs.pending_qty) + flt(kwargs.process_loss_qty) - ) + accounted_qty = flt(kwargs.qty) + flt(kwargs.pending_qty) + flt(kwargs.process_loss_qty) if flt(accounted_qty, precision) == flt(kwargs.for_quantity, precision): return diff --git a/erpnext/manufacturing/doctype/job_card/test_job_card.py b/erpnext/manufacturing/doctype/job_card/test_job_card.py index d38f55ff653..8762a6a3d13 100644 --- a/erpnext/manufacturing/doctype/job_card/test_job_card.py +++ b/erpnext/manufacturing/doctype/job_card/test_job_card.py @@ -2228,6 +2228,21 @@ class TestJobCardLogic(ERPNextTestSuite): frappe.ValidationError, jc.validate_complete_job_card_qty, frappe._dict(pending_qty=10) ) + def test_completion_qty_split_must_add_up(self): + jc = frappe.new_doc("Job Card") + jc.for_quantity = 5 + + # 3 completed + 2 pending + 0 lost == 5 to manufacture -> passes + jc.validate_complete_job_card_qty( + frappe._dict(for_quantity=5, qty=3, pending_qty=2, process_loss_qty=0) + ) + + self.assertRaises( + frappe.ValidationError, + jc.validate_complete_job_card_qty, + frappe._dict(for_quantity=3, qty=3, pending_qty=2, process_loss_qty=0), + ) + def test_completed_qty_must_reconcile_with_for_quantity(self): jc = frappe.new_doc("Job Card") jc.for_quantity = 10