31 lines
1.1 KiB
Python
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
|