254 lines
6.7 KiB
Python
254 lines
6.7 KiB
Python
from django.contrib import admin, messages
|
|
from django.contrib.auth import admin as auth_admin
|
|
from django.contrib.auth import get_user_model
|
|
from django.utils.translation import gettext_lazy as _
|
|
|
|
from vbv_lernwelt.core.models import (
|
|
Country,
|
|
ExternalApiRequestLog,
|
|
JobLog,
|
|
Organisation,
|
|
SecurityRequestResponseLog,
|
|
)
|
|
from vbv_lernwelt.core.utils import pretty_print_json
|
|
from vbv_lernwelt.learning_mentor.services import (
|
|
create_or_sync_berufsbildner as create_or_sync_bb,
|
|
)
|
|
|
|
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.action(description="Berufsbildner: Create or Sync")
|
|
def create_or_sync_berufsbildner(modeladmin, request, queryset):
|
|
# keep it easy
|
|
success = []
|
|
for user in queryset:
|
|
success.append(create_or_sync_bb(user))
|
|
if all(success):
|
|
messages.add_message(
|
|
request,
|
|
messages.SUCCESS,
|
|
"Berufsbildner erfolgreich erstellt oder synchronisiert",
|
|
)
|
|
else:
|
|
messages.add_message(
|
|
request,
|
|
messages.ERROR,
|
|
"Einige Berufsbildner konnten nicht erstellt oder synchronisiert werden",
|
|
)
|
|
|
|
|
|
@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",
|
|
"birth_date",
|
|
"phone_number",
|
|
"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"]
|
|
actions = [create_or_sync_berufsbildner]
|
|
|
|
|
|
@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(SecurityRequestResponseLog)
|
|
class SecurityRequestResponseLogAdmin(LogAdmin):
|
|
date_hierarchy = "created"
|
|
list_display = (
|
|
"created",
|
|
"label",
|
|
"type",
|
|
"action",
|
|
"ref",
|
|
"request_username",
|
|
"request_full_path",
|
|
"request_method",
|
|
"response_status_code",
|
|
"request_client_ip",
|
|
"request_elapse_time",
|
|
"request_trace_id",
|
|
"session_key",
|
|
"user_agent_os",
|
|
"user_agent_browser",
|
|
)
|
|
list_filter = [
|
|
"label",
|
|
"type",
|
|
"action",
|
|
"request_full_path",
|
|
"request_method",
|
|
"response_status_code",
|
|
"user_agent_os",
|
|
"user_agent_browser",
|
|
]
|
|
search_fields = [
|
|
"request_username",
|
|
"request_full_path",
|
|
"request_client_ip",
|
|
"request_trace_id",
|
|
"additional_json_data",
|
|
]
|
|
|
|
def additional_json_data_pretty(self, instance):
|
|
return self.pretty_print_json(instance.additional_json_data)
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
return super().get_readonly_fields(request, obj) + [
|
|
"additional_json_data_pretty"
|
|
]
|
|
|
|
|
|
@admin.register(ExternalApiRequestLog)
|
|
class ExternalApiRequestLogAdmin(LogAdmin):
|
|
date_hierarchy = "created"
|
|
list_display = (
|
|
"created",
|
|
"api_request_verb",
|
|
"api_url",
|
|
"api_response_status_code",
|
|
"elapsed_time",
|
|
"request_trace_id",
|
|
"request_username",
|
|
)
|
|
search_fields = [
|
|
"request_username",
|
|
"request_trace_id",
|
|
"api_request_data",
|
|
"api_response_data",
|
|
"additional_json_data",
|
|
]
|
|
list_filter = [
|
|
"api_response_status_code",
|
|
"api_request_verb",
|
|
"api_url",
|
|
]
|
|
|
|
def api_request_data_pretty(self, instance):
|
|
return self.pretty_print_json(instance.api_request_data)
|
|
|
|
def api_response_data_pretty(self, instance):
|
|
return self.pretty_print_json(instance.api_response_data)
|
|
|
|
def additional_data_pretty(self, instance):
|
|
return self.pretty_print_json(instance.additional_data)
|
|
|
|
def get_readonly_fields(self, request, obj=None):
|
|
return super().get_readonly_fields(request, obj) + [
|
|
"api_request_data_pretty",
|
|
"api_response_data_pretty",
|
|
"additional_data_pretty",
|
|
]
|
|
|
|
|
|
@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 = (
|
|
"order_id",
|
|
"country_code",
|
|
"vbv_country_id",
|
|
"name_de",
|
|
"name_fr",
|
|
"name_it",
|
|
)
|