chore: Commonify autofilling warehouses in child tables
diff --git a/erpnext/manufacturing/doctype/work_order/work_order.js b/erpnext/manufacturing/doctype/work_order/work_order.js
index d541866..894761b 100644
--- a/erpnext/manufacturing/doctype/work_order/work_order.js
+++ b/erpnext/manufacturing/doctype/work_order/work_order.js
@@ -122,12 +122,8 @@
},
source_warehouse: function(frm) {
- if (frm.doc.source_warehouse) {
- frm.doc.required_items.forEach(d => {
- frappe.model.set_value(d.doctype, d.name,
- "source_warehouse", frm.doc.source_warehouse);
- });
- }
+ let transaction_controller = new erpnext.TransactionController();
+ transaction_controller.autofill_warehouse(frm.doc.required_items, "source_warehouse", frm.doc.source_warehouse);
},
refresh: function(frm) {
@@ -313,7 +309,7 @@
"Work in Progress": "progress-bar-warning",
"Completed": "progress-bar-success"
};
-
+
let bars = [];
let message = '';
let title = '';
diff --git a/erpnext/public/js/controllers/buying.js b/erpnext/public/js/controllers/buying.js
index d5dc412..9c56189 100644
--- a/erpnext/public/js/controllers/buying.js
+++ b/erpnext/public/js/controllers/buying.js
@@ -253,6 +253,13 @@
}
},
+ rejected_warehouse: function(doc, cdt) {
+ // trigger autofill_warehouse only if parent rejected_warehouse field is triggered
+ if (["Purchase Invoice", "Purchase Receipt"].includes(cdt)) {
+ this.autofill_warehouse(doc.items, "rejected_warehouse", doc.rejected_warehouse);
+ }
+ },
+
category: function(doc, cdt, cdn) {
// should be the category field of tax table
if(cdt != doc.doctype) {
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 3443abc..c341149 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -1889,21 +1889,16 @@
},
set_reserve_warehouse: function() {
- this.autofill_warehouse("reserve_warehouse");
+ this.autofill_warehouse(this.frm.doc.supplied_items, "reserve_warehouse", this.frm.doc.set_reserve_warehouse);
},
set_warehouse: function() {
- this.autofill_warehouse("warehouse");
+ this.autofill_warehouse(this.frm.doc.items, "warehouse", this.frm.doc.set_warehouse);
},
- autofill_warehouse : function (warehouse_field) {
- // set warehouse in all child table rows
- var me = this;
- let warehouse = (warehouse_field === "warehouse") ? me.frm.doc.set_warehouse : me.frm.doc.set_reserve_warehouse;
- let child_table = (warehouse_field === "warehouse") ? me.frm.doc.items : me.frm.doc.supplied_items;
- let doctype = (warehouse_field === "warehouse") ? (me.frm.doctype + " Item") : (me.frm.doctype + " Item Supplied");
-
- if(warehouse) {
+ autofill_warehouse : function (child_table, warehouse_field, warehouse) {
+ let doctype = child_table[0].doctype;
+ if (warehouse) {
$.each(child_table || [], function(i, item) {
frappe.model.set_value(doctype, item.name, warehouse_field, warehouse);
});
diff --git a/erpnext/selling/sales_common.js b/erpnext/selling/sales_common.js
index 095b7c3..4a7dd5a 100644
--- a/erpnext/selling/sales_common.js
+++ b/erpnext/selling/sales_common.js
@@ -429,7 +429,7 @@
if (doc.has_serial_no && doc.serial_no) {
args['serial_no'] = doc.serial_no
}
-
+
return frappe.call({
method: 'erpnext.stock.doctype.batch.batch.get_batch_no',
args: args,
diff --git a/erpnext/stock/doctype/delivery_note/delivery_note.js b/erpnext/stock/doctype/delivery_note/delivery_note.js
index f8608d8..c1ddf36 100644
--- a/erpnext/stock/doctype/delivery_note/delivery_note.js
+++ b/erpnext/stock/doctype/delivery_note/delivery_note.js
@@ -101,17 +101,6 @@
})
}, __('Create'));
}
- },
-
- to_warehouse: function(frm) {
- if(frm.doc.to_warehouse) {
- ["items", "packed_items"].forEach(doctype => {
- frm.doc[doctype].forEach(d => {
- frappe.model.set_value(d.doctype, d.name,
- "target_warehouse", frm.doc.to_warehouse);
- });
- });
- }
}
});
@@ -287,6 +276,14 @@
frappe.ui.form.is_saving = false;
}
})
+ },
+
+ to_warehouse: function() {
+ let packed_items_table = this.frm.doc["packed_items"];
+ this.autofill_warehouse(this.frm.doc["items"], "target_warehouse", this.frm.doc.to_warehouse);
+ if (packed_items_table && packed_items_table.length) {
+ this.autofill_warehouse(packed_items_table, "target_warehouse", this.frm.doc.to_warehouse);
+ }
}
});
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.js b/erpnext/stock/doctype/stock_entry/stock_entry.js
index d1048fc..8e3d323 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.js
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.js
@@ -877,39 +877,17 @@
if(!row.t_warehouse) row.t_warehouse = this.frm.doc.to_warehouse;
},
- source_mandatory: ["Material Issue", "Material Transfer", "Send to Subcontractor",
- "Material Transfer for Manufacture", "Send to Warehouse", "Receive at Warehouse"],
- target_mandatory: ["Material Receipt", "Material Transfer", "Send to Subcontractor",
- "Material Transfer for Manufacture", "Send to Warehouse", "Receive at Warehouse"],
-
from_warehouse: function(doc) {
- var me = this;
- this.set_warehouse_if_different("s_warehouse", doc.from_warehouse, function(row) {
- return me.source_mandatory.indexOf(me.frm.doc.purpose)!==-1;
- });
+ this.set_warehouse_in_children(doc.items, "s_warehouse", doc.from_warehouse);
},
to_warehouse: function(doc) {
- var me = this;
- this.set_warehouse_if_different("t_warehouse", doc.to_warehouse, function(row) {
- return me.target_mandatory.indexOf(me.frm.doc.purpose)!==-1;
- });
+ this.set_warehouse_in_children(doc.items, "t_warehouse", doc.to_warehouse);
},
- set_warehouse_if_different: function(fieldname, value, condition) {
- var changed = false;
- for (var i=0, l=(this.frm.doc.items || []).length; i<l; i++) {
- var row = this.frm.doc.items[i];
- if (row[fieldname] != value) {
- if (condition && !condition(row)) {
- continue;
- }
-
- frappe.model.set_value(row.doctype, row.name, fieldname, value, "Link");
- changed = true;
- }
- }
- refresh_field("items");
+ set_warehouse_in_children: function(child_table, warehouse_field, warehouse) {
+ let transaction_controller = new erpnext.TransactionController();
+ transaction_controller.autofill_warehouse(child_table, warehouse_field, warehouse);
},
items_on_form_rendered: function(doc, grid_row) {