Files
rizwanisready c37592fb44 communication
2024-03-09 22:54:33 +05:30

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, "")