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)