digitaleagenturnc/users/models.py

135 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)
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')
]