vbv/server/vbv_lernwelt/core/admin.py

130 lines
3.4 KiB
Python

from django.contrib import admin
from django.contrib.auth import admin as auth_admin, get_user_model
from django.utils.translation import gettext_lazy as _
from vbv_lernwelt.core.models import Country, JobLog, Organisation
from vbv_lernwelt.core.utils import pretty_print_json
User = get_user_model()
class LogAdmin(admin.ModelAdmin):
def has_add_permission(self, request):
return False
def has_delete_permission(self, request, obj=None):
return False
def get_readonly_fields(self, request, obj=None):
# set all fields read only
return [field.name for field in self.opts.local_fields] + [
field.name for field in self.opts.local_many_to_many
]
def pretty_print_json(self, json_string):
return pretty_print_json(json_string)
@admin.register(User)
class UserAdmin(auth_admin.UserAdmin):
fieldsets = (
(None, {"fields": ("username", "password")}),
(_("Personal info"), {"fields": ("first_name", "last_name", "email")}),
(
_("Permissions"),
{
"fields": (
"is_active",
"is_staff",
"is_superuser",
"groups",
"user_permissions",
),
},
),
(_("Important dates"), {"fields": ("last_login", "date_joined")}),
(
_("Profile"),
{
"fields": (
"language",
"avatar",
"street",
"street_number",
"postal_code",
"city",
"country",
"invoice_address",
)
},
),
(
_("Organisation"),
{
"fields": (
"organisation",
"organisation_detail_name",
"organisation_street",
"organisation_street_number",
"organisation_postal_code",
"organisation_city",
"organisation_country",
)
},
),
(_("Additional data"), {"fields": ("additional_json_data",)}),
)
list_display = [
"username",
"first_name",
"last_name",
"is_active",
"is_superuser",
"sso_id",
]
search_fields = ["first_name", "last_name", "email", "username", "sso_id"]
@admin.register(JobLog)
class JobLogAdmin(LogAdmin):
date_hierarchy = "started"
list_display = (
"job_name",
"started",
"ended",
"runtime",
"success",
)
list_filter = ["job_name", "success"]
def json_data_pretty(self, instance):
return self.pretty_print_json(instance.json_data)
def get_readonly_fields(self, request, obj=None):
return super().get_readonly_fields(request, obj) + ["json_data_pretty"]
def runtime(self, obj):
if obj.ended:
return (obj.ended - obj.started).seconds // 60
return None
@admin.register(Organisation)
class OrganisationAdmin(admin.ModelAdmin):
list_display = (
"organisation_id",
"name_de",
"name_fr",
"name_it",
)
@admin.register(Country)
class CountryAdmin(admin.ModelAdmin):
list_display = (
"country_id",
"name_de",
"name_fr",
"name_it",
)