From 2a0905469d27b2585b2ff3fe0e1a91d3a90678ea Mon Sep 17 00:00:00 2001 From: "marius.klein" Date: Tue, 25 Feb 2025 10:19:17 +0100 Subject: [PATCH] feat(members/trainings): add attendance certificate field (#137) closes #132 Reviewed-on: https://git.jdav-hd.merten.dev/digitales/kompass/pulls/137 Reviewed-by: Christian Merten Co-authored-by: marius.klein Co-committed-by: marius.klein --- jdav_web/members/admin.py | 4 ++-- .../members/locale/de/LC_MESSAGES/django.po | 14 ++++++++----- ...9_membertraining_certificate_attendance.py | 20 +++++++++++++++++++ jdav_web/members/models.py | 10 +++++++++- 4 files changed, 40 insertions(+), 8 deletions(-) create mode 100644 jdav_web/members/migrations/0039_membertraining_certificate_attendance.py diff --git a/jdav_web/members/admin.py b/jdav_web/members/admin.py index dec6b1a..71ee88d 100644 --- a/jdav_web/members/admin.py +++ b/jdav_web/members/admin.py @@ -108,10 +108,10 @@ class PermissionOnMemberInline(admin.StackedInline): class TrainingOnMemberInline(CommonAdminInlineMixin, admin.TabularInline): model = MemberTraining formfield_overrides = { - TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 40})} + TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 25})} } ordering = ("date",) - extra = 0 + extra = 1 class EmergencyContactInline(CommonAdminInlineMixin, admin.TabularInline): diff --git a/jdav_web/members/locale/de/LC_MESSAGES/django.po b/jdav_web/members/locale/de/LC_MESSAGES/django.po index 6448d4d..7f2b0b5 100644 --- a/jdav_web/members/locale/de/LC_MESSAGES/django.po +++ b/jdav_web/members/locale/de/LC_MESSAGES/django.po @@ -8,7 +8,7 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2025-02-11 23:51+0100\n" +"POT-Creation-Date: 2025-02-24 23:22+0100\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" @@ -1138,6 +1138,10 @@ msgstr "Teilgenommmen" msgid "Passed" msgstr "Bestanden" +#: members/models.py +msgid "certificate of attendance" +msgstr "Teilnahmebestätigung" + #: members/models.py msgid "Training" msgstr "Fortbildung" @@ -1713,7 +1717,7 @@ msgstr "Registrierung fehlgeschlagen" msgid "Registration" msgstr "Registrierung" -#: members/templates/members/leave_waitinglist.html +#: members/templates/members/leave_waitinglist.html members/tests.py msgid "Leave waitinglist" msgstr "Warteliste verlassen" @@ -1723,14 +1727,14 @@ msgid "" "you need to requeue if you change your mind later." msgstr "" "Bist du sicher, dass du die Warteliste verlassen möchtest? Dies kann nicht " -"rückgängig gemacht werden. Falls du später wieder der Warteliste beitreten möchtest, " -"musst du dich neu registrieren." +"rückgängig gemacht werden. Falls du später wieder der Warteliste beitreten " +"möchtest, musst du dich neu registrieren." #: members/templates/members/leave_waitinglist.html msgid "Yes, leave the waitinglist" msgstr "Ja, Warteliste verlassen" -#: members/templates/members/leave_waitinglist_success.html +#: members/templates/members/leave_waitinglist_success.html members/tests.py msgid "Left waitinglist" msgstr "Warteliste verlassen" diff --git a/jdav_web/members/migrations/0039_membertraining_certificate_attendance.py b/jdav_web/members/migrations/0039_membertraining_certificate_attendance.py new file mode 100644 index 0000000..f19da3d --- /dev/null +++ b/jdav_web/members/migrations/0039_membertraining_certificate_attendance.py @@ -0,0 +1,20 @@ +# Generated by Django 4.0.1 on 2025-02-25 06:34 + +from django.db import migrations +import utils + + +class Migration(migrations.Migration): + + + dependencies = [ + ('members', '0038_alter_invitationtogroup_date_alter_member_created_and_more'), + ] + + operations = [ + migrations.AddField( + model_name='membertraining', + name='certificate', + field=utils.RestrictedFileField(blank=True, upload_to='training_forms', verbose_name='certificate of attendance'), + ), + ] diff --git a/jdav_web/members/models.py b/jdav_web/members/models.py index c82cfe5..6166321 100644 --- a/jdav_web/members/models.py +++ b/jdav_web/members/models.py @@ -1785,7 +1785,15 @@ class MemberTraining(CommonModel): comments = models.TextField(verbose_name=_('Comments'), blank=True) participated = models.BooleanField(verbose_name=_('Participated')) passed = models.BooleanField(verbose_name=_('Passed')) - + certificate = RestrictedFileField(verbose_name=_('certificate of attendance'), + upload_to='training_forms', + blank=True, + max_upload_size=5, + content_types=['application/pdf', + 'image/jpeg', + 'image/png', + 'image/gif']) + class Meta(CommonModel.Meta): verbose_name = _('Training') verbose_name_plural = _('Trainings')