From 1c191496dd7e83a07d1e7c5a8b63df3d80ca87e4 Mon Sep 17 00:00:00 2001 From: mariusrklein <47218379+mariusrklein@users.noreply.github.com> Date: Thu, 26 Dec 2024 21:26:57 +0100 Subject: [PATCH] added iban validation check in members admin form --- jdav_web/members/admin.py | 19 ++++++++++++++++++- requirements.txt | 1 + 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index 65fa705..2983481 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -26,7 +26,7 @@ from django.db.models import TextField, ManyToManyField, ForeignKey, Count,\ Sum, Case, Q, F, When, Value, IntegerField, Subquery, OuterRef from django.forms import Textarea, RadioSelect, TypedChoiceField, CheckboxInput from django.shortcuts import render -from django.core.exceptions import PermissionDenied +from django.core.exceptions import PermissionDenied, ValidationError from .pdf import render_tex, fill_pdf_form, merge_pdfs, serve_pdf from contrib.admin import CommonAdminInlineMixin, CommonAdminMixin @@ -43,6 +43,7 @@ from finance.models import Statement, BillOnExcursionProxy from mailer.mailutils import send as send_mail, get_echo_link from django.conf import settings from utils import get_member +from schwifty import IBAN #from easy_select2 import apply_select2 @@ -161,6 +162,20 @@ class RegistrationFilter(admin.SimpleListFilter): 'display': title } +class MemberAdminForm(forms.ModelForm): + + class Meta: + model = Member + fields = '__all__' + + # check iban validity using schwifty package + def clean_iban(self): + iban_str = self.cleaned_data.get('iban') + if len(iban_str) > 0: + iban = IBAN(iban_str, allow_invalid=True) + if not iban.is_valid: + raise ValidationError("Die angegebene IBAN ist nicht valide.") + return iban_str # Register your models here. class MemberAdmin(CommonAdminMixin, admin.ModelAdmin): @@ -224,6 +239,8 @@ class MemberAdmin(CommonAdminMixin, admin.ModelAdmin): actions = ['request_echo', 'invite_as_user_action'] list_per_page = 25 + form = MemberAdminForm + sensitive_fields = ['iban', 'registration_form', 'comments'] field_view_permissions = { diff --git a/requirements.txt b/requirements.txt index b490373..747d2f9 100644 --- a/requirements.txt +++ b/requirements.txt @@ -48,6 +48,7 @@ pytz==2021.3 redis==4.1.0 requests==2.32.3 rules==3.3 +schwifty==2024.11.0 six==1.16.0 snowballstemmer==2.2.0 Sphinx==7.4.7