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 = ["startdate", "wd_mo", "wd_tu", "wd_we", "wd_th", "wd_fr", "holiday", "loose_holidedate", "holiday_start", ] widgets = { 'loose_holidedate': DatePickerInput(options={"format":'DD.MM.', "locale":'de'}), "startdate" : DatePickerInput(options={"format":'DD.MM.YYYY', "locale":'de'}) } def __init__(self, *args, **kwargs): super().__init__(*args, **kwargs) self.fields['startdate'].required = True # 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((416, 416), Image.ANTIALIAS) resized_image.save(photo.image.path) return photo except: print("no photo")