feat(members/trainings): add attendance certificate field (#137)

closes #132

Reviewed-on: #137
Reviewed-by: Christian Merten <christian@merten.dev>
Co-authored-by: marius.klein <marius.klein@alpenverein-heidelberg.de>
Co-committed-by: marius.klein <marius.klein@alpenverein-heidelberg.de>
pull/138/head
marius.klein 10 months ago committed by Christian Merten
parent 84f28b0786
commit 2a0905469d

@ -108,10 +108,10 @@ class PermissionOnMemberInline(admin.StackedInline):
class TrainingOnMemberInline(CommonAdminInlineMixin, admin.TabularInline): class TrainingOnMemberInline(CommonAdminInlineMixin, admin.TabularInline):
model = MemberTraining model = MemberTraining
formfield_overrides = { formfield_overrides = {
TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 40})} TextField: {'widget': Textarea(attrs={'rows': 1, 'cols': 25})}
} }
ordering = ("date",) ordering = ("date",)
extra = 0 extra = 1
class EmergencyContactInline(CommonAdminInlineMixin, admin.TabularInline): class EmergencyContactInline(CommonAdminInlineMixin, admin.TabularInline):

@ -8,7 +8,7 @@ msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
"Report-Msgid-Bugs-To: \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" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n" "Language-Team: LANGUAGE <LL@li.org>\n"
@ -1138,6 +1138,10 @@ msgstr "Teilgenommmen"
msgid "Passed" msgid "Passed"
msgstr "Bestanden" msgstr "Bestanden"
#: members/models.py
msgid "certificate of attendance"
msgstr "Teilnahmebestätigung"
#: members/models.py #: members/models.py
msgid "Training" msgid "Training"
msgstr "Fortbildung" msgstr "Fortbildung"
@ -1713,7 +1717,7 @@ msgstr "Registrierung fehlgeschlagen"
msgid "Registration" msgid "Registration"
msgstr "Registrierung" msgstr "Registrierung"
#: members/templates/members/leave_waitinglist.html #: members/templates/members/leave_waitinglist.html members/tests.py
msgid "Leave waitinglist" msgid "Leave waitinglist"
msgstr "Warteliste verlassen" msgstr "Warteliste verlassen"
@ -1723,14 +1727,14 @@ msgid ""
"you need to requeue if you change your mind later." "you need to requeue if you change your mind later."
msgstr "" msgstr ""
"Bist du sicher, dass du die Warteliste verlassen möchtest? Dies kann nicht " "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, " "rückgängig gemacht werden. Falls du später wieder der Warteliste beitreten "
"musst du dich neu registrieren." "möchtest, musst du dich neu registrieren."
#: members/templates/members/leave_waitinglist.html #: members/templates/members/leave_waitinglist.html
msgid "Yes, leave the waitinglist" msgid "Yes, leave the waitinglist"
msgstr "Ja, Warteliste verlassen" msgstr "Ja, Warteliste verlassen"
#: members/templates/members/leave_waitinglist_success.html #: members/templates/members/leave_waitinglist_success.html members/tests.py
msgid "Left waitinglist" msgid "Left waitinglist"
msgstr "Warteliste verlassen" msgstr "Warteliste verlassen"

@ -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'),
),
]

@ -1785,6 +1785,14 @@ class MemberTraining(CommonModel):
comments = models.TextField(verbose_name=_('Comments'), blank=True) comments = models.TextField(verbose_name=_('Comments'), blank=True)
participated = models.BooleanField(verbose_name=_('Participated')) participated = models.BooleanField(verbose_name=_('Participated'))
passed = models.BooleanField(verbose_name=_('Passed')) 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): class Meta(CommonModel.Meta):
verbose_name = _('Training') verbose_name = _('Training')

Loading…
Cancel
Save