Hot-keys on this page
r m x p toggle line displays
j k next/prev highlighted chunk
0 (zero) top of page
1 (one) first highlighted chunk
1from django.db import models
2from django.contrib.auth.base_user import BaseUserManager
3from datetime import datetime, timedelta
4from django.utils import timezone
6class AvailabilityManager(models.Manager):
8 def create_availability(self, when, where, what):
9 avail = self.create(when=when, where=where, what=what)
10 return avail
12 def get_all(self):
13 return super().get_queryset().filter(booked=False).order_by("when")
15 def get_all_by_task(self, task_name):
16 return self.get_all().filter(what__name=task_name)
18 def get_next_by_task_and_date(self, task_name, date):
19 now = datetime.now(timezone.utc)
20 last = now.replace(hour=23, minute=59, second=59, microsecond=999999)
21 if date is not None:
22 if now.date() == date.date():
23 return self.get_all_by_task(task_name).filter(when__range=(now, last))
24 else:
25 return self.get_all_by_task(task_name).filter(when__date=date.date())
26 else:
27 # Get today's availabilities
28 todaysNextAvailabilities = self.get_next_by_task_and_date(task_name, now)
29 # If there are any availabilities today, return them
30 if len(todaysNextAvailabilities) != 0:
31 return todaysNextAvailabilities
32 else:
33 # Get first availability as from tomorrow
34 nextAvailability = self.get_all_by_task(task_name).filter(when__date__gt=now.date()).first()
35 if nextAvailability is not None:
36 # Return availabilities on first date available
37 return self.get_all_by_task(task_name).filter(when__date=nextAvailability.when.date())
38 else:
39 return self.none()
41 def get_all_by_location_and_date(self, location, date):
42 return self.get_all().filter(where=location).filter(when__date=date.date())
44class LocationManager(models.Manager):
46 def create_location(self, name):
47 loc = self.create(name=name)
48 return loc
50 def get_all(self):
51 return super().get_queryset().all()
53class TaskManager(models.Manager):
55 def create_task(self, name, duration):
56 t = self.create(name=name, duration=duration)
57 return t
59 def get_all(self):
60 return super().get_queryset().all()
62class BookingManager(models.Manager):
64 def book(self, availability, user, note=""):
65 b = self.create(availability=availability, user=user, note=note)
66 availability.book()
67 return b
69 def get_by_user(self, userObj):
70 return super().get_queryset().filter(cancelled=False).filter(user__id=userObj.id).order_by("availability__when")
72 def get_by_location_and_date(self, locationObj, date):
73 return super().get_queryset().filter(cancelled=False).filter(availability__where=locationObj).filter(availability__when__date=date).order_by("availability__when")
75class MyUserManager(BaseUserManager):
77 def create_supervisor(self, username, email, password):
78 u = self.create(username=username, email=email)
79 u.set_password(password)
80 u.is_supervisor = True
81 u.save()
82 return u
84 def create_user(self, username, email, password):
85 u = self.create(username=username, email=email)
86 u.set_password(password)
87 u.save()
88 return u
90 def create_superuser(self, username, email, password):
91 u = self.create(username=username, email=email)
92 u.set_password(password)
93 u.is_superuser = True
94 u.save()
95 return u