Hide keyboard shortcuts

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 

5 

6class AvailabilityManager(models.Manager): 

7 

8 def create_availability(self, when, where, what): 

9 avail = self.create(when=when, where=where, what=what) 

10 return avail 

11 

12 def get_all(self): 

13 return super().get_queryset().filter(booked=False).order_by("when") 

14 

15 def get_all_by_task(self, task_name): 

16 return self.get_all().filter(what__name=task_name) 

17 

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() 

40 

41 def get_all_by_location_and_date(self, location, date): 

42 return self.get_all().filter(where=location).filter(when__date=date.date()) 

43 

44class LocationManager(models.Manager): 

45 

46 def create_location(self, name): 

47 loc = self.create(name=name) 

48 return loc 

49 

50 def get_all(self): 

51 return super().get_queryset().all() 

52 

53class TaskManager(models.Manager): 

54 

55 def create_task(self, name, duration): 

56 t = self.create(name=name, duration=duration) 

57 return t 

58 

59 def get_all(self): 

60 return super().get_queryset().all() 

61 

62class BookingManager(models.Manager): 

63 

64 def book(self, availability, user, note=""): 

65 b = self.create(availability=availability, user=user, note=note) 

66 availability.book() 

67 return b 

68 

69 def get_by_user(self, userObj): 

70 return super().get_queryset().filter(cancelled=False).filter(user__id=userObj.id).order_by("availability__when") 

71 

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") 

74 

75class MyUserManager(BaseUserManager): 

76 

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 

83 

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 

89 

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