get exchange rate on change of date
diff --git a/erpnext/public/js/controllers/transaction.js b/erpnext/public/js/controllers/transaction.js
index 18e16c2..b82f142 100644
--- a/erpnext/public/js/controllers/transaction.js
+++ b/erpnext/public/js/controllers/transaction.js
@@ -413,6 +413,7 @@
 	transaction_date: function() {
 		if (this.frm.doc.transaction_date) {
 			this.frm.transaction_date = this.frm.doc.transaction_date;
+			frappe.ui.form.trigger(me.frm.doc.doctype, "currency");
 		}
 	},
 
@@ -434,9 +435,12 @@
 					callback: function(r, rt) {
 						if(r.message) {
 							me.frm.set_value("due_date", r.message);
+							frappe.ui.form.trigger(me.frm.doc.doctype, "currency");
 						}
 					}
 				})
+			} else {
+				frappe.ui.form.trigger(me.frm.doc.doctype, "currency");
 			}
 		}
 	},
diff --git a/erpnext/setup/utils.py b/erpnext/setup/utils.py
index 0733b7c..3adca56 100644
--- a/erpnext/setup/utils.py
+++ b/erpnext/setup/utils.py
@@ -6,95 +6,101 @@
 from frappe import _, throw
 from frappe.utils import flt
 from frappe.utils import get_datetime, get_datetime_str
-
+	
 def get_company_currency(company):
-    currency = frappe.db.get_value("Company", company, "default_currency", cache=True)
-    if not currency:
-        currency = frappe.db.get_default("currency")
-    if not currency:
-        throw(_('Please specify Default Currency in Company Master and Global Defaults'))
+	currency = frappe.db.get_value("Company", company, "default_currency", cache=True)
+	if not currency:
+		currency = frappe.db.get_default("currency")
+	if not currency:
+		throw(_('Please specify Default Currency in Company Master and Global Defaults'))
 
-    return currency
+	return currency
 
 def get_root_of(doctype):
-    """Get root element of a DocType with a tree structure"""
-    result = frappe.db.sql_list("""select name from `tab%s`
-        where lft=1 and rgt=(select max(rgt) from `tab%s` where docstatus < 2)""" %
-        (doctype, doctype))
-    return result[0] if result else None
+	"""Get root element of a DocType with a tree structure"""
+	result = frappe.db.sql_list("""select name from `tab%s`
+		where lft=1 and rgt=(select max(rgt) from `tab%s` where docstatus < 2)""" %
+		(doctype, doctype))
+	return result[0] if result else None
 
 def get_ancestors_of(doctype, name):
-    """Get ancestor elements of a DocType with a tree structure"""
-    lft, rgt = frappe.db.get_value(doctype, name, ["lft", "rgt"])
-    result = frappe.db.sql_list("""select name from `tab%s`
-        where lft<%s and rgt>%s order by lft desc""" % (doctype, "%s", "%s"), (lft, rgt))
-    return result or []
+	"""Get ancestor elements of a DocType with a tree structure"""
+	lft, rgt = frappe.db.get_value(doctype, name, ["lft", "rgt"])
+	result = frappe.db.sql_list("""select name from `tab%s`
+		where lft<%s and rgt>%s order by lft desc""" % (doctype, "%s", "%s"), (lft, rgt))
+	return result or []
 
 def before_tests():
-    frappe.clear_cache()
-    # complete setup if missing
-    from frappe.desk.page.setup_wizard.setup_wizard import setup_complete
-    if not frappe.get_list("Company"):
-        setup_complete({
-            "currency"            :"USD",
-            "first_name"        :"Test",
-            "last_name"            :"User",
-            "company_name"        :"Wind Power LLC",
-            "timezone"            :"America/New_York",
-            "company_abbr"        :"WP",
-            "industry"            :"Manufacturing",
-            "country"            :"United States",
-            "fy_start_date"        :"2011-01-01",
-            "fy_end_date"        :"2011-12-31",
-            "language"            :"english",
-            "company_tagline"    :"Testing",
-            "email"                :"test@erpnext.com",
-            "password"            :"test",
-            "chart_of_accounts" : "Standard",
-            "domain"            : "Manufacturing",
-            
-        })
+	frappe.clear_cache()
+	# complete setup if missing
+	from frappe.desk.page.setup_wizard.setup_wizard import setup_complete
+	if not frappe.get_list("Company"):
+		setup_complete({
+			"currency"			:"USD",
+			"first_name"		:"Test",
+			"last_name"			:"User",
+			"company_name"		:"Wind Power LLC",
+			"timezone"			:"America/New_York",
+			"company_abbr"		:"WP",
+			"industry"			:"Manufacturing",
+			"country"			:"United States",
+			"fy_start_date"		:"2011-01-01",
+			"fy_end_date"		:"2011-12-31",
+			"language"			:"english",
+			"company_tagline"	:"Testing",
+			"email"				:"test@erpnext.com",
+			"password"			:"test",
+			"chart_of_accounts" : "Standard",
+			"domain"			: "Manufacturing",
+			
+		})
 
