[POS] Fixed issue of paid amount, write off account
diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
index 871a151..35df299 100644
--- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
+++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py
@@ -381,9 +381,11 @@
 			if d.delivery_note:
 				msgprint(_("Stock cannot be updated against Delivery Note {0}").format(d.delivery_note), raise_exception=1)
 
-
 	def validate_write_off_account(self):
 		if flt(self.write_off_amount) and not self.write_off_account:
+			self.write_off_account = frappe.db.get_value('Company', self.company, 'write_off_account')
+
+		if flt(self.write_off_amount) and not self.write_off_account:
 			msgprint(_("Please enter Write Off Account"), raise_exception=1)
 
 	def validate_account_for_change_amount(self):
diff --git a/erpnext/accounts/page/pos/pos.js b/erpnext/accounts/page/pos/pos.js
index 06606a9..5947bde 100644
--- a/erpnext/accounts/page/pos/pos.js
+++ b/erpnext/accounts/page/pos/pos.js
@@ -509,7 +509,7 @@
 			this.remove_zero_qty_item();
 		}
 
-		this.refresh();
+		this.update_paid_amount_status(false)
 	},
 
 	remove_zero_qty_item: function(){
@@ -591,7 +591,7 @@
 		if (!caught)
 			this.add_new_item_to_grid();
 
-		this.refresh();
+		this.update_paid_amount_status(false)
 	},
 
 	add_new_item_to_grid: function() {
@@ -616,6 +616,14 @@
 			? this.item_serial_no[this.child.item_code][0] : '');
 	},
 
+	update_paid_amount_status: function(update_paid_amount){
+		if(this.name){
+			update_paid_amount = update_paid_amount ? false : true;
+		}
+
+		this.refresh(update_paid_amount);
+	},
+
 	refresh: function(update_paid_amount) {
 		var me = this;
 		this.refresh_fields(update_paid_amount);
@@ -623,6 +631,7 @@
 		this.update_rate();
 		this.set_primary_action();
 	},
+
 	refresh_fields: function(update_paid_amount) {
 		this.apply_pricing_rule();
 		this.discount_amount_applied = false;
@@ -698,7 +707,8 @@
 
 		if (this.frm.doc.docstatus==0) {
 			this.page.set_primary_action(__("Pay"), function() {
-				me.validate()
+				me.validate();
+				me.update_paid_amount_status(true);
 				me.create_invoice();
 				me.make_payment();
 			}, "octicon octicon-credit-card");
diff --git a/erpnext/public/js/payment/payments.js b/erpnext/public/js/payment/payments.js
index 06df425..6133fcf 100644
--- a/erpnext/public/js/payment/payments.js
+++ b/erpnext/public/js/payment/payments.js
@@ -177,19 +177,17 @@
 	write_off_amount: function(write_off_amount) {
 		var me = this;
 
-		if(this.frm.doc.paid_amount > 0){
-			this.frm.doc.write_off_amount = write_off_amount;
-			this.frm.doc.base_write_off_amount = flt(this.frm.doc.write_off_amount * this.frm.doc.conversion_rate,
-				precision("base_write_off_amount"));
-			this.calculate_outstanding_amount(false)
-			this.show_amounts()
-		}
+		this.frm.doc.write_off_amount = flt(write_off_amount, precision("write_off_amount"));
+		this.frm.doc.base_write_off_amount = flt(this.frm.doc.write_off_amount * this.frm.doc.conversion_rate,
+			precision("base_write_off_amount"));
+		this.calculate_outstanding_amount(false)
+		this.show_amounts()
 	},
 
 	change_amount: function(change_amount) {
 		var me = this;
 
-		this.frm.doc.change_amount = change_amount;
+		this.frm.doc.change_amount = flt(change_amount, precision("change_amount"));
 		this.calculate_write_off_amount()
 		this.show_amounts()
 	},
@@ -197,7 +195,7 @@
 	update_paid_amount: function() {
 		var me = this;
 		if(in_list(['change_amount', 'write_off_amount'], this.idx)){
-			value = flt(me.selected_mode.val(), 2)
+			value = me.selected_mode.val();
 			if(me.idx == 'change_amount'){
 				me.change_amount(value)
 			} else{
@@ -226,9 +224,9 @@
 
 	show_amounts: function(){
 		var me = this;
-		$(this.$body).find(".write_off_amount").val(format_number(this.frm.doc.write_off_amount, 2));
+		$(this.$body).find(".write_off_amount").val(flt(this.frm.doc.write_off_amount, precision("write_off_amount")));
 		$(this.$body).find('.paid_amount').text(format_currency(this.frm.doc.paid_amount, this.frm.doc.currency));
-		$(this.$body).find('.change_amount').val(format_number(this.frm.doc.change_amount, 2))
+		$(this.$body).find('.change_amount').val(flt(this.frm.doc.change_amount, precision("change_amount")))
 		$(this.$body).find('.outstanding_amount').text(format_currency(this.frm.doc.outstanding_amount, this.frm.doc.currency))
 		this.update_invoice();
 	}