feat: ask reason for putting sales order on hold
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index ebc1529..da0e22c 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -161,7 +161,9 @@
if(flt(doc.per_delivered, 6) < 100 || flt(doc.per_billed) < 100) {
// hold
this.frm.add_custom_button(__('Hold'),
- function() { me.update_status('Hold', 'On Hold') }, __("Status"))
+ function() {
+ me.sales_order_on_hold();
+ }, __("Status"))
// close
this.frm.add_custom_button(__('Close'),
function() { me.close_sales_order() }, __("Status"))
@@ -570,6 +572,37 @@
});
dialog.show();
},
+ sales_order_on_hold: function(){
+ var me = this;
+ var d = new frappe.ui.Dialog({
+ title: __('Reason for Hold'),
+ fields: [
+ {
+ "fieldname": "reason_for_hold",
+ "fieldtype": "Text",
+ "reqd": 1,
+ }
+ ],
+ primary_action: function() {
+ var data = d.get_values();
+ frappe.call({
+ method: "erpnext.selling.doctype.sales_order.sales_order.update_reason_for_hold",
+ args: {
+ data: data.reason_for_hold,
+ name: me.frm.doc.name
+ },
+ callback: function(r) {
+ if(!r.exc) {
+ me.frm.set_value("reason_for_hold", data.reason_for_hold);
+ me.update_status('Hold', 'On Hold')
+ d.hide();
+ }
+ }
+ });
+ }
+ });
+ d.show();
+ },
close_sales_order: function(){
this.frm.cscript.update_status("Close", "Closed")
},
diff --git a/erpnext/selling/doctype/sales_order/sales_order.json b/erpnext/selling/doctype/sales_order/sales_order.json
index 54122ee..acb678a 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.json
+++ b/erpnext/selling/doctype/sales_order/sales_order.json
@@ -3647,6 +3647,39 @@
"bold": 0,
"collapsible": 0,
"columns": 0,
+ "depends_on": "eval:doc.status === 'On Hold'",
+ "fieldname": "reason_for_hold",
+ "fieldtype": "Text",
+ "hidden": 0,
+ "ignore_user_permissions": 0,
+ "ignore_xss_filter": 0,
+ "in_filter": 0,
+ "in_global_search": 0,
+ "in_list_view": 1,
+ "in_standard_filter": 0,
+ "label": "Reason for Hold",
+ "length": 0,
+ "no_copy": 0,
+ "permlevel": 0,
+ "precision": "",
+ "print_hide": 0,
+ "print_hide_if_no_value": 0,
+ "read_only": 1,
+ "remember_last_selected_value": 0,
+ "report_hide": 0,
+ "reqd": 0,
+ "search_index": 0,
+ "set_only_once": 0,
+ "translatable": 0,
+ "unique": 0
+ },
+ {
+ "allow_bulk_edit": 0,
+ "allow_in_quick_entry": 0,
+ "allow_on_submit": 0,
+ "bold": 0,
+ "collapsible": 0,
+ "columns": 0,
"fieldname": "billing_status",
"fieldtype": "Select",
"hidden": 1,
@@ -4113,7 +4146,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
- "modified": "2019-02-27 19:00:29.267253",
+ "modified": "2019-03-04 18:43:38.354549",
"modified_by": "mangesh@iwebnotes.com",
"module": "Selling",
"name": "Sales Order",
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index 10aab16..860c63e 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -960,3 +960,7 @@
material_request.run_method("set_missing_values")
material_request.submit()
return material_request
+
+@frappe.whitelist()
+def update_reason_for_hold(name, data):
+ frappe.db.set_value('Sales Order', name, 'reason_for_hold', data)
\ No newline at end of file