57 lines
1.5 KiB
Python
57 lines
1.5 KiB
Python
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"
|
|
},
|
|
{
|
|
"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
|
|
)
|
|
)
|