add saving button and iban/bic has no whitespace

This commit is contained in:
2024-01-23 00:59:24 +00:00
parent aa2d8b385f
commit 798dba3fe6
5 changed files with 34 additions and 11 deletions

View File

@@ -36,6 +36,7 @@ class BankDataAdmin(admin.ModelAdmin):
"name",
"iban",
"bic",
"is_disabled",
]
ordering = ["name"]

View File

@@ -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"] = ""

View File

@@ -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(

View File

@@ -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)

View File

@@ -29,10 +29,7 @@
{% include "baseform/text.html" with field=form.bic_text %}
</div>
<div class="col-span-full">
<label>
<input type="checkbox">
<span>Bankdaten speichern.</span>
</label>
{% include "baseform/checkbox.html" with field=form.saving %}
</div>
</div>
</section>