44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
from django.db import models
|
|
from django.utils import timezone
|
|
|
|
class Job(models.Model):
|
|
STATUS_CHOICES = [
|
|
('draft', 'Draft'),
|
|
('active', 'Active'),
|
|
('completed', 'Completed'),
|
|
('cancelled', 'Cancelled'),
|
|
]
|
|
|
|
job_number = models.CharField(max_length=20, unique=True, editable=False)
|
|
client_name = models.CharField(max_length=255)
|
|
description = models.TextField(blank=True)
|
|
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='draft')
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
def save(self, *args, **kwargs):
|
|
if not self.job_number:
|
|
last_job = Job.objects.order_by('-id').first()
|
|
if last_job and last_job.job_number.startswith('AIS'):
|
|
try:
|
|
last_num = int(last_job.job_number[3:])
|
|
new_num = last_num + 1
|
|
except ValueError:
|
|
new_num = 1
|
|
else:
|
|
new_num = 1
|
|
self.job_number = f"AIS{new_num:04d}"
|
|
super().save(*args, **kwargs)
|
|
|
|
def __str__(self):
|
|
return f"{self.job_number} - {self.client_name}"
|
|
|
|
class Agreement(models.Model):
|
|
job = models.OneToOneField(Job, on_delete=models.CASCADE, related_name='agreement')
|
|
agreement_date = models.DateField(default=timezone.now)
|
|
terms = models.TextField()
|
|
scope_of_work = models.TextField()
|
|
total_value = models.DecimalField(max_digits=12, decimal_places=2, default=0.00)
|
|
|
|
def __str__(self):
|
|
return f"Agreement for {self.job.job_number}" |