From bd2ac2f51fda3b9ce461f3e192ecdfa7112af2a3 Mon Sep 17 00:00:00 2001 From: Neil Trini Lasrado Date: Mon, 5 Jan 2015 16:01:57 +0530 Subject: [PATCH] mode of payment - company wise default account added --- .../doctype/journal_entry/journal_entry.js | 2 +- .../doctype/journal_entry/journal_entry.py | 18 +++-- .../mode_of_payment/mode_of_payment.js | 2 +- .../mode_of_payment/mode_of_payment.json | 24 ++----- .../mode_of_payment/test_mode_of_payment.py | 10 +++ .../doctype/mode_of_payment/test_records.json | 6 ++ .../mode_of_payment_account/__init__.py | 0 .../mode_of_payment_account.json | 71 +++++++++++++++++++ .../mode_of_payment_account.py | 9 +++ .../doctype/payment_tool/payment_tool.js | 17 ++++- .../doctype/sales_invoice/sales_invoice.js | 14 ++-- .../doctype/sales_invoice/sales_invoice.py | 10 +-- erpnext/patches.txt | 1 + .../update_companywise_payment_account.py | 20 ++++++ 14 files changed, 169 insertions(+), 35 deletions(-) create mode 100644 erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py create mode 100644 erpnext/accounts/doctype/mode_of_payment/test_records.json create mode 100644 erpnext/accounts/doctype/mode_of_payment_account/__init__.py create mode 100644 erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.json create mode 100644 erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.py create mode 100644 erpnext/patches/v5_0/update_companywise_payment_account.py diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.js b/erpnext/accounts/doctype/journal_entry/journal_entry.js index 5cfa9716def..07e93b61563 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.js +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.js @@ -230,7 +230,7 @@ cur_frm.cscript.voucher_type = function(doc, cdt, cdn) { var jvdetail = frappe.model.add_child(doc, "Journal Entry Account", "accounts"); $.each(r, function(i, d) { var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts"); - row.account = d.account; + row.account = d.cash_bank_account; row.balance = d.balance; }); refresh_field("accounts"); diff --git a/erpnext/accounts/doctype/journal_entry/journal_entry.py b/erpnext/accounts/doctype/journal_entry/journal_entry.py index 946e2b2e874..05b10f1f846 100644 --- a/erpnext/accounts/doctype/journal_entry/journal_entry.py +++ b/erpnext/accounts/doctype/journal_entry/journal_entry.py @@ -442,12 +442,20 @@ class JournalEntry(AccountsController): Pending Amount is {2}".format(d.idx, d.against_expense_claim, pending_amount))) @frappe.whitelist() -def get_default_bank_cash_account(company, voucher_type): - account = frappe.db.get_value("Company", company, - voucher_type=="Bank Entry" and "default_bank_account" or "default_cash_account") +def get_default_bank_cash_account(company, voucher_type, mode_of_payment=None): + from erpnext.accounts.doctype.sales_invoice.sales_invoice import get_bank_cash_account + if mode_of_payment: + account = get_bank_cash_account(mode_of_payment, company) + if account.get("bank_cash_account"): + account.update({"balance": get_balance_on(account.get("cash_bank_account"))}) + return account + + account = frappe.db.get_value("Company", company, \ + voucher_type=="Bank Voucher" and "default_bank_account" or "default_cash_account") + if account: return { - "account": account, + "cash_bank_account": account, "balance": get_balance_on(account) } @@ -504,7 +512,7 @@ def get_payment_entry(doc): d2 = jv.append("accounts") if bank_account: - d2.account = bank_account["account"] + d2.account = bank_account["cash_bank_account"] d2.balance = bank_account["balance"] return jv diff --git a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js index a86da0eaba6..ffd8ea7589f 100644 --- a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js +++ b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.js @@ -1,7 +1,7 @@ // Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors // License: GNU General Public License v3. See license.txt -cur_frm.set_query("default_account", function(doc) { +cur_frm.set_query("default_account", "mode_of_payment_details", function(doc, cdt, cdn) { return{ filters: [ ['Account', 'account_type', 'in', 'Bank, Cash'], diff --git a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json index d1f1677b424..8a1f5e1cdab 100644 --- a/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json +++ b/erpnext/accounts/doctype/mode_of_payment/mode_of_payment.json @@ -19,29 +19,17 @@ "reqd": 1 }, { - "fieldname": "company", - "fieldtype": "Link", - "in_list_view": 1, - "label": "Company", - "options": "Company", + "fieldname": "accounts", + "fieldtype": "Table", + "label": "Accounts", + "options": "Mode of Payment Account", "permlevel": 0, - "read_only": 0 - }, - { - "description": "Default Bank / Cash account will be automatically updated in POS Invoice when this mode is selected.", - "fieldname": "default_account", - "fieldtype": "Link", - "ignore_user_permissions": 1, - "in_list_view": 1, - "label": "Default Account", - "options": "Account", - "permlevel": 0, - "read_only": 0 + "precision": "" } ], "icon": "icon-credit-card", "idx": 1, - "modified": "2015-01-05 11:13:54.446006", + "modified": "2015-01-06 17:21:12.485997", "modified_by": "Administrator", "module": "Accounts", "name": "Mode of Payment", diff --git a/erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py b/erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py new file mode 100644 index 00000000000..2008f9826ef --- /dev/null +++ b/erpnext/accounts/doctype/mode_of_payment/test_mode_of_payment.py @@ -0,0 +1,10 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and Contributors +# See license.txt + +import frappe +import unittest + +test_records = frappe.get_test_records('Mode of Payment') + +class TestModeofPayment(unittest.TestCase): + pass diff --git a/erpnext/accounts/doctype/mode_of_payment/test_records.json b/erpnext/accounts/doctype/mode_of_payment/test_records.json new file mode 100644 index 00000000000..f1ff01c8113 --- /dev/null +++ b/erpnext/accounts/doctype/mode_of_payment/test_records.json @@ -0,0 +1,6 @@ +[ + { + "doctype": "Mode of Payment", + "name": "_Test Mode of Payment 1" + } +] diff --git a/erpnext/accounts/doctype/mode_of_payment_account/__init__.py b/erpnext/accounts/doctype/mode_of_payment_account/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.json b/erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.json new file mode 100644 index 00000000000..bfe961ff862 --- /dev/null +++ b/erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.json @@ -0,0 +1,71 @@ +{ + "allow_copy": 0, + "allow_import": 0, + "allow_rename": 0, + "creation": "2015-01-05 14:17:53.101432", + "custom": 0, + "docstatus": 0, + "doctype": "DocType", + "document_type": "", + "fields": [ + { + "allow_on_submit": 0, + "fieldname": "company", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Company", + "no_copy": 0, + "options": "Company", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0 + }, + { + "allow_on_submit": 0, + "description": "Default Bank / Cash account will be automatically updated in POS Invoice when this mode is selected.", + "fieldname": "default_account", + "fieldtype": "Link", + "hidden": 0, + "ignore_user_permissions": 0, + "in_filter": 0, + "in_list_view": 1, + "label": "Default Account", + "no_copy": 0, + "options": "Account", + "permlevel": 0, + "precision": "", + "print_hide": 0, + "read_only": 0, + "report_hide": 0, + "reqd": 0, + "search_index": 0, + "set_only_once": 0 + } + ], + "hide_heading": 0, + "hide_toolbar": 0, + "in_create": 0, + "in_dialog": 0, + "is_submittable": 0, + "issingle": 0, + "istable": 1, + "modified": "2015-01-06 17:26:57.053474", + "modified_by": "Administrator", + "module": "Accounts", + "name": "Mode of Payment Account", + "name_case": "", + "owner": "Administrator", + "permissions": [], + "read_only": 0, + "read_only_onload": 0, + "sort_field": "modified", + "sort_order": "DESC" +} \ No newline at end of file diff --git a/erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.py b/erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.py new file mode 100644 index 00000000000..933d0a2f0bb --- /dev/null +++ b/erpnext/accounts/doctype/mode_of_payment_account/mode_of_payment_account.py @@ -0,0 +1,9 @@ +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors and contributors +# For license information, please see license.txt + +from __future__ import unicode_literals +import frappe +from frappe.model.document import Document + +class ModeofPaymentAccount(Document): + pass diff --git a/erpnext/accounts/doctype/payment_tool/payment_tool.js b/erpnext/accounts/doctype/payment_tool/payment_tool.js index fd6867a68e0..0cb51d302d3 100644 --- a/erpnext/accounts/doctype/payment_tool/payment_tool.js +++ b/erpnext/accounts/doctype/payment_tool/payment_tool.js @@ -63,7 +63,22 @@ frappe.ui.form.on("Payment Tool", "received_or_paid", function(frm) { }); // Fetch bank/cash account based on payment mode -cur_frm.add_fetch("payment_mode", "default_account", "payment_account"); +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, + "company": frm.doc.company + }, + callback: function(r, rt) { + if(r.message) { + frm.doc.set_value("payment_account", r.message['bank_cash_account'] +); + } + } + }); +}); + 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) { diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js index ff39939a1be..fac94426a9f 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.js +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.js @@ -246,11 +246,15 @@ cur_frm.cscript.hide_fields = function(doc) { cur_frm.cscript.mode_of_payment = function(doc) { - console.log("mode of payment!"); - return cur_frm.call({ - method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", - args: { mode_of_payment: doc.mode_of_payment }, - }); + if(doc.is_pos) { + return cur_frm.call({ + method: "erpnext.accounts.doctype.sales_invoice.sales_invoice.get_bank_cash_account", + args: { + "mode_of_payment": doc.mode_of_payment, + "company": doc.company + }, + }); + } } cur_frm.cscript.update_stock = function(doc, dt, dn) { diff --git a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py index 2de2c10c75a..63aef26e09d 100644 --- a/erpnext/accounts/doctype/sales_invoice/sales_invoice.py +++ b/erpnext/accounts/doctype/sales_invoice/sales_invoice.py @@ -577,14 +577,16 @@ class SalesInvoice(SellingController): ) @frappe.whitelist() -def get_bank_cash_account(mode_of_payment): - val = frappe.db.get_value("Mode of Payment", mode_of_payment, "default_account") - if not val: +def get_bank_cash_account(mode_of_payment, company): + account = frappe.db.get_value("Mode of Payment Account", {"parent": mode_of_payment, "company": company}, \ + "default_account") + if not account: frappe.msgprint(_("Please set default Cash or Bank account in Mode of Payment {0}").format(mode_of_payment)) return { - "cash_bank_account": val + "cash_bank_account": account } + @frappe.whitelist() def get_income_account(doctype, txt, searchfield, start, page_len, filters): from erpnext.controllers.queries import get_match_cond diff --git a/erpnext/patches.txt b/erpnext/patches.txt index c9001df10bf..579f8d7152d 100644 --- a/erpnext/patches.txt +++ b/erpnext/patches.txt @@ -102,3 +102,4 @@ erpnext.patches.v4_2.party_model erpnext.patches.v4_1.fix_jv_remarks erpnext.patches.v5_0.recalculate_total_amount_in_jv erpnext.patches.v5_0.remove_shopping_cart_app +erpnext.patches.v5_0.update_companywise_payment_account diff --git a/erpnext/patches/v5_0/update_companywise_payment_account.py b/erpnext/patches/v5_0/update_companywise_payment_account.py new file mode 100644 index 00000000000..f4b855d8f34 --- /dev/null +++ b/erpnext/patches/v5_0/update_companywise_payment_account.py @@ -0,0 +1,20 @@ + +# Copyright (c) 2013, Web Notes Technologies Pvt. Ltd. and Contributors +# License: GNU General Public License v3. See license.txt + +import frappe + +def execute(): + frappe.reload_doc('accounts', 'doctype', 'mode_of_payment') + + mode_of_payment_list = frappe.db.sql("""select name, default_account + from `tabMode of Payment`""", as_dict=1) + + for d in mode_of_payment_list: + if d.get("default_account"): + parent_doc = frappe.get_doc("Mode of Payment", d.get("name")) + + parent_doc.set("mode_of_payment_details", + [{"company": frappe.db.get_user_default("company"), + "default_account": d.get("default_account")}]) + parent_doc.save()