refactor: `Stock Reservation` code in `sales_order.js`
diff --git a/erpnext/selling/doctype/sales_order/sales_order.js b/erpnext/selling/doctype/sales_order/sales_order.js
index 37c2294..acde31e 100644
--- a/erpnext/selling/doctype/sales_order/sales_order.js
+++ b/erpnext/selling/doctype/sales_order/sales_order.js
@@ -47,17 +47,29 @@
frm.set_df_property('packed_items', 'cannot_add_rows', true);
frm.set_df_property('packed_items', 'cannot_delete_rows', true);
},
+
refresh: function(frm) {
- if(frm.doc.docstatus === 1 && frm.doc.status !== 'Closed'
- && flt(frm.doc.per_delivered, 6) < 100 && flt(frm.doc.per_billed, 6) < 100) {
- frm.add_custom_button(__('Update Items'), () => {
- erpnext.utils.update_child_items({
- frm: frm,
- child_docname: "items",
- child_doctype: "Sales Order Detail",
- cannot_add_row: false,
- })
- });
+ if(frm.doc.docstatus === 1) {
+ if (frm.doc.status !== 'Closed' && flt(frm.doc.per_delivered, 6) < 100 && flt(frm.doc.per_billed, 6) < 100) {
+ frm.add_custom_button(__('Update Items'), () => {
+ erpnext.utils.update_child_items({
+ frm: frm,
+ child_docname: "items",
+ child_doctype: "Sales Order Detail",
+ cannot_add_row: false,
+ })
+ });
+
+ // Stock Reservation > Reserve button will be only visible if the SO has unreserved stock.
+ if (frm.doc.__onload && frm.doc.__onload.has_unreserved_stock) {
+ frm.add_custom_button(__('Reserve'), () => frm.events.create_stock_reservation_entries(frm), __('Stock Reservation'));
+ }
+ }
+
+ // Stock Reservation > Unreserve button will be only visible if the SO has reserved stock.
+ if (frm.doc.__onload && frm.doc.__onload.has_reserved_stock) {
+ frm.add_custom_button(__('Unreserve'), () => frm.events.cancel_stock_reservation_entries(frm), __('Stock Reservation'));
+ }
}
if (frm.doc.docstatus === 0) {
@@ -154,6 +166,38 @@
if(!d.delivery_date) d.delivery_date = frm.doc.delivery_date;
});
refresh_field("items");
+ },
+
+ create_stock_reservation_entries(frm) {
+ frappe.call({
+ doc: frm.doc,
+ method: 'create_stock_reservation_entries',
+ args: {
+ notify: true
+ },
+ freeze: true,
+ freeze_message: __('Reserving Stock...'),
+ callback: (r) => {
+ frm.doc.__onload.has_unreserved_stock = false;
+ frm.refresh();
+ }
+ })
+ },
+
+ cancel_stock_reservation_entries(frm) {
+ frappe.call({
+ method: 'erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry.cancel_stock_reservation_entries',
+ args: {
+ voucher_type: frm.doctype,
+ voucher_no: frm.docname
+ },
+ freeze: true,
+ freeze_message: __('Unreserving Stock...'),
+ callback: (r) => {
+ frm.doc.__onload.has_reserved_stock = false;
+ frm.refresh();
+ }
+ })
}
});
@@ -287,16 +331,6 @@
}
this.frm.page.set_inner_btn_group_as_primary(__('Create'));
}
-
- // Stock Reservation > Reserve button will be only visible if the SO has unreserved stock.
- if (this.frm.doc.__onload && this.frm.doc.__onload.has_unreserved_stock) {
- this.frm.add_custom_button(__('Reserve'), () => this.create_stock_reservation_entries(), __('Stock Reservation'));
- }
-
- // Stock Reservation > Unreserve button will be only visible if the SO has reserved stock.
- if (this.frm.doc.__onload && this.frm.doc.__onload.has_reserved_stock) {
- this.frm.add_custom_button(__('Unreserve'), () => this.cancel_stock_reservation_entries(), __('Stock Reservation'));
- }
}
if (this.frm.doc.docstatus===0) {
@@ -336,38 +370,6 @@
this.order_type(doc);
}
- create_stock_reservation_entries() {
- frappe.call({
- doc: this.frm.doc,
- method: 'create_stock_reservation_entries',
- args: {
- notify: true
- },
- freeze: true,
- freeze_message: __('Reserving Stock...'),
- callback: (r) => {
- this.frm.doc.__onload.has_unreserved_stock = false;
- this.frm.refresh();
- }
- })
- }
-
- cancel_stock_reservation_entries() {
- frappe.call({
- method: 'erpnext.stock.doctype.stock_reservation_entry.stock_reservation_entry.cancel_stock_reservation_entries',
- args: {
- voucher_type: this.frm.doctype,
- voucher_no: this.frm.docname
- },
- freeze: true,
- freeze_message: __('Unreserving Stock...'),
- callback: (r) => {
- this.frm.doc.__onload.has_reserved_stock = false;
- this.frm.refresh();
- }
- })
- }
-
create_pick_list() {
frappe.model.open_mapped_doc({
method: "erpnext.selling.doctype.sales_order.sales_order.create_pick_list",