You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

98 lines
4.5 KiB

import uuid
from django.contrib.auth.models import User
from django.db import models
from django.core.validators import RegexValidator
phone_regex = RegexValidator(regex=r'^\+?1?\d{9,15}$', message="Phone number must be entered in the format: '+999999999'. Up to 15 digits allowed.")
# Create your models here.
class UserInfo(models.Model):
user = models.OneToOneField(User)
dob = models.DateField()
address1 = models.CharField(max_length=100)
address2 = models.CharField(max_length=100, blank=True)
city = models.CharField(max_length=32)
province = models.CharField(max_length=32)
postal_code_regex = RegexValidator(regex=r'^[a-zA-Z][0-9][a-zA-Z] [0-9][a-zA-Z][0-9]$', message="Phone number must be entered in the format: 'A1B 2C3'.")
postal_code = models.CharField(validators=[postal_code_regex], max_length=7)
phone_number = models.CharField(validators=[phone_regex], max_length=16)
def __str__(self):
return 'UserInfo: ' + self.user.username
class Client(models.Model):
user = models.OneToOneField(User)
business_number = models.CharField(max_length=16)
alt_name = models.CharField(max_length=32)
alt_address1 = models.CharField(max_length=100)
alt_address2 = models.CharField(max_length=100, blank=True)
alt_city = models.CharField(max_length=32)
alt_province = models.CharField(max_length=32)
alt_phone_number = models.CharField(validators=[phone_regex], max_length=16)
def __str__(self):
return self.user.first_name + ' ' + self.user.last_name
class Provider(models.Model):
user = models.OneToOneField(User)
sin = models.CharField(max_length=16)
cert_title1 = models.CharField(max_length=32, blank=True)
cert_date1 = models.DateField(blank=True)
cert_institution1 = models.CharField(max_length=32, blank=True)
cert_title2 = models.CharField(max_length=32, blank=True)
cert_date2 = models.DateField(blank=True)
cert_institution2 = models.CharField(max_length=32, blank=True)
cert_title3 = models.CharField(max_length=32, blank=True)
cert_date3 = models.DateField(blank=True)
cert_institution3 = models.CharField(max_length=32, blank=True)
emerg_contact_name = models.CharField(max_length=32)
emerg_contact_number = models.CharField(validators=[phone_regex], max_length=16)
crim_record_check_date = models.DateField(blank=True)
def __str__(self):
return self.user.first_name + ' ' + self.user.last_name
class WorkType(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
client = models.ForeignKey(Client, related_name='work_types')
color = models.CharField(max_length=16)
label = models.CharField(max_length=100)
deleted = models.BooleanField(default=False)
def __str__(self):
return 'WorkType: ' + self.label + ' of ' + self.client.user.username
class Manage(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
client = models.ForeignKey(Client, related_name='employees')
provider = models.ForeignKey(Provider, related_name='employers')
note = models.CharField(max_length=500, blank=True)
relation = models.CharField(max_length=32, blank=True)
approved = models.NullBooleanField(blank=True)
deleted = models.BooleanField(default=False)
def __str__(self):
return self.client.user.first_name + ' manages ' + self.provider.user.first_name
class Price(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
management = models.ForeignKey(Manage, related_name='prices')
work_type = models.ForeignKey(WorkType, on_delete=models.CASCADE)
amount = models.DecimalField(max_digits=8, decimal_places=2)
deleted = models.BooleanField(default=False)
class Shift(models.Model):
uuid = models.UUIDField(default=uuid.uuid4, editable=False)
price = models.ForeignKey(Price)
set_price = models.DecimalField(max_digits=8, decimal_places=2, null=True)
set_start = models.DateTimeField(null=True)
set_end = models.DateTimeField(null=True)
actual_start = models.DateTimeField(null=True)
actual_end = models.DateTimeField(null=True)
approved_start = models.DateTimeField(null=True)
approved_end = models.DateTimeField(null=True)
approved_date = models.DateField(null=True)
description = models.CharField(max_length=100, null=True)
chart = models.TextField(max_length=1000, null=True)
provider_approved = models.NullBooleanField(blank=True)
deleted = models.BooleanField(default=False)