81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
from django.db import models
|
|
|
|
# Create your models here.
|
|
from django.contrib.postgres.fields import DateRangeField
|
|
from django.conf import settings
|
|
|
|
from generic.models import Site
|
|
from django.core.validators import MaxValueValidator, MinValueValidator
|
|
|
|
class OutOfProgrameEvent(models.Model):
|
|
date_range = DateRangeField(help_text="The range of the out of programe event")
|
|
end_date = models.DateField()
|
|
reason = models.CharField(max_length=255)
|
|
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
|
|
|
class LeaveRequest(models.Model):
|
|
date_range = DateRangeField(help_text="The range of the leave request")
|
|
|
|
user = models.ForeignKey(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
|
|
|
LEAVE_STATUS = (
|
|
("UNDECIDED", "Undecided"),
|
|
("REJECTED", "Rejected" ),
|
|
("ACCEPTED", "Accepted" )
|
|
)
|
|
|
|
status = models.CharField(max_length=10, choices=LEAVE_STATUS, default="UNDECIDED")
|
|
|
|
reason = models.CharField(max_length=255)
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.date_range} / {self.reason} / {self.status}"
|
|
|
|
class MultiLeaveRequest(models.Model):
|
|
date_range = DateRangeField(help_text="The range of the leave request")
|
|
|
|
users = models.ManyToManyField(settings.AUTH_USER_MODEL)
|
|
|
|
reason = models.CharField(max_length=255)
|
|
|
|
def __str__(self) -> str:
|
|
return f"{self.date_range} / {self.reason}"
|
|
|
|
class RotaRotation(models.Model):
|
|
name = models.CharField(max_length=100, help_text="Name of the rotation")
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
|
|
class Rota(models.Model):
|
|
start_date = models.DateField(help_text="The rota start date")
|
|
weeks_to_rota = models.IntegerField(default=26, help_text="The number of (whole) weeks the rota cycle runs for")
|
|
|
|
rotations = models.ManyToManyField(RotaRotation, help_text="The rotations that are in the rota")
|
|
|
|
def __str__(self):
|
|
return f"{self.start_date} : {self.weeks_to_rota} weeks"
|
|
|
|
|
|
class UserRotaDetail(models.Model):
|
|
user = models.OneToOneField(settings.AUTH_USER_MODEL, on_delete=models.CASCADE)
|
|
|
|
rotation = models.ForeignKey(RotaRotation, on_delete=models.SET_NULL, null=True)
|
|
|
|
proc_site = models.ForeignKey(Site, on_delete=models.SET_NULL, null=True)
|
|
|
|
end_date = models.DateField(blank=True, null=True, help_text="The date the user should be roted up until, for example their CCT date")
|
|
start_date = models.DateField(blank=True, null=True, help_text="The date the user should be roted from, for example if they join part way through a rota cycle")
|
|
|
|
full_time_equivalence = models.IntegerField(default=100, validators=[MaxValueValidator(100), MinValueValidator(0)], help_text="Percentage of FTE, 100 = Full Time")
|
|
|
|
nwd_monday = models.BooleanField(default=False)
|
|
nwd_tuesday = models.BooleanField(default=False)
|
|
nwd_wednesday = models.BooleanField(default=False)
|
|
nwd_thursday = models.BooleanField(default=False)
|
|
nwd_friday = models.BooleanField(default=False)
|
|
|
|
|