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:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
fields = ['firstname', 'lastname', 'department', 'team', 'add_to_wikimediade',]
|
fields = ['firstname', 'lastname', 'lastdate_employment', 'lastdate_office', 'lastdate_working']
|
||||||
|
widgets = {'lastdate_employment': DateInput(attrs={'type': 'date'}),
|
||||||
class WorkingForm(EvaForm):
|
'lastdate_office': DateInput(attrs={'type': 'date'}),
|
||||||
|
'lastdate_working': DateInput(attrs={'type': 'date'}),}
|
||||||
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
|
|
||||||
|
|
||||||
|
class HRForm(EvaForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
fields = ['firstdate_employment', 'firstdate_presence', 'jobdescription_german',
|
fields = ['overtime', 'holiday']
|
||||||
'jobdescription_english', 'works_in_gs', 'desk',]
|
|
||||||
widgets = {'firstdate_employment': DateInput(attrs={'type': 'date'}),
|
|
||||||
'firstdate_presence': DateInput(attrs={'type': 'date'}),}
|
|
||||||
|
|
||||||
class ITForm(EvaForm):
|
class ITForm(EvaForm):
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
fields = [
|
fields = ['laptop_id', 'forward', 'forwardemail', 'documents', 'documentowner', 'mobile', 'sim', 'credit_card', 'transponder_id', 'special_logins']
|
||||||
'framework', 'os', 'keyboard', 'mobile', 'landline',
|
|
||||||
'comment', 'language', 'accounts', 'lists', 'rebu2go' ]
|
|
||||||
|
|
||||||
class OfficeForm(EvaForm):
|
class DummyForm(ModelForm):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = Employee
|
model = Employee
|
||||||
fields = ['transponder', 'special', 'post_office_box',]
|
fields = []
|
||||||
|
|
||||||
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'}),}
|
|
||||||
|
|
|
||||||
|
|
@ -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
|
# personal data
|
||||||
firstname = models.CharField(max_length=50, verbose_name=_("Vorname"))
|
firstname = models.CharField(max_length=50, verbose_name=_("Vorname"))
|
||||||
lastname = models.CharField(max_length=50, verbose_name=_("Nachname"))
|
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
|
# general work related stuff
|
||||||
firstdate_employment = models.DateField(null=True, verbose_name=_("Erster Arbeitstag"))
|
lastdate_employment = models.DateField(null=True, verbose_name=_("Vertragsende"))
|
||||||
firstdate_presence = models.DateField(null=True, verbose_name=_("Erster Tag der Anwesenheit in der Geschäftsstelle"))
|
lastdate_office = models.DateField(null=True, verbose_name=_("Letzter Tag der Anwesenheit in der Geschäftsstelle"))
|
||||||
jobdescription_german = models.CharField(null=True, max_length=100, verbose_name="Stellenbezeichnung(deutsch)")
|
lastdate_working = models.DateField(null=True, verbose_name=_("Letzter Arbeitstag"))
|
||||||
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)
|
# HR related stuff
|
||||||
desk = models.CharField(max_length=100, null=True, blank=True, verbose_name=_("Wo soll der Arbeitsplatz sein?"))
|
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
|
# IT related stuff
|
||||||
#vendor = models.CharField(max_length=8, choices=VENDOR_CHOICES.items(), default='STANDARD', verbose_name=_('Hersteller'))
|
laptop_id = models.CharField(max_length=6, blank=True, verbose_name=_("Laptop ID (wenn bekannt)"))
|
||||||
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?"))
|
special_logins = models.TextField(max_length=500, null=True, blank=True, verbose_name=_("Zusätzlich zu deaktivierende Accounts"))
|
||||||
os = models.CharField(max_length=3, choices=OS_CHOICES.items(), default='FED', verbose_name=_('Betriebssystem'))
|
forward = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_('Soll die Email umgeleitet werden anstatt sie zu deaktivieren?'))
|
||||||
#screen = models.BooleanField(default=False, verbose_name=_('Zusätzlicher Monitor? Einer ist standard.'))
|
forwardemail = models.CharField(max_length=300, null=True, blank=True, verbose_name=_("An welche Email soll umgeleitet werden?"))
|
||||||
mobile = models.BooleanField(max_length=6, default=False, verbose_name=_('Diensttelefon (Handy)'))
|
documents = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_('Sollen Google Drive Dokumente übertragen werden? (Sonst werden sie gelöscht)'))
|
||||||
landline = models.BooleanField(default = False, verbose_name=_('Festnetznummer (Sipgate)'))
|
documentowner = models.CharField(max_length=300, null=True, blank=True, verbose_name=_("An wen sollen die Dokumente übertragen werden?"))
|
||||||
# sim = models.BooleanField(default=False, verbose_name="Mobilfunkvertrag")
|
mobile = models.CharField(max_length=5, choices=JANEIN_CHOICES.items(), verbose_name=_('Diensttelefon (Handy) vorhanden?'))
|
||||||
keyboard = models.CharField(max_length=2, choices=KEYBOARD_CHOICES.items(), default='DE', verbose_name=_("Tastaturlayout"))
|
sim = models.BooleanField(default=False, verbose_name="Mobilfunkvertrag vorhanden?")
|
||||||
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)
|
|
||||||
|
|
||||||
# office related stuff
|
# office related stuff
|
||||||
transponder = models.CharField(max_length=7, choices=TRANSPONDER_CHOICES.items(), default='NORM')
|
transponder_id = models.CharField(max_length=6, blank=True, verbose_name=_("Transponder ID (wenn bekannt)"))
|
||||||
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?'))
|
# 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'
|
EVA_MAIL = 'it-support@wikimedia.de'
|
||||||
|
|
||||||
# these Fields should be included in every mail
|
# these Fields should be included in every mail
|
||||||
BASIC_DATA = ['firstname', 'lastname', 'firstdate_employment', 'firstdate_presence',
|
BASIC_DATA = [
|
||||||
'jobdescription_german', 'jobdescription_english',]
|
'firstname',
|
||||||
|
'lastname',
|
||||||
|
'lastdate_employment',
|
||||||
|
'lastdate_office',
|
||||||
|
'lastdate_working'
|
||||||
|
]
|
||||||
# for every department: 'MAIL' => mail adress, 'DATA': additional fields to include
|
# for every department: 'MAIL' => mail adress, 'DATA': additional fields to include
|
||||||
# also one copy with all fields to the person filling the form.
|
# also one copy with all fields to the person filling the form.
|
||||||
MAILS = {
|
MAILS = {
|
||||||
'IT': {
|
'IT': {
|
||||||
'MAIL': 'wmde-it@wikimedia.de',
|
'MAIL': 'wmde-it@wikimedia.de',
|
||||||
'DATA': [
|
'DATA': [
|
||||||
'laptop', 'os', 'comment', 'email', 'landline', 'lists', 'mobile',
|
'laptop_id',
|
||||||
'department', 'accounts', 'language', 'screen', 'works_in_gs', 'desk',
|
'email',
|
||||||
'keyboard',
|
'forward',
|
||||||
],
|
'forwardemail',
|
||||||
|
'documents',
|
||||||
|
'documentowner',
|
||||||
|
'mobile',
|
||||||
|
'special_logins'
|
||||||
|
],
|
||||||
},
|
},
|
||||||
'OFFICE': {
|
'OFFICE': {
|
||||||
'MAIL': 'office@wikimedia.de',
|
# 'MAIL': 'office@wikimedia.de',
|
||||||
|
'MAIL': 'julian.hahn@wikimedia.de',
|
||||||
'DATA': [
|
'DATA': [
|
||||||
'transponder', 'special', 'post_office_box', 'mobile',
|
'transponder_id'
|
||||||
'works_in_gs', 'desk',
|
|
||||||
],
|
],
|
||||||
},
|
},
|
||||||
'KOMM': {
|
# 'KOMM': {
|
||||||
'MAIL': 'presse@wikimedia.de',
|
# 'MAIL': 'presse@wikimedia.de',
|
||||||
'DATA': [
|
# 'DATA': [
|
||||||
'department', 'team', 'add_to_wikimediade'
|
# 'email'
|
||||||
],
|
# ],
|
||||||
},
|
# },
|
||||||
'CENTRAL': {
|
# 'CENTRAL': {
|
||||||
'MAIL': 'anna.noelte@wikimedia.de',
|
# 'MAIL': 'anna.noelte@wikimedia.de',
|
||||||
'DATA': [
|
# 'DATA': [
|
||||||
'department', 'team', 'language', 'mobile', 'rebu2go'
|
# 'sim'
|
||||||
],
|
# ],
|
||||||
},
|
# },
|
||||||
'HR': {
|
# 'HR': {
|
||||||
'MAIL': 'personal@wikimedia.de',
|
# 'MAIL': 'personal@wikimedia.de',
|
||||||
'DATA': [
|
# 'DATA': [
|
||||||
'department', 'team', 'language',
|
# 'overtime',
|
||||||
]
|
# 'holiday',
|
||||||
},
|
# 'laptop_id',
|
||||||
'FINANCE': {
|
# 'mobile',
|
||||||
'MAIL': 'claudia.langrock@wikimedia.de',
|
# 'sim',
|
||||||
'DATA': [
|
# 'credit_card'
|
||||||
'rebu2go'
|
# ]
|
||||||
]
|
# },
|
||||||
},
|
# 'FINANCE': {
|
||||||
|
# 'MAIL': 'claudia.langrock@wikimedia.de',
|
||||||
|
# 'DATA': [
|
||||||
|
# 'credit_card'
|
||||||
|
# ]
|
||||||
|
# },
|
||||||
'SUBMITTER': {
|
'SUBMITTER': {
|
||||||
'MAIL': 'submitter@wikimedia.de',
|
'MAIL': 'submitter@wikimedia.de',
|
||||||
'DATA': [
|
'DATA': [
|
||||||
'department', 'team', 'add_to_wikimediade', 'remote', 'desk', 'vendor',
|
'overtime',
|
||||||
'os', 'screen', 'mobile', 'landline', 'keyboard', 'comment', 'language',
|
'holiday',
|
||||||
'accounts', 'lists', 'rebu2go', 'transponder', 'special', 'post_office_box'
|
'laptop_id',
|
||||||
|
'email',
|
||||||
|
'forward',
|
||||||
|
'forwardemail',
|
||||||
|
'documents',
|
||||||
|
'documentowner',
|
||||||
|
'mobile',
|
||||||
|
'sim',
|
||||||
|
'credit_card'
|
||||||
|
'transponder_id',
|
||||||
|
'special_logins',
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -4,11 +4,11 @@
|
||||||
|
|
||||||
Hallo!
|
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,
|
welche Schritte jetzt für Deine Abteilung nötig werden. Im Folgenden alle Daten,
|
||||||
die Du dafür brauchst:
|
die Du dafür brauchst:
|
||||||
|
|
||||||
{% include 'evapp/dataloop.txt' %}
|
{% include 'austritt/dataloop.txt' %}
|
||||||
|
|
||||||
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
||||||
|
|
||||||
|
|
@ -18,12 +18,12 @@ Grüße, Deine E.V.A.
|
||||||
{% language 'en' %}
|
{% language 'en' %}
|
||||||
Hi!
|
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.
|
steps are now necessary for your department.
|
||||||
|
|
||||||
All Data you need for this:
|
All Data you need for this:
|
||||||
|
|
||||||
{% include 'evapp/dataloop.txt' %}
|
{% include 'austritt/dataloop.txt' %}
|
||||||
|
|
||||||
If you have any questions please write to {{contact}}.
|
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>
|
<h1 style="background-color:red;color:white">{% translate "WARNUNG! Test-MODUS aktiviert. Es werden keine Mails verschickt!" %}</h1>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h1>
|
<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 }}
|
</h1>{% translate "Du bist eingeloggt als" %} {{ user.email }}
|
||||||
|
|
||||||
<h2>
|
<h2>
|
||||||
|
|
@ -45,11 +45,10 @@
|
||||||
{% translate "Angaben zur Person" %} {% endif %}
|
{% translate "Angaben zur Person" %} {% endif %}
|
||||||
{% if choice == 'IN' %}
|
{% if choice == 'IN' %}
|
||||||
{% if wizard.steps.step1 == 2 %}
|
{% if wizard.steps.step1 == 2 %}
|
||||||
{% translate "Angaben zum neuen Arbeitsverhältnis" %}
|
{% translate "Personal-relevante Angaben" %}
|
||||||
{% elif wizard.steps.step1 == 3 %}
|
{% elif wizard.steps.step1 == 3 %}
|
||||||
{% translate "IT-relevante Angaben" %}
|
{% translate "IT-relevante Angaben" %}
|
||||||
{% elif wizard.steps.step1 == 4 %}
|
|
||||||
{% translate "Office-relevante Angaben" %}
|
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% else %}
|
{% else %}
|
||||||
{% if wizard.steps.step1 == 2 %}
|
{% 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, \
|
from .models import Employee, DEPARTMENT_CHOICES, OS_CHOICES, \
|
||||||
LANG_CHOICES, ACCOUNT_CHOICES, TRANSPONDER_CHOICES, KEYBOARD_CHOICES, JANEIN_CHOICES
|
LANG_CHOICES, ACCOUNT_CHOICES, TRANSPONDER_CHOICES, KEYBOARD_CHOICES, JANEIN_CHOICES
|
||||||
from .forms import PersonalForm, WorkingForm, ITForm, OfficeForm, DummyForm,\
|
from .forms import PersonalForm, HRForm, ITForm, DummyForm, TYPE_CHOICES
|
||||||
ChangeForm, TYPE_CHOICES
|
|
||||||
from .settings import MAILS, EVA_MAIL, BASIC_DATA, ONLY_ONBOARDING
|
from .settings import MAILS, EVA_MAIL, BASIC_DATA, ONLY_ONBOARDING
|
||||||
|
|
||||||
def success(request):
|
def success(request):
|
||||||
|
|
@ -47,7 +46,7 @@ def change_process(wizard):
|
||||||
|
|
||||||
class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||||
template_name = 'austritt/employee_form.html'
|
template_name = 'austritt/employee_form.html'
|
||||||
form_list = [PersonalForm, WorkingForm, ITForm, OfficeForm, ChangeForm, DummyForm]
|
form_list = [PersonalForm, HRForm, ITForm, DummyForm]
|
||||||
instance = None
|
instance = None
|
||||||
choice = 'IN'
|
choice = 'IN'
|
||||||
|
|
||||||
|
|
@ -90,7 +89,7 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||||
'TESTMODE': testmode})
|
'TESTMODE': testmode})
|
||||||
|
|
||||||
# deliver context for forms if we are in the last step
|
# 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()),
|
context.update({'data': self.beautify_data(self.get_all_cleaned_data()),
|
||||||
'datatable': True,})
|
'datatable': True,})
|
||||||
return context
|
return context
|
||||||
|
|
@ -141,26 +140,26 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||||
context = {'data': self.beautify_data(newdata), 'contact': contact}
|
context = {'data': self.beautify_data(newdata), 'contact': contact}
|
||||||
firstname = data['firstname']
|
firstname = data['firstname']
|
||||||
lastname = data['lastname']
|
lastname = data['lastname']
|
||||||
firstday = data['firstdate_employment']
|
lastday = data['lastdate_employment']
|
||||||
try:
|
try:
|
||||||
mail_template = get_template(f'evapp/department_mail.txt')
|
mail_template = get_template(f'austritt/department_mail.txt')
|
||||||
if settings.MAILTEST:
|
if settings.MAILTEST:
|
||||||
send_mail(
|
send_mail(
|
||||||
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
f'EVA: Austritt {firstname} {lastname} {lastday} (MAILTEST)',
|
||||||
mail_template.render(context),
|
mail_template.render(context),
|
||||||
EVA_MAIL,
|
EVA_MAIL,
|
||||||
[EVA_MAIL],
|
[EVA_MAIL],
|
||||||
fail_silently=False)
|
fail_silently=False)
|
||||||
elif department != "SUBMITTER":
|
elif department != "SUBMITTER":
|
||||||
send_mail(
|
send_mail(
|
||||||
f'EVA: Neuzugang {firstname} {lastname} {firstday}',
|
f'EVA: Austritt {firstname} {lastname} {lastday}',
|
||||||
mail_template.render(context),
|
mail_template.render(context),
|
||||||
EVA_MAIL,
|
EVA_MAIL,
|
||||||
[MAILS[department]['MAIL']],
|
[MAILS[department]['MAIL']],
|
||||||
fail_silently=False)
|
fail_silently=False)
|
||||||
else:
|
else:
|
||||||
send_mail(
|
send_mail(
|
||||||
f'EVA: Neuzugang {firstname} {lastname} {firstday}',
|
f'EVA: Austritt {firstname} {lastname} {lastday}',
|
||||||
mail_template.render(context),
|
mail_template.render(context),
|
||||||
EVA_MAIL,
|
EVA_MAIL,
|
||||||
[contact],
|
[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)',
|
OS_CHOICES = {'FED': 'Fedora (Standard)',
|
||||||
'WIN': _('Windows (bitte Begründung angeben)'),
|
'WIN': _('Windows (bitte Begründung angeben)'),
|
||||||
'MOS': _('Mac OS (nur wenn Mac gewählt)'),
|
'MOS': _('Mac OS (nur wenn Mac gewählt)'),
|
||||||
'UBU': _('Ubuntu')}
|
'UBU': _('Ubuntu (bitte Begründung angeben)')}
|
||||||
|
|
||||||
LANG_CHOICES = {'GER': 'Deutsch',
|
LANG_CHOICES = {'GER': 'Deutsch',
|
||||||
'ENG': 'English',}
|
'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,
|
welche Schritte jetzt für Deine Abteilung nötig werden. Im Folgenden alle Daten,
|
||||||
die Du dafür brauchst:
|
die Du dafür brauchst:
|
||||||
|
|
||||||
{% include 'evapp/dataloop.txt' %}
|
{% include 'eintritt/dataloop.txt' %}
|
||||||
|
|
||||||
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
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:
|
All Data you need for this:
|
||||||
|
|
||||||
{% include 'evapp/dataloop.txt' %}
|
{% include 'eintritt/dataloop.txt' %}
|
||||||
|
|
||||||
If you have any questions please write to {{contact}}.
|
If you have any questions please write to {{contact}}.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||||
lastname = data['lastname']
|
lastname = data['lastname']
|
||||||
firstday = data['firstdate_employment']
|
firstday = data['firstdate_employment']
|
||||||
try:
|
try:
|
||||||
mail_template = get_template(f'evapp/department_mail.txt')
|
mail_template = get_template(f'eintritt/department_mail.txt')
|
||||||
if settings.MAILTEST:
|
if settings.MAILTEST:
|
||||||
send_mail(
|
send_mail(
|
||||||
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
||||||
|
|
@ -174,6 +174,10 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||||
self.instance.delete()
|
self.instance.delete()
|
||||||
return HttpResponse(f'{error}<p>Error in sending mails (propably wrong adress?). Data not saved!')
|
return HttpResponse(f'{error}<p>Error in sending mails (propably wrong adress?). Data not saved!')
|
||||||
except Exception as error:
|
except Exception as error:
|
||||||
|
|
||||||
|
print("str:", str(error))
|
||||||
|
print("repr:", repr(error))
|
||||||
|
print("type:", type(error))
|
||||||
print(error)
|
print(error)
|
||||||
# self.instance.delete()
|
# self.instance.delete()
|
||||||
return HttpResponse(f'{error}<p>Error in sending mails. Data not saved! Please contact ' + EVA_MAIL)
|
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
|
# settings needed for allauth
|
||||||
SOCIALACCOUNT_PROVIDERS = {
|
SOCIALACCOUNT_PROVIDERS = {
|
||||||
'nextcloud': {
|
'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 = (
|
AUTHENTICATION_BACKENDS = (
|
||||||
"django.contrib.auth.backends.ModelBackend",
|
"django.contrib.auth.backends.ModelBackend",
|
||||||
|
|
|
||||||
|
|
@ -17,11 +17,11 @@ from django.contrib import admin
|
||||||
from django.urls import path, include
|
from django.urls import path, include
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
|
path('accounts/', include('allauth.urls')),
|
||||||
path('eintritt/', include('eintritt.urls')),
|
path('eintritt/', include('eintritt.urls')),
|
||||||
path('', include("home.urls")),
|
path('', include("home.urls")),
|
||||||
path('austritt/', include("austritt.urls")),
|
path('austritt/', include("austritt.urls")),
|
||||||
path('veraenderung/', include("veraenderung.urls")),
|
path('veraenderung/', include("veraenderung.urls")),
|
||||||
path('admin/', admin.site.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"))
|
firstname = models.CharField(max_length=50, verbose_name=_("Vorname"))
|
||||||
lastname = models.CharField(max_length=50, verbose_name=_("Nachname"))
|
lastname = models.CharField(max_length=50, verbose_name=_("Nachname"))
|
||||||
# intern = models.BooleanField(verbose_name='Interne_r Mitarbeiter_in?', default=True)
|
# 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?
|
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?"))
|
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,
|
welche Schritte jetzt für Deine Abteilung nötig werden. Im Folgenden alle Daten,
|
||||||
die Du dafür brauchst:
|
die Du dafür brauchst:
|
||||||
|
|
||||||
{% include 'evapp/dataloop.txt' %}
|
{% include 'veraenderung/dataloop.txt' %}
|
||||||
|
|
||||||
Wenn Du Fragen hast, melde Dich bei {{contact}}.
|
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:
|
All Data you need for this:
|
||||||
|
|
||||||
{% include 'evapp/dataloop.txt' %}
|
{% include 'veraenderung/dataloop.txt' %}
|
||||||
|
|
||||||
If you have any questions please write to {{contact}}.
|
If you have any questions please write to {{contact}}.
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -143,7 +143,7 @@ class EvaFormView(LoginRequiredMixin, CookieWizardView):
|
||||||
lastname = data['lastname']
|
lastname = data['lastname']
|
||||||
firstday = data['firstdate_employment']
|
firstday = data['firstdate_employment']
|
||||||
try:
|
try:
|
||||||
mail_template = get_template(f'evapp/department_mail.txt')
|
mail_template = get_template(f'veraenderung/department_mail.txt')
|
||||||
if settings.MAILTEST:
|
if settings.MAILTEST:
|
||||||
send_mail(
|
send_mail(
|
||||||
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
f'EVA: Neuzugang {firstname} {lastname} {firstday} (MAILTEST)',
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue