137 lines
4.2 KiB
Python
137 lines
4.2 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User, AbstractBaseUser
|
|
from django.conf import settings
|
|
from PIL import Image
|
|
|
|
# MAKE EMAIL UNIQUE
|
|
from django.contrib.auth.models import AbstractUser, User
|
|
from django.contrib.auth.models import Permission
|
|
|
|
|
|
# UNIQUE and NO BLANK fields while user-registration
|
|
User._meta.get_field('email')._unique = True
|
|
User._meta.get_field('email').blank = False
|
|
User._meta.get_field('first_name').blank = False
|
|
User._meta.get_field('last_name').blank = False
|
|
|
|
'''
|
|
Class Agency
|
|
|
|
Speichert alle Infos für die Agency, darunter später auch die Aufgaben und Bereiche
|
|
Bezug normale User: Erhalten bei Erstellung durch den Administrator automatisch die aktuelle agency:
|
|
request.user.profile.agency
|
|
--> Dahinter ist das Agency-Objekt!
|
|
|
|
'''
|
|
|
|
class Agency(models.Model):
|
|
name = models.CharField(default="", max_length=200)
|
|
inhaber = models.CharField(default="", max_length=200, blank=True)
|
|
street = models.CharField(default="", max_length=200, blank=True)
|
|
city = models.CharField(default="", max_length=200, blank=True)
|
|
email = models.EmailField(default="", blank=True)
|
|
phone = models.CharField(default="", max_length=20, blank=True)
|
|
agencypic = models.ImageField(default='agencymain/default.jpg', upload_to='agencymain', blank=True)
|
|
|
|
def __str__(self):
|
|
return f'{self.name}'
|
|
|
|
# Hier wird definiert, welche Parameter in der URL übertragen werden inkl. Bezeichner
|
|
def get_absolute_url(self):
|
|
return reverse('agency-update', kwargs={'pk':self.pk})
|
|
|
|
@property
|
|
def get_photo_url(self):
|
|
if self.agencypic and hasattr(self.agencypic, 'url'):
|
|
return self.agencypic.url
|
|
else:
|
|
return "/media/agencymain/default.jpg"
|
|
|
|
'''
|
|
Class Profile
|
|
|
|
Klasse für die Zusatzinfos eines Nutzers.
|
|
- Vorname
|
|
- Nachname
|
|
- Email
|
|
- Bild
|
|
- Telefonnummer
|
|
- Fest
|
|
- Mobil
|
|
- Funktion
|
|
- Auswahlfelder
|
|
- Außendienst/Innendienst/Azubi
|
|
- Rollen
|
|
- Bereiche
|
|
- Aufgaben
|
|
|
|
'''
|
|
class Profile(models.Model):
|
|
|
|
# AGENCY TASKS
|
|
agency_task = [
|
|
("lead", "Agenturleitung"),
|
|
("external", "Außendienst"),
|
|
("indoor", "Innendienst"),
|
|
("trainee", "Azubi"),
|
|
]
|
|
|
|
# Wenn der User gelöscht wird, wird auch das Profil gelöscht
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE)
|
|
parent = models.ForeignKey(User, on_delete=models.PROTECT, blank=True, null=True, related_name='parent_user')
|
|
phoneland = models.CharField(max_length=60, blank=True)
|
|
phonemobile = models.CharField(max_length=60, blank=True)
|
|
func = models.CharField(choices=agency_task, default="", max_length=50)
|
|
# Wenn dieses Profil gelöscht wird, wird NICHT die Agency geslöscht
|
|
agency = models.ForeignKey(Agency, on_delete=models.PROTECT)
|
|
image = models.ImageField(default='userprofilepics/default.jpg', upload_to='userprofilepics', blank=True)
|
|
compfunc = models.CharField(max_length=60, blank=True)
|
|
#visible = models.BooleanField(default=True)
|
|
|
|
|
|
def __str__(self):
|
|
return f'{self.user.last_name}'
|
|
|
|
# Hier Path für Templates des Models mit Parametern
|
|
def get_absolute_url(self):
|
|
return reverse('users-update', kwargs={'pk':self.pk})
|
|
|
|
# Erst Oberklasse speichern, dann Bild verkleinern
|
|
|
|
def save(self, **kwargs):
|
|
super().save()
|
|
if self.image:
|
|
img = Image.open(self.image.path)
|
|
|
|
# Bildspeichergröße
|
|
if(img.height > 300 or img.width > 300):
|
|
output_size = (300,300)
|
|
img.thumbnail(output_size)
|
|
img.save(self.image.path)
|
|
baseheight = 560
|
|
hpercent = (baseheight / float(img.size[1]))
|
|
wsize = int((float(img.size[0]) * float(hpercent)))
|
|
img = img.resize((wsize, baseheight), Image.ANTIALIAS)
|
|
img.save(self.image.path)
|
|
|
|
@property
|
|
def get_photo_url(self):
|
|
if self.image and hasattr(self.image, 'url'):
|
|
return self.image.url
|
|
else:
|
|
return "/media/userprofilepics/default.jpg"
|
|
|
|
# PERMISSIONS - Über alle Modelle hinweg, in der url.py wird dann die route verhindert!
|
|
# Im template: if perms.users.PERMISSION
|
|
class Meta:
|
|
permissions = [
|
|
('agency_change', 'Agenturinformationen verändern'),
|
|
('users_usermanagement', 'Benutzer bearbeiten'),
|
|
('areas_management', 'Bereiche bearbeiten'),
|
|
('tasks_management', 'Aufgabenbereiche bearbeiten'),
|
|
('standard_management', 'Standards bearbeiten und freischalten'),
|
|
('news_management', 'News bearbeiten und veröffentlichen')
|
|
]
|
|
|
|
|