fix: Multiple fixes in accounting doctype
This commit is contained in:
parent
50ea99e35b
commit
f5b6ee9ae7
@ -21,4 +21,16 @@ 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
|
||||||
|
},
|
||||||
|
callback: function() {
|
||||||
|
frappe.msgprint(_("{0} dimension disabled", [frm.doc.label]));
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
});
|
});
|
||||||
|
@ -9,7 +9,8 @@
|
|||||||
"document_type",
|
"document_type",
|
||||||
"label",
|
"label",
|
||||||
"fieldname",
|
"fieldname",
|
||||||
"is_mandatory",
|
"mandatory_for_bs",
|
||||||
|
"mandatory_for_pl",
|
||||||
"disabled"
|
"disabled"
|
||||||
],
|
],
|
||||||
"fields": [
|
"fields": [
|
||||||
@ -33,20 +34,26 @@
|
|||||||
"options": "DocType",
|
"options": "DocType",
|
||||||
"reqd": 1
|
"reqd": 1
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"default": "0",
|
|
||||||
"fieldname": "is_mandatory",
|
|
||||||
"fieldtype": "Check",
|
|
||||||
"label": "Is Mandatory"
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"default": "0",
|
"default": "0",
|
||||||
"fieldname": "disabled",
|
"fieldname": "disabled",
|
||||||
"fieldtype": "Check",
|
"fieldtype": "Check",
|
||||||
"label": "Disable"
|
"label": "Disable"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "mandatory_for_bs",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Mandatory For Balance Sheet"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"default": "0",
|
||||||
|
"fieldname": "mandatory_for_pl",
|
||||||
|
"fieldtype": "Check",
|
||||||
|
"label": "Mandatory For Profit and Loss Account"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"modified": "2019-05-25 19:18:11.718209",
|
"modified": "2019-05-27 18:18:17.792726",
|
||||||
"modified_by": "Administrator",
|
"modified_by": "Administrator",
|
||||||
"module": "Accounts",
|
"module": "Accounts",
|
||||||
"name": "Accounting Dimension",
|
"name": "Accounting Dimension",
|
||||||
|
@ -12,9 +12,6 @@ from frappe.utils import cstr
|
|||||||
from frappe.utils.background_jobs import enqueue
|
from frappe.utils.background_jobs import enqueue
|
||||||
|
|
||||||
class AccountingDimension(Document):
|
class AccountingDimension(Document):
|
||||||
def on_update(self):
|
|
||||||
frappe.enqueue(disable_dimension, doc=self)
|
|
||||||
|
|
||||||
def before_insert(self):
|
def before_insert(self):
|
||||||
self.set_fieldname_and_label()
|
self.set_fieldname_and_label()
|
||||||
frappe.enqueue(make_dimension_in_accounting_doctypes, doc=self)
|
frappe.enqueue(make_dimension_in_accounting_doctypes, doc=self)
|
||||||
@ -33,11 +30,6 @@ def make_dimension_in_accounting_doctypes(doc):
|
|||||||
doclist = get_doclist()
|
doclist = get_doclist()
|
||||||
doc_count = len(get_accounting_dimensions())
|
doc_count = len(get_accounting_dimensions())
|
||||||
|
|
||||||
if doc.is_mandatory:
|
|
||||||
df.update({
|
|
||||||
"reqd": 1
|
|
||||||
})
|
|
||||||
|
|
||||||
for doctype in doclist:
|
for doctype in doclist:
|
||||||
|
|
||||||
if (doc_count + 1) % 2 == 0:
|
if (doc_count + 1) % 2 == 0:
|
||||||
@ -81,7 +73,19 @@ def make_dimension_in_accounting_doctypes(doc):
|
|||||||
}).insert(ignore_permissions=True)
|
}).insert(ignore_permissions=True)
|
||||||
frappe.clear_cache(doctype=doctype)
|
frappe.clear_cache(doctype=doctype)
|
||||||
else:
|
else:
|
||||||
create_custom_field(doctype, df)
|
if frappe.db.has_column(doctype, doc.fieldname) and (doc.mandatory_for_pl or doc.mandatory_for_bs):
|
||||||
|
frappe.get_doc({
|
||||||
|
"doctype": "Property Setter",
|
||||||
|
"doctype_or_field": "DocField",
|
||||||
|
"doc_type": doctype,
|
||||||
|
"field_name": doc.fieldname,
|
||||||
|
"property": "hidden",
|
||||||
|
"property_type": "Check",
|
||||||
|
"value": 0
|
||||||
|
}).insert(ignore_permissions=True)
|
||||||
|
else:
|
||||||
|
create_custom_field(doctype, df)
|
||||||
|
|
||||||
frappe.clear_cache(doctype=doctype)
|
frappe.clear_cache(doctype=doctype)
|
||||||
|
|
||||||
def delete_accounting_dimension(doc):
|
def delete_accounting_dimension(doc):
|
||||||
@ -109,8 +113,14 @@ def delete_accounting_dimension(doc):
|
|||||||
for doctype in doclist:
|
for doctype in doclist:
|
||||||
frappe.clear_cache(doctype=doctype)
|
frappe.clear_cache(doctype=doctype)
|
||||||
|
|
||||||
|
@frappe.whitelist()
|
||||||
def disable_dimension(doc):
|
def disable_dimension(doc):
|
||||||
if doc.disabled:
|
frappe.enqueue(start_dimension_disabling, doc=doc)
|
||||||
|
|
||||||
|
def start_dimension_disabling(doc):
|
||||||
|
doc = json.loads(doc)
|
||||||
|
|
||||||
|
if doc.get('disabled'):
|
||||||
df = {"read_only": 1}
|
df = {"read_only": 1}
|
||||||
else:
|
else:
|
||||||
df = {"read_only": 0}
|
df = {"read_only": 0}
|
||||||
@ -118,7 +128,7 @@ def disable_dimension(doc):
|
|||||||
doclist = get_doclist()
|
doclist = get_doclist()
|
||||||
|
|
||||||
for doctype in doclist:
|
for doctype in doclist:
|
||||||
field = frappe.db.get_value("Custom Field", {"dt": doctype, "fieldname": doc.fieldname})
|
field = frappe.db.get_value("Custom Field", {"dt": doctype, "fieldname": doc.get('fieldname')})
|
||||||
if field:
|
if field:
|
||||||
custom_field = frappe.get_doc("Custom Field", field)
|
custom_field = frappe.get_doc("Custom Field", field)
|
||||||
custom_field.update(df)
|
custom_field.update(df)
|
||||||
@ -136,7 +146,10 @@ def get_doclist():
|
|||||||
|
|
||||||
return doclist
|
return doclist
|
||||||
|
|
||||||
def get_accounting_dimensions():
|
def get_accounting_dimensions(as_list=True):
|
||||||
accounting_dimensions = frappe.get_all("Accounting Dimension", fields=["fieldname"])
|
accounting_dimensions = frappe.get_all("Accounting Dimension", fields=["label", "fieldname", "mandatory_for_pl", "mandatory_for_bs", "disabled"])
|
||||||
|
|
||||||
return [d.fieldname for d in accounting_dimensions]
|
if as_list:
|
||||||
|
return [d.fieldname for d in accounting_dimensions]
|
||||||
|
else:
|
||||||
|
return accounting_dimensions
|
||||||
|
@ -12,6 +12,7 @@ from erpnext.accounts.party import validate_party_gle_currency, validate_party_f
|
|||||||
from erpnext.accounts.utils import get_account_currency
|
from erpnext.accounts.utils import get_account_currency
|
||||||
from erpnext.accounts.utils import get_fiscal_year
|
from erpnext.accounts.utils import get_fiscal_year
|
||||||
from erpnext.exceptions import InvalidAccountCurrency
|
from erpnext.exceptions import InvalidAccountCurrency
|
||||||
|
from erpnext.accounts.doctype.accounting_dimension.accounting_dimension import get_accounting_dimensions
|
||||||
|
|
||||||
exclude_from_linked_with = True
|
exclude_from_linked_with = True
|
||||||
class GLEntry(Document):
|
class GLEntry(Document):
|
||||||
@ -28,6 +29,7 @@ class GLEntry(Document):
|
|||||||
self.validate_and_set_fiscal_year()
|
self.validate_and_set_fiscal_year()
|
||||||
self.pl_must_have_cost_center()
|
self.pl_must_have_cost_center()
|
||||||
self.validate_cost_center()
|
self.validate_cost_center()
|
||||||
|
self.validate_dimensions_for_pl_and_bs()
|
||||||
|
|
||||||
if not self.flags.from_repost:
|
if not self.flags.from_repost:
|
||||||
self.check_pl_account()
|
self.check_pl_account()
|
||||||
@ -80,6 +82,23 @@ class GLEntry(Document):
|
|||||||
if self.project:
|
if self.project:
|
||||||
self.project = None
|
self.project = None
|
||||||
|
|
||||||
|
def validate_dimensions_for_pl_and_bs(self):
|
||||||
|
|
||||||
|
for dimension in get_accounting_dimensions(as_list=False):
|
||||||
|
|
||||||
|
if frappe.db.get_value("Account", self.account, "report_type") == "Profit and Loss" \
|
||||||
|
and dimension.mandatory_for_pl and not dimension.disabled:
|
||||||
|
if not self.get(dimension.fieldname):
|
||||||
|
frappe.throw(_("{0} is required for 'Profit and Loss' account {1}.")
|
||||||
|
.format(dimension.label, self.account))
|
||||||
|
|
||||||
|
if frappe.db.get_value("Account", self.account, "report_type") == "Balance Sheet" \
|
||||||
|
and dimension.mandatory_for_bs and not dimension.disabled:
|
||||||
|
if not self.get(dimension.fieldname):
|
||||||
|
frappe.throw(_("{0} is required for 'Balance Sheet' account {1}.")
|
||||||
|
.format(dimension.label, self.account))
|
||||||
|
|
||||||
|
|
||||||
def check_pl_account(self):
|
def check_pl_account(self):
|
||||||
if self.is_opening=='Yes' and \
|
if self.is_opening=='Yes' and \
|
||||||
frappe.db.get_value("Account", self.account, "report_type")=="Profit and Loss" and \
|
frappe.db.get_value("Account", self.account, "report_type")=="Profit and Loss" and \
|
||||||
|
@ -56,67 +56,6 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
frappe.query_report.set_filter_value('group_by', "");
|
frappe.query_report.set_filter_value('group_by', "");
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"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",
|
|
||||||
"label": __("Project"),
|
|
||||||
"fieldtype": "MultiSelect",
|
|
||||||
get_data: function() {
|
|
||||||
var projects = frappe.query_report.get_filter_value("project") || "";
|
|
||||||
|
|
||||||
const values = projects.split(/\s*,\s*/).filter(d => d);
|
|
||||||
const txt = projects.match(/[^,\s*]*$/)[0] || '';
|
|
||||||
let data = [];
|
|
||||||
|
|
||||||
frappe.call({
|
|
||||||
type: "GET",
|
|
||||||
method:'frappe.desk.search.search_link',
|
|
||||||
async: false,
|
|
||||||
no_spinner: true,
|
|
||||||
args: {
|
|
||||||
doctype: "Project",
|
|
||||||
txt: txt,
|
|
||||||
filters: {
|
|
||||||
"name": ["not in", values]
|
|
||||||
}
|
|
||||||
},
|
|
||||||
callback: function(r) {
|
|
||||||
data = r.results;
|
|
||||||
}
|
|
||||||
});
|
|
||||||
return data;
|
|
||||||
}
|
|
||||||
},
|
|
||||||
{
|
{
|
||||||
"fieldtype": "Break",
|
"fieldtype": "Break",
|
||||||
},
|
},
|
||||||
@ -212,11 +151,72 @@ frappe.query_reports["General Ledger"] = {
|
|||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"options": erpnext.get_presentation_currency_list()
|
"options": erpnext.get_presentation_currency_list()
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
"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",
|
||||||
|
"label": __("Project"),
|
||||||
|
"fieldtype": "MultiSelect",
|
||||||
|
get_data: function() {
|
||||||
|
var projects = frappe.query_report.get_filter_value("project") || "";
|
||||||
|
|
||||||
|
const values = projects.split(/\s*,\s*/).filter(d => d);
|
||||||
|
const txt = projects.match(/[^,\s*]*$/)[0] || '';
|
||||||
|
let data = [];
|
||||||
|
|
||||||
|
frappe.call({
|
||||||
|
type: "GET",
|
||||||
|
method:'frappe.desk.search.search_link',
|
||||||
|
async: false,
|
||||||
|
no_spinner: true,
|
||||||
|
args: {
|
||||||
|
doctype: "Project",
|
||||||
|
txt: txt,
|
||||||
|
filters: {
|
||||||
|
"name": ["not in", values]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
callback: function(r) {
|
||||||
|
data = r.results;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
return data;
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"fieldname": "show_opening_entries",
|
"fieldname": "show_opening_entries",
|
||||||
"label": __("Show Opening Entries"),
|
"label": __("Show Opening Entries"),
|
||||||
"fieldtype": "Check"
|
"fieldtype": "Check"
|
||||||
}
|
},
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -224,7 +224,7 @@ let dimension_filters = erpnext.get_dimension_filters();
|
|||||||
|
|
||||||
dimension_filters.then((dimensions) => {
|
dimension_filters.then((dimensions) => {
|
||||||
dimensions.forEach((dimension) => {
|
dimensions.forEach((dimension) => {
|
||||||
frappe.query_reports["General Ledger"].filters.push({
|
frappe.query_reports["General Ledger"].filters.splice(15, 0 ,{
|
||||||
"fieldname": dimension["fieldname"],
|
"fieldname": dimension["fieldname"],
|
||||||
"label": __(dimension["label"]),
|
"label": __(dimension["label"]),
|
||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
|
@ -78,37 +78,6 @@ function get_filters(){
|
|||||||
"fieldtype": "Link",
|
"fieldtype": "Link",
|
||||||
"options": "Finance Book"
|
"options": "Finance Book"
|
||||||
},
|
},
|
||||||
{
|
|
||||||
"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":"from_fiscal_year",
|
"fieldname":"from_fiscal_year",
|
||||||
"label": __("Start Year"),
|
"label": __("Start Year"),
|
||||||
@ -147,6 +116,37 @@ function get_filters(){
|
|||||||
"label": __("Currency"),
|
"label": __("Currency"),
|
||||||
"fieldtype": "Select",
|
"fieldtype": "Select",
|
||||||
"options": erpnext.get_presentation_currency_list()
|
"options": erpnext.get_presentation_currency_list()
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user