81 lines
2.7 KiB
Python
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) |