Merge pull request #23453 from frappe/validate_regional_germany
feat: validate Sales Invoice for Germany
This commit is contained in:
commit
b3aeba1a1b
@ -19,6 +19,7 @@
|
|||||||
"is_return",
|
"is_return",
|
||||||
"column_break1",
|
"column_break1",
|
||||||
"company",
|
"company",
|
||||||
|
"company_tax_id",
|
||||||
"posting_date",
|
"posting_date",
|
||||||
"posting_time",
|
"posting_time",
|
||||||
"set_posting_time",
|
"set_posting_time",
|
||||||
@ -1941,6 +1942,13 @@
|
|||||||
"hide_seconds": 1,
|
"hide_seconds": 1,
|
||||||
"label": "Is Internal Customer",
|
"label": "Is Internal Customer",
|
||||||
"read_only": 1
|
"read_only": 1
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"fetch_from": "company.tax_id",
|
||||||
|
"fieldname": "company_tax_id",
|
||||||
|
"fieldtype": "Data",
|
||||||
|
"label": "Company Tax ID",
|
||||||
|
"read_only": 1
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"icon": "fa fa-file-text",
|
"icon": "fa fa-file-text",
|
||||||
|
@ -392,6 +392,9 @@ regional_overrides = {
|
|||||||
'Italy': {
|
'Italy': {
|
||||||
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.italy.utils.update_itemised_tax_data',
|
'erpnext.controllers.taxes_and_totals.update_itemised_tax_data': 'erpnext.regional.italy.utils.update_itemised_tax_data',
|
||||||
'erpnext.controllers.accounts_controller.validate_regional': 'erpnext.regional.italy.utils.sales_invoice_validate',
|
'erpnext.controllers.accounts_controller.validate_regional': 'erpnext.regional.italy.utils.sales_invoice_validate',
|
||||||
|
},
|
||||||
|
'Germany': {
|
||||||
|
'erpnext.controllers.accounts_controller.validate_regional': 'erpnext.regional.germany.accounts_controller.validate_regional',
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
user_privacy_documents = [
|
user_privacy_documents = [
|
||||||
|
57
erpnext/regional/germany/accounts_controller.py
Normal file
57
erpnext/regional/germany/accounts_controller.py
Normal file
@ -0,0 +1,57 @@
|
|||||||
|
import frappe
|
||||||
|
from frappe import _
|
||||||
|
from frappe import msgprint
|
||||||
|
|
||||||
|
|
||||||
|
REQUIRED_FIELDS = {
|
||||||
|
"Sales Invoice": [
|
||||||
|
{
|
||||||
|
"field_name": "company_address",
|
||||||
|
"regulation": "§ 14 Abs. 4 Nr. 1 UStG"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field_name": "company_tax_id",
|
||||||
|
"regulation": "§ 14 Abs. 4 Nr. 2 UStG"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field_name": "taxes",
|
||||||
|
"regulation": "§ 14 Abs. 4 Nr. 8 UStG",
|
||||||
|
"condition": "not exempt_from_sales_tax"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"field_name": "customer_address",
|
||||||
|
"regulation": "§ 14 Abs. 4 Nr. 1 UStG",
|
||||||
|
"condition": "base_grand_total > 250"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
def validate_regional(doc):
|
||||||
|
"""Check if required fields for this document are present."""
|
||||||
|
required_fields = REQUIRED_FIELDS.get(doc.doctype)
|
||||||
|
if not required_fields:
|
||||||
|
return
|
||||||
|
|
||||||
|
meta = frappe.get_meta(doc.doctype)
|
||||||
|
field_map = {field.fieldname: field.label for field in meta.fields}
|
||||||
|
|
||||||
|
for field in required_fields:
|
||||||
|
condition = field.get("condition")
|
||||||
|
if condition and not frappe.safe_eval(condition, doc.as_dict()):
|
||||||
|
continue
|
||||||
|
|
||||||
|
field_name = field.get("field_name")
|
||||||
|
regulation = field.get("regulation")
|
||||||
|
if field_name and not doc.get(field_name):
|
||||||
|
missing(field_map.get(field_name), regulation)
|
||||||
|
|
||||||
|
|
||||||
|
def missing(field_label, regulation):
|
||||||
|
"""Notify the user that a required field is missing."""
|
||||||
|
context = 'Specific for Germany. Example: Remember to set Company Tax ID. It is required by § 14 Abs. 4 Nr. 2 UStG.'
|
||||||
|
msgprint(_('Remember to set {field_label}. It is required by {regulation}.', context=context).format(
|
||||||
|
field_label=frappe.bold(_(field_label)),
|
||||||
|
regulation=regulation
|
||||||
|
)
|
||||||
|
)
|
Loading…
Reference in New Issue
Block a user