mirror of
https://github.com/frappe/erpnext.git
synced 2026-06-09 08:02:51 +00:00
fix(report): Cost center filters in financial statements and general ledger
This commit is contained in:
@@ -1,17 +1,17 @@
|
|||||||
{
|
{
|
||||||
"add_total_row": 0,
|
"add_total_row": 0,
|
||||||
"apply_user_permissions": 1,
|
|
||||||
"creation": "2014-07-14 05:24:20.385279",
|
"creation": "2014-07-14 05:24:20.385279",
|
||||||
"disabled": 0,
|
"disabled": 0,
|
||||||
"docstatus": 0,
|
"docstatus": 0,
|
||||||
"doctype": "Report",
|
"doctype": "Report",
|
||||||
"idx": 2,
|
"idx": 2,
|
||||||
"is_standard": "Yes",
|
"is_standard": "Yes",
|
||||||
"modified": "2017-02-24 20:12:47.161127",
|
"modified": "2018-09-07 12:18:21.850851",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Balance Sheet",
|
"name": "Balance Sheet",
|
||||||
"owner": "Administrator",
|
"owner": "Administrator",
|
||||||
|
"prepared_report": 0,
|
||||||
"ref_doctype": "GL Entry",
|
"ref_doctype": "GL Entry",
|
||||||
"report_name": "Balance Sheet",
|
"report_name": "Balance Sheet",
|
||||||
"report_type": "Script Report",
|
"report_type": "Script Report",
|
||||||
|
|||||||
@@ -351,7 +351,8 @@ def set_gl_entries_by_account(
|
|||||||
"from_date": from_date,
|
"from_date": from_date,
|
||||||
"to_date": to_date,
|
"to_date": to_date,
|
||||||
"lft": root_lft,
|
"lft": root_lft,
|
||||||
"rgt": root_rgt
|
"rgt": root_rgt,
|
||||||
|
"cost_center": filters.cost_center
|
||||||
},
|
},
|
||||||
as_dict=True)
|
as_dict=True)
|
||||||
|
|
||||||
@@ -381,10 +382,8 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
|
|||||||
additional_conditions.append("project = '%s'" % (frappe.db.escape(filters.get("project"))))
|
additional_conditions.append("project = '%s'" % (frappe.db.escape(filters.get("project"))))
|
||||||
|
|
||||||
if filters.get("cost_center"):
|
if filters.get("cost_center"):
|
||||||
if not isinstance(filters.get("cost_center"), list):
|
filters.cost_center = get_cost_centers_with_children(filters.cost_center)
|
||||||
cost_centers = str(filters.get("cost_center")).strip()
|
additional_conditions.append("cost_center in %(cost_center)s")
|
||||||
filters.cost_center = [d.strip() for d in cost_centers.split(',') if d]
|
|
||||||
additional_conditions.append(get_cost_center_cond(filters.get("cost_center")))
|
|
||||||
|
|
||||||
company_finance_book = erpnext.get_default_finance_book(filters.get("company"))
|
company_finance_book = erpnext.get_default_finance_book(filters.get("company"))
|
||||||
|
|
||||||
@@ -397,14 +396,17 @@ def get_additional_conditions(from_date, ignore_closing_entries, filters):
|
|||||||
|
|
||||||
return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else ""
|
return " and {}".format(" and ".join(additional_conditions)) if additional_conditions else ""
|
||||||
|
|
||||||
|
def get_cost_centers_with_children(cost_centers):
|
||||||
|
if not isinstance(cost_centers, list):
|
||||||
|
cost_centers = [d.strip() for d in str(cost_centers).strip().split(',') if d]
|
||||||
|
|
||||||
def get_cost_center_cond(cost_center):
|
all_cost_centers = []
|
||||||
cost_centers = frappe.db.get_all("Cost Center", {"name": ["in", cost_center]},
|
for d in cost_centers:
|
||||||
["name", "lft", "rgt"])
|
lft, rgt = frappe.db.get_value("Cost Center", d, ["lft", "rgt"])
|
||||||
|
children = frappe.get_all("Cost Center", filters={"lft": [">=", lft], "rgt": ["<=", rgt]})
|
||||||
|
all_cost_centers += [c.name for c in children]
|
||||||
|
|
||||||
lft_rgt = " or ".join(["(lft >=%s and rgt <=%s)" % (d.lft, d.rgt) for d in cost_centers])
|
return list(set(all_cost_centers))
|
||||||
|
|
||||||
return """ cost_center in (select name from `tabCost Center` where %s)""" % (lft_rgt)
|
|
||||||
|
|
||||||
def get_columns(periodicity, period_list, accumulated_values=1, company=None):
|
def get_columns(periodicity, period_list, accumulated_values=1, company=None):
|
||||||
columns = [{
|
columns = [{
|
||||||
|
|||||||
@@ -17,21 +17,6 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"options": "Finance Book"
|
"options": "Finance Book"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"fieldname":"cost_center",
|
|
||||||
"label": __("Cost Center"),
|
|
||||||
"fieldtype": "Link",
|
|
||||||
"options": "Cost Center",
|
|
||||||
"get_query": function() {
|
|
||||||
var company = frappe.query_report.get_filter_value('company');
|
|
||||||
return {
|
|
||||||
"doctype": "Cost Center",
|
|
||||||
"filters": {
|
|
||||||
"company": company,
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname":"from_date",
|
"fieldname":"from_date",
|
||||||
"label": __("From Date"),
|
"label": __("From Date"),
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ from erpnext.accounts.report.utils import get_currency, convert_to_presentation_
|
|||||||
from frappe.utils import getdate, cstr, flt, fmt_money
|
from frappe.utils import getdate, cstr, flt, fmt_money
|
||||||
from frappe import _, _dict
|
from frappe import _, _dict
|
||||||
from erpnext.accounts.utils import get_account_currency
|
from erpnext.accounts.utils import get_account_currency
|
||||||
|
from erpnext.accounts.report.financial_statements import get_cost_centers_with_children
|
||||||
from six import iteritems
|
from six import iteritems
|
||||||
|
|
||||||
def execute(filters=None):
|
def execute(filters=None):
|
||||||
@@ -155,9 +155,8 @@ def get_conditions(filters):
|
|||||||
where lft>=%s and rgt<=%s and docstatus<2)""" % (lft, rgt))
|
where lft>=%s and rgt<=%s and docstatus<2)""" % (lft, rgt))
|
||||||
|
|
||||||
if filters.get("cost_center"):
|
if filters.get("cost_center"):
|
||||||
lft, rgt = frappe.db.get_value("Cost Center", filters["cost_center"], ["lft", "rgt"])
|
filters.cost_center = get_cost_centers_with_children(filters.cost_center)
|
||||||
conditions.append("""cost_center in (select name from `tabCost Center`
|
conditions.append("cost_center in %(cost_center)s")
|
||||||
where lft>=%s and rgt<=%s and docstatus<2)""" % (lft, rgt))
|
|
||||||
|
|
||||||
if filters.get("voucher_no"):
|
if filters.get("voucher_no"):
|
||||||
conditions.append("voucher_no=%(voucher_no)s")
|
conditions.append("voucher_no=%(voucher_no)s")
|
||||||
@@ -179,9 +178,6 @@ def get_conditions(filters):
|
|||||||
if filters.get("project"):
|
if filters.get("project"):
|
||||||
conditions.append("project in %(project)s")
|
conditions.append("project in %(project)s")
|
||||||
|
|
||||||
if filters.get("cost_center"):
|
|
||||||
conditions.append("cost_center in %(cost_center)s")
|
|
||||||
|
|
||||||
company_finance_book = erpnext.get_default_finance_book(filters.get("company"))
|
company_finance_book = erpnext.get_default_finance_book(filters.get("company"))
|
||||||
if not filters.get("finance_book") or (filters.get("finance_book") == company_finance_book):
|
if not filters.get("finance_book") or (filters.get("finance_book") == company_finance_book):
|
||||||
filters['finance_book'] = company_finance_book
|
filters['finance_book'] = company_finance_book
|
||||||
|
|||||||
@@ -7,37 +7,6 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
|
|||||||
erpnext.financial_statements);
|
erpnext.financial_statements);
|
||||||
|
|
||||||
frappe.query_reports["Profit and Loss Statement"]["filters"].push(
|
frappe.query_reports["Profit and Loss Statement"]["filters"].push(
|
||||||
{
|
|
||||||
"fieldname":"cost_center",
|
|
||||||
"label": __("Cost Center"),
|
|
||||||
"fieldtype": "MultiSelect",
|
|
||||||
get_data: function() {
|
|
||||||
var cost_centers = frappe.query_report.get_filter_value("cost_center") || "";
|
|
||||||
|
|
||||||
const values = cost_centers.split(/\s*,\s*/).filter(d => d);
|
|
||||||
const txt = cost_centers.match(/[^,\s*]*$/)[0] || '';
|
|
||||||
let data = [];
|
|
||||||
|
|
||||||
frappe.call({
|
|
||||||
type: "GET",
|
|
||||||
method:'frappe.desk.search.search_link',
|
|
||||||
async: false,
|
|
||||||
no_spinner: true,
|
|
||||||
args: {
|
|
||||||
doctype: "Cost Center",
|
|
||||||
txt: txt,
|
|
||||||
filters: {
|
|
||||||
"company": frappe.query_report.get_filter_value("company"),
|
|
||||||
"name": ["not in", values]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
callback: function(r) {
|
|
||||||
data = r.results;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldname":"project",
|
"fieldname":"project",
|
||||||
"label": __("Project"),
|
"label": __("Project"),
|
||||||
|
|||||||
@@ -81,16 +81,32 @@ function get_filters(){
|
|||||||
{
|
{
|
||||||
"fieldname":"cost_center",
|
"fieldname":"cost_center",
|
||||||
"label": __("Cost Center"),
|
"label": __("Cost Center"),
|
||||||
"fieldtype": "Link",
|
"fieldtype": "MultiSelect",
|
||||||
"options": "Cost Center",
|
get_data: function() {
|
||||||
"get_query": function() {
|
var cost_centers = frappe.query_report.get_filter_value("cost_center") || "";
|
||||||
var company = frappe.query_report.get_filter_value('company');
|
|
||||||
return {
|
const values = cost_centers.split(/\s*,\s*/).filter(d => d);
|
||||||
"doctype": "Cost Center",
|
const txt = cost_centers.match(/[^,\s*]*$/)[0] || '';
|
||||||
"filters": {
|
let data = [];
|
||||||
"company": company,
|
|
||||||
|
frappe.call({
|
||||||
|
type: "GET",
|
||||||
|
method:'frappe.desk.search.search_link',
|
||||||
|
async: false,
|
||||||
|
no_spinner: true,
|
||||||
|
args: {
|
||||||
|
doctype: "Cost Center",
|
||||||
|
txt: txt,
|
||||||
|
filters: {
|
||||||
|
"company": frappe.query_report.get_filter_value("company"),
|
||||||
|
"name": ["not in", values]
|
||||||
}
|
}
|
||||||
};
|
},
|
||||||
|
callback: function(r) {
|
||||||
|
data = r.results;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return data;
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
|
|||||||
@@ -392,15 +392,14 @@ def insert_item_price(args):
|
|||||||
price_list_rate = (args.rate / args.get('conversion_factor')
|
price_list_rate = (args.rate / args.get('conversion_factor')
|
||||||
if args.get("conversion_factor") else args.rate)
|
if args.get("conversion_factor") else args.rate)
|
||||||
|
|
||||||
name = frappe.db.get_value('Item Price',
|
item_price = frappe.db.get_value('Item Price',
|
||||||
{'item_code': args.item_code, 'price_list': args.price_list, 'currency': args.currency}, 'name')
|
{'item_code': args.item_code, 'price_list': args.price_list, 'currency': args.currency},
|
||||||
|
['name', 'price_list_rate'], as_dict=1)
|
||||||
if name:
|
if item_price and item_price.name:
|
||||||
item_price = frappe.get_doc('Item Price', name)
|
if item_price.price_list_rate != price_list_rate:
|
||||||
item_price.price_list_rate = price_list_rate
|
frappe.db.set_value('Item Price', item_price.name, "price_list_rate", price_list_rate)
|
||||||
item_price.save()
|
|
||||||
frappe.msgprint(_("Item Price updated for {0} in Price List {1}").format(args.item_code,
|
frappe.msgprint(_("Item Price updated for {0} in Price List {1}").format(args.item_code,
|
||||||
args.price_list))
|
args.price_list), alert=True)
|
||||||
else:
|
else:
|
||||||
item_price = frappe.get_doc({
|
item_price = frappe.get_doc({
|
||||||
"doctype": "Item Price",
|
"doctype": "Item Price",
|
||||||
|
|||||||
Reference in New Issue
Block a user