Actualizaciones API/IMMEX
This commit is contained in:
@@ -74,7 +74,8 @@ class ActiveTokenSession(models.Model):
|
||||
has_expired = models.BooleanField(default=False)
|
||||
|
||||
def is_expired(self, expiration_minutes):
|
||||
expiration_time = self.start_time + timezone.timedelta(minutes=expiration_minutes)
|
||||
expiration_time = self.start_time + timezone.timedelta(minutes=expiration_minutes)
|
||||
|
||||
return expiration_time < timezone.now()
|
||||
|
||||
|
||||
|
||||
@@ -6,7 +6,7 @@ from django.utils import timezone
|
||||
class TokenCheckSession(BasePermission):
|
||||
message = 'NO'
|
||||
def has_permission(self,request, view):
|
||||
print('FROM TokenCheckSession : ')
|
||||
|
||||
sistema = request.META.get('HTTP_SISTEMA','')
|
||||
mac = request.META.get('HTTP_MAC','')
|
||||
RFC = request.META.get('HTTP_RFC','')
|
||||
@@ -15,6 +15,7 @@ class TokenCheckSession(BasePermission):
|
||||
permiso= request.META.get('HTTP_PERMISO','')
|
||||
|
||||
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
|
||||
|
||||
sistema_cliente = Sistemas_por_cliente_A24.objects.filter(id_sistema__nombre_sistema=sistema,cliente__RFC=RFC).first()
|
||||
if sistema_cliente is None:
|
||||
self.message +=f';El sistema:{sistema}, no se encuentra dado de alta para el RFC:{RFC}'
|
||||
@@ -29,30 +30,36 @@ class TokenCheckSession(BasePermission):
|
||||
if modulo.suspendido:
|
||||
self.message +=f';El modulo:{modulo} se encuentra suspendido para el RFC:{RFC}'
|
||||
return False
|
||||
if modulo.suspensionpermiso_set.filter(permiso__nombre=permiso).first() is None:
|
||||
self.message += f';El permiso:{permiso} en el modulo:{modulo} no esta dado de alta para el RFC:{RFC}'
|
||||
return False
|
||||
|
||||
if modulo.modulo.suspensionpermiso_set.filter(permiso__nombre=permiso).first() is None :
|
||||
self.message+=f";El Permiso:{permiso} no se encuentra en el modulo"
|
||||
return False
|
||||
|
||||
#Validacion para revisar los datos del device que envian con otro Token
|
||||
#en este caso revisa el nombre del sistemma. se pueden agregar mas filtros
|
||||
if active_session.token.devicea24_set.filter(sistema__nombre_sistema=sistema).first() is None:
|
||||
self.message+=";El Dispositivo no coicide con los datos enviados"
|
||||
return False
|
||||
inner_sistema = active_session.token.devicea24_set.first().sistema.nombre_sistema == sistema
|
||||
inner_mac = active_session.token.devicea24_set.first().MAC == mac
|
||||
|
||||
expiro = active_session.is_expired(1)
|
||||
#se cambia el tiempo en minutos para verificar si ya expiro
|
||||
#aumentar si se desea dar mas tiempo
|
||||
expiro = active_session.is_expired(50)
|
||||
|
||||
if not (inner_sistema and inner_mac):
|
||||
self.message+=";no se agregó código de máquina y/o sistema correctamente"
|
||||
if expiro:
|
||||
self.message+=";la session expiro"
|
||||
self.message+=";la session expiro;logeese nuevamente"
|
||||
|
||||
if active_session.token.devicea24_set.first() is None:
|
||||
self.message +=';Device not Found'
|
||||
return False
|
||||
#print(expiro , inner_sistema , inner_mac)
|
||||
|
||||
|
||||
if not (inner_sistema and inner_mac):
|
||||
self.message+=";no se agregó código de máquina y/o sistema correctamente"
|
||||
return False
|
||||
|
||||
#actualizas y salvas si la session expiro
|
||||
active_session.last_time=timezone.now()
|
||||
active_session.has_expired =True if expiro else False
|
||||
active_session.save()
|
||||
@@ -60,52 +67,75 @@ class TokenCheckSession(BasePermission):
|
||||
return False if expiro else True
|
||||
|
||||
|
||||
class ActiveTokenSessionPerm(BasePermission):
|
||||
class ActiveTokenSessionPerm(BasePermission):
|
||||
message = 'NO'
|
||||
def has_permission(self,request, view):
|
||||
authorization = request.META.get('HTTP_AUTHORIZATION','')
|
||||
sistema = request.META.get('HTTP_SISTEMA','')
|
||||
mac = request.META.get('HTTP_MAC','')
|
||||
if 'Token' in authorization:
|
||||
|
||||
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
|
||||
#print(active_session.is_expired(1))
|
||||
#verifica que este el DeviceA24 dado de alta
|
||||
if active_session.token.devicea24_set.first() is None:
|
||||
self.message +=';Device not Found'
|
||||
|
||||
#Solo se checa para el methodo GET para aplicaciones clarion para que no envie el body
|
||||
#
|
||||
if request.method=='GET':
|
||||
if not mac:
|
||||
self.message +=';No se proporciono MAC o codigo maquina en headers'
|
||||
return False
|
||||
if not sistema:
|
||||
self.message +=';No se proporciono sistema en headers'
|
||||
return False
|
||||
if 'Token' in authorization :
|
||||
|
||||
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
|
||||
|
||||
user=active_session.token.user #valida el usuario antes que todo para no crear sessiones innecesarias con superadmins
|
||||
if user.is_superuser or user.is_staff or user.groups.filter(name='admin').exists():
|
||||
return True
|
||||
#verifica que este el DeviceA24 dado de alta
|
||||
if active_session.token.devicea24_set.first() is None:
|
||||
self.message +=';Device not Found'
|
||||
return False
|
||||
|
||||
#print(active_session.token.devicea24_set.first().sistema.nombre_sistema)
|
||||
inner_mac = active_session.token.devicea24_set.first().MAC
|
||||
if mac != inner_mac:
|
||||
self.message +=f';El Codigo de maquina `{mac}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_mac}`'
|
||||
return False
|
||||
|
||||
|
||||
#print(active_session.token.devicea24_set.first().sistema.nombre_sistema)
|
||||
inner_mac = active_session.token.devicea24_set.first().MAC
|
||||
if mac != inner_mac:
|
||||
self.message +=f';El Codigo de maquina `{mac}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_mac}`'
|
||||
return False
|
||||
|
||||
|
||||
|
||||
inner_sistema= active_session.token.devicea24_set.first().sistema.nombre_sistema
|
||||
if sistema != inner_sistema:
|
||||
self.message +=f';El Sistema `{sistema}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_sistema}`'
|
||||
return False
|
||||
inner_sistema= active_session.token.devicea24_set.first().sistema.nombre_sistema
|
||||
if sistema != inner_sistema:
|
||||
self.message +=f';El Sistema `{sistema}` proporcionado para esta licencia no es igual al registrado para este equipo `{inner_sistema}`'
|
||||
return False
|
||||
|
||||
if created: #si el registro es recien creado la session es valida
|
||||
if created: #si el registro es recien creado la session es valida
|
||||
return True
|
||||
|
||||
#si la session esta expidara la renueva
|
||||
|
||||
if active_session.has_expired:#is_expired(50):
|
||||
active_session.start_time = timezone.now()
|
||||
active_session.last_time=timezone.now()
|
||||
active_session.has_expired =False
|
||||
active_session.save()
|
||||
|
||||
return True
|
||||
|
||||
#si la session esta expidara la renueva
|
||||
print('expirooo',active_session.is_expired(1))
|
||||
if active_session.is_expired(1):
|
||||
# if active_session.has_expired:
|
||||
# self.message += ';La Session ha expidado'
|
||||
# return False
|
||||
# else:
|
||||
# active_session.last_time=timezone.now()
|
||||
# active_session.save()
|
||||
# return True
|
||||
# si no encuentra el Header[Authorization] con Token no deja entrar
|
||||
#se espera que se envie el body con user y password
|
||||
else:
|
||||
active_session, created = ActiveTokenSession.objects.get_or_create(token=request.user.auth_token)
|
||||
if active_session.has_expired:#is_expired(50):
|
||||
active_session.start_time = timezone.now()
|
||||
active_session.last_time=timezone.now()
|
||||
active_session.has_expired =False
|
||||
active_session.save()
|
||||
|
||||
return True
|
||||
# if active_session.has_expired:
|
||||
# self.message += ';La Session ha expidado'
|
||||
# return False
|
||||
# else:
|
||||
# active_session.last_time=timezone.now()
|
||||
# active_session.save()
|
||||
# return True
|
||||
# si no encuentra el Header[Authorization] con Token no deja entrar
|
||||
|
||||
return False
|
||||
@@ -1,16 +1,22 @@
|
||||
from rest_framework import serializers
|
||||
from rest_framework.validators import ValidationError
|
||||
from django.contrib.auth import get_user_model
|
||||
from allauth.account.models import EmailAddress
|
||||
from django.contrib.auth.models import Permission
|
||||
from django.contrib.auth.models import Permission, User
|
||||
from Sistemas.models import Sistema
|
||||
from .models import ClientesA24, Sistemas_por_cliente_A24, DeviceA24,Modulo
|
||||
from .models import ClientesA24, Sistemas_por_cliente_A24, DeviceA24,Modulo, Permisos_A24
|
||||
|
||||
|
||||
class CustomPermissionSerializer(serializers.ModelSerializer):
|
||||
activo = serializers.BooleanField(read_only=True)
|
||||
# user_id = serializers.SerializerMethodField()
|
||||
class Meta:
|
||||
model = Permission
|
||||
fields = '__all__'
|
||||
def get_user_id(self, obj):
|
||||
# Obtenemos el ID del usuario asociado al permiso si existe
|
||||
user = User.objects.filter(user_permissions=obj).first()
|
||||
return user.id if user else None
|
||||
|
||||
class ModulosSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
@@ -18,6 +24,57 @@ class ModulosSerializer(serializers.ModelSerializer):
|
||||
fields = '__all__'
|
||||
depth =1
|
||||
|
||||
def create(self, validated_data):
|
||||
"""Se recive el json completo para poder tomar los permisos """
|
||||
try:
|
||||
permisos_data= self.context.get('request').data.get('permisos', [])
|
||||
modulo = super(ModulosSerializer,self).create(validated_data)
|
||||
|
||||
for permiso_id in permisos_data:
|
||||
permiso, created= Permisos_A24.objects.get_or_create(pk=permiso_id,\
|
||||
defaults={'nombre': f'{modulo.nombre}_{permiso_id}'})
|
||||
modulo.permisos.add(permiso)
|
||||
return modulo
|
||||
except Exception as e:
|
||||
raise ValidationError({'error':str(e)})
|
||||
|
||||
class Permisos_A24_Serializer(serializers.ModelSerializer):
|
||||
modulo = serializers.CharField(write_only=True, required=False)
|
||||
modulos = serializers.SerializerMethodField()
|
||||
class Meta:
|
||||
model = Permisos_A24
|
||||
fields = ['id','nombre',
|
||||
'modulo',
|
||||
'modulos']
|
||||
|
||||
def create(self,validated_data):
|
||||
""""""
|
||||
try:
|
||||
|
||||
modulo_nombre = validated_data.pop('modulo',None)
|
||||
permiso = super(Permisos_A24_Serializer, self).create(validated_data)
|
||||
if modulo_nombre:
|
||||
modulo, created = Modulo.objects.get_or_create(nombre=modulo_nombre, \
|
||||
defaults={'nombre':modulo_nombre})
|
||||
modulo.permisos.add(permiso)
|
||||
permiso.modulo = modulo.nombre
|
||||
return permiso
|
||||
except Exception as e:
|
||||
raise ValidationError({'error':str(e)})
|
||||
|
||||
def to_representation(self, instance):
|
||||
representation = super(Permisos_A24_Serializer, self).to_representation(instance)
|
||||
|
||||
# Agregar el atributo 'modulo' al JSON de respuesta si está presente
|
||||
if hasattr(instance, 'modulo') and instance.modulo:
|
||||
representation['modulo'] = instance.modulo
|
||||
|
||||
return representation
|
||||
|
||||
def get_modulos(self, obj):
|
||||
# Obtener la lista de nombres de los módulos a los que está asignado el permiso
|
||||
return list(obj.modulo_set.values_list('nombre', flat=True))
|
||||
|
||||
class Sistema_A24_PKRF(serializers.PrimaryKeyRelatedField):
|
||||
def to_internal_value(self,data):
|
||||
try:
|
||||
@@ -54,6 +111,11 @@ class ClientesA24Serailizer(serializers.ModelSerializer):
|
||||
class DeviceA24_admin_Serialiazer(serializers.ModelSerializer):
|
||||
clienteA24 = serializers.SerializerMethodField()
|
||||
sistema = serializers.SerializerMethodField()
|
||||
deviceName = serializers.CharField(required=True)
|
||||
deviceOS= serializers.CharField(required=False)
|
||||
deviceIP = serializers.CharField(required=False)
|
||||
username = serializers.CharField(required=False)
|
||||
dataBase = serializers.CharField(required=True)
|
||||
|
||||
class Meta:
|
||||
model = DeviceA24
|
||||
@@ -63,6 +125,7 @@ class DeviceA24_admin_Serialiazer(serializers.ModelSerializer):
|
||||
return obj.clienteA24.RFC if obj.clienteA24.RFC else ""
|
||||
def get_sistema(self,obj):
|
||||
return obj.sistema.nombre_sistema if obj.sistema.nombre_sistema else ""
|
||||
|
||||
|
||||
|
||||
class SerialiazerA24(serializers.ModelSerializer):
|
||||
|
||||
@@ -6,6 +6,7 @@ from rest_framework import routers
|
||||
router = routers.DefaultRouter()
|
||||
router.register(r'permisos', views.PermissionListCreateAPIView)
|
||||
router.register(r'modulos',views.ModulosListCreateAPIView)
|
||||
router.register(r'permisosA24',views.Permisos_A24_ModelViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
path('', views.Sistemas_xCliente_IMMEX_ListView.as_view(), name='sistemasXcli_IMMEX'),
|
||||
|
||||
267
IMMEX/views.py
267
IMMEX/views.py
@@ -6,7 +6,7 @@ from django.core.mail import send_mail
|
||||
from django.views.generic.edit import CreateView
|
||||
from django.views.generic.list import ListView
|
||||
from django.contrib import messages
|
||||
from django.db.models import Case, When, Value, BooleanField
|
||||
from django.db.models import Case, When, Value, BooleanField,Q
|
||||
|
||||
from django.contrib.auth.models import Permission, User
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
@@ -34,14 +34,14 @@ from allauth.account.forms import SignupForm
|
||||
|
||||
# Imports de tus modelos y serializadores
|
||||
from .permissions import ActiveTokenSessionPerm, TokenCheckSession
|
||||
from .models import Sistemas_por_cliente_A24, ClientesA24, DeviceA24, ActiveTokenSession, Modulo
|
||||
from .models import Sistemas_por_cliente_A24, ClientesA24, DeviceA24, ActiveTokenSession, Modulo, Permisos_A24
|
||||
from Sistemas.models import Sistema, BitacoraErrores
|
||||
from Sistemas.permissions import ItsAdminToken, HasAuthorizationHeader, CheckPermiso
|
||||
from .forms import ClienteForm_IMMEX
|
||||
from .serializers import (ClientesA24Serailizer, SerialiazerA24, SignupSerializer,
|
||||
Sistema_Serializer, Sistema_Por_Cliente_Serializer,
|
||||
DeviceA24_admin_Serialiazer, CustomPermissionSerializer,
|
||||
ModulosSerializer
|
||||
ModulosSerializer, Permisos_A24_Serializer
|
||||
)
|
||||
|
||||
|
||||
@@ -109,7 +109,7 @@ class ChecarPermisos(APIView):
|
||||
permission_classes = [IsAuthenticated, HasAuthorizationHeader, TokenCheckSession]
|
||||
def get(self,request):
|
||||
if 'Response-Type' not in request.headers:
|
||||
Response({"ACCESO":"OK"})
|
||||
return Response({"ACCESO":"OK"})
|
||||
else:
|
||||
ct= request.headers['Response-Type']
|
||||
response = Response("ACCESS:OK", content_type=ct)
|
||||
@@ -158,6 +158,7 @@ class LoginIMMEX(APIView):
|
||||
|
||||
|
||||
class RegistroUsuarios(APIView):
|
||||
"""Este API point se usa para los registos de utileriaas"""
|
||||
authentication_classes = (BasicAuthentication, TokenAuthentication, )
|
||||
permission_classes=[IsAuthenticated,ItsAdminToken]
|
||||
|
||||
@@ -314,7 +315,13 @@ class Sistemas_IMMEX_List_APIView(APIView):
|
||||
permission_classes=[IsAuthenticated]
|
||||
|
||||
def get(self, request):
|
||||
sistemas = Sistema.objects.all()
|
||||
nombre_sistema = request.query_params.get('nombre_sistema',None)
|
||||
if nombre_sistema:
|
||||
sistemas = Sistema.objects.filter(nombre_sistema=nombre_sistema)
|
||||
else:
|
||||
sistemas = Sistema.objects.all()
|
||||
|
||||
|
||||
serializer = Sistema_Serializer(sistemas,many=True)
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
@@ -347,8 +354,7 @@ class Sistema_por_cliente_APIView(APIView):
|
||||
del item['id_sistema']
|
||||
del item['cliente']
|
||||
return Response(serializer.data, status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
|
||||
def post(self, request):
|
||||
try:
|
||||
context = {
|
||||
@@ -370,9 +376,9 @@ class Sistema_por_cliente_APIView(APIView):
|
||||
view='IMMEX.Sistema_por_cliente_APIView')
|
||||
return Response({'Error':f'{ex}','isError':True}, status=status.HTTP_200_OK)
|
||||
|
||||
#CRUD Clientes IMMEX
|
||||
#CRUD Clientes IMMEX (APP de WINDEV 27)
|
||||
class MyPage(PageNumberPagination):
|
||||
page_size =1
|
||||
page_size =100
|
||||
page_size_query_param = 'page_size'
|
||||
max_page_size = 1
|
||||
|
||||
@@ -380,8 +386,6 @@ class MyPage(PageNumberPagination):
|
||||
class ClientesA24List(generics.ListCreateAPIView):
|
||||
authentication_classes = (BasicAuthentication, TokenAuthentication, )
|
||||
permission_classes=[ItsAdminToken]
|
||||
|
||||
|
||||
|
||||
queryset = ClientesA24.objects.all()
|
||||
serializer_class = ClientesA24Serailizer
|
||||
@@ -419,29 +423,55 @@ class ClientesA24Detail(APIView):
|
||||
|
||||
# Obtener un cliente por ID (GET)
|
||||
def get(self, request, pk):
|
||||
print(request.headers)
|
||||
cliente = self.get_object(pk)
|
||||
serializer = ClientesA24Serailizer(cliente)
|
||||
return Response(serializer.data)
|
||||
try:
|
||||
cliente = self.get_object(pk)
|
||||
serializer = ClientesA24Serailizer(cliente)
|
||||
return Response(serializer.data)
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.ClientesA24Detail.get')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
# Actualizar un cliente por ID (PUT)
|
||||
def put(self, request, pk):
|
||||
cliente = self.get_object(pk)
|
||||
print(cliente)
|
||||
serializer = ClientesA24Serailizer(cliente, data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data,status=status.HTTP_200_OK)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
try:
|
||||
cliente = self.get_object(pk)
|
||||
|
||||
serializer = ClientesA24Serailizer(cliente, data=request.data)
|
||||
if serializer.is_valid():
|
||||
serializer.save()
|
||||
return Response(serializer.data,status=status.HTTP_200_OK)
|
||||
return Response(serializer.errors, status=status.HTTP_400_BAD_REQUEST)
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.ClientesA24Detail.put')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
# Eliminar un cliente por ID (DELETE)
|
||||
def delete(self, request, pk):
|
||||
cliente = self.get_object(pk)
|
||||
cliente.delete()
|
||||
return Response({"pk":pk},status=status.HTTP_200_OK)
|
||||
|
||||
try:
|
||||
cliente = self.get_object(pk)
|
||||
cliente.delete()
|
||||
return Response({"pk":pk},status=status.HTTP_200_OK)
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.ClientesA24Detail.delete')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
#-----ADMIN AREA
|
||||
class DeviceA24List(generics.ListCreateAPIView):
|
||||
class DeviceA24List(generics.ListAPIView):
|
||||
#queryset = DeviceA24.objects.all()
|
||||
serializer_class = DeviceA24_admin_Serialiazer
|
||||
pagination_class = MyPage
|
||||
@@ -449,22 +479,29 @@ class DeviceA24List(generics.ListCreateAPIView):
|
||||
authentication_classes = (BasicAuthentication, TokenAuthentication, )
|
||||
permission_classes=[ ItsAdminToken]
|
||||
def get_queryset(self):
|
||||
queryset = DeviceA24.objects.all()
|
||||
# Filtrar por clienteA24 si se proporciona como parámetro de consulta
|
||||
clienteA24 = self.request.query_params.get('clienteA24')
|
||||
|
||||
try:
|
||||
queryset = DeviceA24.objects.all()
|
||||
# Filtrar por clienteA24 si se proporciona como parámetro de consulta
|
||||
clienteA24 = self.request.query_params.get('clienteA24')
|
||||
|
||||
if clienteA24:
|
||||
queryset = queryset.filter(clienteA24__RFC__icontains=clienteA24)
|
||||
|
||||
# # Aplicar ordenación si se proporciona como parámetro de consulta
|
||||
# ordering = self.request.query_params.get('ordering')
|
||||
|
||||
# if ordering:
|
||||
# queryset = queryset.order_by(ordering)
|
||||
|
||||
if clienteA24:
|
||||
queryset = queryset.filter(clienteA24__RFC__icontains=clienteA24)
|
||||
return queryset
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.DeviceA24List')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
# # Aplicar ordenación si se proporciona como parámetro de consulta
|
||||
# ordering = self.request.query_params.get('ordering')
|
||||
|
||||
# if ordering:
|
||||
# queryset = queryset.order_by(ordering)
|
||||
|
||||
return queryset
|
||||
|
||||
class DeviceA24Detail(generics.RetrieveUpdateDestroyAPIView):
|
||||
queryset = DeviceA24.objects.all()
|
||||
@@ -474,67 +511,107 @@ class DeviceA24Detail(generics.RetrieveUpdateDestroyAPIView):
|
||||
|
||||
# Método para recuperar un registro
|
||||
def retrieve(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
serializer = self.get_serializer(instance)
|
||||
return Response(serializer.data)
|
||||
try:
|
||||
instance = self.get_object()
|
||||
serializer = self.get_serializer(instance)
|
||||
return Response(serializer.data)
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.DeviceA24Detail.retrieve')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
|
||||
# Método para actualizar un registro
|
||||
def update(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
serializer = self.get_serializer(instance, data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
try:
|
||||
instance = self.get_object()
|
||||
data=request.data
|
||||
#si se desea agregar o quitar campos excluded se tiene que cambiar el required=False de su campo serializer
|
||||
excluded_fields = ['id','clienteA24','sistema','username','timestamp','token']
|
||||
for field in excluded_fields:
|
||||
if field in data:
|
||||
data.pop(field)
|
||||
|
||||
serializer = self.get_serializer(instance, data=data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
return Response(serializer.data)
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.DeviceA24Detail.update')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
|
||||
# Método para eliminar un registro
|
||||
def destroy(self, request, *args, **kwargs):
|
||||
instance = self.get_object()
|
||||
instance.delete()
|
||||
return Response(status=204)
|
||||
#solo se elimina la instancia de deviceA24.
|
||||
# #se puede agregar un query parameter para eliminar todo el User (pendiente)
|
||||
try:
|
||||
instance = self.get_object()
|
||||
instance.delete()
|
||||
return Response(status=204)
|
||||
except Exception as ex:
|
||||
error_message ={'Error':str(ex), 'isError':True}
|
||||
data_json = json.dumps(error_message)
|
||||
BitacoraErrores.objects.create(level=2, message=ex,\
|
||||
traceback=traceback.format_exc(),\
|
||||
view='IMMEX.DeviceA24Detail.destroy')
|
||||
return Response(data_json,status=status.HTTP_200_OK)
|
||||
|
||||
# Método para listar registros (opcional, dependiendo de tus necesidades)
|
||||
def list(self, request, *args, **kwargs):
|
||||
queryset = self.get_queryset()
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
class PermissionListCreateAPIView(viewsets.ModelViewSet):
|
||||
queryset = Permission.objects.all()
|
||||
# Asegúrate de tener un serializer adecuado
|
||||
serializer_class = CustomPermissionSerializer
|
||||
|
||||
|
||||
authentication_classes = (BasicAuthentication, TokenAuthentication, )
|
||||
permission_classes=[ ItsAdminToken]
|
||||
|
||||
|
||||
def get_queryset(self):
|
||||
app_label = self.request.query_params.get('app_label')
|
||||
user_id = self.request.query_params.get('user_id')
|
||||
|
||||
|
||||
queryset = Permission.objects.all()
|
||||
|
||||
print('TODOS',queryset.count())
|
||||
if app_label:
|
||||
content_types = ContentType.objects.filter(app_label=app_label)
|
||||
queryset = queryset.filter(content_type__in=content_types)
|
||||
|
||||
print('app',queryset.count())
|
||||
if user_id:
|
||||
param_user = User.objects.get(id=user_id)
|
||||
|
||||
# Anotamos los permisos con True si el usuario los tiene, False en caso contrario
|
||||
queryset = queryset.annotate(
|
||||
activo=Case(
|
||||
When(user=param_user, then=Value(True)),
|
||||
default=Value(False),
|
||||
output_field=BooleanField()
|
||||
)
|
||||
)
|
||||
|
||||
# queryset = queryset.annotate(
|
||||
# activo=Case(
|
||||
# When(user=param_user, then=Value(True)),
|
||||
# default=Value(False),
|
||||
# output_field=BooleanField()
|
||||
# )
|
||||
# )
|
||||
user_permissions = param_user.user_permissions.all()
|
||||
queryset = queryset.filter(Q(pk__in=user_permissions))
|
||||
print('user',queryset.count())
|
||||
return queryset
|
||||
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
|
||||
# Obtén la lista de permisos
|
||||
|
||||
def list(self, request, *args, **kwargs):
|
||||
"""Obtén la lista de permisos"""
|
||||
queryset = self.get_queryset()
|
||||
if not self.request.query_params.get('user_id'):
|
||||
data={"error":"favor de proporcionar el 'user_id' en los query params, en este caso solo para el GET"}
|
||||
return Response(data,status=status.HTTP_200_OK)
|
||||
serializer = self.get_serializer(queryset, many=True)
|
||||
|
||||
# Agrega datos personalizados a la respuesta
|
||||
@@ -547,7 +624,9 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
|
||||
return Response(data, status=status.HTTP_200_OK)
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
# Obtén el ID del usuario del JSON de la solicitud
|
||||
""" Obtén el ID del usuario del JSON de la solicitud GET
|
||||
en esste metodo se tiene que agregar el user_id required
|
||||
"""
|
||||
user_id = request.data.get('user_id')
|
||||
|
||||
try:
|
||||
@@ -556,7 +635,7 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
|
||||
|
||||
# Obtén la lista de permisos del JSON de la solicitud
|
||||
permissions_data = request.data.get('permissions', [])
|
||||
|
||||
print('permissions_data',permissions_data)
|
||||
for perm_data in permissions_data:
|
||||
# Recupera el ID del permiso de cada objeto en la lista
|
||||
permission_id = perm_data.get('id')
|
||||
@@ -575,10 +654,54 @@ class PermissionListCreateAPIView(viewsets.ModelViewSet):
|
||||
return Response({"error": "El usuario no existe"}, status=status.HTTP_400_BAD_REQUEST)
|
||||
|
||||
class ModulosListCreateAPIView(viewsets.ModelViewSet):
|
||||
""""""
|
||||
queryset = Modulo.objects.all()
|
||||
pagination_class = MyPage
|
||||
serializer_class = ModulosSerializer
|
||||
|
||||
authentication_classes = (BasicAuthentication, TokenAuthentication, )
|
||||
permission_classes=[ ItsAdminToken]
|
||||
|
||||
def get_queryset(self):
|
||||
""""""
|
||||
queryset = Modulo.objects.all()
|
||||
return queryset
|
||||
return queryset
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
"""se define el create para poder enviar el request.data
|
||||
ya que de forma default en la clase viewset no se envia el request.data"""
|
||||
serializer = self.get_serializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_create(serializer)
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data, status=status.HTTP_201_CREATED, headers=headers)
|
||||
|
||||
class Permisos_A24_ModelViewSet(viewsets.ModelViewSet):
|
||||
""""""
|
||||
queryset = Permisos_A24.objects.all()
|
||||
pagination_class = MyPage
|
||||
serializer_class = Permisos_A24_Serializer
|
||||
|
||||
authentication_classes = (BasicAuthentication, TokenAuthentication, )
|
||||
permission_classes=[ ItsAdminToken]
|
||||
|
||||
def get_queryset(self):
|
||||
""""""
|
||||
permiso = self.request.query_params.get('permiso')
|
||||
queryset = super(Permisos_A24_ModelViewSet, self).get_queryset()
|
||||
if permiso:
|
||||
queryset = queryset.filter(nombre=permiso)
|
||||
return queryset
|
||||
|
||||
def create(self, request, *args, **kwargs):
|
||||
"""se agrego explicitamente el create para poder manejar el serializador
|
||||
si es que se necesita enviar el modulo y asginar lo """
|
||||
serializer = self.get_serializer(data=request.data.get('permisos', []), many=True)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
self.perform_create(serializer)
|
||||
headers = self.get_success_headers(serializer.data)
|
||||
return Response(serializer.data,status=status.HTTP_201_CREATED, headers=headers)
|
||||
|
||||
|
||||
# def update(self,request,*args,**kwargs):
|
||||
# pk=
|
||||
@@ -10,7 +10,7 @@ from .forms import SuspensionModulosPermisosClienteForm, SuspensionPermisoFormSe
|
||||
import time
|
||||
|
||||
class SuspensionPermisosClienteListView(LoginRequiredMixin,UserPassesTestMixin, ListView):
|
||||
model= Suspension_Modulos_Permisos_Cliente
|
||||
model= Suspension_Modulos_Permisos_Cliente
|
||||
|
||||
template_name='IMMEX/modulos/modulos_clientes.html'
|
||||
def test_func(self):
|
||||
|
||||
Reference in New Issue
Block a user