2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
from rest_framework import viewsets
|
|
|
|
from rest_framework.response import Response
|
2024-02-04 17:22:21 -03:00
|
|
|
from rest_framework.filters import OrderingFilter
|
2024-02-25 14:17:40 -03:00
|
|
|
from rest_framework.status import HTTP_400_BAD_REQUEST
|
|
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
|
|
from django.db.models import Max
|
|
|
|
from django.db import transaction
|
2024-02-04 17:22:21 -03:00
|
|
|
from api import models, serializers
|
2024-02-07 14:57:37 -03:00
|
|
|
import logging
|
2024-03-24 02:04:11 -03:00
|
|
|
from decouple import config
|
2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
class OperadorViewSet(viewsets.ModelViewSet):
|
2024-02-07 14:57:37 -03:00
|
|
|
# queryset = models.Operador.objects.all()
|
2023-12-05 10:34:47 -03:00
|
|
|
serializer_class = serializers.OperadorSerializer
|
2024-02-04 17:22:21 -03:00
|
|
|
filter_backends = [DjangoFilterBackend, OrderingFilter]
|
2024-02-07 14:57:37 -03:00
|
|
|
filterset_fields = ['id_region', 'nombre_operador', 'vigente', 'id_operador', 'roloperador__id_rol']
|
2024-02-04 17:22:21 -03:00
|
|
|
ordering_fields = '__all__'
|
2024-01-29 20:18:11 -03:00
|
|
|
|
2024-02-07 14:57:37 -03:00
|
|
|
def get_queryset(self):
|
|
|
|
login = self.request.jwt_info['login']
|
|
|
|
usuario = models.Usuario.objects.filter(login=login).first()
|
|
|
|
|
|
|
|
if usuario.superuser:
|
|
|
|
return models.Operador.objects.all()
|
|
|
|
else:
|
|
|
|
return models.Operador.objects.filter(roloperador__id_rol=usuario.id_rol.id_rol)
|
|
|
|
|
|
|
|
|
2024-01-29 20:18:11 -03:00
|
|
|
def create(self, request, *args, **kwargs):
|
2024-02-25 14:17:40 -03:00
|
|
|
# Comprueba si 'id_operador' está presente en la petición y no está vacío
|
|
|
|
id_operador = request.data.get('id_operador')
|
|
|
|
if not id_operador:
|
|
|
|
# Si 'id_operador' no está presente o está vacío, retorna un error 400
|
|
|
|
return Response(
|
|
|
|
"No se puede crear el operador: 'id_operador' no proporcionado.",
|
|
|
|
status=HTTP_400_BAD_REQUEST
|
|
|
|
)
|
2024-03-06 15:33:06 -03:00
|
|
|
newRecord= False;
|
|
|
|
if not models.Operador.objects.filter(id_operador=id_operador).exists():
|
|
|
|
newRecord = True
|
|
|
|
|
2024-02-25 14:17:40 -03:00
|
|
|
try:
|
|
|
|
with transaction.atomic():
|
2024-03-06 15:33:06 -03:00
|
|
|
|
|
|
|
#Se Define Operador, pero no se graba
|
2024-02-25 14:17:40 -03:00
|
|
|
operador = models.Operador(
|
2024-03-06 15:33:06 -03:00
|
|
|
id_operador = id_operador,
|
|
|
|
nombre_operador = request.data.get('nombre_operador'),
|
|
|
|
vigente = request.data.get('vigente'),
|
|
|
|
)
|
2024-02-25 14:17:40 -03:00
|
|
|
|
2024-03-06 15:33:06 -03:00
|
|
|
if newRecord:
|
|
|
|
# se crea el rol para el operador
|
|
|
|
max_id = models.Rol.objects.aggregate(Max('id_rol'))['id_rol__max']
|
|
|
|
rol = models.Rol(
|
|
|
|
id_rol = max_id + 1,
|
|
|
|
nombre_rol = f'Rol {operador.nombre_operador}'
|
|
|
|
)
|
|
|
|
rol.save()
|
|
|
|
operador.id_rol = rol
|
|
|
|
|
|
|
|
#Grabamos Operador, ya que si corresponde se le asigno el id del nuevo Rol
|
|
|
|
operador.save()
|
|
|
|
|
2024-03-24 02:04:11 -03:00
|
|
|
|
2024-03-06 15:33:06 -03:00
|
|
|
if newRecord :
|
2024-03-24 02:04:11 -03:00
|
|
|
app_default_operador_str = config('APP_DEFAULT_OPERADOR')
|
|
|
|
app_default_operador = [int(x) for x in app_default_operador_str.split(',')]
|
|
|
|
|
|
|
|
for id_aplicacion in app_default_operador:
|
|
|
|
aplicacion = models.Aplicacion.objects.get(id_aplicacion=id_aplicacion)
|
|
|
|
rolApp = models.RolAplicacion(
|
|
|
|
id_rol=rol,
|
|
|
|
id_aplicacion=aplicacion
|
|
|
|
)
|
|
|
|
rolApp.save()
|
2024-02-25 14:17:40 -03:00
|
|
|
|
2024-03-06 15:33:06 -03:00
|
|
|
rol_operador = models.RolOperador(
|
|
|
|
id_rol = rol,
|
|
|
|
id_operador = operador
|
|
|
|
)
|
|
|
|
rol_operador.save()
|
2024-03-24 02:04:11 -03:00
|
|
|
newRecord =False
|
2024-02-25 14:17:40 -03:00
|
|
|
|
|
|
|
return Response({
|
|
|
|
'id_operador': operador.id_operador,
|
|
|
|
'nombre_operador': operador.nombre_operador,
|
|
|
|
'vigente': operador.vigente,
|
|
|
|
})
|
|
|
|
except Exception as ex:
|
|
|
|
transaction.rollback()
|
|
|
|
return Response(str(ex), status=HTTP_400_BAD_REQUEST)
|
|
|
|
|
|
|
|
|
|
|
|
def destroy(self, request, pk=None):
|
|
|
|
try:
|
|
|
|
with transaction.atomic():
|
|
|
|
models.RolOperador.objects.filter(id_operador=pk).delete()
|
|
|
|
return super().destroy(request, pk)
|
|
|
|
except Exception as ex:
|
|
|
|
return Response(str(ex), status=HTTP_400_BAD_REQUEST)
|