diff --git a/django/cohiva/settings_for_tests.py b/django/cohiva/settings_for_tests.py index fb7344ae..327dc7dc 100644 --- a/django/cohiva/settings_for_tests.py +++ b/django/cohiva/settings_for_tests.py @@ -1,5 +1,6 @@ ## Modify settings to run automated tests +import logging import os import warnings from urllib.parse import quote @@ -30,6 +31,9 @@ ## Make code aware that this is a test run IS_RUNNING_TESTS = True +## Disable logging for tests +logging.disable() + if os.getenv("SKIP_SLOW", "false") == "true": ## Speed up tests in quick mode PASSWORD_HASHERS = ("django.contrib.auth.hashers.MD5PasswordHasher",) diff --git a/django/credit_accounting/forms.py b/django/credit_accounting/forms.py index 07f77d8a..7835f3ad 100644 --- a/django/credit_accounting/forms.py +++ b/django/credit_accounting/forms.py @@ -1,18 +1,20 @@ import datetime -from crispy_forms.helper import FormHelper -from crispy_forms.layout import Div, Layout +import select2.fields from django import forms from django.core.exceptions import ValidationError from django.db.models import Q -from unfold.widgets import ( - UnfoldAdminDecimalFieldWidget, - UnfoldAdminFileFieldWidget, - UnfoldAdminSelect2Widget, - UnfoldAdminSelectWidget, - UnfoldAdminTextInputWidget, -) +## Don't use unfold widgets yet, because first the templated have to be adapted +# from unfold.widgets import ( +# UnfoldAdminDecimalFieldWidget, +# UnfoldAdminFileFieldWidget, +# UnfoldAdminSelect2Widget, +# UnfoldAdminSelectWidget, +# UnfoldAdminTextInputWidget, +# ) +# from crispy_forms.helper import FormHelper +# from crispy_forms.layout import Div, Layout from geno.models import Address, Contract from .accounts import get_transaction_time_filter_options @@ -32,13 +34,14 @@ class TransactionFilterForm(forms.Form): search = forms.CharField( label="Suche", required=False, - widget=UnfoldAdminTextInputWidget(attrs={"size": "40", "autofocus": True}), + # widget=UnfoldAdminTextInputWidget(attrs={"size": "40", "autofocus": True}), + widget=forms.TextInput(attrs={"size": "40", "autofocus": True}), ) time = forms.ChoiceField( choices=get_transaction_time_filter_options(), label="Zeitraum", required=False, - widget=UnfoldAdminSelectWidget(), + # widget=UnfoldAdminSelectWidget(), ) sign_options = [ ("all", "Alle Buchungen"), @@ -46,20 +49,25 @@ class TransactionFilterForm(forms.Form): ("minus", "Lastschriften"), ] sign = forms.ChoiceField( - choices=sign_options, label="Typ", required=False, widget=UnfoldAdminSelectWidget() - ) - amount_min = forms.DecimalField( - label="Betrag min.", - required=False, - decimal_places=2, - widget=UnfoldAdminDecimalFieldWidget(), - ) - amount_max = forms.DecimalField( - label="Betrag max.", - required=False, - decimal_places=2, - widget=UnfoldAdminDecimalFieldWidget(), + choices=sign_options, + label="Typ", + required=False, # widget=UnfoldAdminSelectWidget() ) + amount_min = forms.FloatField(label="Betrag min.", required=False) + amount_max = forms.FloatField(label="Betrag max.", required=False) + ## TODO: DecimalField does not work yet because it is not JSON serializable in the session + # amount_min = forms.DecimalField( + # label="Betrag min.", + # required=False, + # decimal_places=2, + # # widget=UnfoldAdminDecimalFieldWidget(), + # ) + # amount_max = forms.DecimalField( + # label="Betrag max.", + # required=False, + # decimal_places=2, + # # widget=UnfoldAdminDecimalFieldWidget(), + # ) def __init__(self, *args, **kwargs): accounts = kwargs.pop("accounts", []) @@ -68,28 +76,30 @@ def __init__(self, *args, **kwargs): account_options = [(account.id, str(account)) for account in accounts] if admin: account_options.append(("_all_", "== ALLE ==")) - self.fields["account"] = forms.ChoiceField( - choices=account_options, label="Konto", widget=UnfoldAdminSelect2Widget() - ) + self.fields["account"] = select2.fields.ChoiceField(choices=account_options, label="Konto") + self.fields["account"].widget.choices = iter(account_options) + # self.fields["account"] = forms.ChoiceField( + # choices=account_options, label="Konto", widget=UnfoldAdminSelect2Widget() + # ) class TransactionUploadForm(forms.Form): file = forms.FileField( label="Zahlungsdatei", required=False, - widget=UnfoldAdminFileFieldWidget(), - help_text="camt.053 oder camt.054 (XML) oder ZIP-Datei mit mehreren XML-Dateien", + # widget=UnfoldAdminFileFieldWidget(), + # help_text="camt.053 oder camt.054 (XML) oder ZIP-Datei mit mehreren XML-Dateien", ) def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) # Add Crispy Forms helper for Unfold styling - self.helper = FormHelper() - self.helper.form_tag = False # Form tag handled in template - self.helper.form_class = "" - self.helper.layout = Layout( - Div("file", css_class="mb-4"), - ) + # self.helper = FormHelper() + # self.helper.form_tag = False # Form tag handled in template + # self.helper.form_class = "" + # self.helper.layout = Layout( + # Div("file", css_class="mb-4"), + # ) class AccountEditForm(forms.ModelForm): @@ -107,9 +117,13 @@ def __init__(self, *args, **kwargs): owner_options.append(("c_%s" % c.id, str(c))) for a in Address.objects.filter(active=True).exclude(user=None): owner_options.append(("a_%s" % a.id, str(a))) - self.fields["owner"] = forms.ChoiceField( - choices=owner_options, label="Verknüpft mit", widget=UnfoldAdminSelect2Widget() + self.fields["owner"] = select2.fields.ChoiceField( + choices=owner_options, label="Verknüpft mit" ) + self.fields["owner"].widget.choices = iter(owner_options) + # self.fields["owner"] = forms.ChoiceField( + # choices=owner_options, label="Verknüpft mit", widget=UnfoldAdminSelect2Widget() + # ) def clean(self): cleaned_data = super().clean() @@ -133,17 +147,24 @@ class AccountFilterForm(forms.Form): search = forms.CharField( label="Suche", required=False, - widget=UnfoldAdminTextInputWidget(attrs={"size": "40", "autofocus": True}), + # widget=UnfoldAdminTextInputWidget(attrs={"size": "40", "autofocus": True}), + widget=forms.TextInput(attrs={"size": "40", "autofocus": True}), ) class RevenueReportForm(forms.Form): start_date = forms.DateField( - label="Start Datum", widget=UnfoldAdminTextInputWidget(attrs={"class": "datepicker"}) + label="Start Datum", + widget=forms.TextInput( + attrs={"class": "datepicker"}, + ), + # widget=UnfoldAdminTextInputWidget(attrs={"class": "datepicker"} ) start_time = forms.TimeField(label="Start Zeit") end_date = forms.DateField( - label="End Datum", widget=UnfoldAdminTextInputWidget(attrs={"class": "datepicker"}) + label="End Datum", + widget=forms.TextInput(attrs={"class": "datepicker"}), + # widget=UnfoldAdminTextInputWidget(attrs={"class": "datepicker"}) ) end_time = forms.TimeField(label="Start Zeit") @@ -152,6 +173,10 @@ def __init__(self, *args, start_year=2022, **kwargs): period_options = [("all_years", "Alle Jahre"), ("manual", "Manuelle Eingabe")] for year in range(start_year, datetime.datetime.now().year + 1): period_options.insert(0, (f"year_{year}", f"Jahr {year}")) - self.fields["period"] = forms.ChoiceField( - choices=period_options, label="Zeitraum", widget=UnfoldAdminSelect2Widget() + # self.fields["period"] = forms.ChoiceField( + # choices=period_options, label="Zeitraum", widget=UnfoldAdminSelect2Widget() + # ) + self.fields["period"] = select2.fields.ChoiceField( + choices=period_options, label="Zeitraum" ) + self.fields["period"].widget.choices = iter(period_options) diff --git a/django/credit_accounting/views.py b/django/credit_accounting/views.py index 8579c0a6..449fcb6d 100644 --- a/django/credit_accounting/views.py +++ b/django/credit_accounting/views.py @@ -115,8 +115,6 @@ def get_form(self, form_class=None): def post(self, request, *args, **kwargs): form = self.get_form() - print(request.POST.get("date", "KEIN DATUM")) - print(form.errors) if form.is_valid(): self.object = form.save() self.object.name = "Manuelle Buchung" diff --git a/django/geno/forms.py b/django/geno/forms.py index 1c85e556..689a5c6b 100644 --- a/django/geno/forms.py +++ b/django/geno/forms.py @@ -1026,6 +1026,25 @@ def __init__(self, *args, **kwargs): ) +class TransactionUploadForm(forms.Form): + file = forms.FileField( + label="Zahlungsdatei", + required=False, + widget=UnfoldAdminFileFieldWidget(), + help_text="camt.053 oder camt.054 (XML) oder ZIP-Datei mit mehreren XML-Dateien", + ) + + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + # Add Crispy Forms helper for Unfold styling + self.helper = FormHelper() + self.helper.form_tag = False # Form tag handled in template + self.helper.form_class = "" + self.helper.layout = Layout( + Div("file", css_class="mb-4"), + ) + + class TransactionUploadFileForm(forms.Form): file = forms.FileField(required=False) diff --git a/django/geno/views.py b/django/geno/views.py index 8bd01299..793bdfee 100644 --- a/django/geno/views.py +++ b/django/geno/views.py @@ -32,7 +32,6 @@ from requests_oauthlib import OAuth2Session from stdnum.ch import esr -from credit_accounting.forms import TransactionUploadForm from finance.accounting import Account, AccountingManager, AccountKey if hasattr(settings, "SHARE_PLOT") and settings.SHARE_PLOT: @@ -86,6 +85,7 @@ ShareStatementForm, TransactionForm, TransactionFormInvoice, + TransactionUploadForm, TransactionUploadProcessForm, WebstampForm, process_registration_forms,