2026-01-26 10:30:49 -05:00

81 lines
2.7 KiB
Python

"""
Schedule models for managing service schedules.py.
"""
import uuid
from django.db import models
from django.utils import timezone
class Schedule(models.Model):
"""Service schedules.py for accounts"""
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
account = models.ForeignKey('Account', on_delete=models.CASCADE, related_name='schedules')
# Service days
monday_service = models.BooleanField(default=False)
tuesday_service = models.BooleanField(default=False)
wednesday_service = models.BooleanField(default=False)
thursday_service = models.BooleanField(default=False)
friday_service = models.BooleanField(default=False)
saturday_service = models.BooleanField(default=False)
sunday_service = models.BooleanField(default=False)
weekend_service = models.BooleanField(default=False)
# Exceptions
schedule_exception = models.TextField(blank=True, null=True)
# Dates
start_date = models.DateField()
end_date = models.DateField(blank=True, null=True)
created_at = models.DateTimeField(auto_now_add=True)
updated_at = models.DateTimeField(auto_now=True)
class Meta:
app_label = 'core'
verbose_name = 'Schedule'
verbose_name_plural = 'Schedules'
ordering = ['-start_date']
indexes = [
models.Index(fields=['account']),
]
def __str__(self):
return f"Schedule for {self.account.name}"
@property
def is_active(self):
"""Check if schedule is active based on end_date"""
return self.end_date is None or self.end_date > timezone.now().date()
@property
def service_days(self):
"""Return list of service days"""
days = []
if self.monday_service:
days.append('Monday')
if self.tuesday_service:
days.append('Tuesday')
if self.wednesday_service:
days.append('Wednesday')
if self.thursday_service:
days.append('Thursday')
if self.friday_service:
days.append('Friday')
if self.saturday_service:
days.append('Saturday')
if self.sunday_service:
days.append('Sunday')
return days
def has_service_on_day(self, day_name):
"""Check if there is service on a specific day"""
day_map = {
'monday': self.monday_service,
'tuesday': self.tuesday_service,
'wednesday': self.wednesday_service,
'thursday': self.thursday_service,
'friday': self.friday_service,
'saturday': self.saturday_service,
'sunday': self.sunday_service,
}
return day_map.get(day_name.lower(), False)