fix: Add accounting dimensions to various reports and fixes

This commit is contained in:
deepeshgarg007 2019-07-07 21:24:45 +05:30
parent 8a054e4b36
commit 6bb5ade667
17 changed files with 127 additions and 34 deletions

View File

@ -9,6 +9,26 @@ frappe.ui.form.on('Accounting Dimension', {
frappe.set_route("List", frm.doc.document_type); frappe.set_route("List", frm.doc.document_type);
}); });
} }
let button = frm.doc.disabled ? "Enable" : "Disable";
frm.add_custom_button(__(button), function() {
frm.set_value('disabled', 1 - frm.doc.disabled);
frappe.call({
method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.disable_dimension",
args: {
doc: frm.doc
},
freeze: true,
callback: function(r) {
let message = frm.doc.disabled ? "Dimension Disabled" : "Dimension Enabled";
frm.save();
frappe.show_alert({message:__(message), indicator:'green'});
}
});
});
}, },
document_type: function(frm) { document_type: function(frm) {
@ -21,13 +41,4 @@ frappe.ui.form.on('Accounting Dimension', {
} }
}); });
}, },
disabled: function(frm) {
frappe.call({
method: "erpnext.accounts.doctype.accounting_dimension.accounting_dimension.disable_dimension",
args: {
doc: frm.doc
}
});
}
}); });

View File

@ -38,7 +38,8 @@
"default": "0", "default": "0",
"fieldname": "disabled", "fieldname": "disabled",
"fieldtype": "Check", "fieldtype": "Check",
"label": "Disable" "label": "Disable",
"read_only": 1
}, },
{ {
"default": "0", "default": "0",
@ -53,7 +54,7 @@
"label": "Mandatory For Profit and Loss Account" "label": "Mandatory For Profit and Loss Account"
} }
], ],
"modified": "2019-05-27 18:18:17.792726", "modified": "2019-07-07 18:56:19.517450",
"modified_by": "Administrator", "modified_by": "Administrator",
"module": "Accounts", "module": "Accounts",
"name": "Accounting Dimension", "name": "Accounting Dimension",

View File

@ -121,11 +121,11 @@ def delete_accounting_dimension(doc):
@frappe.whitelist() @frappe.whitelist()
def disable_dimension(doc): def disable_dimension(doc):
if frappe.flags.in_test: if frappe.flags.in_test:
frappe.enqueue(start_dimension_disabling, doc=doc) toggle_disabling(doc=doc)
else: else:
start_dimension_disabling(doc=doc) frappe.enqueue(toggle_disabling, doc=doc)
def start_dimension_disabling(doc): def toggle_disabling(doc):
doc = json.loads(doc) doc = json.loads(doc)
if doc.get('disabled'): if doc.get('disabled'):

View File

@ -108,3 +108,14 @@ frappe.query_reports["Accounts Payable"] = {
}); });
} }
} }
erpnext.dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
frappe.query_reports["Accounts Payable"].filters.splice(9, 0 ,{
"fieldname": dimension["fieldname"],
"label": __(dimension["label"]),
"fieldtype": "Link",
"options": dimension["document_type"]
});
});
});

View File

@ -92,3 +92,14 @@ frappe.query_reports["Accounts Payable Summary"] = {
}); });
} }
} }
erpnext.dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
frappe.query_reports["Accounts Payable Summary"].filters.splice(9, 0 ,{
"fieldname": dimension["fieldname"],
"label": __(dimension["label"]),
"fieldtype": "Link",
"options": dimension["document_type"]
});
});
});

View File

@ -172,3 +172,14 @@ frappe.query_reports["Accounts Receivable"] = {
}); });
} }
} }
erpnext.dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
frappe.query_reports["Accounts Receivable"].filters.splice(9, 0 ,{
"fieldname": dimension["fieldname"],
"label": __(dimension["label"]),
"fieldtype": "Link",
"options": dimension["document_type"]
});
});
});

View File

@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe, erpnext import frappe, erpnext
from frappe import _, scrub from frappe import _, scrub
from frappe.utils import getdate, nowdate, flt, cint, formatdate, cstr from frappe.utils import getdate, nowdate, flt, cint, formatdate, cstr
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
class ReceivablePayableReport(object): class ReceivablePayableReport(object):
def __init__(self, filters=None): def __init__(self, filters=None):
@ -553,6 +554,14 @@ class ReceivablePayableReport(object):
conditions.append("account in (%s)" % ','.join(['%s'] *len(accounts))) conditions.append("account in (%s)" % ','.join(['%s'] *len(accounts)))
values += accounts values += accounts
accounting_dimensions = get_accounting_dimensions()
if accounting_dimensions:
for dimension in accounting_dimensions:
if self.filters.get(dimension):
conditions.append("{0} = %s".format(dimension))
values.append(self.filters.get(dimension))
return " and ".join(conditions), values return " and ".join(conditions), values
def get_gl_entries_for(self, party, party_type, against_voucher_type, against_voucher): def get_gl_entries_for(self, party, party_type, against_voucher_type, against_voucher):

