Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index 4f29ece..bc305ff 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
 from __future__ import unicode_literals
-__version__ = '6.4.1'
+__version__ = '6.4.2'
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index 8396ce5..81bfec5 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -141,6 +141,7 @@
 
 	def reconcile(self, args):
 		for e in self.get('payments'):
+			e.invoice_type = None
 			if e.invoice_number and " | " in e.invoice_number:
 				e.invoice_type, e.invoice_number = e.invoice_number.split(" | ")
 
diff --git a/erpnext/accounts/report/general_ledger/general_ledger.py b/erpnext/accounts/report/general_ledger/general_ledger.py
index a7b1d19..7bad361 100644
--- a/erpnext/accounts/report/general_ledger/general_ledger.py
+++ b/erpnext/accounts/report/general_ledger/general_ledger.py
@@ -161,40 +161,26 @@
 		for acc, acc_dict in gle_map.items():
 			if acc_dict.entries:
 				# Opening for individual ledger, if grouped by account
-				if filters.get("group_by_account"):
-					data.append(get_balance_row(_("Opening"), acc_dict.opening,
-						acc_dict.opening_in_account_currency))
+				data.append(get_balance_row(_("Opening"), acc_dict.opening,
+					acc_dict.opening_in_account_currency))
 
 				data += acc_dict.entries
 
 				# Totals and closing for individual ledger, if grouped by account
-				if filters.get("group_by_account"):
-					account_closing = acc_dict.opening + acc_dict.total_debit - acc_dict.total_credit
-					account_closing_in_account_currency = acc_dict.opening_in_account_currency \
-						+ acc_dict.total_debit_in_account_currency - acc_dict.total_credit_in_account_currency
+				account_closing = acc_dict.opening + acc_dict.total_debit - acc_dict.total_credit
+				account_closing_in_account_currency = acc_dict.opening_in_account_currency \
+					+ acc_dict.total_debit_in_account_currency - acc_dict.total_credit_in_account_currency
 
-					data += [{"account": "'" + _("Totals") + "'", "debit": acc_dict.total_debit,
-						"credit": acc_dict.total_credit},
-						get_balance_row(_("Closing (Opening + Totals)"),
-							account_closing, account_closing_in_account_currency), {}]
+				data += [{"account": "'" + _("Totals") + "'", "debit": acc_dict.total_debit,
+					"credit": acc_dict.total_credit},
+					get_balance_row(_("Closing (Opening + Totals)"),
+						account_closing, account_closing_in_account_currency), {}]
 
 	else:
-		from_date, to_date = getdate(filters.from_date), getdate(filters.to_date)
-		opening_debit = opening_credit = 0.0
-
 		for gl in gl_entries:
-			if gl.posting_date < from_date:
-				opening_debit += flt(gl.debit, 3)
-				opening_credit += flt(gl.credit, 3)
-			else:
+			if gl.posting_date >= getdate(filters.from_date) and gl.posting_date <= getdate(filters.to_date):
 				data.append(gl)
 
-	if not (filters.get("account") or filters.get("party")):
-		data = [{
-			"account": "'" + _("Opening") + "'",
-			"debit": opening_debit,
-			"credit": opening_credit
-		}] + data
 
 	# Total debit and credit between from and to date
 	if total_debit or total_credit:
diff --git a/erpnext/crm/doctype/lead/lead.py b/erpnext/crm/doctype/lead/lead.py
index 12de2e5..0e72865 100644
--- a/erpnext/crm/doctype/lead/lead.py
+++ b/erpnext/crm/doctype/lead/lead.py
@@ -58,12 +58,12 @@
 	def check_email_id_is_unique(self):
 		if self.email_id:
 			# validate email is unique
