Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index bcd8ae4..f701552 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
from __future__ import unicode_literals
-__version__ = '4.23.0'
+__version__ = '4.24.0'
diff --git a/erpnext/accounts/doctype/c_form/c_form.py b/erpnext/accounts/doctype/c_form/c_form.py
index c18d28a..7d879e4 100644
--- a/erpnext/accounts/doctype/c_form/c_form.py
+++ b/erpnext/accounts/doctype/c_form/c_form.py
@@ -18,17 +18,17 @@
`tabSales Invoice` where name = %s and docstatus = 1""", d.invoice_no)
if inv and inv[0][0] != 'Yes':
- frappe.throw("C-form is not applicable for Invoice: %s" % d.invoice_no)
+ frappe.throw("C-form is not applicable for Invoice: {0}".format(d.invoice_no))
elif inv and inv[0][1] and inv[0][1] != self.name:
- frappe.throw("""Invoice %s is tagged in another C-form: %s.
+ frappe.throw("""Invoice {0} is tagged in another C-form: {1}.
If you want to change C-form no for this invoice,
- please remove invoice no from the previous c-form and then try again""" %
- (d.invoice_no, inv[0][1]))
+ please remove invoice no from the previous c-form and then try again"""\
+ .format(d.invoice_no, inv[0][1]))
elif not inv:
- frappe.throw("Row %s: Invoice %s is invalid, it might be cancelled / does not exist. \
- Please enter a valid Invoice" % d.idx, d.invoice_no)
+ frappe.throw("Row {0}: Invoice {1} is invalid, it might be cancelled / does not exist. \
+ Please enter a valid Invoice".format(d.idx, d.invoice_no))
def on_update(self):
""" Update C-Form No on invoices"""
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index 5219339..fcc350a 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -112,6 +112,8 @@
if item.get("item_code"):
args = parent_dict.copy()
args.update(item.as_dict())
+ if not args.get("transaction_date"):
+ args["transaction_date"] = args.get("posting_date")
ret = get_item_details(args)
for fieldname, value in ret.items():
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index a1b0cc6..017f80e 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -5,7 +5,7 @@
app_description = "Open Source Enterprise Resource Planning for Small and Midsized Organizations"
app_icon = "icon-th"
app_color = "#e74c3c"
-app_version = "4.23.0"
+app_version = "4.24.0"
error_report_email = "support@erpnext.com"
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index 3e4bc81..e3437a5 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -94,3 +94,5 @@
erpnext.patches.v4_2.update_landed_cost_voucher
erpnext.patches.v4_2.set_item_has_batch
erpnext.patches.v4_2.update_stock_uom_for_dn_in_sle
+erpnext.patches.v4_2.repost_reserved_qty
+erpnext.patches.v4_2.repost_sle_for_si_with_no_warehouse
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/repost_reserved_qty.py b/erpnext/patches/v4_2/repost_reserved_qty.py
new file mode 100644
index 0000000..04dfb77
--- /dev/null
+++ b/erpnext/patches/v4_2/repost_reserved_qty.py
@@ -0,0 +1,12 @@
+# 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.utilities.repost_stock import update_bin_qty, get_reserved_qty
+
+def execute():
+ for item_code, warehouse in frappe.db.sql("select item_code, warehouse from tabBin where ifnull(reserved_qty, 0) < 0"):
+ update_bin_qty(item_code, warehouse, {
+ "reserved_qty": get_reserved_qty(item_code, warehouse)
+ })
\ No newline at end of file
diff --git a/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py b/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py
new file mode 100644
index 0000000..44bec00
--- /dev/null
+++ b/erpnext/patches/v4_2/repost_sle_for_si_with_no_warehouse.py
@@ -0,0 +1,34 @@
+# 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_ledger import NegativeStockError
+
+def execute():
+ si_list = frappe.db.sql("""select distinct si.name
+ from `tabSales Invoice Item` si_item, `tabSales Invoice` si
+ where si.name = si_item.parent and si.modified > '2015-02-16' and si.docstatus=1
+ and ifnull(si_item.warehouse, '') = '' and ifnull(si.update_stock, 0) = 1
+ order by posting_date, posting_time""", as_dict=1)
+
+ failed_list = []
+ for si in si_list:
+ try:
+ si_doc = frappe.get_doc("Sales Invoice", si.name)
+ si_doc.docstatus = 2
+ si_doc.on_cancel()
+
+ si_doc.docstatus = 1
+ si_doc.set_missing_item_details()
+ si_doc.on_submit()
+ frappe.db.commit()
+ except:
+ failed_list.append(si.name)
+ frappe.local.stockledger_exceptions = None
+ frappe.db.rollback()
+
+ print "Failed to repost: ", failed_list
+
+
+
\ No newline at end of file
diff --git a/erpnext/public/js/transaction.js b/erpnext/public/js/transaction.js
index e1e78a3..ebdb136 100644
--- a/erpnext/public/js/transaction.js
+++ b/erpnext/public/js/transaction.js
@@ -148,7 +148,7 @@
order_type: me.frm.doc.order_type,
is_pos: cint(me.frm.doc.is_pos),
is_subcontracted: me.frm.doc.is_subcontracted,
- transaction_date: me.frm.doc.transaction_date,
+ transaction_date: me.frm.doc.transaction_date || me.frm.doc.posting_date,
ignore_pricing_rule: me.frm.doc.ignore_pricing_rule,
doctype: item.doctype,
name: item.name,
diff --git a/setup.py b/setup.py
index 2dacebe..44bafc9 100644
--- a/setup.py
+++ b/setup.py
@@ -1,7 +1,7 @@
from setuptools import setup, find_packages
import os
-version = "4.23.0"
+version = "4.24.0"
with open("requirements.txt", "r") as f:
install_requires = f.readlines()