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')