98 lines
4.3 KiB
Python
98 lines
4.3 KiB
Python
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 Meta:
|
|
verbose_name = 'پیوست تیکت'
|
|
verbose_name_plural = 'پیوست های تیکت'
|
|
|
|
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 = 'پیام های تیکت'
|
|
|
|
|
|
class ContactUsModel(models.Model):
|
|
full_name = models.CharField(max_length=50, verbose_name='نام و نام خانوادگی')
|
|
email = models.EmailField(max_length=254, verbose_name='ایمیل')
|
|
phone = models.CharField(max_length=30, verbose_name='شماره تماس')
|
|
FEEDBACK_TYPES = [
|
|
('ORDER_FOLLOW_UP', 'پیگیری سفارش'),
|
|
('SUGGESTION', 'پیشنهادات'),
|
|
('COMPLAINT', 'انتقادات'),
|
|
]
|
|
|
|
type = models.CharField(max_length=20, choices=FEEDBACK_TYPES, verbose_name='نوع')
|
|
message = models.TextField(verbose_name='پیام')
|
|
is_reviewed = models.BooleanField(default=False, verbose_name='بررسی شده')
|
|
|
|
def __str__(self):
|
|
return f'{self.full_name} - {self.message[:15]}...'
|
|
|
|
class Meta:
|
|
verbose_name = 'ارتباط با ما'
|
|
verbose_name_plural = 'ارتباط با ما ها ' |