107 lines
3.0 KiB
Python
107 lines
3.0 KiB
Python
from django.db import models
|
|
from accounts.models import BaseModel, IAmPrincipal, IAmPrincipalType
|
|
|
|
|
|
class ContactUs(BaseModel):
|
|
name = models.CharField(max_length=100, null=True)
|
|
email_address = models.EmailField()
|
|
mobile_number = models.CharField(max_length=15)
|
|
subject = models.CharField(max_length=200)
|
|
message = models.TextField()
|
|
reply = models.TextField(blank=True, null=True)
|
|
|
|
class Meta:
|
|
db_table = "contact_us"
|
|
|
|
class TicketIssueType(BaseModel):
|
|
name = models.CharField(max_length=100)
|
|
|
|
class Meta:
|
|
db_table = "ticket_issue_type"
|
|
|
|
class TicketAttachment(BaseModel):
|
|
image = models.ImageField(upload_to="ticket_attachment")
|
|
|
|
class Meta:
|
|
db_table = "ticket_attachment"
|
|
|
|
class Tickets(BaseModel):
|
|
REQUESTED = "Requested"
|
|
VIEWED = "Viewed"
|
|
IN_PROGRESS = "In Progress"
|
|
RESOLVED = "Resolved"
|
|
|
|
TICKET_STATUS = (
|
|
(REQUESTED, "Requested"),
|
|
(VIEWED, "Viewed"),
|
|
(IN_PROGRESS, "In Progress"),
|
|
(RESOLVED, "Resolved"),
|
|
)
|
|
issuetype = models.ForeignKey(TicketIssueType, on_delete=models.DO_NOTHING)
|
|
principal = models.ForeignKey(IAmPrincipal, on_delete=models.DO_NOTHING, null=True, blank=True)
|
|
subject = models.CharField(max_length=100)
|
|
description = models.TextField()
|
|
ticket_status = models.CharField(
|
|
max_length=20,
|
|
choices=TICKET_STATUS,
|
|
default=REQUESTED,
|
|
help_text="Ticket status",
|
|
)
|
|
attachments = models.ManyToManyField(TicketAttachment, related_name="tickets_attachments")
|
|
is_stopped = models.BooleanField(default=True)
|
|
|
|
class Meta:
|
|
db_table = "tickets"
|
|
|
|
def __str__(self):
|
|
return f"{self.subject}"
|
|
|
|
def mark_as_viewed(self):
|
|
self.ticket_status = self.VIEWED
|
|
self.save()
|
|
|
|
def mark_as_in_progress(self):
|
|
self.ticket_status = self.IN_PROGRESS
|
|
self.save()
|
|
|
|
def mark_as_resolved(self):
|
|
self.ticket_status = self.RESOLVED
|
|
self.save()
|
|
|
|
def stop_ticket(self):
|
|
self.is_stopped = True
|
|
self.ticket_status = self.RESOLVED
|
|
self.save()
|
|
|
|
|
|
class Feedback(BaseModel):
|
|
RATING_CHOICES = (
|
|
(1, 1),
|
|
(2, 2),
|
|
(3, 3),
|
|
(4, 4),
|
|
(5, 5),
|
|
)
|
|
|
|
principal = models.ForeignKey(
|
|
IAmPrincipal,
|
|
on_delete=models.SET_NULL,
|
|
null=True,
|
|
blank=True,
|
|
related_name="feedbacks",
|
|
help_text="User associated with this feedback",
|
|
)
|
|
email = models.EmailField(null=True, blank=True, help_text="Email address of the feedback provider")
|
|
comment = models.TextField(help_text="Feedback comment")
|
|
rating = models.PositiveSmallIntegerField(choices=RATING_CHOICES, help_text="Rating provided by the user")
|
|
|
|
class Meta:
|
|
db_table = "feedback"
|
|
|
|
def __str__(self):
|
|
return f"Author: {self.principal}, Comment: {self.comment}, Rating: {self.rating}"
|
|
|
|
def get_rating_display(self):
|
|
rating_labels = {value: label for value, label in self.RATING_CHOICES}
|
|
return rating_labels.get(self.rating, "")
|