From f7f262ec7516889c7fe0a0c0e8cb5171f1625ec4 Mon Sep 17 00:00:00 2001 From: Tobias Kunze Date: Sun, 16 Mar 2025 09:18:41 +0100 Subject: [PATCH] Add initial model admin --- src/servala/core/admin.py | 139 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 139 insertions(+) create mode 100644 src/servala/core/admin.py diff --git a/src/servala/core/admin.py b/src/servala/core/admin.py new file mode 100644 index 0000000..e92c77f --- /dev/null +++ b/src/servala/core/admin.py @@ -0,0 +1,139 @@ +from django.contrib import admin +from django.utils.translation import gettext_lazy as _ + +from servala.core.models import ( + BillingEntity, + CloudProvider, + ControlPlane, + Organization, + OrganizationMembership, + OrganizationOrigin, + Plan, + Service, + ServiceCategory, + ServiceOffering, + User, +) + + +@admin.register(User) +class UserAdmin(admin.ModelAdmin): + list_display = ( + "email", + "first_name", + "last_name", + "company", + "is_staff", + "is_superuser", + ) + list_filter = ("is_staff", "is_superuser") + search_fields = ("email", "first_name", "last_name", "company") + ordering = ("email",) + fieldsets = ( + (None, {"fields": ("email", "password")}), + (_("Personal info"), {"fields": ("first_name", "last_name", "company")}), + (_("Permissions"), {"fields": ("is_staff", "is_superuser")}), + ) + add_fieldsets = ( + ( + None, + { + "classes": ("wide",), + "fields": ("email", "password1", "password2"), + }, + ), + ) + + +class OrganizationMembershipInline(admin.TabularInline): + model = OrganizationMembership + extra = 1 + autocomplete_fields = ("user",) + + +@admin.register(Organization) +class OrganizationAdmin(admin.ModelAdmin): + list_display = ("name", "billing_entity", "origin") + list_filter = ("origin",) + search_fields = ("name",) + autocomplete_fields = ("billing_entity", "origin") + inlines = (OrganizationMembershipInline,) + + +@admin.register(BillingEntity) +class BillingEntityAdmin(admin.ModelAdmin): + list_display = ("name", "erp_reference") + search_fields = ("name", "erp_reference") + + +@admin.register(OrganizationOrigin) +class OrganizationOriginAdmin(admin.ModelAdmin): + list_display = ("name",) + search_fields = ("name",) + + +@admin.register(OrganizationMembership) +class OrganizationMembershipAdmin(admin.ModelAdmin): + list_display = ("user", "organization", "role", "date_joined") + list_filter = ("role", "date_joined", "organization") + search_fields = ("user__email", "organization__name") + autocomplete_fields = ("user", "organization") + date_hierarchy = "date_joined" + + +class ServiceInline(admin.TabularInline): + model = Service + extra = 1 + + +@admin.register(ServiceCategory) +class ServiceCategoryAdmin(admin.ModelAdmin): + list_display = ("name", "parent") + list_filter = ("parent",) + search_fields = ("name", "description") + autocomplete_fields = ("parent",) + inlines = (ServiceInline,) + + +class PlanInline(admin.TabularInline): + model = Plan + extra = 1 + + +@admin.register(Service) +class ServiceAdmin(admin.ModelAdmin): + list_display = ("name", "category") + list_filter = ("category",) + search_fields = ("name", "description") + autocomplete_fields = ("category",) + + +@admin.register(CloudProvider) +class CloudProviderAdmin(admin.ModelAdmin): + list_display = ("name",) + search_fields = ("name", "description") + + +@admin.register(ControlPlane) +class ControlPlaneAdmin(admin.ModelAdmin): + list_display = ("name", "cloud_provider", "k8s_api_endpoint") + list_filter = ("cloud_provider",) + search_fields = ("name", "description", "k8s_api_endpoint") + autocomplete_fields = ("cloud_provider",) + + +@admin.register(Plan) +class PlanAdmin(admin.ModelAdmin): + list_display = ("name", "service_offering", "term") + list_filter = ("service_offering", "term") + search_fields = ("name", "description") + autocomplete_fields = ("service_offering",) + + +@admin.register(ServiceOffering) +class ServiceOfferingAdmin(admin.ModelAdmin): + list_display = ("id", "service", "provider") + list_filter = ("service", "provider", "control_plane") + search_fields = ("description",) + autocomplete_fields = ("service", "provider") + filter_horizontal = ("control_plane",)