Files
hostpanel/ssh_manager/admin.py
ilkeral f4ee7a2d0b yeni
2025-08-08 07:24:25 +03:00

156 lines
5.6 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

from django.contrib import admin
from .models import SSHCredential, Project, SSHLog, Customer, Invoice, InvoiceItem
from .system_settings import SystemSettings
@admin.register(SystemSettings)
class SystemSettingsAdmin(admin.ModelAdmin):
list_display = ('__str__', 'backup_enabled', 'backup_frequency', 'updated_at')
fieldsets = (
('Yedekleme Ayarları', {
'fields': ('backup_enabled', 'backup_frequency', 'backup_hour', 'backup_minute',
'backup_day_of_week', 'backup_day_of_month', 'backup_retention_days',
'backup_compression', 'backup_format', 'backup_directory')
}),
('S3 Depolama', {
'fields': ('use_s3_storage', 's3_access_key', 's3_secret_key',
's3_bucket_name', 's3_region')
}),
('Bildirim Ayarları', {
'fields': ('email_notifications', 'notification_email')
}),
('SSH Ayarları', {
'fields': ('ssh_key_path', 'ssh_key_passphrase')
}),
('Crontab Bilgisi', {
'fields': ('backup_crontab_expression', 'updated_at'),
'classes': ('collapse',)
})
)
readonly_fields = ('backup_crontab_expression', 'updated_at')
def has_add_permission(self, request):
# Sadece bir kayıt olabilir
return SystemSettings.objects.count() == 0
def has_delete_permission(self, request, obj=None):
# Silme işlemi engellenir
return False
@admin.register(SSHCredential)
class SSHCredentialAdmin(admin.ModelAdmin):
list_display = ('hostname', 'username', 'port', 'is_online', 'last_check')
list_filter = ('is_online', 'created_at')
search_fields = ('hostname', 'username')
readonly_fields = ('is_online', 'last_check', 'created_at')
fieldsets = (
('Bağlantı Bilgileri', {
'fields': ('hostname', 'username', 'password', 'port')
}),
('Durum Bilgisi', {
'fields': ('is_online', 'last_check', 'created_at'),
'classes': ('collapse',)
}),
)
@admin.register(Project)
class ProjectAdmin(admin.ModelAdmin):
list_display = ('name', 'folder_name', 'url', 'ssh_credential', 'created_at')
list_filter = ('ssh_credential', 'created_at')
search_fields = ('name', 'folder_name', 'url')
readonly_fields = ('created_at', 'updated_at')
fieldsets = (
('Temel Bilgiler', {
'fields': ('name', 'folder_name', 'ssh_credential')
}),
('Domain Bilgisi', {
'fields': ('url',),
'description': 'Nginx konfigürasyonu için domain adı (Örnek: example.com)'
}),
('Zaman Bilgileri', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
}),
)
def get_full_path(self, obj):
return obj.get_full_path()
get_full_path.short_description = 'Tam Yol'
@admin.register(SSHLog)
class SSHLogAdmin(admin.ModelAdmin):
list_display = ('ssh_credential', 'log_type', 'command', 'status', 'created_at')
list_filter = ('log_type', 'status', 'created_at')
search_fields = ('command', 'output')
readonly_fields = ('created_at',)
fieldsets = (
('Log Detayları', {
'fields': ('ssh_credential', 'log_type', 'command', 'status')
}),
('Çıktı', {
'fields': ('output',),
'classes': ('wide',)
}),
('Zaman Bilgisi', {
'fields': ('created_at',),
'classes': ('collapse',)
}),
)
def get_queryset(self, request):
return super().get_queryset(request).select_related('ssh_credential')
def has_add_permission(self, request):
return False # Log kayıtları manuel olarak eklenemez
def has_change_permission(self, request, obj=None):
return False # Log kayıtları değiştirilemez
class InvoiceItemInline(admin.TabularInline):
model = InvoiceItem
extra = 1
fields = ('project', 'description', 'amount')
def get_formset(self, request, obj=None, **kwargs):
formset = super().get_formset(request, obj, **kwargs)
form = formset.form
form.base_fields['description'].widget.attrs['style'] = 'width: 300px'
return formset
@admin.register(Invoice)
class InvoiceAdmin(admin.ModelAdmin):
list_display = ('invoice_number', 'customer', 'issue_date', 'due_date', 'status', 'total_amount')
list_filter = ('status', 'issue_date', 'payment_method')
search_fields = ('invoice_number', 'customer__name', 'customer__company_name')
readonly_fields = ('invoice_number', 'total_amount', 'created_at', 'updated_at')
inlines = [InvoiceItemInline]
date_hierarchy = 'issue_date'
fieldsets = (
('Fatura Bilgileri', {
'fields': ('invoice_number', 'customer', 'issue_date', 'due_date', 'status', 'payment_method')
}),
('Tutar Bilgileri', {
'fields': ('total_amount',)
}),
('Ek Bilgiler', {
'fields': ('notes', 'payment_notes'),
'classes': ('collapse',)
}),
('Sistem Bilgileri', {
'fields': ('created_at', 'updated_at'),
'classes': ('collapse',)
})
)
def get_queryset(self, request):
return super().get_queryset(request).select_related('customer')
@admin.register(InvoiceItem)
class InvoiceItemAdmin(admin.ModelAdmin):
list_display = ('invoice', 'description', 'project', 'amount')
list_filter = ('invoice__status',)
search_fields = ('description', 'invoice__invoice_number', 'project__name')
def get_queryset(self, request):
return super().get_queryset(request).select_related('invoice', 'project')