38 lines
1.6 KiB
Python
38 lines
1.6 KiB
Python
from django.db import models
|
|
from django_choices_field import TextChoicesField
|
|
from core.models.enums import ServiceChoices
|
|
from core.models.base import BaseModel
|
|
from core.models.account import AccountAddress
|
|
from core.models.profile import TeamProfile
|
|
|
|
|
|
class Service(BaseModel):
|
|
"""Service records for accounts"""
|
|
account = models.ForeignKey('Account', on_delete=models.PROTECT, related_name='services', null=True)
|
|
account_address = models.ForeignKey(AccountAddress, on_delete=models.PROTECT, related_name='services',
|
|
verbose_name="Account Service Address", null=True)
|
|
date = models.DateField()
|
|
status = TextChoicesField(choices_enum=ServiceChoices, default=ServiceChoices.SCHEDULED,
|
|
help_text="Current status of the service")
|
|
team_members = models.ManyToManyField(TeamProfile, related_name='services')
|
|
notes = models.TextField(blank=True, null=True)
|
|
calendar_event_id = models.CharField(max_length=255, blank=True, null=True,
|
|
help_text="External calendar event ID")
|
|
|
|
class Meta:
|
|
ordering = ['-date']
|
|
indexes = [
|
|
models.Index(fields=['account_address', 'date']),
|
|
]
|
|
constraints = [
|
|
models.UniqueConstraint(
|
|
fields=['account_address', 'date'],
|
|
name='unique_service_per_address_date'
|
|
)
|
|
]
|
|
|
|
def __str__(self):
|
|
addr = self.account_address
|
|
label = addr.name or "Primary Service Address"
|
|
return f"Service for {addr.account.name} - {label} on {self.date}"
|