fix: cannot set warehouse on deleting all so items and updating them (#21078)
* fix: cannot set warehouse on deleting all so items and updating them
* fix: travis
* fix: docname is editable in update items dialog
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index d661bcb..76eb56f 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -19,6 +19,7 @@
from erpnext.exceptions import InvalidCurrency
from six import text_type
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
+from erpnext.stock.get_item_details import get_item_warehouse
force_item_fields = ("item_group", "brand", "stock_uom", "is_fixed_asset", "item_tax_rate", "pricing_rules")
@@ -1126,16 +1127,16 @@
"""
Returns a Sales Order Item child item containing the default values
"""
- p_doctype = frappe.get_doc(parent_doctype, parent_doctype_name)
- child_item = frappe.new_doc('Sales Order Item', p_doctype, child_docname)
+ p_doc = frappe.get_doc(parent_doctype, parent_doctype_name)
+ child_item = frappe.new_doc('Sales Order Item', p_doc, child_docname)
item = frappe.get_doc("Item", item_code)
child_item.item_code = item.item_code
child_item.item_name = item.item_name
child_item.description = item.description
- child_item.reqd_by_date = p_doctype.delivery_date
+ child_item.reqd_by_date = p_doc.delivery_date
child_item.uom = item.stock_uom
child_item.conversion_factor = get_conversion_factor(item_code, item.stock_uom).get("conversion_factor") or 1.0
- child_item.warehouse = p_doctype.set_warehouse or p_doctype.items[0].warehouse
+ child_item.warehouse = get_item_warehouse(item, p_doc, overwrite_warehouse=True)
return child_item
@@ -1143,13 +1144,13 @@
"""
Returns a Purchase Order Item child item containing the default values
"""
- p_doctype = frappe.get_doc(parent_doctype, parent_doctype_name)
- child_item = frappe.new_doc('Purchase Order Item', p_doctype, child_docname)
+ p_doc = frappe.get_doc(parent_doctype, parent_doctype_name)
+ child_item = frappe.new_doc('Purchase Order Item', p_doc, child_docname)
item = frappe.get_doc("Item", item_code)
child_item.item_code = item.item_code
child_item.item_name = item.item_name
child_item.description = item.description
- child_item.schedule_date = p_doctype.schedule_date
+ child_item.schedule_date = p_doc.schedule_date
child_item.uom = item.stock_uom
child_item.conversion_factor = get_conversion_factor(item_code, item.stock_uom).get("conversion_factor") or 1.0
child_item.base_rate = 1 # Initiallize value will update in parent validation
diff --git a/erpnext/public/js/utils.js b/erpnext/public/js/utils.js
index 4eb3175..4d44eae 100755
--- a/erpnext/public/js/utils.js
+++ b/erpnext/public/js/utils.js
@@ -453,7 +453,8 @@
fields: [{
fieldtype:'Data',
fieldname:"docname",
- hidden: 0,
+ read_only: 1,
+ hidden: 1,
}, {
fieldtype:'Link',
fieldname:"item_code",
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 53964f2..9c5a8e1 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -240,26 +240,13 @@
item_group_defaults = get_item_group_defaults(item.name, args.company)
brand_defaults = get_brand_defaults(item.name, args.company)
- if overwrite_warehouse or not args.warehouse:
- warehouse = (
- args.get("set_warehouse") or
- item_defaults.get("default_warehouse") or
- item_group_defaults.get("default_warehouse") or
- brand_defaults.get("default_warehouse") or
- args.warehouse
- )
-
- if not warehouse:
- defaults = frappe.defaults.get_defaults() or {}
- warehouse_exists = frappe.db.exists("Warehouse", {
- 'name': defaults.default_warehouse,
- 'company': args.company
- })
- if defaults.get("default_warehouse") and warehouse_exists:
- warehouse = defaults.default_warehouse
-
- else:
- warehouse = args.warehouse
+ defaults = frappe._dict({
+ 'item_defaults': item_defaults,
+ 'item_group_defaults': item_group_defaults,
+ 'brand_defaults': brand_defaults
+ })
+
+ warehouse = get_item_warehouse(item, args, overwrite_warehouse, defaults)
if args.get('doctype') == "Material Request" and not args.get('material_request_type'):
args['material_request_type'] = frappe.db.get_value('Material Request',
@@ -272,7 +259,7 @@
expense_account = get_asset_category_account(fieldname = "fixed_asset_account", item = args.item_code, company= args.company)
#Set the UOM to the Default Sales UOM or Default Purchase UOM if configured in the Item Master
- if not args.uom:
+ if not args.get('uom'):
if args.get('doctype') in sales_doctypes:
args.uom = item.sales_uom if item.sales_uom else item.stock_uom
elif (args.get('doctype') in ['Purchase Order', 'Purchase Receipt', 'Purchase Invoice']) or \
@@ -362,6 +349,37 @@
return out
+def get_item_warehouse(item, args, overwrite_warehouse, defaults={}):
+ if not defaults:
+ defaults = frappe._dict({
+ 'item_defaults' : get_item_defaults(item.name, args.company),
+ 'item_group_defaults' : get_item_group_defaults(item.name, args.company),
+ 'brand_defaults' : get_brand_defaults(item.name, args.company)
+ })
+
+ if overwrite_warehouse or not args.warehouse:
+ warehouse = (
+ args.get("set_warehouse") or
+ defaults.item_defaults.get("default_warehouse") or
+ defaults.item_group_defaults.get("default_warehouse") or
+ defaults.brand_defaults.get("default_warehouse") or
+ args.get('warehouse')
+ )
+
+ if not warehouse:
+ defaults = frappe.defaults.get_defaults() or {}
+ warehouse_exists = frappe.db.exists("Warehouse", {
+ 'name': defaults.default_warehouse,
+ 'company': args.company
+ })
+ if defaults.get("default_warehouse") and warehouse_exists:
+ warehouse = defaults.default_warehouse
+
+ else:
+ warehouse = args.get('warehouse')
+
+ return warehouse
+
def update_barcode_value(out):
from erpnext.accounts.doctype.sales_invoice.pos import get_barcode_data
barcode_data = get_barcode_data([out])