Merge branch 'master' of github.com:webnotes/erpnext
diff --git a/accounts/doctype/gl_control/gl_control.py b/accounts/doctype/gl_control/gl_control.py
index a458d03..e4896d3 100644
--- a/accounts/doctype/gl_control/gl_control.py
+++ b/accounts/doctype/gl_control/gl_control.py
@@ -136,47 +136,58 @@
 			else:
 				self.entries.append(le)
 
-
-	# Save GL Entries
-	# ----------------
-	def save_entries(self, cancel, adv_adj, update_outstanding):
+	def manage_debit_credit(self, cancel):
+		total_debit, total_credit = 0, 0
 		for le in self.entries:
 			# round off upto 2 decimal
-			le.debit, le.credit = round(flt(le.debit), 2), round(flt(le.credit), 2)
-			
+			le.debit = flt(le.debit, 2)
+			le.credit = flt(le.credit, 2)
+
 			#toggle debit, credit if negative entry
 			if flt(le.debit) < 0 or flt(le.credit) < 0:
 				tmp=le.debit
 				le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
 			
-			# toggled debit/credit in two separate condition because both should be executed at the 
-			# time of cancellation when there is negative amount (tax discount)
+			# toggled debit/credit in two separate condition because both
+			# should be executed at the time of cancellation when there is 
+			# negative amount (tax discount)
 			if cancel:
 				tmp=le.debit
 				le.debit, le.credit = abs(flt(le.credit)), abs(flt(tmp))
+		
+			# update total debit / credit
+			total_debit += flt(le.debit, 2)
+			total_credit += flt(le.credit, 2)
+			
+		diff = flt(total_debit - total_credit, 2)
+		if abs(diff)==0.01:
+			if self.entries[0].debit:
+				self.entries[0].debit = self.entries[0].debit - diff
+			elif self.entries[0].credit:
+				self.entries[0].credit = self.entries[0].credit + diff
+		elif abs(diff) > 0.01 and not cancel:
+			# Due to old wrong entries(total debit!=total credit) some voucher should be cancelled
+			msgprint("""Debit and Credit not equal for this voucher: Diff (Debit) is %s""" %
+			 	diff, raise_exception=1)
 
-
+	def save_entries(self, cancel, adv_adj, update_outstanding):
+		self.manage_debit_credit(cancel)
+		
+		for le in self.entries:
 			le_obj = get_obj(doc=le)
 			# validate except on_cancel
 			if not cancel:
 				le_obj.validate()
 
-			# save
 			le.save(1)
 			le_obj.on_update(adv_adj, cancel, update_outstanding)
-
-			# update total debit / credit
-			self.td += flt(le.debit)
-			self.tc += flt(le.credit)
 			
 			
 	# Make Multiple Entries
-	# ---------------------
 	def make_gl_entries(self, doc, doclist, cancel=0, adv_adj = 0, use_mapper='', merge_entries = 1, update_outstanding='Yes'):
 		self.entries = []
 		# get entries
 		le_map_list = webnotes.conn.sql("select * from `tabGL Mapper Detail` where parent = %s", use_mapper or doc.doctype, as_dict=1)
-		self.td, self.tc = 0.0, 0.0
 		for le_map in le_map_list:
 			if le_map['table_field']:
 				for d in getlist(doclist,le_map['table_field']):
@@ -189,11 +200,7 @@
 		# save entries
 		self.save_entries(cancel, adv_adj, update_outstanding)
 
-		# check total debit / credit
-		# Due to old wrong entries (total debit != total credit) some voucher could be cancelled
-		if abs(self.td - self.tc) > 0.004 and not cancel:
-			msgprint("Debit and Credit not equal for this voucher: Diff (Debit) is %s" % (self.td-self.tc))
-			raise Exception
+		
 
 		# set as cancelled
 		if cancel:
diff --git a/buying/doctype/purchase_common/purchase_common.js b/buying/doctype/purchase_common/purchase_common.js
index b29ccb7..4905006 100644
--- a/buying/doctype/purchase_common/purchase_common.js
+++ b/buying/doctype/purchase_common/purchase_common.js
@@ -21,7 +21,6 @@
 var tname = cur_frm.cscript.tname;
 var fname = cur_frm.cscript.fname;
 
-
 cur_frm.cscript.get_default_schedule_date = function(doc) {
 		var ch = getchildren( tname, doc.name, fname);
 		if (flt(ch.length) > 0){
diff --git a/hr/doctype/expense_claim/expense_claim.js b/hr/doctype/expense_claim/expense_claim.js
index 8ba0978..28487a8 100644
--- a/hr/doctype/expense_claim/expense_claim.js
+++ b/hr/doctype/expense_claim/expense_claim.js
@@ -54,10 +54,8 @@
 	} else {
 		if(doc.approval_status=="Draft") {		
 			if(user==doc.exp_approver) {
-				if(doc.approval_status=="Draft") {
-					cur_frm.set_intro("You are the Expense Approver for this record. Please Update the 'Status' and Save");
-					cur_frm.toggle_enable("approval_status", true);
-				}
+				cur_frm.set_intro("You are the Expense Approver for this record. Please Update the 'Status' and Save");
+				cur_frm.toggle_enable("approval_status", true);
 			} else {
 				cur_frm.set_intro("Expense Claim is pending approval. Only the Expense Approver can update status.");
 				cur_frm.toggle_enable("approval_status", false);
diff --git a/hr/doctype/expense_claim/expense_claim.txt b/hr/doctype/expense_claim/expense_claim.txt
index f42e2dd..638a9f7 100644
--- a/hr/doctype/expense_claim/expense_claim.txt
+++ b/hr/doctype/expense_claim/expense_claim.txt
@@ -2,9 +2,9 @@
  {
   "owner": "harshada@webnotestech.com", 
   "docstatus": 0, 
-  "creation": "2012-12-05 14:11:53", 
+  "creation": "2012-12-05 16:53:59", 
   "modified_by": "Administrator", 
-  "modified": "2012-12-05 14:22:27"
+  "modified": "2012-12-06 17:34:37"
  }, 
  {
   "is_submittable": 1, 
@@ -43,7 +43,7 @@
   "permlevel": 0
  }, 
  {
-  "permlevel": 1, 
+  "permlevel": 0, 
   "no_copy": 1, 
   "oldfieldtype": "Select", 
   "colour": "White:FFF", 
@@ -248,8 +248,8 @@
   "doctype": "DocPerm", 
   "submit": 1, 
   "write": 1, 
-  "cancel": 1, 
   "role": "Expense Approver", 
+  "cancel": 1, 
   "permlevel": 0, 
   "match": "exp_approver:user"
  }, 
@@ -259,8 +259,8 @@
   "doctype": "DocPerm", 
   "submit": 1, 
   "write": 1, 
-  "cancel": 1, 
   "role": "HR User", 
+  "cancel": 1, 
   "permlevel": 0
  }, 
  {