digitaleagenturnc/dasettings/forms.py

184 lines
5.9 KiB
Python

from django import forms
from django.db import models
from django.contrib.auth.models import User
from users.models import AgencyGroup, Agency, Profile, AgencyJob, AgencyNetwork, UserTime
from PIL import Image
from bootstrap_datepicker_plus import DatePickerInput
from django.utils.translation import gettext as _
class AgencyTimeManagement(forms.ModelForm):
class Meta:
model = Agency
fields = ['module_timemanagement_ze']
labels = {
'module_timemanagement_ze' : "Zeiterfassung aktivieren"
}
class AgencyOrganigrammForm(forms.ModelForm):
class Meta:
model = Agency
fields = ['dynamicprofile']
labels = {
'dynamicprofile' : "Dynamischer Steckbrief"
}
class AgencyNetworkForm(forms.ModelForm):
class Meta:
model = AgencyNetwork
fields = ['name', 'publicjoin']
labels = {
"name" : "Name des Agentuverbunds",
"publicjoin" : "Beitritt ohne Bestätigung"
}
# Change logged Users Data (Usernamen an Email) NUR HIER MÖGLICH!
class UsersSelfChangeForm(forms.ModelForm):
email = forms.EmailField()
class Meta:
model = User
fields = ['email']
# Form für die Benachrichtigungseinstellungen
class UsersNotificationForm(forms.ModelForm):
class Meta:
model = Profile
labels = {
"news_mail" : "Agentur-News",
#"user_standard_public_mail" : "Veröffentlichung meiner Standards",
"agency_new_standard_mail" : "Neue Agentur-Standards",
'add_new_group_mail' : "Gruppenmitgliedschaften",
'add_task_mail' : "Tätigkeitsbereich",
'user_messages_mail' : "Mitteilungen"
}
#fields = ['news_mail', 'news_push', 'user_standard_public_mail', 'user_standard_public_push', 'agency_new_standard_mail', 'agency_new_standard_push', 'add_new_group_mail', 'add_new_group_push', 'add_task_mail', 'add_task_push', 'user_messages_mail', 'user_messages_push']
fields = ['news_mail', 'news_push', 'agency_new_standard_mail', 'agency_new_standard_push', 'add_new_group_mail', 'add_new_group_push', 'add_task_mail', 'add_task_push', 'user_messages_mail', 'user_messages_push']
# Usertime Form
class UserTimeForm(forms.ModelForm):
class Meta:
model = UserTime
labels = {
"holiday" : "Urlaubstage",
"loose_holidedate" : "Urlaubstage aus Vorjahr verfallen am",
"startdate" : "Einstellungsdatum",
"holiday_start" : "Urlaubstage bei Einstellung",
"wd_mo" : "Montag",
"wd_tu" : "Dienstag",
"wd_we" : "Mittwoch",
"wd_th" : "Donnerstag",
"wd_fr" : "Freitag",
}
fields = ["holiday", "loose_holidedate", "startdate", "holiday_start", "wd_mo", "wd_tu", "wd_we", "wd_th", "wd_fr"]
widgets = {
'loose_holidedate': DatePickerInput(options={"format":'DD.MM', "locale":'de'}),
"startdate" : DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'})
}
# PERMISSION GROUPS FORM
class AgencyGroupPerms(forms.Form):
'''
Permission-System
Persmissions werden im Model gesetzt, hier automatisch als Form ausgegeben.
Hat der Nutzer eine der genannten Rechte, wird die Checkbox automatisch TRUE gesetzt.
Die erstellen Felder werden entsprechend den Feldern hinzugefügt und ausgegeben.
@param: user
- User ist der aufgerufene User!
'''
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
temprof = AgencyGroup
for ele in temprof._meta.permissions:
self.fields[ele[0]] = forms.BooleanField(required=False, initial=False, help_text=(ele[1]))
# LOADING ALL MODUL-OPTIONS
class AgencyModulsForm(forms.ModelForm):
class Meta:
model = Agency
labels = {
'module_news' : "Agentur-News",
'module_organizer' : "Organizer",
'module_files' : "Dateien",
'module_organigramm' : "Organigramm",
'module_messages' : "Mitteilungen",
'module_timemanagement' : "Abwesenheits- und Zeiterfassung",
}
fields = ['module_news','module_organizer','module_files','module_organigramm', 'module_messages', 'module_timemanagement']
# RAUSNHEMEN WENN DEV DONE
def __init__(self, *args, **kwargs):
super(AgencyModulsForm, self).__init__(*args, **kwargs)
self.fields['module_timemanagement'].widget.attrs['readonly'] = True
self.fields['module_timemanagement'].widget.attrs['disabled'] = True
# NEW USER FORM
class UserNewUserForm(forms.ModelForm):
class Meta:
model = User
fields = ["first_name", "last_name", "email"]
error_messages = {
'email': {
'unique': _("Diese E-Mailadresse ist bereits vergeben."),
},
}
# NEW USER PROFILE FORM
class UserProfileForm(forms.ModelForm):
x = forms.FloatField(widget=forms.HiddenInput())
y = forms.FloatField(widget=forms.HiddenInput())
width = forms.FloatField(widget=forms.HiddenInput())
height = forms.FloatField(widget=forms.HiddenInput())
rotation = forms.FloatField(widget=forms.HiddenInput())
class Meta:
model = Profile
labels = {
"persnumber" : "Personalnummer",
"visible" : "Im Organigramm sichtbar",
"phonemobile" : "Mobilnummer",
"phone_public" : "Nur Interne Verwendung der Mobilnummer",
"phoneland" : "Festnetznummer",
"image": "Profilbild",
"func" : "Agenturfunktion",
"compfunc" : "Tätigkeit"
}
widgets = {"parent" : forms.HiddenInput()}
fields = ["parent", "func", "compfunc", "visible", "phoneland", "phonemobile", "phone_public", "persnumber", "image" ]
def __init__(self, *args, **kwargs):
super().__init__(*args, **kwargs)
self.fields['func'].queryset = AgencyJob.objects.filter(agency__pk=self.instance.agency.pk)
def save(self):
photo = super(UserProfileForm, self).save()
try:
x = self.cleaned_data.get('x')
y = self.cleaned_data.get('y')
w = self.cleaned_data.get('width')
h = self.cleaned_data.get('height')
rotation = self.cleaned_data.get('rotation')
image = Image.open(photo.image)
rotatet_image = image.rotate(rotation, expand=True)
cropped_image = rotatet_image.crop((x, y, w+x, h+y))
resized_image = cropped_image.resize((300, 300), Image.ANTIALIAS)
resized_image.save(photo.image.path)
return photo
except:
print("no photo")