Merge branch 'develop'
diff --git a/erpnext/__version__.py b/erpnext/__version__.py
index bc305ff..ac1c3f2 100644
--- a/erpnext/__version__.py
+++ b/erpnext/__version__.py
@@ -1,2 +1,2 @@
 from __future__ import unicode_literals
-__version__ = '6.4.2'
+__version__ = '6.4.3'
diff --git a/erpnext/accounts/doctype/fiscal_year/test_records.json b/erpnext/accounts/doctype/fiscal_year/test_records.json
index 09fb90e..abaab97 100644
--- a/erpnext/accounts/doctype/fiscal_year/test_records.json
+++ b/erpnext/accounts/doctype/fiscal_year/test_records.json
@@ -1,32 +1,38 @@
 [
  {
-  "doctype": "Fiscal Year", 
-  "year": "_Test Fiscal Year 2012", 
-  "year_end_date": "2012-12-31", 
+  "doctype": "Fiscal Year",
+  "year": "_Test Fiscal Year 2012",
+  "year_end_date": "2012-12-31",
   "year_start_date": "2012-01-01"
- }, 
+ },
  {
-  "doctype": "Fiscal Year", 
-  "year": "_Test Fiscal Year 2013", 
-  "year_end_date": "2013-12-31", 
+  "doctype": "Fiscal Year",
+  "year": "_Test Fiscal Year 2013",
+  "year_end_date": "2013-12-31",
   "year_start_date": "2013-01-01"
- }, 
+ },
  {
-  "doctype": "Fiscal Year", 
-  "year": "_Test Fiscal Year 2014", 
-  "year_end_date": "2014-12-31", 
+  "doctype": "Fiscal Year",
+  "year": "_Test Fiscal Year 2014",
+  "year_end_date": "2014-12-31",
   "year_start_date": "2014-01-01"
- }, 
+ },
  {
-  "doctype": "Fiscal Year", 
-  "year": "_Test Fiscal Year 2015", 
-  "year_end_date": "2015-12-31", 
+  "doctype": "Fiscal Year",
+  "year": "_Test Fiscal Year 2015",
+  "year_end_date": "2015-12-31",
   "year_start_date": "2015-01-01"
- }, 
+ },
  {
-  "doctype": "Fiscal Year", 
-  "year": "_Test Fiscal Year 2016", 
-  "year_end_date": "2016-12-31", 
+  "doctype": "Fiscal Year",
+  "year": "_Test Fiscal Year 2016",
+  "year_end_date": "2016-12-31",
   "year_start_date": "2016-01-01"
+ },
+ {
+  "doctype": "Fiscal Year",
+  "year": "_Test Fiscal Year 2017",
+  "year_end_date": "2017-12-31",
+  "year_start_date": "2017-01-01"
  }
-]
\ No newline at end of file
+]
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
index ab6db9d..eb84cb0 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.js
@@ -74,21 +74,7 @@
 			doc: me.frm.doc,
 			method: 'get_unreconciled_entries',
 			callback: function(r, rt) {
-				var invoices = [];
-
-				$.each(me.frm.doc.invoices || [], function(i, row) {
-					if (row.invoice_number && !inList(invoices, row.invoice_number))
-						invoices.push(row.invoice_type + " | " + row.invoice_number);
-				});
-
-				frappe.meta.get_docfield("Payment Reconciliation Payment", "invoice_number",
-					me.frm.doc.name).options = invoices.join("\n");
-
-				$.each(me.frm.doc.payments || [], function(i, p) {
-					if(!inList(invoices, cstr(p.invoice_number))) p.invoice_number = null;
-				});
-
-				refresh_field("payments");
+				me.set_invoice_options();
 			}
 		});
 
@@ -98,8 +84,29 @@
 		var me = this;
 		return this.frm.call({
 			doc: me.frm.doc,
-			method: 'reconcile'
+			method: 'reconcile',
+			callback: function(r, rt) {
+				me.set_invoice_options();
+			}
 		});
+	},
+	
+	set_invoice_options: function() {
+		var invoices = [];
+
+		$.each(me.frm.doc.invoices || [], function(i, row) {
+			if (row.invoice_number && !inList(invoices, row.invoice_number))
+				invoices.push(row.invoice_type + " | " + row.invoice_number);
+		});
+
+		frappe.meta.get_docfield("Payment Reconciliation Payment", "invoice_number",
+			me.frm.doc.name).options = invoices.join("\n");
+
+		$.each(me.frm.doc.payments || [], function(i, p) {
+			if(!inList(invoices, cstr(p.invoice_number))) p.invoice_number = null;
+		});
+
+		refresh_field("payments");
 	}
 
 });
