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