fix: Use purpose field and remove item_base_on field
diff --git a/erpnext/selling/doctype/sales_order/sales_order.py b/erpnext/selling/doctype/sales_order/sales_order.py
index dd156d0..426b004 100755
--- a/erpnext/selling/doctype/sales_order/sales_order.py
+++ b/erpnext/selling/doctype/sales_order/sales_order.py
@@ -1010,9 +1010,6 @@
doc = get_mapped_doc("Sales Order", source_name, {
"Sales Order": {
"doctype": "Pick List",
- "field_map": {
- "doctype": "items_based_on"
- },
"validation": {
"docstatus": ["=", 1]
}
@@ -1028,4 +1025,6 @@
},
}, target_doc)
+ doc.purpose = 'Delivery against Sales Order'
+
return doc
diff --git a/erpnext/stock/doctype/pick_list/pick_list.js b/erpnext/stock/doctype/pick_list/pick_list.js
index 6f39d88..c2dddab 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.js
+++ b/erpnext/stock/doctype/pick_list/pick_list.js
@@ -23,16 +23,21 @@
refresh: (frm) => {
frm.trigger('add_get_items_button');
- if (frm.doc.items && (frm.doc.items.length > 1 || frm.doc.items[0].item_code)) {
+ if (frm.doc.items && (frm.doc.items.length > 1 || frm.doc.items[0].item_code) && frm.doc.docstatus === 0) {
frm.add_custom_button(__('Get Item Locations'), () => {
frm.call('set_item_locations');
}).addClass('btn-primary');
}
- if (frm.doc.docstatus == 1) {
- if (frm.doc.items_based_on === 'Sales Order') {
+ if (frm.doc.docstatus === 1) {
+ if (frm.doc.purpose === 'Delivery against Sales Order') {
frm.add_custom_button(__('Delivery Note'), () => frm.trigger('create_delivery_note'), __('Create'));
} else {
- frm.add_custom_button(__('Stock Entry'), () => frm.trigger('create_stock_entry'), __('Create'));
+ frappe.xcall('erpnext.stock.doctype.pick_list.pick_list.stock_entry_exists', {
+ 'pick_list_name': frm.doc.name
+ }).then(exists => {
+ if (exists) return;
+ frm.add_custom_button(__('Stock Entry'), () => frm.trigger('create_stock_entry'), __('Create'));
+ });
}
}
},
@@ -65,7 +70,7 @@
}, __("Select Quantity"), __('Get Items'));
});
},
- items_based_on: (frm) => {
+ purpose: (frm) => {
frm.clear_table('items');
frm.clear_table('locations');
frm.trigger('add_get_items_button');
@@ -85,8 +90,8 @@
});
},
add_get_items_button(frm) {
- let source_doctype = frm.doc.items_based_on;
- if (source_doctype != 'Sales Order') return;
+ let purpose = frm.doc.purpose;
+ if (purpose != 'Delivery against Sales Order' || frm.doc.docstatus !== 0) return;
let get_query_filters = {
docstatus: 1,
per_delivered: ['<', 100],
diff --git a/erpnext/stock/doctype/pick_list/pick_list.json b/erpnext/stock/doctype/pick_list/pick_list.json
index 504a3fa..6eca1c6 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.json
+++ b/erpnext/stock/doctype/pick_list/pick_list.json
@@ -6,7 +6,6 @@
"engine": "InnoDB",
"field_order": [
"purpose",
- "items_based_on",
"customer",
"work_order",
"for_qty",
@@ -48,16 +47,7 @@
"options": "Warehouse"
},
{
- "default": "Work Order",
- "fieldname": "items_based_on",
- "fieldtype": "Select",
- "in_list_view": 1,
- "label": "Items Based On",
- "options": "Sales Order\nWork Order",
- "reqd": 1
- },
- {
- "depends_on": "eval:doc.items_based_on===\"Sales Order\"",
+ "depends_on": "eval:doc.purpose==='Delivery against Sales Order'",
"fieldname": "customer",
"fieldtype": "Link",
"in_list_view": 1,
@@ -65,7 +55,7 @@
"options": "Customer"
},
{
- "depends_on": "eval:doc.items_based_on===\"Work Order\"",
+ "depends_on": "eval:doc.purpose==='Material Transfer for Manufacture'",
"fieldname": "work_order",
"fieldtype": "Link",
"label": "Work Order",
@@ -102,15 +92,15 @@
"read_only": 1
},
{
- "default": "Material Transfer for manufacturing",
+ "default": "Material Transfer for Manufacture",
"fieldname": "purpose",
"fieldtype": "Select",
"label": "Purpose",
- "options": "Material Transfer for manufacturing\nMaterial Issue\nMaterial Transfer\nDelivery against Sales Order"
+ "options": "Material Transfer for Manufacture\nMaterial Issue\nMaterial Transfer\nDelivery against Sales Order"
}
],
"is_submittable": 1,
- "modified": "2019-08-22 13:36:18.912659",
+ "modified": "2019-08-22 16:58:07.270447",
"modified_by": "Administrator",
"module": "Stock",
"name": "Pick List",
diff --git a/erpnext/stock/doctype/pick_list/pick_list.py b/erpnext/stock/doctype/pick_list/pick_list.py
index 550c70f..9b8bdfe 100644
--- a/erpnext/stock/doctype/pick_list/pick_list.py
+++ b/erpnext/stock/doctype/pick_list/pick_list.py
@@ -7,6 +7,7 @@
import json
from six import iteritems
from frappe.model.document import Document
+from frappe import _
from frappe.utils import floor, flt, today
from frappe.model.mapper import get_mapped_doc, map_child_doc
from erpnext.selling.doctype.sales_order.sales_order import make_delivery_note as create_delivery_note_from_sales_order
@@ -234,11 +235,14 @@
@frappe.whitelist()
def create_stock_entry(pick_list):
pick_list = frappe.get_doc(json.loads(pick_list))
+ if stock_entry_exists(pick_list.get('name')):
+ return frappe.msgprint(_('Stock Entry already exists against this Pick List'))
+
work_order = frappe.get_doc("Work Order", pick_list.get('work_order'))
stock_entry = frappe.new_doc('Stock Entry')
stock_entry.pick_list = pick_list.get('name')
- stock_entry.purpose = 'Material Transfer For Manufacture'
+ stock_entry.purpose = pick_list.get('purpose')
stock_entry.set_stock_entry_type()
stock_entry.work_order = work_order.name
stock_entry.company = work_order.company
@@ -304,4 +308,10 @@
}, as_dict=as_dict)
def get_item_details(item_code):
- pass
\ No newline at end of file
+ pass
+
+@frappe.whitelist()
+def stock_entry_exists(pick_list_name):
+ return frappe.db.exists('Stock Entry', {
+ 'pick_list': pick_list_name
+ })
diff --git a/erpnext/stock/doctype/stock_entry/stock_entry.json b/erpnext/stock/doctype/stock_entry/stock_entry.json
index 22b84a1..f9e6d29 100644
--- a/erpnext/stock/doctype/stock_entry/stock_entry.json
+++ b/erpnext/stock/doctype/stock_entry/stock_entry.json
@@ -618,7 +618,6 @@
{
"fieldname": "pick_list",
"fieldtype": "Link",
- "hidden": 1,
"label": "Pick List",
"options": "Pick List",
"read_only": 1
@@ -627,7 +626,7 @@
"icon": "fa fa-file-text",
"idx": 1,
"is_submittable": 1,
- "modified": "2019-08-22 13:09:55.344036",
+ "modified": "2019-08-22 17:11:42.074154",
"modified_by": "Administrator",
"module": "Stock",
"name": "Stock Entry",