nexus-5/core/models/service.py
2026-01-26 11:09:40 -05:00

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}"