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", "name",
"iban", "iban",
"bic", "bic",
"is_disabled",
] ]
ordering = ["name"] ordering = ["name"]

View File

@@ -22,10 +22,14 @@ class BankDataForm(forms.ModelForm):
class BillCreateForm(forms.ModelForm): class BillCreateForm(forms.ModelForm):
resolution_text = forms.CharField(max_length=128) # bank data
name_text = forms.CharField(max_length=128) name_text = forms.CharField(max_length=128)
iban_text = forms.CharField(max_length=34) iban_text = forms.CharField(max_length=34)
bic_text = forms.CharField(max_length=11) bic_text = forms.CharField(max_length=11)
saving = forms.BooleanField()
# resolution
resolution_text = forms.CharField(max_length=128)
class Meta: class Meta:
model = Bill model = Bill
@@ -45,7 +49,6 @@ class BillCreateForm(forms.ModelForm):
] ]
labels = { labels = {
"bill_creator": "Verantwortliche:r für die Einreichung",
"date": "Rechnungsdatum", "date": "Rechnungsdatum",
"invoice": "Rechnungsaussteller", "invoice": "Rechnungsaussteller",
"amount": "Betrag (EUR)", "amount": "Betrag (EUR)",
@@ -88,6 +91,7 @@ class BillCreateForm(forms.ModelForm):
self.fields["name_text"].initial = bank_data.name self.fields["name_text"].initial = bank_data.name
self.fields["iban_text"].initial = bank_data.iban self.fields["iban_text"].initial = bank_data.iban
self.fields["bic_text"].initial = bank_data.bic self.fields["bic_text"].initial = bank_data.bic
self.fields["saving"].initial = True
self.fields["name_text"].label = "Kontoinhaber:in" self.fields["name_text"].label = "Kontoinhaber:in"
self.fields["name_text"].required = False self.fields["name_text"].required = False
@@ -98,6 +102,9 @@ class BillCreateForm(forms.ModelForm):
self.fields["bic_text"].label = "BIC" self.fields["bic_text"].label = "BIC"
self.fields["bic_text"].required = False self.fields["bic_text"].required = False
self.fields["saving"].label = "Bankdaten speichern."
self.fields["saving"].required = False
# resolution fields # resolution fields
self.fields["resolution_text"].label = "Beschlussnummer" self.fields["resolution_text"].label = "Beschlussnummer"
self.fields["resolution_text"].required = False self.fields["resolution_text"].required = False
@@ -111,6 +118,7 @@ class BillCreateForm(forms.ModelForm):
payer = cleaned_data.get("payer") payer = cleaned_data.get("payer")
name = cleaned_data.get("name_text") name = cleaned_data.get("name_text")
iban = cleaned_data.get("iban_text") iban = cleaned_data.get("iban_text")
saving = cleaned_data.get("saving")
only_digital = cleaned_data.get("only_digital") only_digital = cleaned_data.get("only_digital")
file_field = cleaned_data.get("file_field") 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 == "": if name == "" or iban == "":
raise ValidationError( raise ValidationError(
f"Bankdaten unvollständig (Kontoinhaber: {name}, IBAN: {iban})." 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["name_text"] = ""
cleaned_data["iban_text"] = "" cleaned_data["iban_text"] = ""
cleaned_data["bic_text"] = "" cleaned_data["bic_text"] = ""

View File

@@ -25,6 +25,13 @@ class BankData(models.Model):
def __str__(self): def __str__(self):
return f"{self.name} - {self.iban}" 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): class Resolution(models.Model):
id = models.CharField( id = models.CharField(

View File

@@ -1,4 +1,5 @@
from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin from django.contrib.auth.mixins import LoginRequiredMixin, UserPassesTestMixin
from django.db.models import Q
from django.shortcuts import redirect from django.shortcuts import redirect
from django.urls import reverse, reverse_lazy from django.urls import reverse, reverse_lazy
from django.views.generic import ListView, TemplateView from django.views.generic import ListView, TemplateView
@@ -25,14 +26,15 @@ class BillCreateView(LoginRequiredMixin, CreateView):
resolution = form.cleaned_data["resolution_text"] resolution = form.cleaned_data["resolution_text"]
if resolution != "": if resolution != "":
obj, created = Resolution.objects.get_or_create( obj, created = Resolution.objects.get_or_create(
id=resolution, defaults={"name": resolution} id=resolution,
defaults={"name": resolution},
) )
form.instance.resolution = obj form.instance.resolution = obj
# get or create bankdata object # get or create bankdata object
name = form.cleaned_data["name_text"] name = form.cleaned_data["name_text"]
iban = form.cleaned_data["iban_text"] iban = form.cleaned_data["iban_text"].replace(" ", "")
bic = form.cleaned_data["bic_text"] bic = form.cleaned_data["bic_text"].replace(" ", "")
if name != "" and iban != "" and bic != "": if name != "" and iban != "" and bic != "":
obj, created = BankData.objects.get_or_create( obj, created = BankData.objects.get_or_create(
name=name, name=name,
@@ -42,6 +44,14 @@ class BillCreateView(LoginRequiredMixin, CreateView):
) )
form.instance.bankdata = obj 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) add_log_action(self.request, form, "finance", "bill", True)
return super().form_valid(form) return super().form_valid(form)

View File

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