Skip to content

Commit 0501231

Browse files
committed
Added vat_number
1 parent 60eb8d1 commit 0501231

File tree

2 files changed

+41
-0
lines changed

2 files changed

+41
-0
lines changed

src/imio/esign/browser/settings.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,35 @@
55
from plone.z3cform import layout
66
from zope import schema
77
from zope.interface import Interface
8+
from zope.interface import Invalid
9+
10+
11+
def validate_vat_number(va_nb):
12+
"""Validate the VAT number format. It should start with BE followed by 10 digits,
13+
with the last 2 digits being a control checksum of the first 8 digits."""
14+
if not va_nb:
15+
return True
16+
17+
# Check format: BE followed by 10 digits
18+
if not va_nb.startswith('BE'):
19+
raise Invalid(_("VAT number must start with 'BE'"))
20+
21+
if len(va_nb) != 12:
22+
raise Invalid(_("VAT number must be 12 characters (BE + 10 digits)"))
23+
24+
digits = va_nb[2:]
25+
if not digits.isdigit():
26+
raise Invalid(_("VAT number must contain 10 digits after 'BE'"))
27+
28+
# Validate checksum: last 2 digits should be 97 - (first 8 digits modulo 97)
29+
first_eight = int(digits[:8])
30+
control = int(digits[8:10])
31+
expected_control = 97 - (first_eight % 97)
32+
33+
if control != expected_control:
34+
raise Invalid(_("Invalid VAT number: checksum verification failed"))
35+
36+
return True
837

938

1039
class IImioEsignSettings(Interface):
@@ -21,6 +50,13 @@ class IImioEsignSettings(Interface):
2150
required=False,
2251
)
2352

53+
vat_number = schema.TextLine(
54+
title=_("VAT number"),
55+
description=_("VAT number used for esign billing (BE0123456789)."),
56+
constraint=validate_vat_number,
57+
required=True,
58+
)
59+
2460

2561
class ImioEsignSettings(RegistryEditForm):
2662
schema = IImioEsignSettings

src/imio/esign/utils.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,11 @@ def create_external_session(session_id, b64_cred=None, esign_root_url=None):
111111
"sessionName": session["title"],
112112
}
113113
}
114+
# not mandatory now
115+
# vat_number = api.portal.get_registry_record("imio.esign.vat_number", default="BE0000000097")
116+
vat_number = api.portal.get_registry_record("imio.esign.vat_number", default="")
117+
if vat_number:
118+
data_payload["commonData"]["vatNumber"] = vat_number
114119

115120
signers = [fdic["email"] for fdic in session["signers"]]
116121
if signers:

0 commit comments

Comments
 (0)