port to new django, AI automated
This commit is contained in:
@@ -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")),
|
||||
)
|
||||
|
||||
Reference in New Issue
Block a user