Files
web2.0-backend/expenses_claim/forms.py
T

31 lines
1.1 KiB
Python

"""Expenses claim form."""
from django import forms
from string import ascii_uppercase
class ExpensesClaim(forms.Form):
"""Expenses claim form"""
name = forms.CharField(label='Nimi', max_length=100)
iban = forms.CharField(label='IBAN', max_length=100)
amount = forms.DecimalField(label="Summa", decimal_places=2)
def clean_iban(self):
"""Validate IBAN."""
data = self.cleaned_data['iban']
# Remove spaces.
data = data.replace(" ", "")
# Move first 4 symbols to the end of the string.
data = data[4:] + data[0:4]
LETTERS = {letter: str(index) for index,
letter in enumerate(ascii_uppercase, start=10)}
data = data.upper()
# Replace all letters with numbers, so that A=10, B=11, ..., Z=35.
data = [LETTERS[char] if char in LETTERS else char for char in data]
data = ''.join(data)
# If data modulo 97 != 1 the IBAN number is invalid.
if int(data) % 97 != 1:
raise forms.ValidationError("Invalid IBAN number!")
return data