from django.db import models from django.urls import reverse_lazy, reverse from django.utils import timezone class Employee(models.Model): class Meta: ordering = ('-hire_date',) first_name = models.CharField(max_length=64) last_name = models.CharField(max_length=64) hire_date = models.DateField() title = models.CharField(max_length=64, blank=True, null=True) department = models.CharField(max_length=64, blank=True, null=True) manager = models.CharField(max_length=64, blank=True, null=True) initial_comments = models.TextField(blank=True, null=True) archived = models.BooleanField(default=False) @property def full_name(self): return f"{self.first_name} {self.last_name}" def __str__(self): return self.full_name def get_absolute_url(self): return reverse('employee-detail', kwargs={'pk': self.pk}) class LogEntry(models.Model): class Meta: ordering = ('-created_at',) employee = models.ForeignKey(Employee, on_delete=models.CASCADE) notes = models.CharField(max_length=500) created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return f"{self.employee}: {self.notes}" def get_absolute_url(self): return reverse('todo-detail', kwargs={'pk': self.employee.pk, 'entry_pk': self.pk}) class Todo(models.Model): employee = models.ForeignKey(Employee, on_delete=models.CASCADE) description = models.CharField(max_length=64) completed = models.BooleanField(default=False) completed_at = models.DateTimeField(blank=True, null=True) def __str__(self): return f"{self.employee}: {self.description}" def get_absolute_url(self): return reverse('todo-detail', kwargs={'pk': self.employee.pk, 'todo_pk': self.pk}) class Event(models.Model): class Meta: ordering = ('date', 'time') name = models.CharField(max_length=64) date = models.DateField() time = models.TimeField(blank=True, null=True) employee = models.ForeignKey(Employee, on_delete=models.CASCADE, blank=True, null=True) def __str__(self): return f"{self.description} on {self.date} @ {self.time}" def get_absolute_url(self): return reverse('event-detail', kwargs={'pk': self.pk})