diff --git a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
index 81bfec5..13b8f02 100644
--- a/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
+++ b/erpnext/accounts/doctype/payment_reconciliation/payment_reconciliation.py
@@ -3,11 +3,8 @@
 
 from __future__ import unicode_literals
 import frappe
-
 from frappe.utils import flt
-
 from frappe import msgprint, _
-
 from frappe.model.document import Document
 
 class PaymentReconciliation(Document):
@@ -17,7 +14,8 @@
 
 	def get_jv_entries(self):
 		self.check_mandatory_to_fetch()
-		dr_or_cr = "credit" if self.party_type == "Customer" else "debit"
+		dr_or_cr = "credit_in_account_currency" if self.party_type == "Customer" \
+			else "debit_in_account_currency"
 
 		cond = self.check_condition(dr_or_cr)
 
@@ -68,7 +66,7 @@
 	def get_invoice_entries(self):
 		#Fetch JVs, Sales and Purchase Invoices for 'invoices' to reconcile against
 		non_reconciled_invoices = []
-		dr_or_cr = "debit" if self.party_type == "Customer" else "credit"
+		dr_or_cr = "debit_in_account_currency" if self.party_type == "Customer" else "credit_in_account_currency"
 		cond = self.check_condition(dr_or_cr)
 
 		invoice_list = frappe.db.sql("""
@@ -106,13 +104,15 @@
 					and account = %(account)s and {0} > 0
 					and against_voucher_type = %(against_voucher_type)s
 					and ifnull(against_voucher, '') = %(against_voucher)s
-			""".format("credit" if self.party_type == "Customer" else "debit"), {
-				"party_type": self.party_type,
-				"party": self.party,
-				"account": self.receivable_payable_account,
-				"against_voucher_type": d.voucher_type,
-				"against_voucher": d.voucher_no
-			})
+			""".format("credit_in_account_currency" if self.party_type == "Customer" 
+				else "debit_in_account_currency"), {
+					"party_type": self.party_type,
+					"party": self.party,
+					"account": self.receivable_payable_account,
+					"against_voucher_type": d.voucher_type,
+					"against_voucher": d.voucher_no
+				}
+			)
 
 			payment_amount = payment_amount[0][0] if payment_amount else 0
 
@@ -147,7 +147,8 @@
 
 		self.get_invoice_entries()
 		self.validate_invoice()
-		dr_or_cr = "credit" if self.party_type == "Customer" else "debit"
+		dr_or_cr = "credit_in_account_currency" if self.party_type == "Customer" \
+			else "debit_in_account_currency"
 		lst = []
 		for e in self.get('payments'):
 			if e.invoice_number and e.allocated_amount:
diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.js b/erpnext/accounts/doctype/payment_tool/payment_tool.js
index 0b4fb2d..ec15b47 100644
--- a/erpnext/accounts/doctype/payment_tool/payment_tool.js
+++ b/erpnext/accounts/doctype/payment_tool/payment_tool.js
@@ -141,7 +141,10 @@
 					c.against_voucher_no = d.voucher_no;
 					c.total_amount = d.invoice_amount;
 					c.outstanding_amount = d.outstanding_amount;
-					c.payment_amount = d.outstanding_amount;
+
+					if (frm.doc.set_payment_amount) {
+						c.payment_amount = d.outstanding_amount;
+					}
 				});
 			}
 			refresh_field("vouchers");
diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.json b/erpnext/accounts/doctype/payment_tool/payment_tool.json
index 55e7048..a99054f 100644
--- a/erpnext/accounts/doctype/payment_tool/payment_tool.json
+++ b/erpnext/accounts/doctype/payment_tool/payment_tool.json
@@ -189,6 +189,28 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "set_payment_amount", 
+   "fieldtype": "Check", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Set Payment Amount = Outstanding Amount", 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
    "fieldname": "get_outstanding_vouchers", 
    "fieldtype": "Button", 
    "hidden": 0, 
@@ -474,7 +496,7 @@
  "is_submittable": 0, 
  "issingle": 1, 
  "istable": 0, 
- "modified": "2015-08-31 18:58:21.813054", 
+ "modified": "2015-10-01 09:43:24.199025", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Tool", 
diff --git a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
index 7cbd4dd..76f51ee 100644
--- a/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
+++ b/erpnext/accounts/report/accounts_receivable/accounts_receivable.py
@@ -40,6 +40,13 @@
 
 		columns += [_("Age (Days)") + "::80"]
 
+		if not "range1" in self.filters:
+			self.filters["range1"] = "30"
+		if not "range2" in self.filters:
+			self.filters["range2"] = "60"
+		if not "range3" in self.filters:
+			self.filters["range3"] = "90"
+
 		for label in ("0-{range1}".format(**self.filters),
 			"{range1}-{range2}".format(**self.filters),
 			"{range2}-{range3}".format(**self.filters),
@@ -75,9 +82,9 @@
 		voucher_details = self.get_voucher_details(args.get("party_type"))
 
 		future_vouchers = self.get_entries_after(self.filters.report_date, args.get("party_type"))
-		
+
 		company_currency = frappe.db.get_value("Company", self.filters.get("company"), "default_currency")
-		
+
 		data = []
 		for gle in self.get_entries_till(self.filters.report_date, args.get("party_type")):
 			if self.is_receivable_or_payable(gle, dr_or_cr, future_vouchers):
@@ -117,7 +124,7 @@
 						row += [self.get_territory(gle.party)]
 					if args.get("party_type") == "Supplier":
 						row += [self.get_supplier_type(gle.party)]
-						
+
 					if self.filters.get(scrub(args.get("party_type"))):
 						row.append(gle.account_currency)
 					else:
@@ -209,7 +216,7 @@
 			self.gl_entries = frappe.db.sql("""select name, posting_date, account, party_type, party,
 				voucher_type, voucher_no, against_voucher_type, against_voucher, account_currency, remarks, {0}
 				from `tabGL Entry`
