Change amount calcualtion in POS if there is write off amount and gl entries in this scenario
diff --git a/erpnext/controllers/taxes_and_totals.py b/erpnext/controllers/taxes_and_totals.py
index eb75dee..28b2f7c 100644
--- a/erpnext/controllers/taxes_and_totals.py
+++ b/erpnext/controllers/taxes_and_totals.py
@@ -440,33 +440,32 @@
 			paid_amount = self.doc.paid_amount \
 				if self.doc.party_account_currency == self.doc.currency else self.doc.base_paid_amount
 
-			self.doc.outstanding_amount = 0
-			if total_amount_to_pay > paid_amount:
-				self.doc.outstanding_amount = flt(total_amount_to_pay - flt(paid_amount),
-					self.doc.precision("outstanding_amount"))
-			self.change_amount()
+			self.calculate_change_amount()
 
+			self.doc.outstanding_amount = flt(total_amount_to_pay - flt(paid_amount) +
+				flt(self.doc.change_amount), self.doc.precision("outstanding_amount"))
+					
 		elif self.doc.doctype == "Purchase Invoice":
 			self.doc.outstanding_amount = flt(total_amount_to_pay, self.doc.precision("outstanding_amount"))
 		
 	def calculate_paid_amount(self):
 		paid_amount = base_paid_amount = 0.0
 		for payment in self.doc.get('payments'):
-			payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
-			paid_amount += payment.amount
-			base_paid_amount += payment.base_amount
+			if flt(payment.amount) > 0:
+				payment.base_amount = flt(payment.amount * self.doc.conversion_rate)
+				paid_amount += payment.amount
+				base_paid_amount += payment.base_amount
 
 		self.doc.paid_amount = flt(paid_amount, self.doc.precision("paid_amount"))
 		self.doc.base_paid_amount = flt(base_paid_amount, self.doc.precision("base_paid_amount"))
 
-	def change_amount(self):
-		change_amount = 0.0
+	def calculate_change_amount(self):
+		self.doc.change_amount = 0.0
 		if self.doc.paid_amount > self.doc.grand_total:
-			change_amount = flt(self.doc.paid_amount - self.doc.grand_total, 
-				self.doc.precision("change_amount"))
+			self.doc.change_amount = flt(self.doc.paid_amount - self.doc.grand_total + 
+				self.doc.write_off_amount, self.doc.precision("change_amount"))
 
-		self.doc.change_amount = change_amount;
-		self.doc.base_change_amount = flt(change_amount * self.doc.conversion_rate, 
+		self.doc.base_change_amount = flt(self.doc.change_amount * self.doc.conversion_rate, 
 			self.doc.precision("base_change_amount"))
 
 	def calculate_margin(self, item):