diff --git a/apps/activity/admin.py b/apps/activity/admin.py index 6f85001a..f605f73c 100644 --- a/apps/activity/admin.py +++ b/apps/activity/admin.py @@ -35,7 +35,7 @@ class GuestAdmin(admin.ModelAdmin): """ Admin customisation for Guest """ - list_display = ('last_name', 'first_name', 'activity', 'inviter') + list_display = ('last_name', 'first_name', 'school', 'activity', 'inviter') form = GuestForm diff --git a/apps/activity/api/views.py b/apps/activity/api/views.py index 86205e98..2a769112 100644 --- a/apps/activity/api/views.py +++ b/apps/activity/api/views.py @@ -51,9 +51,9 @@ class GuestViewSet(ReadProtectedModelViewSet): queryset = Guest.objects.order_by('id') serializer_class = GuestSerializer filter_backends = [DjangoFilterBackend, RegexSafeSearchFilter] - filterset_fields = ['activity', 'activity__name', 'last_name', 'first_name', 'inviter', 'inviter__alias__name', + filterset_fields = ['activity', 'activity__name', 'last_name', 'first_name', 'school', 'inviter', 'inviter__alias__name', 'inviter__alias__normalized_name', ] - search_fields = ['$activity__name', '$last_name', '$first_name', '$inviter__user__email', '$inviter__alias__name', + search_fields = ['$activity__name', '$last_name', '$first_name', '$school', '$inviter__user__email', '$inviter__alias__name', '$inviter__alias__normalized_name', ] diff --git a/apps/activity/forms.py b/apps/activity/forms.py index e39eeda3..305c4f03 100644 --- a/apps/activity/forms.py +++ b/apps/activity/forms.py @@ -107,7 +107,7 @@ class GuestForm(forms.ModelForm): class Meta: model = Guest - fields = ('last_name', 'first_name', 'inviter', ) + fields = ('last_name', 'first_name', 'school', 'inviter', ) widgets = { "inviter": Autocomplete( NoteUser, diff --git a/apps/activity/migrations/0006_guest_school.py b/apps/activity/migrations/0006_guest_school.py new file mode 100644 index 00000000..bce6862b --- /dev/null +++ b/apps/activity/migrations/0006_guest_school.py @@ -0,0 +1,18 @@ +# Generated by Django 4.2.20 on 2025-03-25 09:58 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + dependencies = [ + ("activity", "0005_alter_opener_options_alter_opener_opener"), + ] + + operations = [ + migrations.AddField( + model_name="guest", + name="school", + field=models.CharField(default="", max_length=255, verbose_name="school"), + preserve_default=False, + ), + ] diff --git a/apps/activity/models.py b/apps/activity/models.py index 698b0c9f..42b04995 100644 --- a/apps/activity/models.py +++ b/apps/activity/models.py @@ -247,6 +247,11 @@ class Guest(models.Model): verbose_name=_("first name"), ) + school = models.CharField( + max_length=255, + verbose_name=_("school"), + ) + inviter = models.ForeignKey( NoteUser, on_delete=models.PROTECT, diff --git a/apps/activity/tables.py b/apps/activity/tables.py index 00238ae7..d3c86ab2 100644 --- a/apps/activity/tables.py +++ b/apps/activity/tables.py @@ -51,7 +51,7 @@ class GuestTable(tables.Table): } model = Guest template_name = 'django_tables2/bootstrap4.html' - fields = ("last_name", "first_name", "inviter", ) + fields = ("last_name", "first_name", "inviter", "school") def render_entry(self, record): if record.has_entry: diff --git a/apps/activity/tests/test_activities.py b/apps/activity/tests/test_activities.py index bd85803a..3657ff98 100644 --- a/apps/activity/tests/test_activities.py +++ b/apps/activity/tests/test_activities.py @@ -50,6 +50,7 @@ class TestActivities(TestCase): inviter=self.user.note, last_name="GUEST", first_name="Guest", + school="School", ) def test_activity_list(self): @@ -156,6 +157,7 @@ class TestActivities(TestCase): inviter=self.user.note.id, last_name="GUEST2", first_name="Guest", + school="School", )) self.assertEqual(response.status_code, 200) @@ -167,6 +169,7 @@ class TestActivities(TestCase): inviter=self.user.note.id, last_name="GUEST2", first_name="Guest", + school="School", )) self.assertRedirects(response, reverse("activity:activity_detail", args=(self.activity.pk,)), 302, 200) @@ -200,6 +203,7 @@ class TestActivityAPI(TestAPI): inviter=self.user.note, last_name="GUEST", first_name="Guest", + school="School", ) self.entry = Entry.objects.create( diff --git a/apps/activity/views.py b/apps/activity/views.py index fd640e13..80bc1506 100644 --- a/apps/activity/views.py +++ b/apps/activity/views.py @@ -168,6 +168,7 @@ class ActivityInviteView(ProtectQuerysetMixin, ProtectedCreateView): activity=activity, first_name="", last_name="", + school="", inviter=self.request.user.note, ) diff --git a/docs/apps/activity.rst b/docs/apps/activity.rst index e7372d44..abdcd3e5 100644 --- a/docs/apps/activity.rst +++ b/docs/apps/activity.rst @@ -55,6 +55,7 @@ Les adhérent⋅es ont la possibilité d'inviter des ami⋅es. Pour cela, les di * Activité concernée (clé étrangère) * Nom de famille * Prénom +* École * Note de la personne ayant invité Certaines contraintes s'appliquent : diff --git a/locale/fr/LC_MESSAGES/django.po b/locale/fr/LC_MESSAGES/django.po index 3f4c22d7..e33ee287 100644 --- a/locale/fr/LC_MESSAGES/django.po +++ b/locale/fr/LC_MESSAGES/django.po @@ -7,7 +7,7 @@ msgid "" msgstr "" "Project-Id-Version: \n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-03-13 21:08+0100\n" +"POT-Creation-Date: 2025-03-25 11:16+0100\n" "PO-Revision-Date: 2022-04-11 22:05+0200\n" "Last-Translator: bleizi \n" "Language-Team: French \n" @@ -25,7 +25,7 @@ msgid "This opener already exists" msgstr "Cette amitié existe déjà" #: apps/activity/apps.py:10 apps/activity/models.py:129 -#: apps/activity/models.py:169 apps/activity/models.py:323 +#: apps/activity/models.py:169 apps/activity/models.py:328 msgid "activity" msgstr "activité" @@ -37,24 +37,24 @@ msgstr "La note du club est inactive." msgid "The end date must be after the start date." msgstr "La date de fin doit être après celle de début." -#: apps/activity/forms.py:83 apps/activity/models.py:271 +#: apps/activity/forms.py:83 apps/activity/models.py:276 msgid "You can't invite someone once the activity is started." msgstr "" "Vous ne pouvez pas inviter quelqu'un une fois que l'activité a démarré." -#: apps/activity/forms.py:86 apps/activity/models.py:274 +#: apps/activity/forms.py:86 apps/activity/models.py:279 msgid "This activity is not validated yet." msgstr "Cette activité n'est pas encore validée." -#: apps/activity/forms.py:96 apps/activity/models.py:282 +#: apps/activity/forms.py:96 apps/activity/models.py:287 msgid "This person has been already invited 5 times this year." msgstr "Cette personne a déjà été invitée 5 fois cette année." -#: apps/activity/forms.py:100 apps/activity/models.py:286 +#: apps/activity/forms.py:100 apps/activity/models.py:291 msgid "This person is already invited." msgstr "Cette personne est déjà invitée." -#: apps/activity/forms.py:104 apps/activity/models.py:290 +#: apps/activity/forms.py:104 apps/activity/models.py:295 msgid "You can't invite more than 3 people to this activity." msgstr "Vous ne pouvez pas inviter plus de 3 personnes à cette activité." @@ -228,32 +228,36 @@ msgstr "nom de famille" msgid "first name" msgstr "prénom" -#: apps/activity/models.py:254 +#: apps/activity/models.py:252 +msgid "school" +msgstr "école" + +#: apps/activity/models.py:259 msgid "inviter" msgstr "hôte" -#: apps/activity/models.py:258 +#: apps/activity/models.py:263 msgid "guest" msgstr "invité·e" -#: apps/activity/models.py:259 +#: apps/activity/models.py:264 msgid "guests" msgstr "invité·e·s" -#: apps/activity/models.py:312 +#: apps/activity/models.py:317 msgid "Invitation" msgstr "Invitation" -#: apps/activity/models.py:330 apps/activity/models.py:334 +#: apps/activity/models.py:335 apps/activity/models.py:339 msgid "Opener" msgstr "Ouvreur⋅se" -#: apps/activity/models.py:335 +#: apps/activity/models.py:340 #: apps/activity/templates/activity/activity_detail.html:16 msgid "Openers" msgstr "Ouvreur⋅ses" -#: apps/activity/models.py:339 +#: apps/activity/models.py:344 #, fuzzy, python-brace-format #| msgid "Entry for {note} to the activity {activity}" msgid "{opener} is opener of activity {acivity}" @@ -463,25 +467,25 @@ msgstr "Détails de l'activité" msgid "Update activity" msgstr "Modifier l'activité" -#: apps/activity/views.py:177 +#: apps/activity/views.py:178 msgid "Invite guest to the activity \"{}\"" msgstr "Invitation pour l'activité « {} »" -#: apps/activity/views.py:217 +#: apps/activity/views.py:218 msgid "You are not allowed to display the entry interface for this activity." msgstr "" "Vous n'êtes pas autorisé·e à afficher l'interface des entrées pour cette " "activité." -#: apps/activity/views.py:220 +#: apps/activity/views.py:221 msgid "This activity does not support activity entries." msgstr "Cette activité ne requiert pas d'entrées." -#: apps/activity/views.py:223 +#: apps/activity/views.py:224 msgid "This activity is closed." msgstr "Cette activité est fermée." -#: apps/activity/views.py:328 +#: apps/activity/views.py:329 msgid "Entry for activity \"{}\"" msgstr "Entrées pour l'activité « {} »" @@ -1989,10 +1993,6 @@ msgstr "Historique des transactions récentes" #: apps/note/templates/note/mails/weekly_report.txt:32 #: apps/registration/templates/registration/mails/email_validation_email.html:40 #: apps/registration/templates/registration/mails/email_validation_email.txt:16 -#: apps/scripts/templates/scripts/horaires.html:35 -#: apps/scripts/templates/scripts/horaires.txt:17 -#: apps/scripts/templates/scripts/intro_mail.html:49 -#: apps/scripts/templates/scripts/intro_mail.txt:25 msgid "Mail generated by the Note Kfet on the" msgstr "Mail généré par la Note Kfet le"