Payment Entry submission and more
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.js b/erpnext/accounts/doctype/payment_entry/payment_entry.js
index 826f236..3fb8fa5 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.js
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.js
@@ -3,8 +3,10 @@
 
 frappe.ui.form.on('Payment Entry', {
 	onload: function(frm) {
-		frm.set_value("paid_from_account_currency", null);
-		frm.set_value("paid_from_account_currency", null);
+		if(frm.doc.__islocal) {
+			frm.set_value("paid_from_account_currency", null);
+			frm.set_value("paid_to_account_currency", null);
+		}
 	},
 	
 	setup: function(frm) {
@@ -14,7 +16,7 @@
 			{fieldname: 'outstanding_amount', columns: 3},
 			{fieldname: 'allocated_amount', columns: 3}
 		];
-				
+		
 		var party_account_type = frm.doc.party_type=="Customer" ? "Receivable" : "Payable";
 				
 		frm.set_query("paid_from", function() {
@@ -79,23 +81,44 @@
 	refresh: function(frm) {
 		frm.events.hide_unhide_fields(frm);
 		frm.events.set_dynamic_labels(frm);
+		frm.events.show_general_ledger(frm);
 	},
 	
 	hide_unhide_fields: function(frm) {
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		
-		frm.toggle_display(["source_exchange_rate", "base_paid_amount"], 
-			(frm.doc.paid_from && frm.doc.paid_from_account_currency != company_currency));
-		
-		frm.toggle_display(["target_exchange_rate", "base_received_amount"], 
-			(frm.doc.paid_to && frm.doc.paid_to_account_currency != company_currency));
-		
-		frm.toggle_display(["base_total_allocated_amount"], 
-			((frm.doc.payment_type=="Receive" && frm.doc.paid_from_account_currency != company_currency) || 
-				(frm.doc.payment_type=="Pay" && frm.doc.paid_to_account_currency != company_currency)));
+		frm.toggle_display("source_exchange_rate", 
+			(frm.doc.paid_amount && frm.doc.paid_from_account_currency != company_currency));
+			
+		frm.toggle_display("target_exchange_rate", 
+			(frm.doc.received_amount && frm.doc.paid_to_account_currency != company_currency));
+			
+		frm.toggle_display("base_paid_amount", 
+			(!frm.doc.party && frm.doc.paid_from_account_currency != company_currency));
+			
+		frm.toggle_display("base_received_amount", 
+			(!frm.doc.party && frm.doc.paid_to_account_currency != company_currency));
 				
-		frm.toggle_display(["received_amount"], 
+		frm.toggle_display("received_amount", 
 			frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency)
+				
+		frm.toggle_display(["base_total_allocated_amount"], 
+			(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.base_total_allocated_amount &&
+			((frm.doc.payment_type=="Receive" && frm.doc.paid_from_account_currency != company_currency) || 
+			(frm.doc.payment_type=="Pay" && frm.doc.paid_to_account_currency != company_currency))));
+			
+		var party_amount = frm.doc.payment_type=="Receive" ? 
+			frm.doc.paid_amount : frm.doc.received_amount;
+					
+		frm.toggle_display("write_off_difference_amount", (frm.doc.difference_amount && frm.doc.party &&
+			(frm.doc.paid_from_account_currency == frm.doc.paid_to_account_currency) && 
+			(frm.doc.total_allocated_amount > party_amount)));
+		
+		frm.toggle_display("set_exchange_gain_loss", 
+			(frm.doc.paid_amount && frm.doc.received_amount && frm.doc.difference_amount && 
+				(frm.doc.paid_from_account_currency != frm.doc.paid_to_account_currency)));
+			
+		frm.refresh_fields();
 	},
 	
 	set_dynamic_labels: function(frm) {
@@ -128,16 +151,17 @@
 		
 		var party_account_currency = frm.doc.payment_type=="Receive" ? 
 			frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency;
-			
-		setup_field_label_map(["total_allocated_amount"], party_account_currency);
+
+		setup_field_label_map(["total_allocated_amount", "unallocated_amount"], party_account_currency);
 		
 		$.each(field_label_map, function(fname, label) {
 			me.frm.fields_dict[fname].set_label(label);
 		});
 		
-		setup_field_label_map(["total_amount"], company_currency, "references");
-		setup_field_label_map(["outstanding_amount", "allocated_amount"], 
+		setup_field_label_map(["total_amount", "outstanding_amount", "allocated_amount"], 
 			party_account_currency, "references");
+			
+		setup_field_label_map(["amount"], company_currency, "deductions");
 		
 		$.each(grid_field_label_map, function(fname, label) {
 			fname = fname.split("-");
@@ -149,7 +173,24 @@
 			("1 " + frm.doc.paid_from_account_currency + " = [?] " + company_currency));
 		
 		cur_frm.set_df_property("target_exchange_rate", "description", 
-			("1 " + frm.doc.paid_to_account_currency + " = [?] " + company_currency));		
+			("1 " + frm.doc.paid_to_account_currency + " = [?] " + company_currency));
+			
+		frm.refresh_fields();
+	},
+	
+	show_general_ledger: function(frm) {
+		if(frm.doc.docstatus==1) {
+			frm.add_custom_button(__('Ledger'), function() {
+				frappe.route_options = {
+					"voucher_no": frm.doc.name,
+					"from_date": frm.doc.posting_date,
+					"to_date": frm.doc.posting_date,
+					"company": frm.doc.company,
+					group_by_voucher: 0
+				};
+				frappe.set_route("query-report", "General Ledger");
+			}, "icon-table");
+		}
 	},
 		
 	"party": function(frm) {
@@ -190,7 +231,7 @@
 		if(frm.doc.payment_type == "Internal Transfer") {
 			$.each(["party", "party_balance", "paid_from", "paid_to", 
 				"references", "total_allocated_amount"], function(i, field) {
-					frm.set_value(field, "");
+					frm.set_value(field, null);
 			})
 		} else {
 			frm.events.party(frm);
@@ -256,6 +297,7 @@
 	},
 	
 	paid_from_account_currency: function(frm) {
+		if(!frm.doc.paid_from_account_currency) return;
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		
 		if (frm.doc.paid_from_account_currency == company_currency) {
@@ -279,6 +321,7 @@
 	},
 	
 	paid_to_account_currency: function(frm) {
+		if(!frm.doc.paid_to_account_currency) return;
 		var company_currency = frappe.get_doc(":Company", frm.doc.company).default_currency;
 		
 		frm.events.set_current_exchange_rate(frm, "target_exchange_rate", 
@@ -319,14 +362,20 @@
 			frm.set_value("target_exchange_rate", frm.doc.source_exchange_rate);
 			frm.set_value("base_received_amount", frm.doc.base_paid_amount);
 		}
-		
-		frm.events.set_difference_amount(frm);
+		if(frm.doc.payment_type == "Receive")
+			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.paid_amount);
+		else
+			frm.events.set_difference_amount(frm);
 	},
 	
 	received_amount: function(frm) {
 		frm.set_value("base_received_amount", 
 			flt(frm.doc.received_amount) * flt(frm.doc.target_exchange_rate));
-		frm.events.set_difference_amount(frm);
+			
+		if(frm.doc.payment_type == "Pay")
+			frm.events.allocate_party_amount_against_ref_docs(frm, frm.doc.received_amount);
+		else
+			frm.events.set_difference_amount(frm);
 	},
 	
 	get_outstanding_documents: function(frm) {
@@ -354,24 +403,40 @@
 						c.reference_name = d.voucher_no;
 						c.total_amount = d.invoice_amount;
 						c.outstanding_amount = d.outstanding_amount;
+						
+						var party_account_currency = frm.doc.payment_type=="Receive" ? 
+							frm.doc.paid_from_account_currency : frm.doc.paid_to_account_currency;
 
-						if(frm.doc.party_account_currency != company_currency) {
+						if(party_account_currency != company_currency) {
 							c.exchange_rate = d.exchange_rate;
 						} else {
 							c.exchange_rate = 1;
 						}
-						
 						if (in_list(['Sales Invoice', 'Purchase Invoice'], d.reference_doctype)){
 							c.due_date = d.due_date
 						}
 					});
 				}
-				frm.events.set_total_allocated_amount(frm);
-				frm.refresh_fields()
+				
+				frm.events.allocate_party_amount_against_ref_docs(frm, 
+					(frm.doc.payment_type=="Receive" ? frm.doc.paid_amount : frm.doc.received_amount));
 			}
 		});
 	},
 	
+	allocate_party_amount_against_ref_docs: function(frm, amount) {
+		$.each(frm.doc.references || [], function(i, row) {
+			if (!amount) return false;
+			
+			if(row.outstanding_amount >= amount) row.allocated_amount = amount;
+			else row.allocated_amount = row.outstanding_amount;
+			
+			amount -= flt(row.allocated_amount);
+		})
+		frm.refresh_fields()
+		frm.events.set_total_allocated_amount(frm);
+	},
+	
 	set_total_allocated_amount: function(frm) {
 		var total_allocated_amount = base_total_allocated_amount = 0.0;
 		$.each(frm.doc.references || [], function(i, row) {
@@ -399,12 +464,15 @@
 	
 	set_difference_amount: function(frm) {
 		var unallocated_amount = 0;
-		var party_amount = frm.doc.payment_type=="Receive" ? frm.doc.paid_amount : frm.doc.received_amount;
+		if(frm.doc.party) {
+			var party_amount = frm.doc.payment_type=="Receive" ? 
+				frm.doc.paid_amount : frm.doc.received_amount;
 		
-		if(frm.doc.total_allocated_amount < party_amount)
-			unallocated_amount = party_amount - frm.doc.total_allocated_amount;
+			if(frm.doc.total_allocated_amount < party_amount)
+				unallocated_amount = party_amount - frm.doc.total_allocated_amount;
+		}	
 		
-		frm.set_value("unallocated_amount", unallocated_amount)
+		frm.set_value("unallocated_amount", unallocated_amount);
 		
 		var difference_amount = 0;
 		var base_unallocated_amount = flt(frm.doc.unallocated_amount) *	
@@ -426,8 +494,7 @@
 		
 		frm.set_value("difference_amount", difference_amount);
 		
-		frm.toggle_display("write_off_difference_amount", 
-			(frm.doc.difference_amount && frm.doc.total_allocated_amount > party_amount));
+		frm.events.hide_unhide_fields(frm);
 	},
 	
 	check_mandatory_to_fetch: function(frm) {
@@ -455,7 +522,6 @@
 					frappe.msgprint(__("Row #{0}: Reference Document Type must be one of Purchase Order, Purchase Invoice or Journal Entry", [row.idx]));
 					return false;
 				}
-
 		}
 
 		if (row) {
@@ -466,20 +532,28 @@
 	},
 	
 	write_off_difference_amount: function(frm) {
+		frm.events.set_deductions_entry(frm, "write_off_account");	
+	},
+
+	set_exchange_gain_loss: function(frm) {
+		frm.events.set_deductions_entry(frm, "exchange_gain_loss_account");
+	},
+	
+	set_deductions_entry: function(frm, account) {
 		if(frm.doc.difference_amount) {
 			frappe.call({
-				method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_write_off_account_and_cost_center",
+				method: "erpnext.accounts.doctype.payment_entry.payment_entry.get_company_defaults",
 				args: {
 					company: frm.doc.company
 				},
 				callback: function(r, rt) {
 					if(r.message) {
 						var write_off_row = $.map(frm.doc["deductions"] || [], function(t) { 
-							return t.account==r.message["write_off_account"] ? t : null; });
+							return t.account==r.message[account] ? t : null; });
 						
 						if (!write_off_row.length) {
 							var row = frm.add_child("deductions");
-							row.account = r.message["write_off_account"];
+							row.account = r.message[account];
 							row.cost_center = r.message["cost_center"];
 						} else {
 							var row = write_off_row[0];
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.json b/erpnext/accounts/doctype/payment_entry/payment_entry.json
index 5994aa3..f21fe56 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.json
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.json
@@ -353,7 +353,7 @@
    "depends_on": "paid_from", 
    "fieldname": "paid_from_account_currency", 
    "fieldtype": "Link", 
-   "hidden": 1, 
+   "hidden": 0, 
    "ignore_user_permissions": 0, 
    "ignore_xss_filter": 0, 
    "in_filter": 0, 
@@ -368,7 +368,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -473,7 +473,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -547,6 +547,7 @@
    "label": "Paid Amount", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "paid_from_account_currency", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -579,7 +580,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -599,13 +600,14 @@
    "label": "Paid Amount (Company Currency)", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "Company:company:default_currency", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -649,6 +651,7 @@
    "label": "Received Amount", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "paid_to_account_currency", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -681,7 +684,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -701,13 +704,14 @@
    "label": "Received Amount (Company Currency)", 
    "length": 0, 
    "no_copy": 0, 
+   "options": "Company:company:default_currency", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
    "print_hide_if_no_value": 0, 
    "read_only": 1, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -758,7 +762,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -808,6 +812,32 @@
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
+   "reqd": 1, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "depends_on": "eval:doc.docstatus==1", 
+   "fieldname": "clearance_date", 
+   "fieldtype": "Date", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Clearance Date", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
    "reqd": 0, 
    "search_index": 0, 
    "set_only_once": 0, 
@@ -896,7 +926,7 @@
    "allow_on_submit": 0, 
    "bold": 1, 
    "collapsible": 0, 
-   "depends_on": "", 
+   "depends_on": "eval:(doc.paid_amount && doc.received_amount && doc.references)", 
    "fieldname": "total_allocated_amount", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -933,32 +963,7 @@
    "label": "Total Allocated Amount (Company Currency)", 
    "length": 0, 
    "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 0, 
-   "read_only": 1, 
-   "report_hide": 0, 
-   "reqd": 0, 
-   "search_index": 0, 
-   "set_only_once": 0, 
-   "unique": 0
-  }, 
-  {
-   "allow_on_submit": 0, 
-   "bold": 0, 
-   "collapsible": 0, 
-   "depends_on": "", 
-   "fieldname": "difference_amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Difference Amount (Company Currency)", 
-   "length": 0, 
-   "no_copy": 0, 
+   "options": "Company:company:default_currency", 
    "permlevel": 0, 
    "precision": "", 
    "print_hide": 0, 
@@ -1000,6 +1005,31 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "set_exchange_gain_loss", 
+   "fieldtype": "Button", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Set Exchange Gain / Loss", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 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": "column_break_36", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -1024,7 +1054,7 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
-   "depends_on": "", 
+   "depends_on": "eval:(doc.paid_amount && doc.received_amount && doc.references)", 
    "fieldname": "unallocated_amount", 
    "fieldtype": "Currency", 
    "hidden": 0, 
@@ -1048,6 +1078,33 @@
   }, 
   {
    "allow_on_submit": 0, 
+   "bold": 1, 
+   "collapsible": 0, 
+   "depends_on": "eval:(doc.paid_amount && doc.received_amount)", 
+   "fieldname": "difference_amount", 
+   "fieldtype": "Currency", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Difference Amount (Company Currency)", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Company:company:default_currency", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 1, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 1, 
    "collapsible_depends_on": "deductions", 
@@ -1103,134 +1160,6 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 1, 
-   "collapsible_depends_on": "write_off_amount", 
-   "depends_on": "difference_amount", 
-   "fieldname": "write_off_section", 
-   "fieldtype": "Section Break", 
-   "hidden": 1, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Write Off", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 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": "write_off_account", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Write Off Account", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Account", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 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": "write_off_amount", 
-   "fieldtype": "Currency", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Write Off Amount", 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 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": "column_break_39", 
-   "fieldtype": "Column Break", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "length": 0, 
-   "no_copy": 0, 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 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": "write_off_cost_center", 
-   "fieldtype": "Link", 
-   "hidden": 0, 
-   "ignore_user_permissions": 0, 
-   "ignore_xss_filter": 0, 
-   "in_filter": 0, 
-   "in_list_view": 0, 
-   "label": "Write Off Cost Center", 
-   "length": 0, 
-   "no_copy": 0, 
-   "options": "Cost Center", 
-   "permlevel": 0, 
-   "precision": "", 
-   "print_hide": 0, 
-   "print_hide_if_no_value": 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": 1, 
    "collapsible_depends_on": "", 
    "depends_on": "eval:(doc.paid_from && doc.paid_to && doc.paid_amount && doc.received_amount)", 
    "fieldname": "section_break_12", 
@@ -1406,6 +1335,31 @@
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
+  }, 
+  {
+   "allow_on_submit": 0, 
+   "bold": 0, 
+   "collapsible": 0, 
+   "fieldname": "title", 
+   "fieldtype": "Data", 
+   "hidden": 1, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Title", 
+   "length": 0, 
+   "no_copy": 0, 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 0, 
+   "read_only": 0, 
+   "report_hide": 0, 
+   "reqd": 0, 
+   "search_index": 0, 
+   "set_only_once": 0, 
+   "unique": 0
   }
  ], 
  "hide_heading": 0, 
@@ -1418,7 +1372,7 @@
  "issingle": 0, 
  "istable": 0, 
  "max_attachments": 0, 
- "modified": "2016-06-26 01:00:56.344341", 
+ "modified": "2016-06-26 17:36:58.416685", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Entry", 
@@ -1471,5 +1425,6 @@
  "read_only_onload": 0, 
  "sort_field": "modified", 
  "sort_order": "DESC", 
+ "title_field": "title", 
  "track_seen": 0
 }
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_entry/payment_entry.py b/erpnext/accounts/doctype/payment_entry/payment_entry.py
index 30848d8..c421d32 100644
--- a/erpnext/accounts/doctype/payment_entry/payment_entry.py
+++ b/erpnext/accounts/doctype/payment_entry/payment_entry.py
@@ -5,7 +5,7 @@
 from __future__ import unicode_literals
 import frappe, json
 from frappe import _, scrub
-from frappe.utils import flt
+from frappe.utils import flt, comma_or
 from erpnext.accounts.utils import get_outstanding_invoices, get_account_currency, get_balance_on
 from erpnext.accounts.party import get_party_account
 from erpnext.accounts.doctype.journal_entry.journal_entry import get_average_exchange_rate
@@ -17,13 +17,18 @@
 
 class PaymentEntry(AccountsController):
 	def validate(self):
+		self.define_party_account_field()
 		self.set_missing_values()
 		self.validate_party_details()
-		self.validate_allocated_amounts()
+		self.validate_bank_accounts()
 		self.set_exchange_rate()
-		self.set_amounts()
-		self.validate_mandatory()
-		self.set_write_off_amount()
+		self.set_amounts_in_company_currency()
+		self.validate_reference_documents()
+		self.set_total_allocated_amount()
+		self.set_unallocated_amount()
+		self.set_difference_amount()
+		self.clear_unallocated_reference_document_rows()
+		self.set_title()
 		
 	def on_submit(self):
 		self.make_gl_entries()
@@ -32,32 +37,45 @@
 	def on_cancel(self):
 		self.make_gl_entries()
 		self.update_advance_paid()
-				
-	def set_missing_values(self):
+		
+	def define_party_account_field(self):
+		self.party_account_field = None
+		
 		if self.payment_type == "Receive":
-			self.paid_from = self.paid_from_account_currency = self.paid_from_account_balance = None
+			self.party_account_field = "paid_from"
 		elif self.payment_type == "Pay":
-			self.paid_to = self.paid_to_account_currency = self.paid_to_account_balance = None
-		elif self.payment_type == "Internal Transfer":
-			self.party = self.party_account = self.party_account_currency = self.party_balance = None
+			self.party_account_field = "paid_to"
+					
+	def set_missing_values(self):
+		if self.payment_type == "Internal Transfer":
+			for field in ("party", "party_balance", "total_allocated_amount", 
+				"base_total_allocated_amount", "unallocated_amount"):
+					self.set(field, None)
+			self.references = []
+		else:
+			if not self.party_type:
+				frappe.throw(_("Party Type is mandatory"))
+				
+			if not self.party:
+				frappe.throw(_("Party is mandatory"))
 		
 		if self.party:
-			if self.party_account:				
-				if not self.party_account_currency:
-					self.party_account_currency = get_account_currency(self.party_account)
+			if not self.party_balance:
+				self.party_balance = get_balance_on(party_type=self.party_type,
+					party=self.party, date=self.posting_date)
+			
+			if not self.get(self.party_account_field):
+				party_account = get_party_account(self.party_type, self.party, self.company)
+				self.set(self.party_account_field, party_account)
 				
-				if not self.party_balance:
-					self.party_balance = get_balance_on(party_type=self.party_type,
-						party=self.party, date=self.posting_date)
-			else:
-				self.party_account = get_party_account(self.party_type, self.party, self.company)
+			self.party_account = self.get(self.party_account_field)
 				
-		if self.paid_from:
+		if self.paid_from and not (self.paid_from_account_currency or self.paid_from_account_balance):
 			acc = get_account_currency_and_balance(self.paid_from, self.posting_date)
 			self.paid_from_account_currency = acc.account_currency
 			self.paid_from_account_balance = acc.account_balance
 				
-		if self.paid_to:
+		if self.paid_to and not (self.paid_to_account_currency or self.paid_to_account_balance):
 			acc = get_account_currency_and_balance(self.paid_to, self.posting_date)
 			self.paid_to_account_currency = acc.account_currency
 			self.paid_to_account_balance = acc.account_balance
@@ -66,178 +84,233 @@
 		if self.party:
 			if not frappe.db.exists(self.party_type, self.party):
 				frappe.throw(_("Invalid {0}: {1}").format(self.party_type, self.party))
-				
+			
 			if self.party_account:
-				account_type = frappe.db.get_value("Account", self.party_account, "account_type")
-				
-				if self.party_type == "Customer" and account_type != "Receivable":
-					frappe.throw(_("Account Type must be Receivable for {0}").format(self.party_account))
+				party_account_type = "Receivable" if self.party_type=="Customer" else "Payable"
+				self.validate_account_type(self.party_account, [party_account_type])
 					
-				if self.party_type == "Supplier" and account_type != "Payable":
-					frappe.throw(_("Account Type must be Payable for {0}").format(self.party_account))
+	def validate_bank_accounts(self):
+		if self.payment_type in ("Pay", "Internal Transfer"):
+			self.validate_account_type(self.paid_from, ["Bank", "Cash"])
+			
+		if self.payment_type in ("Receive", "Internal Transfer"):
+			self.validate_account_type(self.paid_to, ["Bank", "Cash"])
+			
+	def validate_account_type(self, account, account_types):
+		account_type = frappe.db.get_value("Account", account, "account_type")
+		if account_type not in account_types:
+			frappe.throw(_("Account Type for {0} must be {1}").format(comma_or(account_types)))
 				
-	def validate_allocated_amounts(self):
+	def set_exchange_rate(self):
+		if self.paid_from:
+			if self.paid_from_account_currency == self.company_currency:
+				self.source_exchange_rate = 1
+			elif self.payment_type in ("Pay", "Internal Transfer"):
+				self.source_exchange_rate = get_average_exchange_rate(self.paid_from)
+			else:
+				self.source_exchange_rate = get_exchange_rate(self.paid_from_account_currency, 
+					self.company_currency)
+		
+		if self.paid_to:
+			self.target_exchange_rate = get_exchange_rate(self.paid_to_account_currency, 
+				self.company_currency)
+		
+	def set_amounts_in_company_currency(self):
+		self.base_paid_amount, self.base_received_amount, self.difference_amount = 0, 0, 0
+		if self.paid_amount:
+			self.base_paid_amount = flt(flt(self.paid_amount) * flt(self.source_exchange_rate), 
+				self.precision("base_paid_amount"))
+				
+		if self.received_amount:
+			self.base_received_amount = flt(flt(self.received_amount) * flt(self.target_exchange_rate), 
+				self.precision("base_received_amount"))
+				
+	def validate_reference_documents(self):
+		if self.party_type == "Customer":
+			valid_reference_doctypes = ("Sales Order", "Sales Invoice", "Journal Entry")
+		else:
+			valid_reference_doctypes = ("Purchase Order", "Purchase Invoice", "Journal Entry")
+			
+		for d in self.get("references"):
+			if d.reference_doctype not in valid_reference_doctypes:
+				frappe.throw(_("Reference Doctype must be one of {0}")
+					.format(comma_or(valid_reference_doctypes)))
+				
+			elif d.reference_name:
+				if not frappe.db.exists(d.reference_doctype, d.reference_name):
+					frappe.throw(_("{0} {1} does not exist").format(d.reference_doctype, d.reference_name))
+				else:
+					ref_doc = frappe.get_doc(d.reference_doctype, d.reference_name)
+
+					if d.reference_doctype != "Journal Entry" \
+							and self.party != ref_doc.get(scrub(self.party_type)):
+						frappe.throw(_("{0} {1} does not associated with {2} {3}")
+							.format(d.reference_doctype, d.reference_name, self.party_type, self.party))
+					
+					if ref_doc.docstatus != 1:
+						frappe.throw(_("{0} {1} must be submitted")
+							.format(d.reference_doctype, d.reference_name))
+				
+	def set_total_allocated_amount(self):
 		if self.payment_type == "Internal Transfer":
-			self.references = []
-			self.total_allocated_amount = 0
 			return
 			
 		self.total_allocated_amount, self.base_total_allocated_amount = 0, 0
 		for d in self.get("references"):
 			if d.allocated_amount:
+				if d.allocated_amount > d.outstanding_amount:
+					frappe.throw(_("Row #{0}: Allocated amount cannot be greater than outstanding amount")
+						.format(d.idx))
+				
 				self.total_allocated_amount += flt(d.allocated_amount)
 				self.base_total_allocated_amount += flt(flt(d.allocated_amount) * flt(d.exchange_rate), 
 					self.precision("base_paid_amount"))
-
-		party_amount_field = "received_amount" if self.payment_type == "Pay" else "paid_amount"
+	
+	def set_unallocated_amount(self):
+		self.unallocated_amount = 0;
+		if self.party:
+			party_amount = self.paid_amount if self.payment_type=="Receive" else self.received_amount
 			
-		if self.total_allocated_amount != self.get(party_amount_field):
-			frappe.throw(_("Total Allocated Amount must be equal to {0} ({1})")
-				.format(self.get(party_amount_field), self.meta.get_label(party_amount_field)))
+			if self.total_allocated_amount < party_amount:
+				self.unallocated_amount = party_amount - self.total_allocated_amount
 				
-	def set_exchange_rate(self):
-		if self.paid_from:
-			if self.paid_from_account_currency != self.company_currency:
-				self.source_exchange_rate = get_average_exchange_rate(self.paid_from)
-			else:
-				self.source_exchange_rate = 1
-				
-		if self.paid_to:
-			self.target_exchange_rate = get_exchange_rate(self.paid_to_account_currency, 
-				self.company_currency)
+	def set_difference_amount(self):
+		base_unallocated_amount = self.unallocated_amount * \
+			(self.source_exchange_rate if self.payment_type=="Receive" else self.target_exchange_rate)
+			
+		base_party_amount = self.base_total_allocated_amount + base_unallocated_amount
 		
-	def set_amounts(self):
-		self.base_paid_amount, self.base_received_amount, self.difference_amount = 0, 0, 0
-		if self.paid_amount:
-			if self.paid_from:
-				self.base_paid_amount = flt(flt(self.paid_amount) * flt(self.source_exchange_rate), 
-					self.precision("base_paid_amount"))
-			else:
-				self.base_paid_amount = self.base_total_allocated_amount
-				
-		if self.received_amount:
-			if self.paid_to:
-				self.base_received_amount = flt(flt(self.received_amount) * flt(self.target_exchange_rate), 
-					self.precision("base_received_amount"))
-			else:
-				self.base_received_amount = self.base_total_allocated_amount
-		
-		self.difference_amount = self.base_paid_amount - self.base_received_amount
-		
-	def validate_mandatory(self):
-		mandatory_fields = ["paid_amount", "received_amount", "base_paid_amount", "base_received_amount", 
-			"reference_no", "reference_date"]
 		if self.payment_type == "Receive":
-			mandatory_fields += ["party_type", "party", "party_account", "party_account_currency", 
-				"paid_to", "paid_to_account_currency", "references", "total_allocated_amount"]
+			self.difference_amount = base_party_amount - self.base_received_amount
 		elif self.payment_type == "Pay":
-			mandatory_fields += ["party_type", "party", "party_account", "party_account_currency", 
-				"paid_from", "paid_from_account_currency", "references", "total_allocated_amount"]
+			self.difference_amount = self.base_paid_amount - base_party_amount
 		else:
-			mandatory_fields += ["paid_from", "paid_from_account_currency",
-				"paid_to", "paid_to_account_currency"]
+			self.difference_amount = self.base_paid_amount - flt(self.base_received_amount)
+			
+		for d in self.get("deductions"):
+			if d.amount:
+				self.difference_amount -= flt(d.amount)
 				
-		if self.paid_from:
-			mandatory_fields.append("source_exchange_rate")
-		if self.paid_to:
-			mandatory_fields.append("target_exchange_rate")
+	def clear_unallocated_reference_document_rows(self):
+		self.set("references", self.get("references", {"allocated_amount": ["not in", [0, None, ""]]}))
 
-		for field in mandatory_fields:
-			if not self.get(field):
-				frappe.throw(_("{0} is mandatory").format(self.meta.get_label(field)))
-
-	def set_write_off_amount(self):
+		frappe.db.sql("""delete from `tabPayment Entry Reference` 
+			where parent = %s and allocated_amount = 0""", self.name)
+			
+	def set_title(self):
 		if self.payment_type in ("Receive", "Pay"):
-			bank_account_currency = self.paid_from_account_currency \
-				if self.paid_from else self.paid_to_account_currency
-				
-			if self.party_account_currency == bank_account_currency and self.difference_amount:
-				self.write_off_amount = self.difference_amount
+			self.title = self.party
+		else:
+			self.title = self.paid_from + " - " + self.paid_to
 				
 	def make_gl_entries(self):
 		gl_entries = []
 		self.add_party_gl_entries(gl_entries)
 		self.add_bank_gl_entries(gl_entries)
-		self.add_write_off_gl_entries(gl_entries)
 		self.add_deductions_gl_entries(gl_entries)
 		
 		make_gl_entries(gl_entries, cancel = (self.docstatus==2))
 		
-		
 	def add_party_gl_entries(self, gl_entries):
 		if self.party_account:
+			if self.payment_type=="Receive":
+				party_account_currency = self.paid_from_account_currency
+				against_account = self.paid_to
+			else:
+				 party_account_currency = self.paid_to_account_currency
+				 against_account = self.paid_from
+			
+				
 			party_gl_dict = self.get_gl_dict({
 				"account": self.party_account,
 				"party_type": self.party_type,
 				"party": self.party,
-				"against": self.paid_from or self.paid_to,
-				"account_currency": self.party_account_currency
+				"against": against_account,
+				"account_currency": party_account_currency
 			})
 			
 			for d in self.get("references"):
-				party_gl_dict.update({
+				gle = party_gl_dict.copy()
+				gle.update({
 					"against_voucher_type": d.reference_doctype,
 					"against_voucher": d.reference_name
 				})
 				
 				allocated_amount_in_company_currency = flt(flt(d.allocated_amount) * flt(d.exchange_rate), 
-					self.precision("paid_amount"))
-					
+					self.precision("paid_amount"))	
+				
 				if self.payment_type == "Receive":
-					party_gl_dict.update({
+					gle.update({
 						"credit_in_account_currency": d.allocated_amount,
 						"credit": allocated_amount_in_company_currency
 					})
 				elif self.payment_type == "Pay":
-					party_gl_dict.update({
+					gle.update({
 						"debit_in_account_currency": d.allocated_amount,
 						"debit": allocated_amount_in_company_currency
 					})
 				
-				gl_entries.append(party_gl_dict)
+				gl_entries.append(gle)
+				
+			if self.unallocated_amount:
+				base_unallocated_amount = base_unallocated_amount = self.unallocated_amount * \
+					(self.source_exchange_rate if self.payment_type=="Receive" else self.target_exchange_rate)
+					
+				gle = party_gl_dict.copy()
+				if self.payment_type == "Receive":
+					gle.update({
+						"credit_in_account_currency": self.unallocated_amount,
+						"credit": base_unallocated_amount
+					})
+				elif self.payment_type == "Pay":
+					gle.update({
+						"debit_in_account_currency": self.unallocated_amount,
+						"debit": base_unallocated_amount
+					})
+				
+				gl_entries.append(gle)
+				
 				
 	def add_bank_gl_entries(self, gl_entries):
-		if self.paid_from and self.paid_amount:
+		if self.payment_type in ("Pay", "Internal Transfer"):
 			gl_entries.append(
 				self.get_gl_dict({
 					"account": self.paid_from,
 					"account_currency": self.paid_from_account_currency,
-					"against": self.party_account,
+					"against": self.party if self.payment_type=="Pay" else self.paid_to,
 					"credit_in_account_currency": self.paid_amount,
 					"credit": self.base_paid_amount
 				})
 			)
-		if self.paid_to and self.received_amount:
+		if self.payment_type in ("Receive", "Internal Transfer"):
 			gl_entries.append(
 				self.get_gl_dict({
 					"account": self.paid_to,
 					"account_currency": self.paid_to_account_currency,
-					"against": self.party,
+					"against": self.party if self.payment_type=="Receive" else self.paid_from,
 					"debit_in_account_currency": self.received_amount,
 					"debit": self.base_received_amount
 				})
 			)
 			
-	def add_write_off_gl_entries(self, gl_entries):
-		if self.write_off_account and self.write_off_amount:
-			write_off_account_currency = get_account_currency(self.write_off_account)
-			if self.write_off_account_currency != self.company_currency:
-				frappe.throw(_("Write Off Account currency must be same as {0}")
-					.format(self.company_currency))
-
-			gl_entries.append(
-				self.get_gl_dict({
-					"account": self.write_off_account,
-					"against": self.party,
-					"debit_in_account_currency": self.write_off_amount,
-					"debit": self.write_off_amount,
-					"cost_center": self.write_off_cost_center
-				}, write_off_account_currency)
-			)
-		
 	def add_deductions_gl_entries(self, gl_entries):
-		pass
-
+		for d in self.get("deductions"):
+			if d.amount:
+				account_currency = get_account_currency(d.account)
+				if account_currency != self.company_currency:
+					frappe.throw(_("Currency for {0} must be {1}").format(d.account, self.company_currency))
+					
+				gl_entries.append(
+					self.get_gl_dict({
+						"account": d.account,
+						"account_currency": account_currency,
+						"against": self.party or self.paid_from,
+						"debit_in_account_currency": d.amount,
+						"debit": d.amount,
+						"cost_center": d.cost_center
+					})
+				)
+				
 	def update_advance_paid(self):
 		if self.payment_type in ("Receive", "Pay") and self.party:
 			for d in self.get("references"):
@@ -324,6 +397,13 @@
 	})
 	
 @frappe.whitelist()
-def get_write_off_account_and_cost_center(company):
-	return frappe.db.get_value("Company", company, ["write_off_account", "cost_center"], as_dict=1)
-	
\ No newline at end of file
+def get_company_defaults(company):
+	fields = ["write_off_account", "exchange_gain_loss_account", "cost_center"]
+	ret = frappe.db.get_value("Company", company, fields, as_dict=1)
+	
+	for fieldname in fields:
+		if not ret[fieldname]:
+			frappe.throw(_("Please set default {0} in Company {1}")
+				.format(frappe.get_meta("Company").get_label(fieldname), company))
+	
+	return ret
\ No newline at end of file
diff --git a/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json b/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json
index a82270a..62a0d17 100644
--- a/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json
+++ b/erpnext/accounts/doctype/payment_entry_reference/payment_entry_reference.json
@@ -30,7 +30,7 @@
    "print_hide_if_no_value": 0, 
    "read_only": 0, 
    "report_hide": 0, 
-   "reqd": 0, 
+   "reqd": 1, 
    "search_index": 0, 
    "set_only_once": 0, 
    "unique": 0
@@ -221,7 +221,7 @@
  "issingle": 0, 
  "istable": 1, 
  "max_attachments": 0, 
- "modified": "2016-06-22 16:15:10.404692", 
+ "modified": "2016-06-26 15:01:17.161402", 
  "modified_by": "Administrator", 
  "module": "Accounts", 
  "name": "Payment Entry Reference", 
diff --git a/erpnext/accounts/utils.py b/erpnext/accounts/utils.py
index 2ae8bba..20416e5 100644
--- a/erpnext/accounts/utils.py
+++ b/erpnext/accounts/utils.py
@@ -290,7 +290,7 @@
 	value = frappe.db.get_value("Company", company, fieldname)
 
 	if not value:
-		throw(_("Please set default value {0} in Company {1}").format(frappe.get_meta("Company").get_label(fieldname), company))
+		throw(_("Please set default {0} in Company {1}").format(frappe.get_meta("Company").get_label(fieldname), company))
 
 	return value
 
@@ -427,7 +427,9 @@
 			'due_date': frappe.db.get_value(d.voucher_type, d.voucher_no, "due_date"),
 			'exchange_rate': frappe.db.get_value(d.voucher_type, d.voucher_no, "conversion_rate")
 		})
-
+		
+	outstanding_invoices = sorted(outstanding_invoices, key=lambda k: k['due_date'])
+	
 	return outstanding_invoices
 
 
diff --git a/erpnext/controllers/accounts_controller.py b/erpnext/controllers/accounts_controller.py
index fb03721..36abae8 100644
--- a/erpnext/controllers/accounts_controller.py
+++ b/erpnext/controllers/accounts_controller.py
@@ -255,7 +255,7 @@
 		if not account_currency:
 			account_currency = get_account_currency(gl_dict.account)
 
-		if self.doctype not in ["Journal Entry", "Period Closing Voucher"]:
+		if self.doctype not in ["Journal Entry", "Period Closing Voucher", "Payment Entry"]:
 			self.validate_account_currency(gl_dict.account, account_currency)
 			set_balance_in_account_currency(gl_dict, account_currency, self.get("conversion_rate"), self.company_currency)
 
diff --git a/erpnext/setup/doctype/company/company.js b/erpnext/setup/doctype/company/company.js
index 9f9b1cc..ff12f68 100644
--- a/erpnext/setup/doctype/company/company.js
+++ b/erpnext/setup/doctype/company/company.js
@@ -137,6 +137,7 @@
 		["default_income_account", {"root_type": "Income"}],
 		["round_off_account", {"root_type": "Expense"}],
 		["write_off_account", {"root_type": "Expense"}],
+		["exchange_gain_loss_account", {"root_type": "Expense"}],
 		["accumulated_depreciation_account", {"root_type": "Asset"}],
 		["depreciation_expense_account", {"root_type": "Expense"}],
 		["disposal_account", {"report_type": "Profit and Loss"}],
diff --git a/erpnext/setup/doctype/company/company.json b/erpnext/setup/doctype/company/company.json
index 754504e..25e0cfb 100644
--- a/erpnext/setup/doctype/company/company.json
+++ b/erpnext/setup/doctype/company/company.json
@@ -525,6 +525,32 @@
    "allow_on_submit": 0, 
    "bold": 0, 
    "collapsible": 0, 
+   "fieldname": "exchange_gain_loss_account", 
+   "fieldtype": "Link", 
+   "hidden": 0, 
+   "ignore_user_permissions": 0, 
+   "ignore_xss_filter": 0, 
+   "in_filter": 0, 
+   "in_list_view": 0, 
+   "label": "Exchange Gain / Loss Account", 
+   "length": 0, 
+   "no_copy": 0, 
+   "options": "Account", 
+   "permlevel": 0, 
+   "precision": "", 
+   "print_hide": 0, 
+   "print_hide_if_no_value": 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": "column_break0", 
    "fieldtype": "Column Break", 
    "hidden": 0, 
@@ -1359,7 +1385,7 @@
  "istable": 0, 
  "max_attachments": 0, 
  "menu_index": 0, 
- "modified": "2016-06-26 00:44:30.299891", 
+ "modified": "2016-06-26 09:08:50.476200", 
  "modified_by": "Administrator", 
  "module": "Setup", 
  "name": "Company",