-				where docstatus < 2 and party_type=%s and ifnull(party, '') != '' {1} 
+				where docstatus < 2 and party_type=%s and ifnull(party, '') != '' {1}
 				order by posting_date, party"""
 				.format(select_fields, conditions), values, as_dict=True)
 
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 2a77fa1..1997694 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -198,6 +198,8 @@
 	"""
 	jv_detail = jv_obj.get("accounts", {"name": d["voucher_detail_no"]})[0]
 	jv_detail.set(d["dr_or_cr"], d["allocated_amt"])
+	jv_detail.set('debit' if d['dr_or_cr']=='debit_in_account_currency' else 'credit', 
+		d["allocated_amt"]*flt(jv_detail.exchange_rate))
 
 	original_reference_type = jv_detail.reference_type
 	original_reference_name = jv_detail.reference_name
@@ -210,6 +212,9 @@
 			select cost_center, balance, against_account, is_advance, account_type, exchange_rate
 			from `tabJournal Entry Account` where name = %s
 		""", d['voucher_detail_no'], as_dict=True)
+		
+		amount_in_account_currency = flt(d['unadjusted_amt']) - flt(d['allocated_amt'])
+		amount_in_company_currency = amount_in_account_currency * flt(jvd[0]['exchange_rate'])
 
 		# new entry with balance amount
 		ch = jv_obj.append("accounts")
@@ -220,8 +225,14 @@
 		ch.party = d["party"]
 		ch.cost_center = cstr(jvd[0]["cost_center"])
 		ch.balance = flt(jvd[0]["balance"])
-		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.set(d['dr_or_cr'], amount_in_account_currency)
+		ch.set('debit' if d['dr_or_cr']=='debit_in_account_currency' else 'credit', amount_in_company_currency)
+		
+		ch.set('credit_in_account_currency' if d['dr_or_cr']== 'debit_in_account_currency' 
+			else 'debit_in_account_currency', 0)
+		ch.set('credit' if d['dr_or_cr']== 'debit_in_account_currency' else 'debit', 0)
+		
 		ch.against_account = cstr(jvd[0]["against_account"])
 		ch.reference_type = original_reference_type
 		ch.reference_name = original_reference_name
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index a92d070..daf3377 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -428,7 +428,10 @@
 			if party_type and party:
 				party_account_currency = get_party_account_currency(party_type, party, self.company)
 
-				if party_account_currency != self.company_currency and self.currency != party_account_currency:
+				if (party_account_currency
+					and party_account_currency != self.company_currency
+					and self.currency != party_account_currency):
+
 					frappe.throw(_("Accounting Entry for {0}: {1} can only be made in currency: {2}")
 						.format(party_type, party, party_account_currency), InvalidCurrency)
 
diff --git a/erpnext/hooks.py b/erpnext/hooks.py
index 8c2797f..4855fc6 100644
--- a/erpnext/hooks.py
+++ b/erpnext/hooks.py
@@ -29,7 +29,7 @@
 """
 app_icon = "icon-th"
 app_color = "#e74c3c"
-app_version = "6.4.2"
+app_version = "6.4.3"
 github_link = "https://github.com/frappe/erpnext"
 
 error_report_email = "support@erpnext.com"
diff --git a/setup.py b/setup.py
index 355a404..339d864 100644
--- a/setup.py
+++ b/setup.py
@@ -1,6 +1,6 @@
 from setuptools import setup, find_packages
 
-version = "6.4.2"
+version = "6.4.3"
 
 with open("requirements.txt", "r") as f:
 	install_requires = f.readlines()