from django.db import models from django.contrib.auth.models import User class Ticket(models.Model): STATUS_CHOICES = [ ('open', 'Open'), ('pending', 'Pending'), ('resolved', 'Resolved'), ('closed', 'Closed'), ] PRIORITY_CHOICES = [ ('low', 'Low'), ('medium', 'Medium'), ('high', 'High'), ('urgent', 'Urgent'), ] CATEGORY_CHOICES = [ ('technical', 'Technical Issue'), ('billing', 'Billing'), ('feature', 'Feature Request'), ('other', 'Other'), ] title = models.CharField(max_length=200) description = models.TextField() status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='open') priority = models.CharField(max_length=20, choices=PRIORITY_CHOICES, default='medium') category = models.CharField(max_length=20, choices=CATEGORY_CHOICES, default='technical') created_by = models.ForeignKey(User, on_delete=models.CASCADE, related_name='tickets') assigned_to = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='assigned_tickets') created_at = models.DateTimeField(auto_now_add=True) updated_at = models.DateTimeField(auto_now=True) def __str__(self): return f"#{self.id} - {self.title}" class Meta: ordering = ['-updated_at'] class Comment(models.Model): ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name='comments') author = models.ForeignKey(User, on_delete=models.CASCADE) text = models.TextField() created_at = models.DateTimeField(auto_now_add=True) def __str__(self): return f"Comment by {self.author} on {self.ticket}" class Meta: ordering = ['created_at']