diff --git a/club/views.py b/club/views.py index 4ed40a9c..b10c4a09 100644 --- a/club/views.py +++ b/club/views.py @@ -344,7 +344,7 @@ class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailFormView): form = self.get_form() if form.is_valid(): if not len([v for v in form.cleaned_data.values() if v is not None]): - qs = Selling.objects.filter(id=-1) + qs = Selling.objects.none() if form.cleaned_data["begin_date"]: qs = qs.filter(date__gte=form.cleaned_data["begin_date"]) if form.cleaned_data["end_date"]: @@ -362,7 +362,9 @@ class ClubSellingView(ClubTabsMixin, CanEditMixin, DetailFormView): if len(selected_products) > 0: qs = qs.filter(product__in=selected_products) - kwargs["result"] = qs.all().order_by("-id") + kwargs["result"] = qs.select_related( + "counter", "counter__club", "customer", "customer__user", "seller" + ).order_by("-id") kwargs["total"] = sum([s.quantity * s.unit_price for s in kwargs["result"]]) total_quantity = qs.all().aggregate(Sum("quantity")) if total_quantity["quantity__sum"]: diff --git a/core/management/commands/populate.py b/core/management/commands/populate.py index 659dd5e9..cd0087e7 100644 --- a/core/management/commands/populate.py +++ b/core/management/commands/populate.py @@ -768,7 +768,7 @@ class Command(BaseCommand): s = Subscription( member=user, subscription_type=subscription_type, - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], ) s.subscription_start = s.compute_start(start) s.subscription_end = s.compute_end( diff --git a/core/templates/core/group_detail.jinja b/core/templates/core/group_detail.jinja index 0c9ebb53..3bad8b98 100644 --- a/core/templates/core/group_detail.jinja +++ b/core/templates/core/group_detail.jinja @@ -15,6 +15,7 @@ {{ select_all_checkbox("add_users") }}
{% csrf_token %} + {{ form.non_field_errors() }} {{ form.users_removed.errors }} {% for user in form.users_removed %} diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 9b43dadf..8a99daaa 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -4819,8 +4819,8 @@ msgid "N/A" msgstr "N/A" #: sith/settings.py -msgid "Transfert" -msgstr "Virement" +msgid "AE account" +msgstr "Compte AE" #: sith/settings.py msgid "Belfort" @@ -5168,6 +5168,14 @@ msgstr "lieu" msgid "You can not subscribe many time for the same period" msgstr "Vous ne pouvez pas cotiser plusieurs fois pour la même période" +#: subscription/templates/subscription/forms/create_existing_user.jinja +msgid "" +"If the subscription is done using the AE account, you must also click " +"it on the AE counter." +msgstr "" +"Si la cotisation est faite en utilisant le compte AE, vous devez également " +"la cliquer sur le comptoir AE." + #: subscription/templates/subscription/fragments/creation_success.jinja #, python-format msgid "Subscription created for %(user)s" diff --git a/sith/settings.py b/sith/settings.py index 52c93420..7595ddd0 100644 --- a/sith/settings.py +++ b/sith/settings.py @@ -421,18 +421,11 @@ SITH_PROFILE_DEPARTMENTS = [ ("NA", _("N/A")), ] -SITH_ACCOUNTING_PAYMENT_METHOD = [ - ("CHECK", _("Check")), - ("CASH", _("Cash")), - ("TRANSFERT", _("Transfert")), - ("CARD", _("Credit card")), -] - SITH_SUBSCRIPTION_PAYMENT_METHOD = [ ("CHECK", _("Check")), ("CARD", _("Credit card")), ("CASH", _("Cash")), - ("EBOUTIC", _("Eboutic")), + ("AE_ACCOUNT", _("AE account")), ("OTHER", _("Other")), ] @@ -441,6 +434,7 @@ SITH_SUBSCRIPTION_LOCATIONS = [ ("SEVENANS", _("Sevenans")), ("MONTBELIARD", _("Montbéliard")), ("EBOUTIC", _("Eboutic")), + ("OTHER", _("Other")), ] SITH_COUNTER_BARS = [(1, "MDE"), (2, "Foyer"), (35, "La Gommette")] diff --git a/subscription/forms.py b/subscription/forms.py index 1ac6964d..86624020 100644 --- a/subscription/forms.py +++ b/subscription/forms.py @@ -2,6 +2,7 @@ import secrets from typing import Any from django import forms +from django.conf import settings from django.core.exceptions import ValidationError from django.utils.translation import gettext_lazy as _ @@ -23,6 +24,13 @@ class SelectionDateForm(forms.Form): class SubscriptionForm(forms.ModelForm): + allowed_payment_methods = ["CARD", "CASH", "AE_ACCOUNT"] + + class Meta: + model = Subscription + fields = ["subscription_type", "payment_method", "location"] + widgets = {"payment_method": forms.RadioSelect} + def __init__(self, *args, initial=None, **kwargs): initial = initial or {} if "subscription_type" not in initial: @@ -30,6 +38,14 @@ class SubscriptionForm(forms.ModelForm): if "payment_method" not in initial: initial["payment_method"] = "CARD" super().__init__(*args, initial=initial, **kwargs) + self.fields["payment_method"].choices = [ + m + for m in settings.SITH_SUBSCRIPTION_PAYMENT_METHOD + if m[0] in self.allowed_payment_methods + ] + self.fields["location"].choices = [ + m for m in settings.SITH_SUBSCRIPTION_LOCATIONS if m[0] != "EBOUTIC" + ] def save(self, *args, **kwargs): if self.errors: @@ -61,7 +77,8 @@ class SubscriptionNewUserForm(SubscriptionForm): assert user.is_subscribed """ - template_name = "subscription/forms/create_new_user.html" + allowed_payment_methods = ["CARD", "CASH"] + template_name = "subscription/forms/create_new_user.jinja" __user_fields = forms.fields_for_model( User, @@ -73,10 +90,6 @@ class SubscriptionNewUserForm(SubscriptionForm): email = __user_fields["email"] date_of_birth = __user_fields["date_of_birth"] - class Meta: - model = Subscription - fields = ["subscription_type", "payment_method", "location"] - field_order = [ "first_name", "last_name", @@ -130,7 +143,7 @@ class SubscriptionNewUserForm(SubscriptionForm): class SubscriptionExistingUserForm(SubscriptionForm): """Form to add a subscription to an existing user.""" - template_name = "subscription/forms/create_existing_user.html" + template_name = "subscription/forms/create_existing_user.jinja" required_css_class = "required" birthdate = forms.fields_for_model( @@ -140,10 +153,9 @@ class SubscriptionExistingUserForm(SubscriptionForm): help_texts={"date_of_birth": _("This user didn't fill its birthdate yet.")}, )["date_of_birth"] - class Meta: - model = Subscription - fields = ["member", "subscription_type", "payment_method", "location"] - widgets = {"member": AutoCompleteSelectUser} + class Meta(SubscriptionForm.Meta): + fields = ["member", *SubscriptionForm.Meta.fields] + widgets = SubscriptionForm.Meta.widgets | {"member": AutoCompleteSelectUser} field_order = [ "member", diff --git a/subscription/migrations/0015_alter_subscription_location_and_more.py b/subscription/migrations/0015_alter_subscription_location_and_more.py new file mode 100644 index 00000000..6aed659e --- /dev/null +++ b/subscription/migrations/0015_alter_subscription_location_and_more.py @@ -0,0 +1,56 @@ +# Generated by Django 5.2.3 on 2025-09-08 05:38 + +from django.db import migrations, models +from django.db.migrations.state import StateApps + + +def rename_enums(apps: StateApps, schema_editor): + Subscription = apps.get_model("subscription", "Subscription") + Subscription.objects.filter(subscription_type="EBOUTIC").update( + subscription_type="AE_ACCOUNT" + ) + + +def rename_enums_reverse(apps: StateApps, schema_editor): + Subscription = apps.get_model("subscription", "Subscription") + Subscription.objects.filter(subscription_type="AE_ACCOUNT").update( + subscription_type="EBOUTIC" + ) + + +class Migration(migrations.Migration): + dependencies = [("subscription", "0014_auto_20201207_2323")] + + operations = [ + migrations.AlterField( + model_name="subscription", + name="location", + field=models.CharField( + choices=[ + ("BELFORT", "Belfort"), + ("SEVENANS", "Sevenans"), + ("MONTBELIARD", "Montbéliard"), + ("EBOUTIC", "Eboutic"), + ("OTHER", "Other"), + ], + max_length=20, + verbose_name="location", + ), + ), + migrations.AlterField( + model_name="subscription", + name="payment_method", + field=models.CharField( + choices=[ + ("CHECK", "Check"), + ("CARD", "Credit card"), + ("CASH", "Cash"), + ("AE_ACCOUNT", "AE account"), + ("OTHER", "Other"), + ], + max_length=255, + verbose_name="payment method", + ), + ), + migrations.RunPython(rename_enums, reverse_code=rename_enums_reverse), + ] diff --git a/subscription/templates/subscription/forms/create_existing_user.html b/subscription/templates/subscription/forms/create_existing_user.html deleted file mode 100644 index 2f1cbc99..00000000 --- a/subscription/templates/subscription/forms/create_existing_user.html +++ /dev/null @@ -1,14 +0,0 @@ -{% load static %} -{% load i18n %} - - -
-
- {{ form.as_p }} -
-
-
diff --git a/subscription/templates/subscription/forms/create_existing_user.jinja b/subscription/templates/subscription/forms/create_existing_user.jinja new file mode 100644 index 00000000..380abb01 --- /dev/null +++ b/subscription/templates/subscription/forms/create_existing_user.jinja @@ -0,0 +1,28 @@ +{% load static %} +{% load i18n %} + + +
+
+ {{ errors }} + {% for field, errors in fields %} + + {{ field.label_tag }} + {{ field }} + {% if field.help_text %} + {{ field.help_text }} + {% endif %} +

+ {% if field.name == "payment_method" %} + + {% blocktranslate %}If the subscription is done using the AE account, you must also click it on the AE counter.{% endblocktranslate %} + + {% endif %} + {% endfor %} +
+
+
diff --git a/subscription/templates/subscription/forms/create_new_user.html b/subscription/templates/subscription/forms/create_new_user.jinja similarity index 100% rename from subscription/templates/subscription/forms/create_new_user.html rename to subscription/templates/subscription/forms/create_new_user.jinja diff --git a/subscription/tests/test_dates.py b/subscription/tests/test_dates.py index 181246b1..f81cac82 100644 --- a/subscription/tests/test_dates.py +++ b/subscription/tests/test_dates.py @@ -90,7 +90,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=self.user, subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2017, 8, 29) s.subscription_end = s.compute_end(duration=0.166, start=s.subscription_start) @@ -101,7 +101,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=self.user, subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2017, 8, 29) s.subscription_end = s.compute_end(duration=0.333, start=s.subscription_start) @@ -112,7 +112,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=self.user, subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2017, 8, 29) s.subscription_end = s.compute_end( @@ -126,7 +126,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=self.user, subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2017, 8, 29) s.subscription_end = s.compute_end(duration=0.5, start=s.subscription_start) @@ -137,7 +137,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=self.user, subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2017, 8, 29) s.subscription_end = s.compute_end(duration=0.67, start=s.subscription_start) @@ -148,7 +148,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=self.user, subscription_type=list(settings.SITH_SUBSCRIPTIONS.keys())[3], - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2018, 9, 1) s.subscription_end = s.compute_end(duration=0.23, start=s.subscription_start) @@ -160,7 +160,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=user, subscription_type="deux-semestres", - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2015, 8, 29) s.subscription_end = s.compute_end( @@ -181,7 +181,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=user, subscription_type="deux-mois-essai", - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2015, 8, 29) s.subscription_end = s.compute_end( @@ -202,7 +202,7 @@ class TestSubscriptionIntegration(TestCase): s = Subscription( member=user, subscription_type="deux-mois-essai", - payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0], + payment_method=settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1], ) s.subscription_start = date(2015, 8, 29) s.subscription_end = s.compute_end( diff --git a/subscription/tests/test_new_subscription.py b/subscription/tests/test_new_subscription.py index 5933fe57..3833e48b 100644 --- a/subscription/tests/test_new_subscription.py +++ b/subscription/tests/test_new_subscription.py @@ -38,7 +38,7 @@ def test_form_existing_user_valid( "birthdate": user.date_of_birth, "subscription_type": "deux-semestres", "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], } form = SubscriptionExistingUserForm(data) assert form.is_valid() @@ -55,7 +55,7 @@ def test_form_existing_user_with_birthdate(settings: SettingsWrapper): "member": user, "subscription_type": "deux-semestres", "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], } form = SubscriptionExistingUserForm(data) assert not form.is_valid() @@ -81,7 +81,7 @@ def test_form_existing_user_invalid(settings: SettingsWrapper): "member": user, "subscription_type": "deux-semestres", "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], } form = SubscriptionExistingUserForm(data) @@ -99,7 +99,7 @@ def test_form_new_user(settings: SettingsWrapper): "date_of_birth": localdate() - relativedelta(years=18), "subscription_type": "deux-semestres", "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], } form = SubscriptionNewUserForm(data) assert form.is_valid() @@ -130,7 +130,7 @@ def test_form_set_new_user_as_student(settings: SettingsWrapper, subscription_ty "date_of_birth": localdate() - relativedelta(years=18), "subscription_type": subscription_type, "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], } form = SubscriptionNewUserForm(data) assert form.is_valid() @@ -180,7 +180,7 @@ def test_submit_form_existing_user(client: Client, settings: SettingsWrapper): "birthdate": user.date_of_birth, "subscription_type": "deux-semestres", "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], }, ) user.refresh_from_db() @@ -212,7 +212,7 @@ def test_submit_form_new_user(client: Client, settings: SettingsWrapper): "date_of_birth": localdate() - relativedelta(years=18), "subscription_type": "deux-semestres", "location": settings.SITH_SUBSCRIPTION_LOCATIONS[0][0], - "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[0][0], + "payment_method": settings.SITH_SUBSCRIPTION_PAYMENT_METHOD[1][0], }, ) user = User.objects.get(email="jdoe@utbm.fr")