port to new django, AI automated

This commit is contained in:
2026-03-30 22:35:36 +02:00
parent e2d166e437
commit 372da3caa9
215 changed files with 9283 additions and 2981 deletions

View File

@@ -1,9 +1,10 @@
from django.db import models
from django.utils.translation import ugettext as _
from django.contrib.auth.models import User, Permission
from django.db.models import Q
from datetime import datetime
from django.contrib.auth.models import Permission, User
from django.db import models
from django.db.models import Q
from django.utils.translation import gettext_lazy as _
from location_field.models import PlainLocationField
@@ -14,38 +15,53 @@ class NoNextEventException(Exception):
class Event(models.Model):
EVENT_TYPES = (
('Reh', _('Rehearsal')),
('Conc', _('Concert')),
('Party', _('Party')),
('Travel', _('Travel')),
('Option', _('Option')),
("Reh", _("Rehearsal")),
("Conc", _("Concert")),
("Party", _("Party")),
("Travel", _("Travel")),
("Option", _("Option")),
)
type = models.CharField(max_length=6, choices=EVENT_TYPES, default='Reh', verbose_name=_("type"))
short_desc = models.CharField(null=True, max_length=100, blank=True, verbose_name=_("Short Description"))
type = models.CharField(
max_length=6, choices=EVENT_TYPES, default="Reh", verbose_name=_("type")
)
short_desc = models.CharField(
null=True, max_length=100, blank=True, verbose_name=_("Short Description")
)
location = models.TextField(blank=True, verbose_name=_("location"))
map_location = PlainLocationField(blank=True, based_field=location, zoom=7, verbose_name=_("Location on map"))
map_location = PlainLocationField(
blank=True, based_field=location, zoom=7, verbose_name=_("Location on map")
)
desc = models.TextField(blank=True, verbose_name=_("description"))
date = models.DateField(verbose_name=_("date"))
time = models.TimeField(null=True, blank=True, verbose_name=_("time"))
meeting_time = models.TimeField(null=True, blank=True, verbose_name=_("meeting_time"))
meeting_time = models.TimeField(
null=True, blank=True, verbose_name=_("meeting_time")
)
end_date = models.DateField(null=True, blank=True, verbose_name=_("End Date"))
participants = models.ManyToManyField(User, through='EventParticipation', verbose_name=_("participants"))
participants = models.ManyToManyField(
User, through="EventParticipation", verbose_name=_("participants")
)
def __unicode__(self):
class Meta:
ordering = ["date", "time"]
def __str__(self):
return self.title
def save(self, *args, **kwargs):
# Call the "real" save() method
super(Event, self).save(*args, **kwargs)
super().save(*args, **kwargs)
# Create a "Don't Know" participation for each Musician
# Create a "Don't Know" participation for each Musician
for u in User.objects.all():
if not u in self.participants.all():
EventParticipation.objects.create(event=self, user=u, status='-', comment='')
if u not in self.participants.all():
EventParticipation.objects.create(
event=self, user=u, status="-", comment=""
)
@property
def title(self):
@@ -64,7 +80,7 @@ class Event(models.Model):
@property
def displaydatetime(self):
if not self.displaytime == None:
if self.displaytime is not None:
return datetime.combine(self.date, self.displaytime)
else:
return datetime.combine(self.date, datetime.min.time())
@@ -72,14 +88,18 @@ class Event(models.Model):
@staticmethod
def getNextEvent(eventType="", includePreviousFromToday=True):
"""Return the next event, of the given type. If type is the empty string the next event is returned
regardless of its type.
if includePreviousFromToday the nextEvent returned could also have been today with a startime < now """
regardless of its type.
if includePreviousFromToday the nextEvent returned could also have been today with a startime < now"""
if includePreviousFromToday:
if eventType == "":
nextEvents = Event.objects.filter(date__gte=datetime.now()).order_by('date')[:1]
nextEvents = Event.objects.filter(date__gte=datetime.now()).order_by(
"date"
)[:1]
else:
nextEvents = Event.objects.filter(date__gte=datetime.now(), type=eventType).order_by('date')[:1]
nextEvents = Event.objects.filter(
date__gte=datetime.now(), type=eventType
).order_by("date")[:1]
if len(nextEvents) == 0:
raise NoNextEventException()
@@ -89,11 +109,13 @@ class Event(models.Model):
maximalNumberOfEventsOnSameDay = 4
nextEvents = []
if eventType == "":
nextEvents = Event.objects.filter(date__gte=datetime.now()).order_by('date')[
:maximalNumberOfEventsOnSameDay]
nextEvents = Event.objects.filter(date__gte=datetime.now()).order_by(
"date"
)[:maximalNumberOfEventsOnSameDay]
else:
nextEvents = Event.objects.filter(date__gte=datetime.now(), type=eventType).order_by('date')[
:maximalNumberOfEventsOnSameDay]
nextEvents = Event.objects.filter(
date__gte=datetime.now(), type=eventType
).order_by("date")[:maximalNumberOfEventsOnSameDay]
if len(nextEvents) == 0:
raise NoNextEventException()
@@ -112,28 +134,38 @@ class Event(models.Model):
class EventParticipation(models.Model):
OPTIONS = (('?', _('?')),
('Yes', _('Yes')),
('No', _('No')),
('-', _('-'))
)
OPTIONS = (
("?", _("?")),
("Yes", _("Yes")),
("No", _("No")),
("-", _("-")),
)
event = models.ForeignKey(Event, verbose_name=_("event"), on_delete=models.PROTECT)
user = models.ForeignKey(User, verbose_name=_("user"), on_delete=models.PROTECT)
status = models.CharField(max_length=3, choices=OPTIONS, default='?', verbose_name=_("status"))
event = models.ForeignKey(Event, on_delete=models.CASCADE, verbose_name=_("event"))
user = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name=_("user"))
status = models.CharField(
max_length=3, choices=OPTIONS, default="?", verbose_name=_("status")
)
comment = models.CharField(max_length=64, blank=True, verbose_name=_("comment"))
class Meta:
unique_together = ("event", "user")
permissions = (
("admin", _("Admin")),
("member", _("Member")),
)
def get_username(self):
return self.user.username
def save(self, *args, **kwargs):
prev = EventParticipation.objects.filter(event=self.event, user=self.user)
if len(prev) == 0:
super(EventParticipation, self).save(*args, **kwargs)
super().save(*args, **kwargs)
else:
prev = prev[0]
if prev.status != self.status or prev.comment != self.comment:
super(EventParticipation, self).save(*args, **kwargs)
super().save(*args, **kwargs)
@staticmethod
def hasUserSetParticipationForAllEvents(user):
@@ -142,7 +174,7 @@ class EventParticipation(models.Model):
futurePart = EventParticipation.objects.filter(event__date__gte=datetime.now())
notYetEntered = futurePart.filter(user=user).filter(status='-')
notYetEntered = futurePart.filter(user=user).filter(status="-")
if len(notYetEntered) > 0:
return False
else:
@@ -150,30 +182,27 @@ class EventParticipation(models.Model):
@staticmethod
def isMember(user):
return user.has_perm('eventplanner.member')
return user.has_perm("eventplanner.member")
@staticmethod
def isAdmin(user):
return user.has_perm('eventplanner.admin')
return user.has_perm("eventplanner.admin")
@staticmethod
def members():
perm = Permission.objects.get(codename='member')
f = User.objects.filter(Q(groups__permissions=perm) | Q(user_permissions=perm)).distinct()
return f.order_by('musician__position')
perm = Permission.objects.get(codename="member")
f = User.objects.filter(
Q(groups__permissions=perm) | Q(user_permissions=perm)
).distinct()
return f.order_by("musician__position")
@staticmethod
def get_or_create(user, event):
try:
result = EventParticipation.objects.get(event=event, user=user)
except EventParticipation.DoesNotExist:
result = EventParticipation.objects.create(event=event, user=user, status='-', comment='')
result = EventParticipation.objects.create(
event=event, user=user, status="-", comment=""
)
return result
class Meta:
unique_together = ("event", "user")
permissions = (
("admin", _("Admin")),
("member", _("Member")),
)