diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.js b/erpnext/accounts/doctype/payment_tool/payment_tool.js index 0cb51d302d..8ff9597198 100644 --- a/erpnext/accounts/doctype/payment_tool/payment_tool.js +++ b/erpnext/accounts/doctype/payment_tool/payment_tool.js @@ -5,7 +5,7 @@ frappe.provide("erpnext.payment_tool"); // Help content frappe.ui.form.on("Payment Tool", "onload", function(frm) { - frm.set_value("make_jv_help", ' ' + frm.set_value("make_jv_help", + __("Note: If payment is not made against any reference, make Journal Entry manually.")); frm.set_query("party_type", function() { @@ -36,7 +36,7 @@ frappe.ui.form.on("Payment Tool", "refresh", function(frm) { }); frappe.ui.form.on("Payment Tool", "party", function(frm) { - if(!frm.doc.party_account && frm.doc.party_type && frm.doc.party) { + if(frm.doc.party_type && frm.doc.party) { return frappe.call({ method: "erpnext.accounts.party.get_party_account", args: { @@ -46,7 +46,7 @@ frappe.ui.form.on("Payment Tool", "party", function(frm) { }, callback: function(r) { if(!r.exc && r.message) { - frappe.model.set_value("party_account", r.message); + frm.set_value("party_account", r.message); erpnext.payment_tool.check_mandatory_to_set_button(frm); } } @@ -62,12 +62,16 @@ frappe.ui.form.on("Payment Tool", "received_or_paid", function(frm) { erpnext.payment_tool.check_mandatory_to_set_button(frm); }); +frappe.ui.form.on("Payment Tool", "party", function(frm) { + erpnext.payment_tool.check_mandatory_to_set_button(frm); +}); + // Fetch bank/cash account based on payment mode frappe.ui.form.on("Payment Tool", "payment_mode", function(frm) { return frappe.call({ method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", args: { - "mode_of_payment": frm.doc.mode_of_payment, + "mode_of_payment": frm.doc.payment_mode, "company": frm.doc.company }, callback: function(r, rt) { @@ -81,7 +85,7 @@ frappe.ui.form.on("Payment Tool", "payment_mode", function(frm) { erpnext.payment_tool.check_mandatory_to_set_button = function(frm) { - if (frm.doc.company && frm.doc.party_type && frm.doc.party && frm.doc.received_or_paid) { + if (frm.doc.company && frm.doc.party_type && frm.doc.party && frm.doc.received_or_paid && frm.doc.party_account) { frm.fields_dict.get_outstanding_vouchers.$input.addClass("btn-primary"); } } @@ -108,16 +112,18 @@ frappe.ui.form.on("Payment Tool", "get_outstanding_vouchers", function(frm) { frm.fields_dict.get_outstanding_vouchers.$input.removeClass("btn-primary"); frm.fields_dict.make_journal_entry.$input.addClass("btn-primary"); - frappe.model.clear_table(frm.doc, "vouchers"); + frm.clear_table("vouchers"); + $.each(r.message, function(i, d) { - var invoice_detail = frappe.model.add_child(frm.doc, "Payment Tool Detail", "vouchers"); - invoice_detail.against_voucher_type = d.voucher_type; - invoice_detail.against_voucher_no = d.voucher_no; - invoice_detail.total_amount = d.invoice_amount; - invoice_detail.outstanding_amount = d.outstanding_amount; + var c = frm.add_child("vouchers"); + c.against_voucher_type = d.voucher_type; + c.against_voucher_no = d.voucher_no; + c.total_amount = d.invoice_amount; + c.outstanding_amount = d.outstanding_amount; }); } refresh_field("vouchers"); + frm.layout.refresh_sections(); erpnext.payment_tool.set_total_payment_amount(frm); } }); diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.json b/erpnext/accounts/doctype/payment_tool/payment_tool.json index d8965eb5c8..909f9c4990 100644 --- a/erpnext/accounts/doctype/payment_tool/payment_tool.json +++ b/erpnext/accounts/doctype/payment_tool/payment_tool.json @@ -11,7 +11,7 @@ { "fieldname": "sec_break1", "fieldtype": "Section Break", - "label": "", + "label": "Find Invoices to Match", "permlevel": 0 }, { @@ -42,6 +42,43 @@ "search_index": 0, "set_only_once": 0 }, + { + "allow_on_submit": 0, + "fieldname": "received_or_paid", + "fieldtype": "Select", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Received Or Paid", + "no_copy": 0, + "options": "Received\nPaid", + "permlevel": 0, + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 1, + "search_index": 0, + "set_only_once": 0 + }, + { + "allow_on_submit": 0, + "fieldname": "col_break1", + "fieldtype": "Column Break", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Column Break 1", + "no_copy": 0, + "permlevel": 0, + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0 + }, { "allow_on_submit": 0, "depends_on": "", @@ -70,26 +107,8 @@ "no_copy": 1, "options": "Account", "permlevel": 0, - "read_only": 0 - }, - { - "allow_on_submit": 0, - "fieldname": "received_or_paid", - "fieldtype": "Select", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 1, - "label": "Received Or Paid", - "no_copy": 0, - "options": "Received\nPaid", - "permlevel": 0, - "print_hide": 0, "read_only": 0, - "report_hide": 0, - "reqd": 1, - "search_index": 0, - "set_only_once": 0 + "reqd": 1 }, { "allow_on_submit": 0, @@ -111,13 +130,14 @@ }, { "allow_on_submit": 0, - "fieldname": "col_break1", - "fieldtype": "Column Break", + "depends_on": "eval:(doc.company && doc.party_type && doc.received_or_paid && doc.party_account)", + "fieldname": "sec_break3", + "fieldtype": "Section Break", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Column Break 1", + "label": "Set Matching Amounts", "no_copy": 0, "permlevel": 0, "print_hide": 0, @@ -127,6 +147,33 @@ "search_index": 0, "set_only_once": 0 }, + { + "allow_on_submit": 0, + "fieldname": "vouchers", + "fieldtype": "Table", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 0, + "label": "Against Vouchers", + "no_copy": 0, + "options": "Payment Tool Detail", + "permlevel": 0, + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0 + }, + { + "depends_on": "eval:(doc.company && doc.party_type && doc.received_or_paid && doc.party_account)", + "fieldname": "section_break_19", + "fieldtype": "Section Break", + "label": "Make Payment Entry", + "permlevel": 0, + "precision": "" + }, { "allow_on_submit": 0, "fieldname": "payment_mode", @@ -166,22 +213,17 @@ "set_only_once": 0 }, { - "allow_on_submit": 0, - "fieldname": "reference_no", - "fieldtype": "Data", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Reference No", - "no_copy": 0, + "fieldname": "total_payment_amount", + "fieldtype": "Currency", + "label": "Total Payment Amount", "permlevel": 0, - "print_hide": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0 + "read_only": 1 + }, + { + "fieldname": "data_22", + "fieldtype": "Column Break", + "permlevel": 0, + "precision": "" }, { "allow_on_submit": 0, @@ -203,14 +245,13 @@ }, { "allow_on_submit": 0, - "depends_on": "eval:(doc.company && doc.party_type && doc.received_or_paid && (doc.customer || doc.supplier))", - "fieldname": "sec_break3", - "fieldtype": "Section Break", + "fieldname": "reference_no", + "fieldtype": "Data", "hidden": 0, "ignore_user_permissions": 0, "in_filter": 0, "in_list_view": 0, - "label": "Against Voucher", + "label": "Reference No", "no_copy": 0, "permlevel": 0, "print_hide": 0, @@ -220,39 +261,6 @@ "search_index": 0, "set_only_once": 0 }, - { - "allow_on_submit": 0, - "fieldname": "vouchers", - "fieldtype": "Table", - "hidden": 0, - "ignore_user_permissions": 0, - "in_filter": 0, - "in_list_view": 0, - "label": "Against Vouchers", - "no_copy": 0, - "options": "Payment Tool Detail", - "permlevel": 0, - "print_hide": 0, - "read_only": 0, - "report_hide": 0, - "reqd": 0, - "search_index": 0, - "set_only_once": 0 - }, - { - "depends_on": "eval:(doc.company && doc.party_type && doc.received_or_paid && (doc.customer || doc.supplier))", - "fieldname": "section_break_19", - "fieldtype": "Section Break", - "permlevel": 0, - "precision": "" - }, - { - "fieldname": "total_payment_amount", - "fieldtype": "Currency", - "label": "Total Payment Amount", - "permlevel": 0, - "read_only": 1 - }, { "allow_on_submit": 0, "fieldname": "make_journal_entry", @@ -272,13 +280,7 @@ "set_only_once": 0 }, { - "fieldname": "data_22", - "fieldtype": "Column Break", - "permlevel": 0, - "precision": "" - }, - { - "depends_on": "eval:(doc.company && doc.party_type && doc.received_or_paid && (doc.customer || doc.supplier))", + "depends_on": "eval:(doc.company && doc.party_type && doc.received_or_paid && doc.party_account)", "fieldname": "section_break_21", "fieldtype": "Section Break", "permlevel": 0, @@ -310,7 +312,7 @@ "is_submittable": 0, "issingle": 1, "istable": 0, - "modified": "2015-02-20 05:09:19.812606", + "modified": "2015-02-21 03:59:08.154966", "modified_by": "Administrator", "module": "Accounts", "name": "Payment Tool", diff --git a/erpnext/accounts/party.py b/erpnext/accounts/party.py index 0d9876a68c..79460db394 100644 --- a/erpnext/accounts/party.py +++ b/erpnext/accounts/party.py @@ -128,22 +128,26 @@ def set_account_and_due_date(party, account, party_type, company, posting_date, @frappe.whitelist() def get_party_account(company, party, party_type): + """Returns the account for the given `party`. + Will first search in party (Customer / Supplier) record, if not found, + will search in group (Customer Group / Supplier Type), + finally will return default.""" if not company: frappe.throw(_("Please select company first.")) if party: - party_group_doctype = "Customer Group" if party_type=="Customer" else "Supplier Type" - party_details = frappe.db.sql("""select p.{0}, pa.account - from `tab{1}` p left join `tabParty Account` pa on pa.parent = p.name - where p.name = %s""".format(scrub(party_group_doctype), party_type), party) - if party_details: - party_group, account = party_details[0] + account = frappe.db.get_value("Party Account", + {"parenttype": party_type, "parent": party, "company": company}, "account") if not account: + party_group_doctype = "Customer Group" if party_type=="Customer" else "Supplier Type" + group = frappe.db.get_value(party_type, party, scrub(party_group_doctype)) account = frappe.db.get_value("Party Account", - {"parenttype": party_group_doctype, "parent": party_group, "company": company}, "account") or \ - frappe.db.get_value("Company", company, - "default_receivable_account" if party_type=="Customer" else "default_payable_account") + {"parenttype": party_group_doctype, "parent": group, "company": company}, "account") + + if not account: + default_account_name = "default_receivable_account" if party_type=="Customer" else "default_payable_account" + account = frappe.db.get_value("Company", company, default_account_name) return account