share ticket and ticket message
This commit is contained in:
1 parent
39e64854b8
commit
79fe1cddbb
35 files changed
+1742
-95
No files matched your search
@@ -1,3 +1,57 @@
|
||||
from django import forms
|
||||
from django.contrib import admin
|
||||
from .models import Attachment,AttachmentPolicy
|
||||
admin.site.register([Attachment,AttachmentPolicy])
|
||||
|
||||
from .models import Attachment, AttachmentPolicy
|
||||
|
||||
|
||||
class AttachmentPolicyAdminForm(forms.ModelForm):
|
||||
class Meta:
|
||||
model = AttachmentPolicy
|
||||
fields = "__all__"
|
||||
labels = {
|
||||
"attachment_type": "نوع پیوست (Attachment type)",
|
||||
"is_enabled": "فعال است",
|
||||
"max_file_size": "حداکثر حجم هر فایل (بایت)",
|
||||
"max_files_per_message": "حداکثر تعداد فایل از این نوع در هر پیام",
|
||||
"allowed_extensions": "پسوندهای مجاز (Allowed extensions)",
|
||||
"allowed_mime_types": "نوع محتوای مجاز (Allowed mime types)",
|
||||
"sort_order": "ترتیب نمایش",
|
||||
}
|
||||
help_texts = {
|
||||
"attachment_type": (
|
||||
"شناسه نوع پیوست را با حروف بزرگ وارد کنید: IMAGE، VIDEO، VOICE، PDF، "
|
||||
"WORD، EXCEL، ZIP، RAR یا OTHER. هر نوع فقط یک سیاست دارد."
|
||||
),
|
||||
"is_enabled": "با غیرفعال کردن، آپلود جدید این نوع فایل برای مشتری و کارکنان رد میشود.",
|
||||
"max_file_size": (
|
||||
"واحد بایت است و این سقف برای هر فایل جداگانه اعمال میشود، نه مجموع پیوستها. "
|
||||
"برای تبدیل حجم بر حسب مِبیبایت (MiB) به بایت، عدد را در ۱۰۲۴ × ۱۰۲۴ ضرب کنید؛ "
|
||||
"مثلاً ۳۰ × ۱۰۲۴ × ۱۰۲۴ = 31457280 بایت. فقط عدد نهایی را وارد کنید."
|
||||
),
|
||||
"max_files_per_message": (
|
||||
"سقف تعداد پیوستهای همین نوع در یک پیام است؛ "
|
||||
"مثلاً مقدار ۱۰ برای PDF یعنی حداکثر ۱۰ فایل PDF در هر پیام."
|
||||
),
|
||||
"allowed_extensions": (
|
||||
'فهرست JSON با نقلقول دوتایی، نقطه و حروف کوچک وارد کنید؛ '
|
||||
'برای PDF: [".pdf"] و برای تصویر، مثلاً: [".jpg", ".jpeg", ".png"]. '
|
||||
"این فیلد پسوند نام فایل را کنترل میکند. فرم ادمین فهرست خالی را نمیپذیرد."
|
||||
),
|
||||
"allowed_mime_types": (
|
||||
'فهرست JSON از نوع محتوای واقعی فایل وارد کنید؛ برای PDF: ["application/pdf"] '
|
||||
'و برای تصویر، مثلاً: ["image/jpeg", "image/png"]. '
|
||||
"نوع محتوا از خود فایل تشخیص داده میشود و باید دقیقاً در این فهرست باشد؛ "
|
||||
"مقادیر کلی مثل image/* پشتیبانی نمیشوند. هر دو فهرست پسوند و محتوا باید "
|
||||
"با فایل سازگار باشند. این سیاست برای مشتری و کارکنان مشترک است؛ "
|
||||
"فرم ادمین فهرست خالی را نمیپذیرد."
|
||||
),
|
||||
"sort_order": "عدد صحیح نامنفی برای ثبت ترتیب سیاست؛ مثلاً ۰، ۱ یا ۲.",
|
||||
}
|
||||
|
||||
|
||||
@admin.register(AttachmentPolicy)
|
||||
class AttachmentPolicyAdmin(admin.ModelAdmin):
|
||||
form = AttachmentPolicyAdminForm
|
||||
|
||||
|
||||
admin.site.register(Attachment)
|
||||
@@ -8,6 +8,10 @@ def attachment_path(instance,filename):
|
||||
return f"tickets/{t.created_at:%Y/%m}/{t.public_id}/{m.public_id}/{uuid.uuid4().hex}{ext}"
|
||||
class AttachmentPolicy(models.Model):
|
||||
attachment_type=models.CharField(max_length=20,unique=True); is_enabled=models.BooleanField(default=True); max_file_size=models.PositiveBigIntegerField(); max_files_per_message=models.PositiveSmallIntegerField(default=10); allowed_extensions=models.JSONField(default=list); allowed_mime_types=models.JSONField(default=list); sort_order=models.PositiveIntegerField(default=0); updated_at=models.DateTimeField(auto_now=True)
|
||||
|
||||
def __str__(self):
|
||||
return self.attachment_type
|
||||
|
||||
class Attachment(PublicIdModel,models.Model):
|
||||
class Type(models.TextChoices): IMAGE="IMAGE","تصویر"; VIDEO="VIDEO","ویدئو"; VOICE="VOICE","صدا"; PDF="PDF","PDF"; WORD="WORD","Word"; EXCEL="EXCEL","Excel"; ZIP="ZIP","ZIP"; RAR="RAR","RAR"; OTHER="OTHER","سایر"
|
||||
message=models.ForeignKey("messaging.Message",on_delete=models.PROTECT,related_name="attachments"); file=models.FileField(upload_to=attachment_path,max_length=500); original_name=models.CharField(max_length=255); stored_name=models.CharField(max_length=255); relative_path=models.CharField(max_length=500); attachment_type=models.CharField(max_length=20,choices=Type.choices); mime_type=models.CharField(max_length=150); extension=models.CharField(max_length=20); file_size=models.PositiveBigIntegerField(); uploaded_by=models.ForeignKey(settings.AUTH_USER_MODEL,on_delete=models.PROTECT); created_at=models.DateTimeField(auto_now_add=True)
|
||||
|
||||
Reference in new issue
Block a user