mirror of
https://github.com/frappe/erpnext.git
synced 2026-08-13 22:51:49 +00:00
Merge pull request #58015 from mihir-kandoi/require-transfer-before-job-card-start-v15
fix: require material transfer before job card time logs (v15)
This commit is contained in:
@@ -296,7 +296,16 @@ frappe.ui.form.on("Job Card", {
|
||||
prepare_timer_buttons: function (frm) {
|
||||
frm.trigger("make_dashboard");
|
||||
|
||||
const transfer_pending =
|
||||
!frm.doc.is_corrective_job_card &&
|
||||
(frm.doc.items || []).length &&
|
||||
flt(frm.doc.transferred_qty) < flt(frm.doc.for_quantity);
|
||||
|
||||
if (!frm.doc.started_time && !frm.doc.current_time) {
|
||||
if (transfer_pending) {
|
||||
return;
|
||||
}
|
||||
|
||||
frm.add_custom_button(__("Start Job"), () => {
|
||||
if ((frm.doc.employee && !frm.doc.employee.length) || !frm.doc.employee) {
|
||||
frappe.prompt(
|
||||
|
||||
@@ -513,6 +513,8 @@ class JobCard(Document):
|
||||
)
|
||||
|
||||
def add_time_log(self, args):
|
||||
self.validate_transfer_qty()
|
||||
|
||||
last_row = []
|
||||
employees = args.employees
|
||||
if isinstance(employees, str):
|
||||
|
||||
@@ -249,6 +249,26 @@ class TestJobCard(FrappeTestCase):
|
||||
# JC is Completed with excess transfer
|
||||
self.assertEqual(job_card.status, "Completed")
|
||||
|
||||
def test_job_card_time_log_blocked_until_material_transfer(self):
|
||||
"Time logs 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.add_time_log, frappe._dict(start_time=now(), employees=[])
|
||||
)
|
||||
|
||||
transfer_entry = make_stock_entry_from_jc(job_card.name)
|
||||
transfer_entry.insert()
|
||||
transfer_entry.submit()
|
||||
|
||||
job_card.reload()
|
||||
job_card.add_time_log(frappe._dict(start_time=now(), employees=[]))
|
||||
self.assertTrue(job_card.time_logs)
|
||||
|
||||
@change_settings("Manufacturing Settings", {"job_card_excess_transfer": 0})
|
||||
def test_job_card_excess_material_transfer_block(self):
|
||||
self.transfer_material_against = "Job Card"
|
||||
|
||||
Reference in New Issue
Block a user