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

140 lines
5.1 KiB
Python

from django.db import models
from django.contrib.auth.models import User
from colorfield.fields import ColorField
from datetime import datetime
# Create your models here.
class Reference(models.Model):
name = models.CharField(max_length=50)
date = models.DateField(blank=True)
class Business(models.Model):
name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
financial_number = models.CharField(max_length=50)
vat = models.BooleanField(default=False)
commercial_registration = models.CharField(max_length=50)
phone_number = models.CharField(max_length=50)
website = models.URLField(null=True)
BUSINESS_TYPE = (
('ASSOCIATIONS', 'ASSOCIATIONS'),
('HEALTHCARE', 'HEALTHCARE'),
('LUXURY', 'LUXURY'),
('MANUFACTURING', 'MANUFACTURING'),
('NON-PROFIT', 'NON-PROFIT'),
('EDUCATION', 'EDUCATION'),
('ENTERTAINMENT', 'ENTERTAINMENT'),
('LOGISTICS', 'LOGISTICS'),
('RETAIL', 'RETAIL'),
('AUTOMOTIVE', 'AUTOMOTIVE'),
)
business_type = models.CharField(max_length=200, choices=BUSINESS_TYPE)
logo = models.ImageField()
class Meta:
verbose_name_plural = u'Businesses'
class CustomerProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
email = models.EmailField(unique=True)
mobile_number = models.CharField(max_length=50)
password = models.CharField(max_length=128)
personal_website = models.URLField(null=True)
STATUS_CHOICES = (
('Active', 'Active'),
('Suspended', 'Suspended'),
('Terminated', 'Terminated'),
)
status = models.CharField(max_length=200, choices=STATUS_CHOICES)
reference = models.ForeignKey(Reference, on_delete=models.CASCADE, null=True)
business = models.ForeignKey(Business, on_delete=models.CASCADE, null=True)
def __str__(self):
return self.user.username
class StaffProfile(models.Model):
user = models.OneToOneField(User, on_delete=models.CASCADE)
first_name = models.CharField(max_length=50)
last_name = models.CharField(max_length=50)
image = models.ImageField(null=True)
email = models.EmailField(unique=True)
mobile_number = models.CharField(max_length=50)
password = models.CharField(max_length=128)
Staff_CHOICES = (
('Developer', 'Developer'),
('Designer', 'Designer'),
('Support', 'Support'),
('Project Manager', 'Project Manager'),
)
position = models.CharField(max_length=100)
intern = models.BooleanField(default=False)
active = models.BooleanField(default=True)
def __str__(self):
return self.user.username
class ProjectType(models.Model):
name = models.CharField(max_length=50)
color = ColorField(default='#FF0000')
class Project(models.Model):
name = models.CharField(max_length=50)
customer = models.ForeignKey(CustomerProfile, on_delete=models.CASCADE, null=True)
manager = models.ForeignKey(StaffProfile, on_delete=models.CASCADE, null=True)
project_type = models.ManyToManyField('ProjectType', default='', related_name='manager_project')
details = models.TextField()
members = models.ManyToManyField('StaffProfile', default='', related_name='members_project')
STATUS_CHOICES = (
('Active', 'Active'),
('Completed', 'Completed'),
('Pending', 'Pending'),
('Cancelled', 'Cancelled'),
)
status = models.CharField(max_length=200, choices=STATUS_CHOICES)
start_date = models.DateField()
end_date = models.DateField()
project_id = models.CharField(max_length=20, null=True, blank=True) # Allow null and blank for initial creation
def save(self, *args, **kwargs):
if not self.project_id:
# Get the last two digits of the current year
current_year = str(datetime.now().year)[-2:]
# Find the maximum project ID in the database and increment it
max_id = Project.objects.aggregate(models.Max('project_id'))['project_id__max']
new_id = str(int(max_id[-4:]) + 1).zfill(4) if max_id else '0001' # If no existing records, start with '0001'
self.project_id = 'P' + current_year + new_id # Add 'p' prefix
super(Project, self).save(*args, **kwargs)
class Milestone(models.Model):
title = models.CharField(max_length=150)
description = models.TextField()
project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)
start_date = models.DateField()
end_date = models.DateField()
class Epic(models.Model):
title = models.CharField(max_length=150)
description = models.TextField()
project = models.ForeignKey(Project, on_delete=models.CASCADE, null=True)
start_date = models.DateField()
end_date = models.DateField()
class Note(models.Model):
text = models.TextField(blank=True)
date = models.DateTimeField(null=True,blank=True)
user = models.ForeignKey(User, on_delete=models.CASCADE, null=True,blank=True)
color = ColorField(default='#FF0000',blank=True)