Merge pull request #40257 from GursheenK/remove-balance-fetching-in-JV

perf: remove unnecessary fetching of balances in JV
This commit is contained in:
Gursheen Kaur Anand
2024-03-04 11:16:01 +05:30
committed by GitHub
3 changed files with 10 additions and 74 deletions

View File

@@ -184,7 +184,6 @@ var update_jv_details = function(doc, r) {
$.each(r, function(i, d) { $.each(r, function(i, d) {
var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts"); var row = frappe.model.add_child(doc, "Journal Entry Account", "accounts");
frappe.model.set_value(row.doctype, row.name, "account", d.account) frappe.model.set_value(row.doctype, row.name, "account", d.account)
frappe.model.set_value(row.doctype, row.name, "balance", d.balance)
}); });
refresh_field("accounts"); refresh_field("accounts");
} }
@@ -193,7 +192,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
onload() { onload() {
this.load_defaults(); this.load_defaults();
this.setup_queries(); this.setup_queries();
this.setup_balance_formatter();
erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype); erpnext.accounts.dimensions.setup_dimension_filters(this.frm, this.frm.doctype);
} }
@@ -292,19 +290,6 @@ erpnext.accounts.JournalEntry = class JournalEntry extends frappe.ui.form.Contro
} }
setup_balance_formatter() {
const formatter = function(value, df, options, doc) {
var currency = frappe.meta.get_field_currency(df, doc);
var dr_or_cr = value ? ('<label>' + (value > 0.0 ? __("Dr") : __("Cr")) + '</label>') : "";
return "<div style='text-align: right'>"
+ ((value==null || value==="") ? "" : format_currency(Math.abs(value), currency))
+ " " + dr_or_cr
+ "</div>";
};
this.frm.fields_dict.accounts.grid.update_docfield_property('balance', 'formatter', formatter);
this.frm.fields_dict.accounts.grid.update_docfield_property('party_balance', 'formatter', formatter);
}
reference_name(doc, cdt, cdn) { reference_name(doc, cdt, cdn) {
var d = frappe.get_doc(cdt, cdn); var d = frappe.get_doc(cdt, cdn);
@@ -400,23 +385,22 @@ frappe.ui.form.on("Journal Entry Account", {
if(!d.account && d.party_type && d.party) { if(!d.account && d.party_type && d.party) {
if(!frm.doc.company) frappe.throw(__("Please select Company")); if(!frm.doc.company) frappe.throw(__("Please select Company"));
return frm.call({ return frm.call({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_party_account_and_balance", method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_party_account_and_currency",
child: d, child: d,
args: { args: {
company: frm.doc.company, company: frm.doc.company,
party_type: d.party_type, party_type: d.party_type,
party: d.party, party: d.party,
cost_center: d.cost_center
} }
}); });
} }
}, },
cost_center: function(frm, dt, dn) { cost_center: function(frm, dt, dn) {
erpnext.journal_entry.set_account_balance(frm, dt, dn); erpnext.journal_entry.set_account_details(frm, dt, dn);
}, },
account: function(frm, dt, dn) { account: function(frm, dt, dn) {
erpnext.journal_entry.set_account_balance(frm, dt, dn); erpnext.journal_entry.set_account_details(frm, dt, dn);
}, },
debit_in_account_currency: function(frm, cdt, cdn) { debit_in_account_currency: function(frm, cdt, cdn) {
@@ -600,14 +584,14 @@ $.extend(erpnext.journal_entry, {
}); });
$.extend(erpnext.journal_entry, { $.extend(erpnext.journal_entry, {
set_account_balance: function(frm, dt, dn) { set_account_details: function(frm, dt, dn) {
var d = locals[dt][dn]; var d = locals[dt][dn];
if(d.account) { if(d.account) {
if(!frm.doc.company) frappe.throw(__("Please select Company first")); if(!frm.doc.company) frappe.throw(__("Please select Company first"));
if(!frm.doc.posting_date) frappe.throw(__("Please select Posting Date first")); if(!frm.doc.posting_date) frappe.throw(__("Please select Posting Date first"));
return frappe.call({ return frappe.call({
method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_account_balance_and_party_type", method: "erpnext.accounts.doctype.journal_entry.journal_entry.get_account_details_and_party_type",
args: { args: {
account: d.account, account: d.account,
date: frm.doc.posting_date, date: frm.doc.posting_date,
@@ -615,7 +599,6 @@ $.extend(erpnext.journal_entry, {
debit: flt(d.debit_in_account_currency), debit: flt(d.debit_in_account_currency),
credit: flt(d.credit_in_account_currency), credit: flt(d.credit_in_account_currency),
exchange_rate: d.exchange_rate, exchange_rate: d.exchange_rate,
cost_center: d.cost_center
}, },
callback: function(r) { callback: function(r) {
if(r.message) { if(r.message) {

View File

@@ -68,7 +68,6 @@ class JournalEntry(AccountsController):
self.set_print_format_fields() self.set_print_format_fields()
self.validate_credit_debit_note() self.validate_credit_debit_note()
self.validate_empty_accounts_table() self.validate_empty_accounts_table()
self.set_account_and_party_balance()
self.validate_inter_company_accounts() self.validate_inter_company_accounts()
self.validate_depr_entry_voucher_type() self.validate_depr_entry_voucher_type()
@@ -1076,21 +1075,6 @@ class JournalEntry(AccountsController):
if not self.get("accounts"): if not self.get("accounts"):
frappe.throw(_("Accounts table cannot be blank.")) frappe.throw(_("Accounts table cannot be blank."))
def set_account_and_party_balance(self):
account_balance = {}
party_balance = {}
for d in self.get("accounts"):
if d.account not in account_balance:
account_balance[d.account] = get_balance_on(account=d.account, date=self.posting_date)
if (d.party_type, d.party) not in party_balance:
party_balance[(d.party_type, d.party)] = get_balance_on(
party_type=d.party_type, party=d.party, date=self.posting_date, company=self.company
)
d.account_balance = account_balance[d.account]
d.party_balance = party_balance[(d.party_type, d.party)]
@frappe.whitelist() @frappe.whitelist()
def get_default_bank_cash_account(company, account_type=None, mode_of_payment=None, account=None): def get_default_bank_cash_account(company, account_type=None, mode_of_payment=None, account=None):
@@ -1256,8 +1240,6 @@ def get_payment_entry(ref_doc, args):
"account_type": frappe.db.get_value("Account", args.get("party_account"), "account_type"), "account_type": frappe.db.get_value("Account", args.get("party_account"), "account_type"),
"account_currency": args.get("party_account_currency") "account_currency": args.get("party_account_currency")
or get_account_currency(args.get("party_account")), or get_account_currency(args.get("party_account")),
"balance": get_balance_on(args.get("party_account")),
"party_balance": get_balance_on(party=args.get("party"), party_type=args.get("party_type")),
"exchange_rate": exchange_rate, "exchange_rate": exchange_rate,
args.get("amount_field_party"): args.get("amount"), args.get("amount_field_party"): args.get("amount"),
"is_advance": args.get("is_advance"), "is_advance": args.get("is_advance"),
@@ -1405,30 +1387,23 @@ def get_outstanding(args):
@frappe.whitelist() @frappe.whitelist()
def get_party_account_and_balance(company, party_type, party, cost_center=None): def get_party_account_and_currency(company, party_type, party):
if not frappe.has_permission("Account"): if not frappe.has_permission("Account"):
frappe.msgprint(_("No Permission"), raise_exception=1) frappe.msgprint(_("No Permission"), raise_exception=1)
account = get_party_account(party_type, party, company) account = get_party_account(party_type, party, company)
account_balance = get_balance_on(account=account, cost_center=cost_center)
party_balance = get_balance_on(
party_type=party_type, party=party, company=company, cost_center=cost_center
)
return { return {
"account": account, "account": account,
"balance": account_balance, "account_currency": frappe.get_cached_value("Account", account, "account_currency"),
"party_balance": party_balance,
"account_currency": frappe.db.get_value("Account", account, "account_currency"),
} }
@frappe.whitelist() @frappe.whitelist()
def get_account_balance_and_party_type( def get_account_details_and_party_type(
account, date, company, debit=None, credit=None, exchange_rate=None, cost_center=None account, date, company, debit=None, credit=None, exchange_rate=None
): ):
"""Returns dict of account balance and party type to be set in Journal Entry on selection of account.""" """Returns dict of account details and party type to be set in Journal Entry on selection of account."""
if not frappe.has_permission("Account"): if not frappe.has_permission("Account"):
frappe.msgprint(_("No Permission"), raise_exception=1) frappe.msgprint(_("No Permission"), raise_exception=1)
@@ -1448,7 +1423,6 @@ def get_account_balance_and_party_type(
party_type = "" party_type = ""
grid_values = { grid_values = {
"balance": get_balance_on(account, date, cost_center=cost_center),
"party_type": party_type, "party_type": party_type,
"account_type": account_details.account_type, "account_type": account_details.account_type,
"account_currency": account_details.account_currency or company_currency, "account_currency": account_details.account_currency or company_currency,

View File

@@ -9,12 +9,10 @@
"field_order": [ "field_order": [
"account", "account",
"account_type", "account_type",
"balance",
"col_break1", "col_break1",
"bank_account", "bank_account",
"party_type", "party_type",
"party", "party",
"party_balance",
"accounting_dimensions_section", "accounting_dimensions_section",
"cost_center", "cost_center",
"dimension_col_break", "dimension_col_break",
@@ -63,17 +61,6 @@
"label": "Account Type", "label": "Account Type",
"print_hide": 1 "print_hide": 1
}, },
{
"fieldname": "balance",
"fieldtype": "Currency",
"label": "Account Balance",
"no_copy": 1,
"oldfieldname": "balance",
"oldfieldtype": "Data",
"options": "account_currency",
"print_hide": 1,
"read_only": 1
},
{ {
"default": ":Company", "default": ":Company",
"description": "If Income or Expense", "description": "If Income or Expense",
@@ -107,14 +94,6 @@
"label": "Party", "label": "Party",
"options": "party_type" "options": "party_type"
}, },
{
"fieldname": "party_balance",
"fieldtype": "Currency",
"label": "Party Balance",
"options": "account_currency",
"print_hide": 1,
"read_only": 1
},
{ {
"fieldname": "currency_section", "fieldname": "currency_section",
"fieldtype": "Section Break", "fieldtype": "Section Break",