mirror of
https://github.com/pacnpal/thrillwiki_django_no_react.git
synced 2026-01-01 22:07:03 -05:00
69 lines
2.0 KiB
Python
69 lines
2.0 KiB
Python
from django.conf import settings
|
|
from django.db import models
|
|
|
|
from apps.core.history import TrackedModel
|
|
|
|
|
|
class Ticket(TrackedModel):
|
|
STATUS_OPEN = "open"
|
|
STATUS_IN_PROGRESS = "in_progress"
|
|
STATUS_CLOSED = "closed"
|
|
|
|
STATUS_CHOICES = [
|
|
(STATUS_OPEN, "Open"),
|
|
(STATUS_IN_PROGRESS, "In Progress"),
|
|
(STATUS_CLOSED, "Closed"),
|
|
]
|
|
|
|
CATEGORY_GENERAL = "general"
|
|
CATEGORY_BUG = "bug"
|
|
CATEGORY_PARTNERSHIP = "partnership"
|
|
CATEGORY_PRESS = "press"
|
|
CATEGORY_DATA = "data"
|
|
CATEGORY_ACCOUNT = "account"
|
|
|
|
CATEGORY_CHOICES = [
|
|
(CATEGORY_GENERAL, "General Inquiry"),
|
|
(CATEGORY_BUG, "Bug Report"),
|
|
(CATEGORY_PARTNERSHIP, "Partnership"),
|
|
(CATEGORY_PRESS, "Press/Media"),
|
|
(CATEGORY_DATA, "Data Correction"),
|
|
(CATEGORY_ACCOUNT, "Account Issue"),
|
|
]
|
|
|
|
user = models.ForeignKey(
|
|
settings.AUTH_USER_MODEL,
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="tickets",
|
|
help_text="User who submitted the ticket (optional)",
|
|
)
|
|
|
|
category = models.CharField(
|
|
max_length=20,
|
|
choices=CATEGORY_CHOICES,
|
|
default=CATEGORY_GENERAL,
|
|
db_index=True,
|
|
help_text="Category of the ticket",
|
|
)
|
|
subject = models.CharField(max_length=255)
|
|
message = models.TextField()
|
|
email = models.EmailField(help_text="Contact email", blank=True)
|
|
|
|
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default=STATUS_OPEN, db_index=True)
|
|
|
|
class Meta(TrackedModel.Meta):
|
|
verbose_name = "Ticket"
|
|
verbose_name_plural = "Tickets"
|
|
ordering = ["-created_at"]
|
|
|
|
def __str__(self):
|
|
return f"[{self.get_category_display()}] {self.subject}"
|
|
|
|
def save(self, *args, **kwargs):
|
|
# If user is set but email is empty, autofill from user
|
|
if self.user and not self.email:
|
|
self.email = self.user.email
|
|
super().save(*args, **kwargs)
|