Actualizaciones API/IMMEX
This commit is contained in:
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=
|
||||
Reference in New Issue
Block a user