From 798dba3fe6f47444b6ca21a2ead88b3c35952304 Mon Sep 17 00:00:00 2001 From: Patrick Mayr Date: Tue, 23 Jan 2024 00:59:24 +0000 Subject: [PATCH] add saving button and iban/bic has no whitespace --- fet2020/finance/admin.py | 1 + fet2020/finance/forms.py | 16 ++++++++++++---- fet2020/finance/models.py | 7 +++++++ fet2020/finance/views.py | 16 +++++++++++++--- fet2020/templates/finance/bill_create.html | 5 +---- 5 files changed, 34 insertions(+), 11 deletions(-) diff --git a/fet2020/finance/admin.py b/fet2020/finance/admin.py index 580cf439..edeed499 100644 --- a/fet2020/finance/admin.py +++ b/fet2020/finance/admin.py @@ -36,6 +36,7 @@ class BankDataAdmin(admin.ModelAdmin): "name", "iban", "bic", + "is_disabled", ] ordering = ["name"] diff --git a/fet2020/finance/forms.py b/fet2020/finance/forms.py index 9535e553..bc3c7c6e 100644 --- a/fet2020/finance/forms.py +++ b/fet2020/finance/forms.py @@ -22,10 +22,14 @@ class BankDataForm(forms.ModelForm): class BillCreateForm(forms.ModelForm): - resolution_text = forms.CharField(max_length=128) + # bank data name_text = forms.CharField(max_length=128) iban_text = forms.CharField(max_length=34) bic_text = forms.CharField(max_length=11) + saving = forms.BooleanField() + + # resolution + resolution_text = forms.CharField(max_length=128) class Meta: model = Bill @@ -45,7 +49,6 @@ class BillCreateForm(forms.ModelForm): ] labels = { - "bill_creator": "Verantwortliche:r für die Einreichung", "date": "Rechnungsdatum", "invoice": "Rechnungsaussteller", "amount": "Betrag (EUR)", @@ -88,6 +91,7 @@ class BillCreateForm(forms.ModelForm): self.fields["name_text"].initial = bank_data.name self.fields["iban_text"].initial = bank_data.iban self.fields["bic_text"].initial = bank_data.bic + self.fields["saving"].initial = True self.fields["name_text"].label = "Kontoinhaber:in" self.fields["name_text"].required = False @@ -98,6 +102,9 @@ class BillCreateForm(forms.ModelForm): self.fields["bic_text"].label = "BIC" self.fields["bic_text"].required = False + self.fields["saving"].label = "Bankdaten speichern." + self.fields["saving"].required = False + # resolution fields self.fields["resolution_text"].label = "Beschlussnummer" self.fields["resolution_text"].required = False @@ -111,6 +118,7 @@ class BillCreateForm(forms.ModelForm): payer = cleaned_data.get("payer") name = cleaned_data.get("name_text") iban = cleaned_data.get("iban_text") + saving = cleaned_data.get("saving") only_digital = cleaned_data.get("only_digital") file_field = cleaned_data.get("file_field") @@ -134,13 +142,13 @@ class BillCreateForm(forms.ModelForm): ) """ - if payer == "M": + if payer == Bill.Payer.ME: if name == "" or iban == "": raise ValidationError( f"Bankdaten unvollständig (Kontoinhaber: {name}, IBAN: {iban})." ) - if payer == "V": + if payer == Bill.Payer.VEREIN or saving is not True: cleaned_data["name_text"] = "" cleaned_data["iban_text"] = "" cleaned_data["bic_text"] = "" diff --git a/fet2020/finance/models.py b/fet2020/finance/models.py index 8aaad4e1..71f45a73 100644 --- a/fet2020/finance/models.py +++ b/fet2020/finance/models.py @@ -25,6 +25,13 @@ class BankData(models.Model): def __str__(self): return f"{self.name} - {self.iban}" + def clean(self): + if self.iban: + self.iban = self.iban.replace(" ", "") + + if self.bic: + self.bic = self.bic.replace(" ", "") + class Resolution(models.Model): id = models.CharField( diff --git a/fet2020/finance/views.py b/fet2020/finance/views.py index 13be848c..a7f5745c 100644 --- a/fet2020/finance/views.py +++ b/fet2020/finance/views.py @@ -1,4 +1,5 @@ from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin +from django.db.models import Q from django.shortcuts import redirect from django.urls import reverse, reverse_lazy from django.views.generic import ListView, TemplateView @@ -25,14 +26,15 @@ class BillCreateView(LoginRequiredMixin, CreateView): resolution = form.cleaned_data["resolution_text"] if resolution != "": obj, created = Resolution.objects.get_or_create( - id=resolution, defaults={"name": resolution} + id=resolution, + defaults={"name": resolution}, ) form.instance.resolution = obj # get or create bankdata object name = form.cleaned_data["name_text"] - iban = form.cleaned_data["iban_text"] - bic = form.cleaned_data["bic_text"] + iban = form.cleaned_data["iban_text"].replace(" ", "") + bic = form.cleaned_data["bic_text"].replace(" ", "") if name != "" and iban != "" and bic != "": obj, created = BankData.objects.get_or_create( name=name, @@ -42,6 +44,14 @@ class BillCreateView(LoginRequiredMixin, CreateView): ) form.instance.bankdata = obj + # disable old bank data + qs = BankData.objects.filter( + ~Q(id=obj.id) + & Q(bankdata_creator=obj.bankdata_creator) + & Q(is_disabled=False) + ) + qs.update(is_disabled=True) + add_log_action(self.request, form, "finance", "bill", True) return super().form_valid(form) diff --git a/fet2020/templates/finance/bill_create.html b/fet2020/templates/finance/bill_create.html index bd14e540..cf76006b 100644 --- a/fet2020/templates/finance/bill_create.html +++ b/fet2020/templates/finance/bill_create.html @@ -29,10 +29,7 @@ {% include "baseform/text.html" with field=form.bic_text %}
- + {% include "baseform/checkbox.html" with field=form.saving %}