Merge pull request #1900 from anandpdoshi/anand-july-7

Fix in Purchase Order and Re-order Item
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 60a755b..bc005d7 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -184,7 +184,7 @@
 		ch = jv_obj.append("entries")
 		ch.account = d['account']
 		ch.cost_center = cstr(jvd[0][0])
-		ch.balance = cstr(jvd[0][1])
+		ch.balance = flt(jvd[0][1])
 		ch.set(d['dr_or_cr'], flt(d['unadjusted_amt']) - flt(d['allocated_amt']))
 		ch.set(d['dr_or_cr']== 'debit' and 'credit' or 'debit', 0)
 		ch.against_account = cstr(jvd[0][2])
diff --git a/erpnext/buying/doctype/purchase_order/purchase_order.py b/erpnext/buying/doctype/purchase_order/purchase_order.py
index ef3cd06..2109d72 100644
--- a/erpnext/buying/doctype/purchase_order/purchase_order.py
+++ b/erpnext/buying/doctype/purchase_order/purchase_order.py
@@ -66,7 +66,7 @@
 		itemwise_min_order_qty = frappe._dict(frappe.db.sql("select name, min_order_qty from tabItem"))
 
 		for d in self.get("po_details"):
-			if flt(d.qty) < flt(itemwise_min_order_qty.get(d.item_code)):
+			if flt(d.stock_qty) < flt(itemwise_min_order_qty.get(d.item_code)):
 				frappe.throw(_("Row #{0}: Ordered qty can not less than item's minimum order qty (defined in item master).").format(d.idx))
 
 	def get_schedule_dates(self):
diff --git a/erpnext/setup/doctype/item_group/item_group.py b/erpnext/setup/doctype/item_group/item_group.py
index cf3442d..745345e 100644
--- a/erpnext/setup/doctype/item_group/item_group.py
+++ b/erpnext/setup/doctype/item_group/item_group.py
@@ -19,6 +19,7 @@
 		self.name = self.item_group_name
 
 	def validate(self):
+		WebsiteGenerator.validate(self)
 		if not self.parent_website_route:
 			if frappe.db.get_value("Item Group", self.parent_item_group, "show_in_website"):
 				self.parent_website_route = frappe.get_website_route("Item Group",
diff --git a/erpnext/setup/doctype/sales_partner/sales_partner.py b/erpnext/setup/doctype/sales_partner/sales_partner.py
index 296cd6a..0209df3 100644
--- a/erpnext/setup/doctype/sales_partner/sales_partner.py
+++ b/erpnext/setup/doctype/sales_partner/sales_partner.py
@@ -14,6 +14,7 @@
 		self.name = self.partner_name
 
 	def validate(self):
+		super(SalesPartner, self).validate()
 		if self.partner_website and not self.partner_website.startswith("http"):
 			self.partner_website = "http://" + self.partner_website
 
diff --git a/erpnext/stock/doctype/item/item.py b/erpnext/stock/doctype/item/item.py
index 1de9ad2..21ed057 100644
--- a/erpnext/stock/doctype/item/item.py
+++ b/erpnext/stock/doctype/item/item.py
@@ -30,6 +30,8 @@
 		self.name = self.item_code
 
 	def validate(self):
+		super(Item, self).validate()
+
 		if not self.stock_uom:
 			msgprint(_("Please enter default Unit of Measure"), raise_exception=1)
 		if self.image and not self.website_image:
diff --git a/erpnext/stock/utils.py b/erpnext/stock/utils.py
index c724497..340e551 100644
--- a/erpnext/stock/utils.py
+++ b/erpnext/stock/utils.py
@@ -7,6 +7,7 @@
 from frappe.utils import flt, cstr, nowdate, add_days, cint
 from frappe.defaults import get_global_default
 from frappe.utils.email_lib import sendmail
+from erpnext.accounts.utils import get_fiscal_year, FiscalYearError
 
 class InvalidWarehouseCompany(frappe.ValidationError): pass
 
@@ -222,15 +223,30 @@
 					})
 				)
 
-		create_material_request(material_requests)
+		if material_requests:
+			create_material_request(material_requests)
 
 def create_material_request(material_requests):
 	"""	Create indent on reaching reorder level	"""
 	mr_list = []
 	defaults = frappe.defaults.get_defaults()
 	exceptions_list = []
-	from erpnext.accounts.utils import get_fiscal_year
-	current_fiscal_year = get_fiscal_year(nowdate())[0] or defaults.fiscal_year
+
+	def _log_exception():
+		if frappe.local.message_log:
+			exceptions_list.extend(frappe.local.message_log)
+			frappe.local.message_log = []
+		else:
+			exceptions_list.append(frappe.get_traceback())
+
+	try:
+		current_fiscal_year = get_fiscal_year(nowdate())[0] or defaults.fiscal_year
+
+	except FiscalYearError:
+		_log_exception()
+		notify_errors(exceptions_list)
+		return
+
 	for request_type in material_requests:
 		for company in material_requests[request_type]:
 			try:
@@ -266,11 +282,7 @@
 				mr_list.append(mr)
 
 			except:
-				if frappe.local.message_log:
-					exceptions_list.append([] + frappe.local.message_log)
-					frappe.local.message_log = []
-				else:
-					exceptions_list.append(frappe.get_traceback())
+				_log_exception()
 
 	if mr_list:
 		if getattr(frappe.local, "reorder_email_notify", None) is None:
@@ -307,16 +319,16 @@
 	subject = "[Important] [ERPNext] Error(s) while creating Material Requests based on Re-order Levels"
 	msg = """Dear System Manager,
 
-		An error occured for certain Items while creating Material Requests based on Re-order level.
+An error occured for certain Items while creating Material Requests based on Re-order level.
 
-		Please rectify these issues:
-		---
-
-		%s
-
-		---
-		Regards,
-		Administrator""" % ("\n\n".join(["\n".join(msg) for msg in exceptions_list]),)
+Please rectify these issues:
+---
+<pre>
+%s
+</pre>
+---
+Regards,
+Administrator""" % ("\n\n".join(exceptions_list),)
 
 	from frappe.utils.user import get_system_managers
 	sendmail(get_system_managers(), subject=subject, msg=msg)