[fix] Auto serial no fecthed on the invoice even if stock update is disabled issue
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 910c19c..ecbf59d 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -192,11 +192,13 @@
if (item.get(fieldname) is None or fieldname in force_item_fields):
item.set(fieldname, value)
- elif fieldname == "cost_center" and not item.get("cost_center"):
+ elif fieldname in ['cost_center', 'conversion_factor'] and not item.get(fieldname):
item.set(fieldname, value)
- elif fieldname == "conversion_factor" and not item.get("conversion_factor"):
- item.set(fieldname, value)
+ elif fieldname == "serial_no":
+ stock_qty = item.get("stock_qty") * -1 if item.get("stock_qty") < 0 else item.get("stock_qty")
+ if stock_qty != len(item.get('serial_no').split('\n')):
+ item.set(fieldname, value)
if ret.get("pricing_rule"):
# if user changed the discount percentage then set user's discount percentage ?
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 9c2b1c4..522c4fc 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -385,4 +385,5 @@
execute:frappe.delete_doc('DocType', 'Purchase Common')
erpnext.patches.v8_0.update_stock_qty_value_in_purchase_invoice
erpnext.patches.v8_0.update_supplier_address_in_stock_entry
-erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate
\ No newline at end of file
+erpnext.patches.v8_0.rename_is_sample_item_to_allow_zero_valuation_rate
+erpnext.patches.v8_0.set_null_to_serial_nos_for_disabled_sales_invoices
\ No newline at end of file
diff --git a/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py b/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py
new file mode 100644
index 0000000..197d6de
--- /dev/null
+++ b/erpnext/patches/v8_0/set_null_to_serial_nos_for_disabled_sales_invoices.py
@@ -0,0 +1,14 @@
+# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors
+# License: GNU General Public License v3. See license.txt
+
+from __future__ import unicode_literals
+import frappe
+from erpnext.stock.stock_balance import update_bin_qty, get_reserved_qty
+
+def execute():
+ frappe.db.sql("""
+ update
+ `tabSales Invoice Item`
+ set serial_no = NULL
+ where
+ parent in (select name from `tabSales Invoice` where update_stock = 0 and docstatus = 1)""")
\ No newline at end of file
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 7e0dccc..a583f7d 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -260,6 +260,7 @@
customer: me.frm.doc.customer,
supplier: me.frm.doc.supplier,
currency: me.frm.doc.currency,
+ update_stock: in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0,
conversion_rate: me.frm.doc.conversion_rate,
price_list: me.frm.doc.selling_price_list ||
me.frm.doc.buying_price_list,
@@ -275,7 +276,8 @@
name: me.frm.doc.name,
project: item.project || me.frm.doc.project,
qty: item.qty,
- stock_qty: item.stock_qty
+ stock_qty: item.stock_qty,
+ conversion_factor: item.conversion_factor
}
},
@@ -762,7 +764,8 @@
"ignore_pricing_rule": me.frm.doc.ignore_pricing_rule,
"doctype": me.frm.doc.doctype,
"name": me.frm.doc.name,
- "is_return": cint(me.frm.doc.is_return)
+ "is_return": cint(me.frm.doc.is_return),
+ "update_stock": in_list(['Sales Invoice', 'Purchase Invoice'], me.frm.doc.doctype) ? cint(me.frm.doc.update_stock) : 0,
};
},
@@ -781,7 +784,8 @@
"parent": d.parent,
"pricing_rule": d.pricing_rule,
"warehouse": d.warehouse,
- "serial_no": d.serial_no
+ "serial_no": d.serial_no,
+ "conversion_factor": d.conversion_factor
});
// if doctype is Quotation Item / Sales Order Iten then add Margin Type and rate in item_list
diff --git a/erpnext/stock/get_item_details.py b/erpnext/stock/get_item_details.py
index 3ada10b..c2e77df 100644
--- a/erpnext/stock/get_item_details.py
+++ b/erpnext/stock/get_item_details.py
@@ -161,7 +161,7 @@
"min_order_qty": flt(item.min_order_qty) if args.doctype == "Material Request" else "",
"conversion_factor": 1.0,
"qty": args.qty or 1.0,
- "stock_qty": 1.0,
+ "stock_qty": args.qty or 1.0,
"price_list_rate": 0.0,
"base_price_list_rate": 0.0,
"rate": 0.0,
@@ -172,10 +172,18 @@
"net_amount": 0.0,
"discount_percentage": 0.0,
"supplier": item.default_supplier,
+ "update_stock": args.get("update_stock") if args.get('doctype') in ['Sales Invoice', 'Purchase Invoice'] else 0,
"delivered_by_supplier": item.delivered_by_supplier if args.get("doctype") in ["Sales Order", "Sales Invoice"] else 0,
"is_fixed_asset": item.is_fixed_asset
})
+ # calculate conversion factor
+ conversion_factor = args.get("conversion_factor") or get_conversion_factor(item.item_code, args.uom).get("conversion_factor") or 1.0
+ out.update({
+ "conversion_factor": conversion_factor,
+ "stock_qty": out.qty * conversion_factor
+ })
+
# if default specified in item is for another company, fetch from company
for d in [["Account", "income_account", "default_income_account"],
["Account", "expense_account", "default_expense_account"],
@@ -532,6 +540,9 @@
args = json.loads(args)
args = frappe._dict(args)
+ if args.get('doctype') == 'Sales Invoice' and not args.get('update_stock'):
+ return ""
+
if args.get('warehouse') and args.get('stock_qty') and args.get('item_code'):
if frappe.get_value('Item', {'item_code': args.item_code}, "has_serial_no") == 1: