This commit is contained in:
ilkeral
2025-08-08 07:24:25 +03:00
parent 342f1314c7
commit f4ee7a2d0b
29 changed files with 5189 additions and 1140 deletions

View File

@ -1,5 +1,40 @@
from django.contrib import admin
from .models import SSHCredential, Project, SSHLog
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):
@ -68,4 +103,54 @@ class SSHLogAdmin(admin.ModelAdmin):
return False # Log kayıtları manuel olarak eklenemez
def has_change_permission(self, request, obj=None):
return False # Log kayıtları değiştirilemez
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')