View File

@ -116,3 +116,14 @@ frappe.query_reports["Accounts Receivable Summary"] = {
}); });
} }
} }
erpnext.dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
frappe.query_reports["Accounts Receivable Summary"].filters.splice(9, 0 ,{
"fieldname": dimension["fieldname"],
"label": __(dimension["label"]),
"fieldtype": "Link",
"options": dimension["document_type"]
});
});
});

View File

@ -63,9 +63,7 @@ frappe.query_reports["Budget Variance Report"] = {
] ]
} }
let dimension_filters = erpnext.get_dimension_filters(); erpnext.dimension_filters.then((dimensions) => {
dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => { dimensions.forEach((dimension) => {
frappe.query_reports["Budget Variance Report"].filters[4].options.push(dimension["document_type"]); frappe.query_reports["Budget Variance Report"].filters[4].options.push(dimension["document_type"]);
}); });

View File

@ -159,9 +159,7 @@ frappe.query_reports["General Ledger"] = {
] ]
} }
let dimension_filters = erpnext.get_dimension_filters(); erpnext.dimension_filters.then((dimensions) => {
dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => { dimensions.forEach((dimension) => {
frappe.query_reports["General Ledger"].filters.splice(15, 0 ,{ frappe.query_reports["General Ledger"].filters.splice(15, 0 ,{
"fieldname": dimension["fieldname"], "fieldname": dimension["fieldname"],

View File

@ -16,7 +16,7 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
"fieldname": "based_on", "fieldname": "based_on",
"label": __("Based On"), "label": __("Based On"),
"fieldtype": "Select", "fieldtype": "Select",
"options": "Cost Center\nProject", "options": ["Cost Center", "Project"],
"default": "Cost Center", "default": "Cost Center",
"reqd": 1 "reqd": 1
}, },
@ -104,5 +104,10 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
"parent_field": "parent_account", "parent_field": "parent_account",
"initial_depth": 3 "initial_depth": 3
} }
});
erpnext.dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
frappe.query_reports["Profitability Analysis"].filters[1].options.push(dimension["document_type"]);
});
});
});

View File

@ -24,8 +24,17 @@ def get_accounts_data(based_on, company):
if based_on == 'cost_center': if based_on == 'cost_center':
return frappe.db.sql("""select name, parent_cost_center as parent_account, cost_center_name as account_name, lft, rgt return frappe.db.sql("""select name, parent_cost_center as parent_account, cost_center_name as account_name, lft, rgt
from `tabCost Center` where company=%s order by name""", company, as_dict=True) from `tabCost Center` where company=%s order by name""", company, as_dict=True)
else: elif based_on == 'project':
return frappe.get_all('Project', fields = ["name"], filters = {'company': company}, order_by = 'name') return frappe.get_all('Project', fields = ["name"], filters = {'company': company}, order_by = 'name')
else:
filters = {}
doctype = frappe.unscrub(based_on)
has_company = frappe.db.has_column(doctype, 'company')
if has_company:
filters.update({'company': company})
return frappe.get_all(doctype, fields = ["name"], filters = filters, order_by = 'name')
def get_data(accounts, filters, based_on): def get_data(accounts, filters, based_on):
if not accounts: if not accounts:
@ -42,7 +51,7 @@ def get_data(accounts, filters, based_on):
accumulate_values_into_parents(accounts, accounts_by_name) accumulate_values_into_parents(accounts, accounts_by_name)
data = prepare_data(accounts, filters, total_row, parent_children_map, based_on) data = prepare_data(accounts, filters, total_row, parent_children_map, based_on)
data = filter_out_zero_value_rows(data, parent_children_map, data = filter_out_zero_value_rows(data, parent_children_map,
show_zero_values=filters.get("show_zero_values")) show_zero_values=filters.get("show_zero_values"))
return data return data
@ -112,14 +121,14 @@ def prepare_data(accounts, filters, total_row, parent_children_map, based_on):
for key in value_fields: for key in value_fields:
row[key] = flt(d.get(key, 0.0), 3) row[key] = flt(d.get(key, 0.0), 3)
if abs(row[key]) >= 0.005: if abs(row[key]) >= 0.005:
# ignore zero values # ignore zero values
has_value = True has_value = True
row["has_value"] = has_value row["has_value"] = has_value
data.append(row) data.append(row)
data.extend([{},total_row]) data.extend([{},total_row])
return data return data
@ -174,7 +183,7 @@ def set_gl_entries_by_account(company, from_date, to_date, based_on, gl_entries_
if from_date: if from_date:
additional_conditions.append("and posting_date >= %(from_date)s") additional_conditions.append("and posting_date >= %(from_date)s")
gl_entries = frappe.db.sql("""select posting_date, {based_on} as based_on, debit, credit, gl_entries = frappe.db.sql("""select posting_date, {based_on} as based_on, debit, credit,
is_opening, (select root_type from `tabAccount` where name = account) as type is_opening, (select root_type from `tabAccount` where name = account) as type
from `tabGL Entry` where company=%(company)s from `tabGL Entry` where company=%(company)s
{additional_conditions} {additional_conditions}

View File

@ -67,3 +67,14 @@ frappe.query_reports["Sales Register"] = {
} }
] ]
} }
erpnext.dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => {
frappe.query_reports["Sales Register"].filters.splice(7, 0 ,{
"fieldname": dimension["fieldname"],
"label": __(dimension["label"]),
"fieldtype": "Link",
"options": dimension["document_type"]
});
});
});

