fix: cost center & account validation in Sales/Purchase Taxes and Charges (#25929)
This commit is contained in:
parent
1cba77cfbd
commit
0e337be065
@ -6,7 +6,7 @@ import frappe
|
|||||||
from frappe import _
|
from frappe import _
|
||||||
from frappe.utils import flt
|
from frappe.utils import flt
|
||||||
from frappe.model.document import Document
|
from frappe.model.document import Document
|
||||||
from erpnext.controllers.accounts_controller import validate_taxes_and_charges, validate_inclusive_tax
|
from erpnext.controllers.accounts_controller import validate_taxes_and_charges, validate_inclusive_tax, validate_cost_center, validate_account_head
|
||||||
|
|
||||||
class SalesTaxesandChargesTemplate(Document):
|
class SalesTaxesandChargesTemplate(Document):
|
||||||
def validate(self):
|
def validate(self):
|
||||||
@ -39,6 +39,8 @@ def valdiate_taxes_and_charges_template(doc):
|
|||||||
|
|
||||||
for tax in doc.get("taxes"):
|
for tax in doc.get("taxes"):
|
||||||
validate_taxes_and_charges(tax)
|
validate_taxes_and_charges(tax)
|
||||||
|
validate_account_head(tax, doc)
|
||||||
|
validate_cost_center(tax, doc)
|
||||||
validate_inclusive_tax(tax, doc)
|
validate_inclusive_tax(tax, doc)
|
||||||
|
|
||||||
def validate_disabled(doc):
|
def validate_disabled(doc):
|
||||||
|
@ -8,6 +8,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "VAT",
|
"description": "VAT",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 6
|
"rate": 6
|
||||||
},
|
},
|
||||||
@ -16,6 +17,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "Service Tax",
|
"description": "Service Tax",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 6.36
|
"rate": 6.36
|
||||||
}
|
}
|
||||||
@ -114,6 +116,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "VAT",
|
"description": "VAT",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 12
|
"rate": 12
|
||||||
},
|
},
|
||||||
@ -122,6 +125,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "Service Tax",
|
"description": "Service Tax",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 4
|
"rate": 4
|
||||||
}
|
}
|
||||||
@ -137,6 +141,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "VAT",
|
"description": "VAT",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 12
|
"rate": 12
|
||||||
},
|
},
|
||||||
@ -145,6 +150,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "Service Tax",
|
"description": "Service Tax",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 4
|
"rate": 4
|
||||||
}
|
}
|
||||||
@ -160,6 +166,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "VAT",
|
"description": "VAT",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 12
|
"rate": 12
|
||||||
},
|
},
|
||||||
@ -168,6 +175,7 @@
|
|||||||
"charge_type": "On Net Total",
|
"charge_type": "On Net Total",
|
||||||
"description": "Service Tax",
|
"description": "Service Tax",
|
||||||
"doctype": "Sales Taxes and Charges",
|
"doctype": "Sales Taxes and Charges",
|
||||||
|
"cost_center": "Main - _TC",
|
||||||
"parentfield": "taxes",
|
"parentfield": "taxes",
|
||||||
"rate": 4
|
"rate": 4
|
||||||
}
|
}
|
||||||
|
@ -1288,6 +1288,27 @@ def validate_taxes_and_charges(tax):
|
|||||||
tax.rate = None
|
tax.rate = None
|
||||||
|
|
||||||
|
|
||||||
|
def validate_account_head(tax, doc):
|
||||||
|
company = frappe.get_cached_value('Account',
|
||||||
|
tax.account_head, 'company')
|
||||||
|
|
||||||
|
if company != doc.company:
|
||||||
|
frappe.throw(_('Row {0}: Account {1} does not belong to Company {2}')
|
||||||
|
.format(tax.idx, frappe.bold(tax.account_head), frappe.bold(doc.company)), title=_('Invalid Account'))
|
||||||
|
|
||||||
|
|
||||||
|
def validate_cost_center(tax, doc):
|
||||||
|
if not tax.cost_center:
|
||||||
|
return
|
||||||
|
|
||||||
|
company = frappe.get_cached_value('Cost Center',
|
||||||
|
tax.cost_center, 'company')
|
||||||
|
|
||||||
|
if company != doc.company:
|
||||||
|
frappe.throw(_('Row {0}: Cost Center {1} does not belong to Company {2}')
|
||||||
|
.format(tax.idx, frappe.bold(tax.cost_center), frappe.bold(doc.company)), title=_('Invalid Cost Center'))
|
||||||
|
|
||||||
|
|
||||||
def validate_inclusive_tax(tax, doc):
|
def validate_inclusive_tax(tax, doc):
|
||||||
def _on_previous_row_error(row_range):
|
def _on_previous_row_error(row_range):
|
||||||
throw(_("To include tax in row {0} in Item rate, taxes in rows {1} must also be included").format(tax.idx, row_range))
|
throw(_("To include tax in row {0} in Item rate, taxes in rows {1} must also be included").format(tax.idx, row_range))
|
||||||
|
@ -31,6 +31,14 @@ frappe.ui.form.on(cur_frm.doctype, {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
frm.set_query("cost_center", "taxes", function(doc) {
|
||||||
|
return {
|
||||||
|
filters: {
|
||||||
|
"company": doc.company,
|
||||||
|
"is_group": 0
|
||||||
|
}
|
||||||
|
};
|
||||||
|
});
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
validate: function(frm) {
|
validate: function(frm) {
|
||||||
|
@ -108,6 +108,9 @@ class Company(NestedSet):
|
|||||||
frappe.flags.country_change = True
|
frappe.flags.country_change = True
|
||||||
self.create_default_accounts()
|
self.create_default_accounts()
|
||||||
self.create_default_warehouses()
|
self.create_default_warehouses()
|
||||||
|
|
||||||
|
if not frappe.db.get_value("Cost Center", {"is_group": 0, "company": self.name}):
|
||||||
|
self.create_default_cost_center()
|
||||||
|
|
||||||
if frappe.flags.country_change:
|
if frappe.flags.country_change:
|
||||||
install_country_fixtures(self.name, self.country)
|
install_country_fixtures(self.name, self.country)
|
||||||
@ -117,9 +120,6 @@ class Company(NestedSet):
|
|||||||
from erpnext.setup.setup_wizard.operations.install_fixtures import install_post_company_fixtures
|
from erpnext.setup.setup_wizard.operations.install_fixtures import install_post_company_fixtures
|
||||||
install_post_company_fixtures(frappe._dict({'company_name': self.name}))
|
install_post_company_fixtures(frappe._dict({'company_name': self.name}))
|
||||||
|
|
||||||
if not frappe.db.get_value("Cost Center", {"is_group": 0, "company": self.name}):
|
|
||||||
self.create_default_cost_center()
|
|
||||||
|
|
||||||
if not frappe.local.flags.ignore_chart_of_accounts:
|
if not frappe.local.flags.ignore_chart_of_accounts:
|
||||||
self.set_default_accounts()
|
self.set_default_accounts()
|
||||||
if self.default_cash_account:
|
if self.default_cash_account:
|
||||||
|
@ -124,7 +124,8 @@ def make_taxes_and_charges_template(company_name, doctype, template):
|
|||||||
account_data = tax_row.get('account_head')
|
account_data = tax_row.get('account_head')
|
||||||
tax_row_defaults = {
|
tax_row_defaults = {
|
||||||
'category': 'Total',
|
'category': 'Total',
|
||||||
'charge_type': 'On Net Total'
|
'charge_type': 'On Net Total',
|
||||||
|
'cost_center': frappe.db.get_value('Company', company_name, 'cost_center')
|
||||||
}
|
}
|
||||||
|
|
||||||
if doctype == 'Purchase Taxes and Charges Template':
|
if doctype == 'Purchase Taxes and Charges Template':
|
||||||
|
Loading…
x
Reference in New Issue
Block a user