from typing import Any from django.contrib import admin from .models import * from django.contrib.sessions.models import Session from django.contrib.auth.models import User from django.utils import timezone from datetime import timedelta from django.db.models import Q class SessionAdmin(admin.ModelAdmin): list_display=['get_username','session_key','session_data','expire_date'] readonly_fields = ['display_session_data', 'get_username'] def display_session_data(self,obj): session_data =obj.get_decoded() formatted_data = "\n".join([f"{key}: {value}" for key, value in session_data.items()]) return formatted_data display_session_data.shoort_description= "Session Data" def get_username(self,obj): session_data=obj.get_decoded() user_id=session_data.get('_auth_user_id') try: user=User.objects.get(id=user_id) return user.username except User.DoesNotExist: return "Usuario inexistente" get_username.short_description = 'Nombre Usuario' def delete_expired_sessions(self,request,queryset): now =timezone.now() one_day_ago = now- timedelta(days=1) expired_sessions = queryset.filter(expire_date__lte=one_day_ago) expired_sessions.delete() delete_expired_sessions.short_description = 'Eliminar Sessiones caducas' def get_queryset(self,request): now =timezone.now() one_day_ago = now- timedelta(days=1) current_session = request.session.session_key queryset = super().get_queryset(request)#.filter(expire_date__gte=one_day_ago) #queryset.exclude(session_key=current_session) return queryset class Device_A24_Admin(admin.ModelAdmin): list_display = ['clienteA24', 'dataBase','username','sistema','MAC','deviceName'] class ActiveTokenSession_Admin(admin.ModelAdmin): list_display = ['start_time', 'last_time', 'has_expired'] class SuspensionPermisoInline(admin.TabularInline): model = SuspensionPermiso extra = 1 # def get_formset(self, request, obj=None, **kwargs): # # Utiliza el objeto 'obj' (el módulo actual) para filtrar el queryset # formset = super().get_formset(request, obj, **kwargs) # if obj: # print('SDL',obj.modulo.permisos.all()) # formset.form.base_fields['permiso'].queryset = obj.modulo.permisos.all() # return formset class SuspensionModuloInline(admin.TabularInline): model = SuspensionModulo class Suspension_Modulos_Permisos_ClienteAdmin(admin.ModelAdmin): inlines = [SuspensionModuloInline,SuspensionPermisoInline] def save_model(self, request, obj, form, change): super().save_model(request, obj, form, change) for modulo in obj.suspensionmodulo_set.all(): #print(modulo, 'permisos',modulo.modulo.permisos.all()) for permiso in modulo.modulo.permisos.all(): #print('borrar?',permiso.delete) permObj,created=SuspensionPermiso.objects.get_or_create( supension_modPermP=obj, suspension_modulo=modulo.modulo, permiso=permiso, ) #print(permObj,created) if permiso.delete: print('borrar') class SuspensionPermisoInline2(admin.TabularInline): model = SuspensionPermiso class SuspensionPemisoAdmin(admin.ModelAdmin): inlines=[SuspensionPermisoInline2] admin.site.register(Modulo) admin.site.register(Permisos_A24) admin.site.register(SuspensionPermiso) admin.site.register(Suspension_Modulos_Permisos_Cliente, Suspension_Modulos_Permisos_ClienteAdmin) admin.site.register(Sistemas_por_cliente_A24) admin.site.register(ClientesA24) admin.site.register(DeviceA24, Device_A24_Admin) admin.site.register(ActiveTokenSession, ActiveTokenSession_Admin) admin.site.register(Session, SessionAdmin)