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