"""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