diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index f83528cb6d1..ade0d32d981 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -174,7 +174,7 @@ erpnext.accounts.SalesInvoiceController = erpnext.selling.SellingController.exte frappe.model.round_floats_in(this.frm.doc, ["base_grand_total", "paid_amount"]); // this will make outstanding amount 0 this.frm.set_value("write_off_amount", - flt(this.frm.doc.base_grand_total - this.frm.doc.paid_amount, precision("write_off_amount")) + flt(this.frm.doc.base_grand_total - this.frm.doc.paid_amount - this.frm.doc.total_advance, precision("write_off_amount")) ); this.frm.toggle_enable("write_off_amount", false); diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json index 70e79b05b35..11ae3b59404 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.json +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.json @@ -662,14 +662,6 @@ "permlevel": 0, "read_only": 0 }, - { - "depends_on": "is_pos", - "fieldname": "column_break3", - "fieldtype": "Column Break", - "permlevel": 0, - "read_only": 0, - "width": "50%" - }, { "depends_on": "is_pos", "fieldname": "paid_amount", @@ -683,6 +675,14 @@ "print_hide": 1, "read_only": 0 }, + { + "depends_on": "is_pos", + "fieldname": "column_break3", + "fieldtype": "Column Break", + "permlevel": 0, + "read_only": 0, + "width": "50%" + }, { "depends_on": "is_pos", "fieldname": "cash_bank_account", @@ -696,24 +696,16 @@ "read_only": 0 }, { - "depends_on": "eval:doc.is_pos===1||(doc.advances && doc.advances.length>0)", + "depends_on": "grand_total", "fieldname": "column_break4", - "fieldtype": "Column Break", + "fieldtype": "Section Break", + "label": "Write Off", "permlevel": 0, "read_only": 0, "width": "50%" }, { - "depends_on": "eval:doc.is_pos===1||(doc.advances && doc.advances.length>0)", - "fieldname": "write_off_outstanding_amount_automatically", - "fieldtype": "Check", - "label": "Write Off Outstanding Amount", - "permlevel": 0, - "print_hide": 1, - "read_only": 0 - }, - { - "depends_on": "eval:doc.is_pos===1||(doc.advances && doc.advances.length>0)", + "depends_on": "", "fieldname": "write_off_amount", "fieldtype": "Currency", "label": "Write Off Amount", @@ -723,8 +715,24 @@ "print_hide": 1, "read_only": 0 }, + { + "depends_on": "", + "fieldname": "write_off_outstanding_amount_automatically", + "fieldtype": "Check", + "label": "Write Off Outstanding Amount", + "permlevel": 0, + "print_hide": 1, + "read_only": 0 + }, { "depends_on": "eval:doc.is_pos===1||(doc.advances && doc.advances.length>0)", + "fieldname": "column_break_74", + "fieldtype": "Column Break", + "permlevel": 0, + "precision": "" + }, + { + "depends_on": "", "fieldname": "write_off_account", "fieldtype": "Link", "label": "Write Off Account", @@ -734,7 +742,7 @@ "read_only": 0 }, { - "depends_on": "eval:doc.is_pos===1||(doc.advances && doc.advances.length>0)", + "depends_on": "", "fieldname": "write_off_cost_center", "fieldtype": "Link", "label": "Write Off Cost Center", @@ -1246,8 +1254,8 @@ "icon": "icon-file-text", "idx": 1, "is_submittable": 1, - "modified": "2015-04-01 06:50:49.748285", - "modified_by": "Administrator", + "modified": "2015-04-02 13:42:22.985078", + "modified_by": "anand@erpnext.com", "module": "Accounts", "name": "Sales Invoice", "owner": "Administrator", diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 9cb63b2e5e4..2a4c331f683 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -48,10 +48,10 @@ class SalesInvoice(SellingController): self.clear_unallocated_advances("Sales Invoice Advance", "advances") self.validate_advance_jv("advances", "sales_order") self.add_remarks() + self.validate_write_off_account() if cint(self.is_pos): self.validate_pos() - self.validate_write_off_account() if cint(self.update_stock): self.validate_item_code() @@ -453,8 +453,10 @@ class SalesInvoice(SellingController): if gl_entries: from erpnext.accounts.general_ledger import make_gl_entries + # if POS and amount is written off, there's no outstanding and hence no need to update it update_outstanding = cint(self.is_pos) and self.write_off_account \ and 'No' or 'Yes' + make_gl_entries(gl_entries, cancel=(self.docstatus == 2), update_outstanding=update_outstanding, merge_entries=False) @@ -483,6 +485,8 @@ class SalesInvoice(SellingController): self.make_pos_gl_entries(gl_entries) + self.make_write_off_gl_entry(gl_entries) + return gl_entries def make_customer_gl_entry(self, gl_entries): @@ -555,29 +559,31 @@ class SalesInvoice(SellingController): "remarks": self.remarks, }) ) - # write off entries, applicable if only pos - if self.write_off_account and self.write_off_amount: - gl_entries.append( - self.get_gl_dict({ - "account": self.debit_to, - "party_type": "Customer", - "party": self.customer, - "against": self.write_off_account, - "credit": self.write_off_amount, - "remarks": self.remarks, - "against_voucher": self.name, - "against_voucher_type": self.doctype, - }) - ) - gl_entries.append( - self.get_gl_dict({ - "account": self.write_off_account, - "against": self.debit_to, - "debit": self.write_off_amount, - "remarks": self.remarks, - "cost_center": self.write_off_cost_center - }) - ) + + def make_write_off_gl_entry(self, gl_entries): + # write off entries, applicable if only pos + if self.write_off_account and self.write_off_amount: + gl_entries.append( + self.get_gl_dict({ + "account": self.debit_to, + "party_type": "Customer", + "party": self.customer, + "against": self.write_off_account, + "credit": self.write_off_amount, + "remarks": self.remarks, + "against_voucher": self.name, + "against_voucher_type": self.doctype, + }) + ) + gl_entries.append( + self.get_gl_dict({ + "account": self.write_off_account, + "against": self.debit_to, + "debit": self.write_off_amount, + "remarks": self.remarks, + "cost_center": self.write_off_cost_center + }) + ) def get_list_context(context=None): from erpnext.controllers.website_list_for_contact import get_list_context