From 901bcd5c4346be3e2eb37f0c5926490f04c774e1 Mon Sep 17 00:00:00 2001 From: Sugesh393 Date: Thu, 5 Dec 2024 10:14:15 +0530 Subject: [PATCH] feat: add accounting dimensions in ledger summary reports --- .../customer_ledger_summary.js | 22 ++++++++++++ .../customer_ledger_summary.py | 35 ++++++++++++++++++- .../supplier_ledger_summary.js | 22 ++++++++++++ 3 files changed, 78 insertions(+), 1 deletion(-) diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js index 3600db852f8..847eff3a05a 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.js @@ -92,5 +92,27 @@ frappe.query_reports["Customer Ledger Summary"] = { fieldtype: "Data", hidden: 1, }, + { + fieldname: "cost_center", + label: __("Cost Center"), + fieldtype: "MultiSelectList", + get_data: function (txt) { + return frappe.db.get_link_options("Cost Center", txt, { + company: frappe.query_report.get_filter_value("company"), + }); + }, + }, + { + fieldname: "project", + label: __("Project"), + fieldtype: "MultiSelectList", + get_data: function (txt) { + return frappe.db.get_link_options("Project", txt, { + company: frappe.query_report.get_filter_value("company"), + }); + }, + }, ], }; + +erpnext.utils.add_dimensions("Customer Ledger Summary", 14); diff --git a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py index 7b990965b69..adac2e4f364 100644 --- a/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py +++ b/erpnext/accounts/report/customer_ledger_summary/customer_ledger_summary.py @@ -6,6 +6,12 @@ import frappe from frappe import _, qb, scrub from frappe.utils import getdate, nowdate +from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import ( + get_accounting_dimensions, + get_dimension_with_children, +) +from erpnext.accounts.report.financial_statements import get_cost_centers_with_children + class PartyLedgerSummaryReport: def __init__(self, filters=None): @@ -13,6 +19,12 @@ class PartyLedgerSummaryReport: self.filters.from_date = getdate(self.filters.from_date or nowdate()) self.filters.to_date = getdate(self.filters.to_date or nowdate()) + if self.filters.get("cost_center"): + self.filters.cost_center = frappe.parse_json(self.filters.get("cost_center")) + + if self.filters.get("project"): + self.filters.project = frappe.parse_json(self.filters.get("project")) + if not self.filters.get("company"): self.filters["company"] = frappe.db.get_single_value("Global Defaults", "default_company") @@ -259,7 +271,7 @@ class PartyLedgerSummaryReport: f""" select gle.posting_date, gle.party, gle.voucher_type, gle.voucher_no, gle.against_voucher_type, - gle.against_voucher, gle.debit, gle.credit, gle.is_opening {join_field} + gle.against_voucher, gle.cost_center, gle.project, gle.debit, gle.credit, gle.is_opening {join_field} from `tabGL Entry` gle {join} where @@ -334,6 +346,27 @@ class PartyLedgerSummaryReport: where supplier_group=%(supplier_group)s)""" ) + if self.filters.get("cost_center"): + self.filters.cost_center = get_cost_centers_with_children(self.filters.cost_center) + conditions.append("gle.cost_center in %(cost_center)s") + + if self.filters.get("project"): + conditions.append("gle.project in %(project)s") + + accounting_dimensions = get_accounting_dimensions(as_list=False) + + if accounting_dimensions: + for dimension in accounting_dimensions: + if not dimension.disabled and dimension.document_type != "Finance Book": + if self.filters.get(dimension.fieldname): + if frappe.get_cached_value("DocType", dimension.document_type, "is_tree"): + self.filters[dimension.fieldname] = get_dimension_with_children( + dimension.document_type, self.filters.get(dimension.fieldname) + ) + conditions.append(f"{dimension.fieldname} in %({dimension.fieldname})s") + else: + conditions.append(f"{dimension.fieldname} in %({dimension.fieldname})s") + return " and ".join(conditions) def get_return_invoices(self): diff --git a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js index 5d91575b8b2..4b67331f6bf 100644 --- a/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js +++ b/erpnext/accounts/report/supplier_ledger_summary/supplier_ledger_summary.js @@ -74,5 +74,27 @@ frappe.query_reports["Supplier Ledger Summary"] = { fieldtype: "Data", hidden: 1, }, + { + fieldname: "cost_center", + label: __("Cost Center"), + fieldtype: "MultiSelectList", + get_data: function (txt) { + return frappe.db.get_link_options("Cost Center", txt, { + company: frappe.query_report.get_filter_value("company"), + }); + }, + }, + { + fieldname: "project", + label: __("Project"), + fieldtype: "MultiSelectList", + get_data: function (txt) { + return frappe.db.get_link_options("Project", txt, { + company: frappe.query_report.get_filter_value("company"), + }); + }, + }, ], }; + +erpnext.utils.add_dimensions("Supplier Ledger Summary", 11);