Files
customerTicket/apps/core/admin.py
T
2026-09-28 19:37:19 +03:30

84 lines
4.2 KiB
Python

from django.contrib import admin
from django import forms
from .models import PageTitle, ProductionSeedState, SiteBranding, VoipConfiguration
@admin.register(SiteBranding)
class SiteBrandingAdmin(admin.ModelAdmin):
fieldsets = (
("عمومی", {"fields": ("site_title", "header_title", "header_subtitle")}),
("لوگو و آیکون‌ها", {"fields": ("company_logo", "favicon", "pwa_icon"), "description": "در صورت خالی بودن هر فیلد، فایل پیش‌فرض فعلی استفاده می‌شود."}),
("PWA", {"fields": ("pwa_name", "pwa_title", "pwa_description", "pwa_install_label", "pwa_install_help")}),
("پنل کارشناسان", {"fields": ("staff_brand_title", "staff_brand_subtitle", "staff_panel_label")}),
("صفحه ورود مشتری", {"fields": ("login_intro_enabled", "login_intro_icon", "login_intro_eyebrow", "login_intro_heading", "login_intro_body")}),
("صفحه ورود کارشناسان", {"fields": ("staff_login_intro_enabled", "staff_login_intro_icon", "staff_login_intro_eyebrow", "staff_login_intro_heading", "staff_login_intro_body")}),
("صفحه تیکت‌های مشتری", {"fields": ("customer_tickets_hero_enabled", "customer_tickets_hero_eyebrow", "customer_tickets_hero_heading", "customer_tickets_hero_body")}),
("امضای توسعه‌دهنده", {"fields": ("developer_credit_text", "developer_credit_html", "use_developer_credit_html"), "description": "HTML خام تنها برای محتوای کاملاً مورد اعتماد فعال شود."}),
("امضای مستقل sidebar کارکنان", {"fields": ("staff_sidebar_credit_text", "staff_sidebar_credit_html", "use_staff_sidebar_credit_html"), "description": "این مقدار فقط در پایین sidebar پنل staff نمایش داده می‌شود."}),
)
def get_readonly_fields(self, request, obj=None):
if request.user.is_superuser:
return ()
return ("developer_credit_html", "use_developer_credit_html", "staff_sidebar_credit_html", "use_staff_sidebar_credit_html")
def has_add_permission(self, request):
return not SiteBranding.objects.exists()
def has_delete_permission(self, request, obj=None):
return False
@admin.register(VoipConfiguration)
class VoipConfigurationAdmin(admin.ModelAdmin):
fields = ("voip_call_url", "announcement_url", "announcement_id", "announcement_api_key", "clear_announcement_api_key", "announcement_delay_minutes", "updated_at")
readonly_fields = ("updated_at",)
class ConfigurationForm(forms.ModelForm):
announcement_api_key = forms.CharField(
required=False, widget=forms.PasswordInput,
help_text="برای حفظ کلید فعلی خالی بگذارید؛ برای تغییر، کلید جدید را وارد کنید.",
)
clear_announcement_api_key = forms.BooleanField(required=False, label="حذف کلید فعلی")
class Meta:
model = VoipConfiguration
fields = "__all__"
def clean_announcement_api_key(self):
if self.data.get("clear_announcement_api_key"):
return ""
return self.cleaned_data["announcement_api_key"] or (self.instance.announcement_api_key if self.instance.pk else "")
form = ConfigurationForm
def has_add_permission(self, request):
return not VoipConfiguration.objects.exists()
def has_delete_permission(self, request, obj=None):
return False
@admin.register(PageTitle)
class PageTitleAdmin(admin.ModelAdmin):
list_display = ("route_name", "title", "is_active", "updated_at")
list_editable = ("title", "is_active")
search_fields = ("route_name", "title")
list_filter = ("is_active",)
@admin.register(ProductionSeedState)
class ProductionSeedStateAdmin(admin.ModelAdmin):
list_display = ("bundle_sha256", "applied_at")
readonly_fields = ("bundle_sha256", "manifest", "applied_at")
def has_add_permission(self, request):
return False
def has_change_permission(self, request, obj=None):
return False
def has_delete_permission(self, request, obj=None):
return False