-    frappe.db.sql("delete from `tabLeave Allocation`")
-    frappe.db.sql("delete from `tabLeave Application`")
-    frappe.db.sql("delete from `tabSalary Slip`")
-    frappe.db.sql("delete from `tabItem Price`")
+	frappe.db.sql("delete from `tabLeave Allocation`")
+	frappe.db.sql("delete from `tabLeave Application`")
+	frappe.db.sql("delete from `tabSalary Slip`")
+	frappe.db.sql("delete from `tabItem Price`")
 
-    frappe.db.set_value("Stock Settings", None, "auto_insert_price_list_rate_if_missing", 0)
+	frappe.db.set_value("Stock Settings", None, "auto_insert_price_list_rate_if_missing", 0)
 
-    frappe.db.commit()
+	frappe.db.commit()
 
 @frappe.whitelist()
 def get_exchange_rate(translation_date, from_currency, to_currency):
-    if not (translation_date and from_currency and to_currency):
-        # manqala 19/09/2016: Should this be an empty return or should it throw and exception?
-        return
-    
-    if from_currency == to_currency:
-        return 1
-    
-    # cksgb 19/09/2016: get all entries in Currency Exchange with from_currency and to_currency. Order by date desc. Top one is the required exchange rate
-    entries = frappe.get_all("Currency Exchange", fields = ["*"], filters=[["date", "<=", get_datetime_str(translation_date)], ["from_currency", "=", from_currency], ["to_currency", "=", to_currency]], order_by="date desc")
-    if entries:
-        return flt(entries[0].exchange_rate)
+	if not (translation_date and from_currency and to_currency):
+		# manqala 19/09/2016: Should this be an empty return or should it throw and exception?
+		return
+	
+	if from_currency == to_currency:
+		return 1
+	
+	# cksgb 19/09/2016: get all entries in Currency Exchange with from_currency and to_currency. Order by date desc. Top one is the required exchange rate
+	entries = frappe.get_all("Currency Exchange", fields = ["exchange_rate"], 
+		filters=[
+			["date", "<=", get_datetime_str(translation_date)], 
+			["from_currency", "=", from_currency], 
+			["to_currency", "=", to_currency]
+		], order_by="date desc", limit=1)
+		
+	if entries:
+		return flt(entries[0].exchange_rate)
 
-    try:
-        cache = frappe.cache()
-        key = "currency_exchange_rate:{0}:{1}".format(from_currency, to_currency)
-        value = cache.get(key)
+	try:
+		cache = frappe.cache()
+		key = "currency_exchange_rate:{0}:{1}".format(from_currency, to_currency)
+		value = cache.get(key)
 
-        if not value:
-            import requests
-            response = requests.get("http://api.fixer.io/latest", params={
-                "base": from_currency,
-                "symbols": to_currency
-            })
-            # expire in 6 hours
-            response.raise_for_status()
-            value = response.json()["rates"][to_currency]
-            cache.setex(key, value, 6 * 60 * 60)
+		if not value:
+			import requests
+			response = requests.get("http://api.fixer.io/latest", params={
+				"base": from_currency,
+				"symbols": to_currency
+			})
+			# expire in 6 hours
+			response.raise_for_status()
+			value = response.json()["rates"][to_currency]
+			cache.setex(key, value, 6 * 60 * 60)
 
-        return flt(value)
-    except:
-        frappe.msgprint(_("Unable to find exchange rate for {0} to {1} for key date {2}").format(from_currency, to_currency, translation_date))
-        return 0.0
\ No newline at end of file
+		return flt(value)
+	except:
+		frappe.msgprint(_("Unable to find exchange rate for {0} to {1} for key date {2}").format(from_currency, to_currency, translation_date))
+		return 0.0
\ No newline at end of file