Merge pull request #1875 from rmehta/develop

status_updater.py
diff --git a/.travis.yml b/.travis.yml
index dba0dab..7e5f21d 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -27,5 +27,6 @@
   - frappe --reinstall
   - frappe --install_app erpnext --verbose
   - frappe -b
+  - frappe --build_website
   - frappe --serve_test &
   - frappe --verbose --run_tests --app erpnext
diff --git a/erpnext/controllers/status_updater.py b/erpnext/controllers/status_updater.py
index 9322ca6..90eacd9 100644
--- a/erpnext/controllers/status_updater.py
+++ b/erpnext/controllers/status_updater.py
@@ -183,10 +183,10 @@
 					args['second_source_condition'] = ""
 					if args.get('second_source_dt') and args.get('second_source_field') \
 							and args.get('second_join_field'):
-						args['second_source_condition'] = """ + (select sum(%(second_source_field)s)
+						args['second_source_condition'] = """ + ifnull((select sum(%(second_source_field)s)
 							from `tab%(second_source_dt)s`
 							where `%(second_join_field)s`="%(detail_id)s"
-							and (docstatus=1))""" % args
+							and (docstatus=1)), 0)""" % args
 
 					if args['detail_id']:
 						frappe.db.sql("""update `tab%(target_dt)s`
diff --git a/erpnext/patches.txt b/erpnext/patches.txt
index e9ba56b..53ab7b5 100644
--- a/erpnext/patches.txt
+++ b/erpnext/patches.txt
@@ -66,3 +66,4 @@
 erpnext.patches.v4_0.set_naming_series_property_setter
 erpnext.patches.v4_1.set_outgoing_email_footer
 erpnext.patches.v4_1.fix_jv_remarks
+erpnext.patches.v4_1.fix_sales_order_delivered_status
diff --git a/erpnext/patches/v4_1/fix_sales_order_delivered_status.py b/erpnext/patches/v4_1/fix_sales_order_delivered_status.py
new file mode 100644
index 0000000..f66d856
--- /dev/null
+++ b/erpnext/patches/v4_1/fix_sales_order_delivered_status.py
@@ -0,0 +1,15 @@
+# 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
+
+def execute():
+	for si in frappe.db.sql_list("""select name
+		from `tabSales Invoice`
+		where ifnull(update_stock,0) = 1 and docstatus = 1 and exists(
+			select name from `tabSales Invoice Item` where parent=`tabSales Invoice`.name and
+				ifnull(so_detail, "") != "")"""):
+
+		invoice = frappe.get_doc("Sales Invoice", si)
+		invoice.update_qty()