from django.db import models from account.models import User from order.models import OrderModel from django_jalali.db import models as jmodels class Attachment(models.Model): file = models.FileField(upload_to='attachments') created_at = models.DateTimeField(auto_now_add=True) size = models.PositiveIntegerField(null=True, blank=True) name = models.CharField(max_length=400, null=True, blank=True) uploaded_by = models.ForeignKey(User, on_delete=models.SET_NULL, null=True) def __str__(self): return self.file.name def save(self, *args, **kwargs): if self.file: self.size = self.file.size self.name = self.file.name super(Attachment, self).save(*args, **kwargs) class Ticket(models.Model): # objects = jmodels.jManager() STATUS_CHOICES = [ ('in_progress', 'در انتظار پاسخ'), ('resolved', 'پاسخ داده شده'), ('closed', 'بسته شده'), ] CATEGORY_CHOICES = [ ('finance_and_accounting', 'مالی و حسابداری'), ('user_profile', 'پروفایل کاربری'), ('order_tracking', 'پیگیری سفارش'), ('authentication', 'احراز هویت'), ('product', 'محصول'), ('bug_and_error_reporting', 'اعلام باگ و خطا در وبسایت'), ('other', 'سایر'), ] subject = models.CharField(max_length=255, verbose_name='موضوع') ticket_category = models.CharField(max_length=30, verbose_name='دسته بندی تیکت', choices=CATEGORY_CHOICES) customer = models.ForeignKey(User, on_delete=models.CASCADE, related_name="tickets", verbose_name='کاربر') admin = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name="assigned_tickets", verbose_name='ادمین') status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='in_progress', verbose_name='وضعیت تیکت') # created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در') # updated_at = jmodels.jDateTimeField(auto_now=True, verbose_name='اپدیت شده در') created_at = models.DateTimeField(auto_now_add=True, verbose_name='ساخته شده در') updated_at = models.DateTimeField(auto_now=True, verbose_name='اپدیت شده در') order = models.ForeignKey(OrderModel ,blank=True, null=True, on_delete=models.SET_NULL) def __str__(self): return self.subject class Meta: verbose_name = 'تیکت' verbose_name_plural = 'تیکت ها' class Message(models.Model): objects = jmodels.jManager() ticket = models.ForeignKey(Ticket, on_delete=models.CASCADE, related_name="messages", verbose_name='تیکت') sender = models.ForeignKey(User, on_delete=models.CASCADE, verbose_name='ارسال کننده') content = models.TextField(verbose_name='محتوای پیام') created_at = jmodels.jDateTimeField(auto_now_add=True, verbose_name='ساخته شده در') attachments = models.ManyToManyField(Attachment, related_name='messages', blank=True) def __str__(self): return f"Message by {self.sender.full_name} on {self.ticket.subject}" class Meta: verbose_name = 'پیام تیکت' verbose_name_plural = 'پیام های تیکت'