Files
goodtimes/manage_communications/models.py
rizwanisready db213d3228 wrong commit
2024-02-29 13:25:50 +05:30

128 lines
3.5 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):
VERY_BAD = "Very Bad"
POOR = "Poor"
MEDIUM = "Medium"
GOOD = "Good"
EXCELLENT = "Excellent"
RATING_CHOICES = (
(1, "1 Star"),
(2, "2 Stars"),
(3, "3 Stars"),
(4, "4 Stars"),
(5, "5 Stars"),
)
FEEDBACK_REACTION = (
(VERY_BAD, "Very Bad"),
(POOR, "Poor"),
(MEDIUM, "Medium"),
(GOOD, "Good"),
(EXCELLENT, "Excellent"),
)
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")
feedback_reaction = models.CharField(
max_length=20,
choices=FEEDBACK_REACTION,
null=True,
blank=True,
help_text="Reaction associated with the feedback",
)
class Meta:
db_table = "feedback"
def __str__(self):
return f"Author: {self.principal}, Comment: {self.comment}, Rating: {self.rating}"
def get_rating_display(self):
for value, label in self.RATING_CHOICES:
if value == self.rating:
return label
return ""