Added Austritt to be functional (not fully released yet)
This commit is contained in:
parent
0b3ca2db03
commit
ad322f8ac1
|
|
@ -29,39 +29,23 @@ class PersonalForm(EvaForm):
|
|||
|
||||
class Meta:
|
||||
model = Employee
|
||||
fields = ['firstname', 'lastname', 'department', 'team', 'add_to_wikimediade',]
|
||||
|
||||
class WorkingForm(EvaForm):
|
||||
|
||||
def clean(self):
|
||||
data = self.cleaned_data
|
||||
if data['works_in_gs'] and data['desk'] is None:
|
||||
raise ValidationError('Wer nicht remote arbeitet braucht einen Schreibtisch!')
|
||||
return data
|
||||
fields = ['firstname', 'lastname', 'lastdate_employment', 'lastdate_office', 'lastdate_working']
|
||||
widgets = {'lastdate_employment': DateInput(attrs={'type': 'date'}),
|
||||
'lastdate_office': DateInput(attrs={'type': 'date'}),
|
||||
'lastdate_working': DateInput(attrs={'type': 'date'}),}
|
||||
|
||||
class HRForm(EvaForm):
|
||||
class Meta:
|
||||
model = Employee
|
||||
fields = ['firstdate_employment', 'firstdate_presence', 'jobdescription_german',
|
||||
'jobdescription_english', 'works_in_gs', 'desk',]
|
||||
widgets = {'firstdate_employment': DateInput(attrs={'type': 'date'}),
|
||||
'firstdate_presence': DateInput(attrs={'type': 'date'}),}
|
||||
fields = ['overtime', 'holiday']
|
||||
|
||||
|
||||
class ITForm(EvaForm):
|
||||
|
||||
class Meta:
|
||||
model = Employee
|
||||
fields = [
|
||||
'framework', 'os', 'keyboard', 'mobile', 'landline',
|
||||
'comment', 'language', 'accounts', 'lists', 'rebu2go' ]
|
||||
fields = ['laptop_id', 'forward', 'forwardemail', 'documents', 'documentowner', 'mobile', 'sim', 'credit_card', 'transponder_id', 'special_logins']
|
||||
|
||||
class OfficeForm(EvaForm):
|
||||
class DummyForm(ModelForm):
|
||||
class Meta:
|
||||
model = Employee
|
||||
fields = ['transponder', 'special', 'post_office_box',]
|
||||
|
||||
class ChangeForm(EvaForm):
|
||||
class Meta:
|
||||
model = Employee
|
||||
fields = ['firstdate_employment', 'jobdescription_german', 'jobdescription_english',
|
||||
'desk', 'comment', 'accounts', 'lists', 'transponder']
|
||||
widgets = {'firstdate_employment': DateInput(attrs={'type': 'date'}),}
|
||||
fields = []
|
||||
|
|
|
|||
|
|
@ -0,0 +1,137 @@
|
|||
# Generated by Django 5.2.8 on 2026-01-21 15:05
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('austritt', '0007_remove_employee_screen_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='accounts',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='add_to_wikimediade',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='comment',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='department',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='desk',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='firstdate_employment',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='firstdate_presence',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='framework',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='jobdescription_english',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='jobdescription_german',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='keyboard',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='landline',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='language',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='lists',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='os',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='post_office_box',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='rebu2go',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='special',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='team',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='transponder',
|
||||
),
|
||||
migrations.RemoveField(
|
||||
model_name='employee',
|
||||
name='works_in_gs',
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='credit_card',
|
||||
field=models.BooleanField(default=False, verbose_name='Kreditkarte'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='laptop_id',
|
||||
field=models.CharField(default='000000', max_length=6, verbose_name='Laptop ID'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='lastdate_employment',
|
||||
field=models.DateField(null=True, verbose_name='Vertragsende'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='lastdate_office',
|
||||
field=models.DateField(null=True, verbose_name='Letzter Tag der Anwesenheit in der Geschäftsstelle'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='lastdate_working',
|
||||
field=models.DateField(null=True, verbose_name='Letzter Arbeitstag'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='sim',
|
||||
field=models.BooleanField(default=False, verbose_name='Mobilfunkvertrag'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='special_logins',
|
||||
field=models.TextField(blank=True, max_length=500, null=True, verbose_name='Zusätzliche Accounts'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='transponder_id',
|
||||
field=models.CharField(default='000000', max_length=6, verbose_name='Transponder ID'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
# Generated by Django 5.2.8 on 2026-01-22 11:31
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('austritt', '0008_remove_employee_accounts_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='credit_card',
|
||||
field=models.BooleanField(default=False, verbose_name='Kreditkarte vorhanden?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='laptop_id',
|
||||
field=models.CharField(default='000000', max_length=6, verbose_name='Laptop ID (wenn bekannt)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='mobile',
|
||||
field=models.BooleanField(default=False, max_length=6, verbose_name='Diensttelefon (Handy) vorhanden?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='sim',
|
||||
field=models.BooleanField(default=False, verbose_name='Mobilfunkvertrag vorhanden?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='special_logins',
|
||||
field=models.TextField(blank=True, max_length=500, null=True, verbose_name='Zusätzlich zu deaktivierende Accounts'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='transponder_id',
|
||||
field=models.CharField(default='000000', max_length=6, verbose_name='Transponder ID (wenn bekannt)'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,53 @@
|
|||
# Generated by Django 5.2.8 on 2026-01-22 12:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('austritt', '0009_alter_employee_credit_card_alter_employee_laptop_id_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='documentowner',
|
||||
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='An wen sollen die Dokumente übertragen werden?'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='documents',
|
||||
field=models.BooleanField(default=False, max_length=6, verbose_name='Sollen Google Drive Dokumente übertragen werden? (Sonst werden sie gelöscht)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='forward',
|
||||
field=models.BooleanField(default=False, max_length=6, verbose_name='Soll die Email umgeleitet werden anstatt sie zu deaktivieren?'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='forwardemail',
|
||||
field=models.CharField(blank=True, max_length=300, null=True, verbose_name='An welche Email soll umgeleitet werden?'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='holiday',
|
||||
field=models.CharField(blank=True, max_length=6, verbose_name='restliche Urlaubstage (wenn bekannt)'),
|
||||
),
|
||||
migrations.AddField(
|
||||
model_name='employee',
|
||||
name='overtime',
|
||||
field=models.CharField(blank=True, max_length=6, verbose_name='vorhandene Überstunden (wenn bekannt)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='laptop_id',
|
||||
field=models.CharField(blank=True, default='000000', max_length=6, verbose_name='Laptop ID (wenn bekannt)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='transponder_id',
|
||||
field=models.CharField(blank=True, default='000000', max_length=6, verbose_name='Transponder ID (wenn bekannt)'),
|
||||
),
|
||||
]
|
||||
|
|
@ -0,0 +1,43 @@
|
|||
# Generated by Django 5.2.8 on 2026-01-22 12:53
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('austritt', '0010_employee_documentowner_employee_documents_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='credit_card',
|
||||
field=models.CharField(choices=[('NEIN', 'Nein'), ('JA', 'Ja')], max_length=5, verbose_name='Kreditkarte vorhanden?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='documents',
|
||||
field=models.CharField(choices=[('NEIN', 'Nein'), ('JA', 'Ja')], max_length=5, verbose_name='Sollen Google Drive Dokumente übertragen werden? (Sonst werden sie gelöscht)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='forward',
|
||||
field=models.CharField(choices=[('NEIN', 'Nein'), ('JA', 'Ja')], max_length=5, verbose_name='Soll die Email umgeleitet werden anstatt sie zu deaktivieren?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='laptop_id',
|
||||
field=models.CharField(blank=True, max_length=6, verbose_name='Laptop ID (wenn bekannt)'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='mobile',
|
||||
field=models.CharField(choices=[('NEIN', 'Nein'), ('JA', 'Ja')], max_length=5, verbose_name='Diensttelefon (Handy) vorhanden?'),
|
||||
),
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='transponder_id',
|
||||
field=models.CharField(blank=True, max_length=6, verbose_name='Transponder ID (wenn bekannt)'),
|
||||
),
|
||||
]
|
||||
|
|
@ -53,35 +53,28 @@ class Employee(models.Model):
|
|||
# personal data
|
||||
firstname = models.CharField(max_length=50, verbose_name=_("Vorname"))
|
||||
lastname = models.CharField(max_length=50, verbose_name=_("Nachname"))
|
||||
# intern = models.BooleanField(verbose_name='Interne_r Mitarbeiter_in?', default=True)
|
||||
department = models.CharField(max_length=5, choices=DEPARTMENT_CHOICES.items(), verbose_name=_('Bereich'))
|
||||
team = models.CharField(max_length=50, null=True, blank=True) # TODO? better with choices?
|
||||
add_to_wikimediade = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_("Soll die Person bei Ansprechpartner*innen auf der WMDE-Webseite mit aufgenommen werden?"))
|
||||
|
||||
# general work related stuff
|
||||
firstdate_employment = models.DateField(null=True, verbose_name=_("Erster Arbeitstag"))
|
||||
firstdate_presence = models.DateField(null=True, verbose_name=_("Erster Tag der Anwesenheit in der Geschäftsstelle"))
|
||||
jobdescription_german = models.CharField(null=True, max_length=100, verbose_name="Stellenbezeichnung(deutsch)")
|
||||
jobdescription_english = models.CharField(null=True, max_length=100, verbose_name="Job description(english)")
|
||||
works_in_gs = models.BooleanField(verbose_name=_('Braucht Arbeitsplatz in der Geschäftsstelle?)'), default=True)
|
||||
desk = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Wo soll der Arbeitsplatz sein?"))
|
||||
lastdate_employment = models.DateField(null=True, verbose_name=_("Vertragsende"))
|
||||
lastdate_office = models.DateField(null=True, verbose_name=_("Letzter Tag der Anwesenheit in der Geschäftsstelle"))
|
||||
lastdate_working = models.DateField(null=True, verbose_name=_("Letzter Arbeitstag"))
|
||||
|
||||
# HR related stuff
|
||||
overtime = models.CharField(max_length=6, blank=True, verbose_name=_("vorhandene Überstunden (wenn bekannt)"))
|
||||
holiday = models.CharField(max_length=6, blank=True, verbose_name=_("restliche Urlaubstage (wenn bekannt)"))
|
||||
|
||||
# IT related stuff
|
||||
#vendor = models.CharField(max_length=8, choices=VENDOR_CHOICES.items(), default='STANDARD', verbose_name=_('Hersteller'))
|
||||
framework = models.CharField(max_length=300, null=True, blank=True, verbose_name=_("Möchten Sie vom Standard des Frameworks (Laptop) abweichen, und wenn ja, warum?"))
|
||||
os = models.CharField(max_length=3, choices=OS_CHOICES.items(), default='FED', verbose_name=_('Betriebssystem'))
|
||||
#screen = models.BooleanField(default=False, verbose_name=_('Zusätzlicher Monitor? Einer ist standard.'))
|
||||
mobile = models.BooleanField(max_length=6, default=False, verbose_name=_('Diensttelefon (Handy)'))
|
||||
landline = models.BooleanField(default = False, verbose_name=_('Festnetznummer (Sipgate)'))
|
||||
# sim = models.BooleanField(default=False, verbose_name="Mobilfunkvertrag")
|
||||
keyboard = models.CharField(max_length=2, choices=KEYBOARD_CHOICES.items(), default='DE', verbose_name=_("Tastaturlayout"))
|
||||
comment = models.TextField(max_length=500, null=True, blank=True, verbose_name=_("zusätzliche IT-Anforderungen"))
|
||||
language = models.CharField(max_length=3, choices=LANG_CHOICES.items(), default="GER", verbose_name=_("Sprache für Onboarding"))
|
||||
accounts = MultiSelectField(choices=ACCOUNT_CHOICES.items(), max_length=40, null=True, blank=True, verbose_name=_("Zusätzliche Accounts"))
|
||||
lists = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Zusätzliche Mailinglisten"))
|
||||
rebu2go = models.BooleanField(verbose_name=_("Rebu2Go-Zugang benötigt?"), default=False)
|
||||
laptop_id = models.CharField(max_length=6, blank=True, verbose_name=_("Laptop ID (wenn bekannt)"))
|
||||
special_logins = models.TextField(max_length=500, null=True, blank=True, verbose_name=_("Zusätzlich zu deaktivierende Accounts"))
|
||||
forward = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_('Soll die Email umgeleitet werden anstatt sie zu deaktivieren?'))
|
||||
forwardemail = models.CharField(max_length=300, null=True, blank=True, verbose_name=_("An welche Email soll umgeleitet werden?"))
|
||||
documents = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_('Sollen Google Drive Dokumente übertragen werden? (Sonst werden sie gelöscht)'))
|
||||
documentowner = models.CharField(max_length=300, null=True, blank=True, verbose_name=_("An wen sollen die Dokumente übertragen werden?"))
|
||||
mobile = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_('Diensttelefon (Handy) vorhanden?'))
|
||||
sim = models.BooleanField(default=False, verbose_name="Mobilfunkvertrag vorhanden?")
|
||||
|
||||
# office related stuff
|
||||
transponder = models.CharField(max_length=7, choices=TRANSPONDER_CHOICES.items(), default='NORM')
|
||||
special = models.TextField(max_length=500, null=True, blank=True, verbose_name=_("Besondere Schließungen hier eintragen"))
|
||||
post_office_box = models.BooleanField(default=True, verbose_name=_('Postfach am Empfang benötigt?'))
|
||||
transponder_id = models.CharField(max_length=6, blank=True, verbose_name=_("Transponder ID (wenn bekannt)"))
|
||||
|
||||
# finance related stuff
|
||||
credit_card = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name="Kreditkarte vorhanden?")
|
||||
|
|
|
|||
|
|
@ -5,57 +5,81 @@ ONLY_ONBOARDING = True
|
|||
EVA_MAIL = 'it-support@wikimedia.de'
|
||||
|
||||
# these Fields should be included in every mail
|
||||
BASIC_DATA = ['firstname', 'lastname', 'firstdate_employment', 'firstdate_presence',
|
||||
'jobdescription_german', 'jobdescription_english',]
|
||||
|
||||
BASIC_DATA = [
|
||||
'firstname',
|
||||
'lastname',
|
||||
'lastdate_employment',
|
||||
'lastdate_office',
|
||||
'lastdate_working'
|
||||
]
|
||||
# for every department: 'MAIL' => mail adress, 'DATA': additional fields to include
|
||||
# also one copy with all fields to the person filling the form.
|
||||
MAILS = {
|
||||
'IT': {
|
||||
'MAIL': 'wmde-it@wikimedia.de',
|
||||
'DATA': [
|
||||
'laptop', 'os', 'comment', 'email', 'landline', 'lists', 'mobile',
|
||||
'department', 'accounts', 'language', 'screen', 'works_in_gs', 'desk',
|
||||
'keyboard',
|
||||
],
|
||||
'laptop_id',
|
||||
'email',
|
||||
'forward',
|
||||
'forwardemail',
|
||||
'documents',
|
||||
'documentowner',
|
||||
'mobile',
|
||||
'special_logins'
|
||||
],
|
||||
},
|
||||
'OFFICE': {
|
||||
'MAIL': 'office@wikimedia.de',
|
||||
# 'MAIL': 'office@wikimedia.de',
|
||||
'MAIL': 'julian.hahn@wikimedia.de',
|
||||
'DATA': [
|
||||
'transponder', 'special', 'post_office_box', 'mobile',
|
||||
'works_in_gs', 'desk',
|
||||
'transponder_id'
|
||||
],
|
||||
},
|
||||
'KOMM': {
|
||||
'MAIL': 'presse@wikimedia.de',
|
||||
'DATA': [
|
||||
'department', 'team', 'add_to_wikimediade'
|
||||
],
|
||||
},
|
||||
'CENTRAL': {
|
||||
'MAIL': 'anna.noelte@wikimedia.de',
|
||||
'DATA': [
|
||||
'department', 'team', 'language', 'mobile', 'rebu2go'
|
||||
],
|
||||
},
|
||||
'HR': {
|
||||
'MAIL': 'personal@wikimedia.de',
|
||||
'DATA': [
|
||||
'department', 'team', 'language',
|
||||
]
|
||||
},
|
||||
'FINANCE': {
|
||||
'MAIL': 'claudia.langrock@wikimedia.de',
|
||||
'DATA': [
|
||||
'rebu2go'
|
||||
]
|
||||
},
|
||||
# 'KOMM': {
|
||||
# 'MAIL': 'presse@wikimedia.de',
|
||||
# 'DATA': [
|
||||
# 'email'
|
||||
# ],
|
||||
# },
|
||||
# 'CENTRAL': {
|
||||
# 'MAIL': 'anna.noelte@wikimedia.de',
|
||||
# 'DATA': [
|
||||
# 'sim'
|
||||
# ],
|
||||
# },
|
||||
# 'HR': {
|
||||
# 'MAIL': 'personal@wikimedia.de',
|
||||
# 'DATA': [
|
||||
# 'overtime',
|
||||
# 'holiday',
|
||||
# 'laptop_id',
|
||||
# 'mobile',
|
||||
# 'sim',
|
||||
# 'credit_card'
|
||||
# ]
|
||||
# },
|
||||
# 'FINANCE': {
|
||||
# 'MAIL': 'claudia.langrock@wikimedia.de',
|
||||
# 'DATA': [
|
||||
# 'credit_card'
|
||||
# ]
|
||||
# },
|
||||
'SUBMITTER': {
|
||||
'MAIL': 'submitter@wikimedia.de',
|
||||
'DATA': [
|
||||
'department', 'team', 'add_to_wikimediade', 'remote', 'desk', 'vendor',
|
||||
'os', 'screen', 'mobile', 'landline', 'keyboard', 'comment', 'language',
|
||||
'accounts', 'lists', 'rebu2go', 'transponder', 'special', 'post_office_box'
|
||||
'overtime',
|
||||
'holiday',
|
||||
'laptop_id',
|
||||
'email',
|
||||
'forward',
|
||||
'forwardemail',
|
||||
'documents',
|
||||
'documentowner',
|
||||
'mobile',
|
||||
'sim',
|
||||
'credit_card'
|
||||
'transponder_id',
|
||||
'special_logins',
|
||||
]
|
||||
}
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,11 +4,11 @@
|
|||
|
||||
Hallo!
|
||||
|
||||
Es gibt einen Neuzugang bei Wikimedia! Hier ( https://wiki.wikimedia.de/wiki/Onboarding ) kannst Du nachsehen,
|
||||
Es gibt einen Austritt bei Wikimedia! Hier ( https://wiki.wikimedia.de/wiki/Offboarding ) kannst Du nachsehen,
|
||||
welche Schritte jetzt für Deine Abteilung nötig werden. Im Folgenden alle Daten,
|
||||
die Du dafür brauchst:
|
||||
|
||||
{% include 'evapp/dataloop.txt' %}
|
||||
{% include 'austritt/dataloop.txt' %}
|
||||
|
||||
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
||||
|
||||
|
|
@ -18,12 +18,12 @@ Grüße, Deine E.V.A.
|
|||
{% language 'en' %}
|
||||
Hi!
|
||||
|
||||
There is a new employee at Wikimedia! Here ( https://wiki.wikimedia.de/wiki/Onboarding ) you can see, which
|
||||
Someone is leaving Wikimedia! Here ( https://wiki.wikimedia.de/wiki/Offboarding/en ) you can see, which
|
||||
steps are now necessary for your department.
|
||||
|
||||
All Data you need for this:
|
||||
|
||||
{% include 'evapp/dataloop.txt' %}
|
||||
{% include 'austritt/dataloop.txt' %}
|
||||
|
||||
If you have any questions please write to {{contact}}.
|
||||
|
||||
|
|
|
|||
|
|
@ -36,7 +36,7 @@
|
|||
<h1 style="background-color:red;color:white">{% translate "WARNUNG! Test-MODUS aktiviert. Es werden keine Mails verschickt!" %}</h1>
|
||||
{% endif %}
|
||||
<h1>
|
||||
E (V A) - Austritt, (Veränderung, Austritt)<p>
|
||||
(E V) A - (Eintritt, Veränderung), Austritt<p>
|
||||
</h1>{% translate "Du bist eingeloggt als" %} {{ user.email }}
|
||||
|
||||
<h2>
|
||||
|
|
@ -45,11 +45,10 @@
|
|||
{% translate "Angaben zur Person" %} {% endif %}
|
||||
{% if choice == 'IN' %}
|
||||
{% if wizard.steps.step1 == 2 %}
|
||||
{% translate "Angaben zum neuen Arbeitsverhältnis" %}
|
||||
{% translate "Personal-relevante Angaben" %}
|
||||
{% elif wizard.steps.step1 == 3 %}
|
||||
{% translate "IT-relevante Angaben" %}
|
||||
{% elif wizard.steps.step1 == 4 %}
|
||||
{% translate "Office-relevante Angaben" %}
|
||||
|
||||
{% endif %}
|
||||
{% else %}
|
||||
{% if wizard.steps.step1 == 2 %}
|
||||
|
|
|
|||
|
|
@ -14,8 +14,7 @@ from django.utils.translation import gettext_lazy as _
|
|||
|
||||
from .models import Employee, DEPARTMENT_CHOICES, OS_CHOICES, \
|
||||
LANG_CHOICES, ACCOUNT_CHOICES, TRANSPONDER_CHOICES, KEYBOARD_CHOICES, JANEIN_CHOICES
|
||||
from .forms import PersonalForm, WorkingForm, ITForm, OfficeForm, DummyForm,\
|
||||
ChangeForm, TYPE_CHOICES
|
||||
from .forms import PersonalForm, HRForm, ITForm, DummyForm, TYPE_CHOICES
|
||||
from .settings import MAILS, EVA_MAIL, BASIC_DATA, ONLY_ONBOARDING
|
||||
|
||||
def success(request):
|
||||
|
|
@ -47,7 +46,7 @@ def change_process(wizard):
|
|||
|
||||
class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||
template_name = 'austritt/employee_form.html'
|
||||
form_list = [PersonalForm, WorkingForm, ITForm, OfficeForm, ChangeForm, DummyForm]
|
||||
form_list = [PersonalForm, HRForm, ITForm, DummyForm]
|
||||
instance = None
|
||||
choice = 'IN'
|
||||
|
||||
|
|
@ -90,7 +89,7 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
|||
'TESTMODE': testmode})
|
||||
|
||||
# deliver context for forms if we are in the last step
|
||||
if (self.steps.step1 == 5 or (self.choice != 'IN' and self.steps.step1 == 3)):
|
||||
if (self.steps.step1 == 4 or (self.choice != 'IN' and self.steps.step1 == 4)):
|
||||
context.update({'data': self.beautify_data(self.get_all_cleaned_data()),
|
||||
'datatable': True,})
|
||||
return context
|
||||
|
|
@ -141,26 +140,26 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
|||
context = {'data': self.beautify_data(newdata), 'contact': contact}
|
||||
firstname = data['firstname']
|
||||
lastname = data['lastname']
|
||||
firstday = data['firstdate_employment']
|
||||
lastday = data['lastdate_employment']
|
||||
try:
|
||||
mail_template = get_template(f'evapp/department_mail.txt')
|
||||
mail_template = get_template(f'austritt/department_mail.txt')
|
||||
if settings.MAILTEST:
|
||||
send_mail(
|
||||
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
||||
f'EVA: Austritt {firstname} {lastname} {lastday} (MAILTEST)',
|
||||
mail_template.render(context),
|
||||
EVA_MAIL,
|
||||
[EVA_MAIL],
|
||||
fail_silently=False)
|
||||
elif department != "SUBMITTER":
|
||||
send_mail(
|
||||
f'EVA: Neuzugang {firstname} {lastname} {firstday}',
|
||||
f'EVA: Austritt {firstname} {lastname} {lastday}',
|
||||
mail_template.render(context),
|
||||
EVA_MAIL,
|
||||
[MAILS[department]['MAIL']],
|
||||
fail_silently=False)
|
||||
else:
|
||||
send_mail(
|
||||
f'EVA: Neuzugang {firstname} {lastname} {firstday}',
|
||||
f'EVA: Austritt {firstname} {lastname} {lastday}',
|
||||
mail_template.render(context),
|
||||
EVA_MAIL,
|
||||
[contact],
|
||||
|
|
|
|||
|
|
@ -0,0 +1,18 @@
|
|||
# Generated by Django 5.2.8 on 2026-01-22 12:41
|
||||
|
||||
from django.db import migrations, models
|
||||
|
||||
|
||||
class Migration(migrations.Migration):
|
||||
|
||||
dependencies = [
|
||||
('eintritt', '0007_remove_employee_screen_and_more'),
|
||||
]
|
||||
|
||||
operations = [
|
||||
migrations.AlterField(
|
||||
model_name='employee',
|
||||
name='os',
|
||||
field=models.CharField(choices=[('FED', 'Fedora (Standard)'), ('WIN', 'Windows (bitte Begründung angeben)'), ('MOS', 'Mac OS (nur wenn Mac gewählt)'), ('UBU', 'Ubuntu (bitte Begründung angeben)')], default='FED', max_length=3, verbose_name='Betriebssystem'),
|
||||
),
|
||||
]
|
||||
|
|
@ -20,7 +20,7 @@ DEPARTMENT_CHOICES = {'COENG': _('Communitys & Engagement'),
|
|||
OS_CHOICES = {'FED': 'Fedora (Standard)',
|
||||
'WIN': _('Windows (bitte Begründung angeben)'),
|
||||
'MOS': _('Mac OS (nur wenn Mac gewählt)'),
|
||||
'UBU': _('Ubuntu')}
|
||||
'UBU': _('Ubuntu (bitte Begründung angeben)')}
|
||||
|
||||
LANG_CHOICES = {'GER': 'Deutsch',
|
||||
'ENG': 'English',}
|
||||
|
|
|
|||
|
|
@ -59,3 +59,7 @@ MAILS = {
|
|||
]
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Es gibt einen Neuzugang bei Wikimedia! Hier ( https://wiki.wikimedia.de/wiki/Onb
|
|||
welche Schritte jetzt für Deine Abteilung nötig werden. Im Folgenden alle Daten,
|
||||
die Du dafür brauchst:
|
||||
|
||||
{% include 'evapp/dataloop.txt' %}
|
||||
{% include 'eintritt/dataloop.txt' %}
|
||||
|
||||
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ steps are now necessary for your department.
|
|||
|
||||
All Data you need for this:
|
||||
|
||||
{% include 'evapp/dataloop.txt' %}
|
||||
{% include 'eintritt/dataloop.txt' %}
|
||||
|
||||
If you have any questions please write to {{contact}}.
|
||||
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
|||
lastname = data['lastname']
|
||||
firstday = data['firstdate_employment']
|
||||
try:
|
||||
mail_template = get_template(f'evapp/department_mail.txt')
|
||||
mail_template = get_template(f'eintritt/department_mail.txt')
|
||||
if settings.MAILTEST:
|
||||
send_mail(
|
||||
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
||||
|
|
@ -174,6 +174,10 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
|||
self.instance.delete()
|
||||
return HttpResponse(f'{error}<p>Error in sending mails (propably wrong adress?). Data not saved!')
|
||||
except Exception as error:
|
||||
|
||||
print("str:", str(error))
|
||||
print("repr:", repr(error))
|
||||
print("type:", type(error))
|
||||
print(error)
|
||||
# self.instance.delete()
|
||||
return HttpResponse(f'{error}<p>Error in sending mails. Data not saved! Please contact ' + EVA_MAIL)
|
||||
|
|
|
|||
|
|
@ -166,9 +166,20 @@ STATIC_URL = '/static/'
|
|||
# settings needed for allauth
|
||||
SOCIALACCOUNT_PROVIDERS = {
|
||||
'nextcloud': {
|
||||
'SERVER': 'https://wolke.wikimedia.de/',
|
||||
}
|
||||
# 'SERVER': 'https://wolke.wikimedia.de',
|
||||
'APP': {
|
||||
'name': 'Wolke',
|
||||
'client_id': 'uKfMSd1oBqkrNog02ZhsXamXvvXblHYOCfLoNHLcppCQPvlFYoiKKmvdKZf77ZQ2',
|
||||
'secret': 'CyEBOwjOxgR12POEAEi7FIyusZrMX9d2S7YB0diFMhbw65M06oWKtYyGq0zZJpZE',
|
||||
'settings': {
|
||||
'server': 'https://wolke.wikimedia.de/',
|
||||
# 'server_url': 'https://wolke.wikimedia.de',
|
||||
},
|
||||
}
|
||||
},
|
||||
}
|
||||
SOCIALACCOUNT_ONLY = True
|
||||
DISABLE_ALLAUTH_LOGIN_URL = True
|
||||
|
||||
AUTHENTICATION_BACKENDS = (
|
||||
"django.contrib.auth.backends.ModelBackend",
|
||||
|
|
|
|||
|
|
@ -17,11 +17,11 @@ from django.contrib import admin
|
|||
from django.urls import path, include
|
||||
|
||||
urlpatterns = [
|
||||
path('eintritt/', include('eintritt.urls')),
|
||||
path('accounts/', include('allauth.urls')),
|
||||
path('eintritt/', include('eintritt.urls')),
|
||||
path('', include("home.urls")),
|
||||
path('austritt/', include("austritt.urls")),
|
||||
path('veraenderung/', include("veraenderung.urls")),
|
||||
path('admin/', admin.site.urls),
|
||||
path('accounts/', include('allauth.urls')),
|
||||
|
||||
]
|
||||
|
|
|
|||
Binary file not shown.
|
After Width: | Height: | Size: 99 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 17 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 5.7 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 23 KiB |
|
|
@ -54,7 +54,7 @@ class Employee(models.Model):
|
|||
firstname = models.CharField(max_length=50, verbose_name=_("Vorname"))
|
||||
lastname = models.CharField(max_length=50, verbose_name=_("Nachname"))
|
||||
# intern = models.BooleanField(verbose_name='Interne_r Mitarbeiter_in?', default=True)
|
||||
department = models.CharField(max_length=5, choices=DEPARTMENT_CHOICES.items(), verbose_name=_('Bereich'))
|
||||
department = models.CharField(max_length=5, choices=DEPARTMENT_CHOICES.items(), verbose_name=_('neuer Bereich'))
|
||||
team = models.CharField(max_length=50, null=True, blank=True) # TODO? better with choices?
|
||||
add_to_wikimediade = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_("Soll die Person bei Ansprechpartner*innen auf der WMDE-Webseite mit aufgenommen werden?"))
|
||||
|
||||
|
|
|
|||
|
|
@ -8,7 +8,7 @@ Es gibt einen Neuzugang bei Wikimedia! Hier ( https://wiki.wikimedia.de/wiki/Onb
|
|||
welche Schritte jetzt für Deine Abteilung nötig werden. Im Folgenden alle Daten,
|
||||
die Du dafür brauchst:
|
||||
|
||||
{% include 'evapp/dataloop.txt' %}
|
||||
{% include 'veraenderung/dataloop.txt' %}
|
||||
|
||||
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
||||
|
||||
|
|
@ -23,7 +23,7 @@ steps are now necessary for your department.
|
|||
|
||||
All Data you need for this:
|
||||
|
||||
{% include 'evapp/dataloop.txt' %}
|
||||
{% include 'veraenderung/dataloop.txt' %}
|
||||
|
||||
If you have any questions please write to {{contact}}.
|
||||
|
||||
|
|
|
|||
|
|
@ -143,7 +143,7 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
|||
lastname = data['lastname']
|
||||
firstday = data['firstdate_employment']
|
||||
try:
|
||||
mail_template = get_template(f'evapp/department_mail.txt')
|
||||
mail_template = get_template(f'veraenderung/department_mail.txt')
|
||||
if settings.MAILTEST:
|
||||
send_mail(
|
||||
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
||||
|
|
|
|||
Loading…
Reference in New Issue