-			email_list = frappe.db.sql("""select name from tabLead where email_id=%s""",
-				self.email_id)
-			email_list = [e[0] for e in email_list if e[0]!=self.name]
-			if len(email_list) > 1:
-				frappe.throw(_("Email id must be unique, already exists for {0}").format(comma_and(email_list)),
-					frappe.DuplicateEntryError)
+			duplicate_leads = frappe.db.sql_list("""select name from tabLead 
+				where email_id=%s and name!=%s""", (self.email_id, self.name))
+
+			if duplicate_leads:
+				frappe.throw(_("Email id must be unique, already exists for {0}")
+					.format(comma_and(duplicate_leads)), frappe.DuplicateEntryError)
 
 	def on_trash(self):
 		frappe.db.sql("""update `tabIssue` set lead='' where lead=%s""",
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 2443a48..8c2797f 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -29,7 +29,7 @@
 """
 app_icon = "icon-th"
 app_color = "#e74c3c"
-app_version = "6.4.1"
+app_version = "6.4.2"
 github_link = "https://github.com/frappe/erpnext"
 
 error_report_email = "support@erpnext.com"
diff --git a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
index f53acca..0dc25d2 100644
--- a/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
+++ b/erpnext/hr/report/monthly_attendance_sheet/monthly_attendance_sheet.py
@@ -5,6 +5,7 @@
 import frappe
 from frappe.utils import cstr, cint
 from frappe import msgprint, _
+from calendar import monthrange
 
 def execute(filters=None):
 	if not filters: filters = {}
@@ -73,23 +74,17 @@
 		msgprint(_("Please select month and year"), raise_exception=1)
 
 	filters["month"] = ["Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Aug", "Sep", "Oct", "Nov",
-		"Dec"].index(filters["month"]) + 1
+		"Dec"].index(filters.month) + 1
 
-	from frappe.model.document import Document
-	fiscal_years = frappe.get_doc("Fiscal Year",filters["fiscal_year"])
-	import datetime
-	year_start = fiscal_years.year_start_date.strftime("%Y")
-	year_end = fiscal_years.year_end_date.strftime("%Y")
-	dt_test = datetime.datetime.strptime(year_end + "-" + str(100+int(filters["month"]))[2:3] + "-01", "%Y-%m-%d")
-	date_test = datetime.date(dt_test.year, dt_test.month, dt_test.day)
-	if date_test > fiscal_years.year_end_date:
-		year_target = year_start
+	year_start_date, year_end_date = frappe.db.get_value("Fiscal Year", filters.fiscal_year, 
+		["year_start_date", "year_end_date"])
+		
+	if filters.month >= year_start_date.strftime("%m"):
+		year = year_start_date.strftime("%Y")
 	else:
-		year_target = year_end
-
-	from calendar import monthrange
-	filters["total_days_in_month"] = monthrange(cint(year_target),
-		filters["month"])[1]
+		year = year_end_date.strftime("%Y")
+	
+	filters["total_days_in_month"] = monthrange(cint(year), filters.month)[1]
 
 	conditions = " and month(att_date) = %(month)s and fiscal_year = %(fiscal_year)s"
 
diff --git a/erpnext/selling/doctype/customer/customer.js b/erpnext/selling/doctype/customer/customer.js
index e596ae4..42cc93a 100644
--- a/erpnext/selling/doctype/customer/customer.js
+++ b/erpnext/selling/doctype/customer/customer.js
@@ -17,7 +17,6 @@
 	}
 
 	var grid = cur_frm.get_field("sales_team").grid;
-	grid.set_column_disp("allocated_percentage", false);
 	grid.set_column_disp("allocated_amount", false);
 	grid.set_column_disp("incentives", false);
 
@@ -101,11 +100,11 @@
 		'company': d.company,
 		"is_group": 0
 	};
-	
+
 	if(doc.party_account_currency) {
 		$.extend(filters, {"account_currency": doc.party_account_currency});
 	}
-		
+
 	return {
 		filters: filters
 	}
diff --git a/erpnext/utilities/address_and_contact.py b/erpnext/utilities/address_and_contact.py
index 9341adf..d175db6 100644
--- a/erpnext/utilities/address_and_contact.py
+++ b/erpnext/utilities/address_and_contact.py
@@ -53,13 +53,23 @@
 	if not links.get("not_permitted_links"):
 		# when everything is permitted, don't add additional condition
 		return ""
+		
+	elif not links.get("permitted_links"):
+		conditions = []
+		
+		# when everything is not permitted
+		for df in links.get("not_permitted_links"):
+			# like ifnull(customer, '')='' and ifnull(supplier, '')=''
+			conditions.append("ifnull(`tab{doctype}`.`{fieldname}`, '')=''".format(doctype=doctype, fieldname=df.fieldname))
+			
+		return "( " + " and ".join(conditions) + " )"
 
 	else:
 		conditions = []
 
 		for df in links.get("permitted_links"):
 			# like ifnull(customer, '')!='' or ifnull(supplier, '')!=''
-			conditions.append("ifnull(`tab{doctype}`.`{fieldname}`, '')!=''".format(doctype=doctype, fieldname=df.fieldname))
+			conditions.append("ifnull(`tab{doctype}`.`{fieldname}`, '')!=''".format(doctype=doctype, fieldname=df.fieldname))			
 
 		return "( " + " or ".join(conditions) + " )"
 
diff --git a/setup.py b/setup.py
index b1baaff..355a404 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
 from setuptools import setup, find_packages
 
-version = "6.4.1"
+version = "6.4.2"
 
 with open("requirements.txt", "r") as f:
 	install_requires = f.readlines()