members: add waitinglist import from csv
Code Coverage #### Overview by baseline * **[Overall project (difference to reference job)](https://jenkins.merten.dev/job/gitea/job/kompass/job/main/7//coverage#overview)** * Line Coverage: 70.83% (3130/4419) - Delta: -0.33% Output truncated. Details
gitea/kompass/pipeline/head This commit looks good Details

authentik-integration
Christian Merten 2 years ago
parent 2f3fb1fefd
commit c97d26c5b1
Signed by: christian.merten
GPG Key ID: D953D69721B948B3

@ -336,8 +336,8 @@ class WaiterInviteForm(forms.Form):
class MemberWaitingListAdmin(CommonAdminMixin, admin.ModelAdmin): class MemberWaitingListAdmin(CommonAdminMixin, admin.ModelAdmin):
fields = ['prename', 'lastname', 'email', 'email_parents', 'birth_date', 'comments', 'invited_for_group'] fields = ['prename', 'lastname', 'email', 'email_parents', 'birth_date', 'application_text', 'application_date', 'comments', 'invited_for_group']
list_display = ('name', 'birth_date', 'age', 'confirmed_mail', 'confirmed_mail_parents', list_display = ('name', 'birth_date', 'age', 'application_date', 'confirmed_mail', 'confirmed_mail_parents',
'waiting_confirmed') 'waiting_confirmed')
search_fields = ('prename', 'lastname', 'email') search_fields = ('prename', 'lastname', 'email')
list_filter = ('confirmed_mail', 'confirmed_mail_parents') list_filter = ('confirmed_mail', 'confirmed_mail_parents')

@ -0,0 +1,23 @@
# Generated by Django 4.0.1 on 2023-09-03 14:51
from django.db import migrations, models
class Migration(migrations.Migration):
dependencies = [
('members', '0012_member_image_group_description'),
]
operations = [
migrations.AddField(
model_name='memberwaitinglist',
name='application_text',
field=models.TextField(blank=True, default='', verbose_name='application text'),
),
migrations.AddField(
model_name='memberwaitinglist',
name='application_date',
field=models.DateTimeField(blank=True, null=True, verbose_name='application date'),
),
]

@ -1,5 +1,6 @@
from datetime import datetime, timedelta from datetime import datetime, timedelta
import uuid import uuid
import pytz
import re import re
import csv import csv
from django.db import models from django.db import models
@ -583,6 +584,9 @@ class MemberWaitingList(Person):
WAITING_CONFIRMATION_EXPIRED = 1 WAITING_CONFIRMATION_EXPIRED = 1
WAITING_CONFIRMED = 2 WAITING_CONFIRMED = 2
application_text = models.TextField(_('application text'), default='', blank=True)
application_date = models.DateTimeField(verbose_name=_('application date'), null=True, blank=True)
last_wait_confirmation = models.DateField(auto_now=True, verbose_name=_('Last wait confirmation')) last_wait_confirmation = models.DateField(auto_now=True, verbose_name=_('Last wait confirmation'))
wait_confirmation_key = models.CharField(max_length=32, default="") wait_confirmation_key = models.CharField(max_length=32, default="")
wait_confirmation_key_expire = models.DateTimeField(default=timezone.now) wait_confirmation_key_expire = models.DateTimeField(default=timezone.now)
@ -1271,6 +1275,13 @@ def parse_date(value):
return datetime.strptime(value, '%d.%m.%Y').date() return datetime.strptime(value, '%d.%m.%Y').date()
def parse_datetime(value):
tz = pytz.timezone('Europe/Berlin')
if value == '':
return None
return tz.localize(datetime.strptime(value, '%d.%m.%Y %H:%M:%S'))
def parse_status(value): def parse_status(value):
return value != "Passivmitglied" return value != "Passivmitglied"
@ -1298,6 +1309,7 @@ CLUBDESK_TO_KOMPASS = {
'Zivilstand': 'civil_status', 'Zivilstand': 'civil_status',
'Geschlecht': 'gender', 'Geschlecht': 'gender',
'Geburtsdatum': ('birth_date', parse_date), 'Geburtsdatum': ('birth_date', parse_date),
'Geburtstag': ('birth_date', parse_date),
'Bemerkungen': 'comments', 'Bemerkungen': 'comments',
'IBAN': 'iban', 'IBAN': 'iban',
'Vorlage Führungszeugnis': ('good_conduct_certificate_presented_date', parse_date), 'Vorlage Führungszeugnis': ('good_conduct_certificate_presented_date', parse_date),
@ -1319,5 +1331,35 @@ CLUBDESK_TO_KOMPASS = {
'Kommentar': 'technical_comments', 'Kommentar': 'technical_comments',
'Erziehungsberechtigte': 'legal_guardians', 'Erziehungsberechtigte': 'legal_guardians',
'Mobil Eltern': 'phone_number_parents', 'Mobil Eltern': 'phone_number_parents',
'Sonstiges': 'application_text',
'Erhalten am': ('application_date', parse_datetime),
} }
def import_from_csv_waitinglist(path):
with open(path, encoding='ISO-8859-1') as csvfile:
reader = csv.DictReader(csvfile, delimiter=';')
rows = list(reader)
def transform_field(key, value):
new_key = CLUBDESK_TO_KOMPASS[key]
if isinstance(new_key, str):
return (new_key, value)
else:
return (new_key[0], new_key[1](value))
def transform_field(key, value):
new_key = CLUBDESK_TO_KOMPASS[key]
if isinstance(new_key, str):
return (new_key, value)
else:
return (new_key[0], new_key[1](value))
def transform_row(row):
kwargs = dict([ transform_field(k, v) for k, v in row.items() if k in CLUBDESK_TO_KOMPASS ])
kwargs_filtered = { k : v for k, v in kwargs.items() if k in ['prename', 'lastname', 'email', 'birth_date', 'application_text', 'application_date'] }
mem = MemberWaitingList(**kwargs_filtered)
mem.save()
for row in rows:
transform_row(row)

Loading…
Cancel
Save