View File

@ -5,6 +5,7 @@ from __future__ import unicode_literals
import frappe import frappe
from frappe.utils import flt from frappe.utils import flt
from frappe import msgprint, _ from frappe import msgprint, _
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
def execute(filters=None): def execute(filters=None):
return _execute(filters) return _execute(filters)
@ -163,6 +164,16 @@ def get_conditions(filters):
where parent=`tabSales Invoice`.name where parent=`tabSales Invoice`.name
and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s)""" and ifnull(`tabSales Invoice Item`.item_group, '') = %(item_group)s)"""
accounting_dimensions = get_accounting_dimensions()
if accounting_dimensions:
for dimension in accounting_dimensions:
if filters.get(dimension):
conditions += """ and exists(select name from `tabSales Invoice Item`
where parent=`tabSales Invoice`.name
and ifnull(`tabSales Invoice Item`.{0}, '') = %({0})s)""".format(dimension)
return conditions return conditions
def get_invoices(filters, additional_query_columns): def get_invoices(filters, additional_query_columns):

View File

@ -96,9 +96,7 @@ frappe.require("assets/erpnext/js/financial_statements.js", function() {
} }
}); });
let dimension_filters = erpnext.get_dimension_filters(); erpnext.dimension_filters.then((dimensions) => {
dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => { dimensions.forEach((dimension) => {
frappe.query_reports["Trial Balance"].filters.splice(5, 0 ,{ frappe.query_reports["Trial Balance"].filters.splice(5, 0 ,{
"fieldname": dimension["fieldname"], "fieldname": dimension["fieldname"],

View File

@ -129,9 +129,7 @@ function get_filters(){
} }
] ]
let dimension_filters = erpnext.get_dimension_filters(); erpnext.dimension_filters.then((dimensions) => {
dimension_filters.then((dimensions) => {
dimensions.forEach((dimension) => { dimensions.forEach((dimension) => {
filters.push({ filters.push({
"fieldname": dimension["fieldname"], "fieldname": dimension["fieldname"],

View File

@ -7,7 +7,7 @@ erpnext.doctypes_with_dimensions = ["GL Entry", "Sales Invoice", "Purchase Invoi
"Landed Cost Item", "Asset Value Adjustment", "Loyalty Program", "Fee Schedule", "Fee Structure", "Stock Reconciliation", "Landed Cost Item", "Asset Value Adjustment", "Loyalty Program", "Fee Schedule", "Fee Structure", "Stock Reconciliation",
"Travel Request", "Fees", "POS Profile"]; "Travel Request", "Fees", "POS Profile"];
let dimension_filters = erpnext.get_dimension_filters(); erpnext.dimension_filters = erpnext.get_dimension_filters();
erpnext.doctypes_with_dimensions.forEach((doctype) => { erpnext.doctypes_with_dimensions.forEach((doctype) => {
frappe.ui.form.on(doctype, { frappe.ui.form.on(doctype, {