diff --git a/docs/rest/login.rest b/docs/rest/login.rest index e6cec3c..e41e31e 100644 --- a/docs/rest/login.rest +++ b/docs/rest/login.rest @@ -8,8 +8,8 @@ POST {{server}}/auth/ Content-Type: application/json { - "username": "usuario1", - "password": "usuario1" + "rut": "22222222-2", + "password": "usuario2" } ### @@ -41,5 +41,5 @@ Content-Type: application/json } ### -GET {{server}}/lineas/?offset=0&limit=10 +GET {{server}}/operadores/ Authorization: Bearer {{token}} \ No newline at end of file diff --git a/project/api/models.py b/project/api/models.py index c6e3af2..9437430 100755 --- a/project/api/models.py +++ b/project/api/models.py @@ -304,6 +304,15 @@ class RolAplicacion(models.Model): db_table = 'rol_aplicacion' unique_together = (('id_aplicacion', 'id_rol'),) +class RolOperador(models.Model): + id_rol_operador = models.AutoField(primary_key=True) + id_rol = models.ForeignKey(Rol, models.DO_NOTHING, db_column='id_rol') + id_operador = models.ForeignKey(Operador, models.DO_NOTHING, db_column='id_operador') + + class Meta: + managed = True + db_table = 'rol_operador' + unique_together = (('id_rol', 'id_operador'),) class SpatialRefSys(models.Model): srid = models.IntegerField(primary_key=True) @@ -395,16 +404,6 @@ class VehiculoLinea(models.Model): managed = False db_table = 'vehiculo_linea' unique_together = (('patente', 'id_linea'),) - -class RolLinea(models.Model): - id_rol_linea = models.AutoField(primary_key=True) - id_rol = models.ForeignKey(Rol, models.DO_NOTHING, db_column='id_rol') - id_linea = models.ForeignKey(Linea, models.DO_NOTHING, db_column='id_linea') - - class Meta: - managed = True - db_table = 'rol_linea' - unique_together = (('id_rol', 'id_linea'),) class RedTransporte(models.Model): id_red = models.CharField(primary_key=True, max_length=10) diff --git a/project/api/serializers.py b/project/api/serializers.py index 7286e0b..98c50fa 100755 --- a/project/api/serializers.py +++ b/project/api/serializers.py @@ -130,9 +130,9 @@ class RolAplicacionSerializer(serializers.ModelSerializer): model = models.RolAplicacion fields = '__all__' -class RolLineaSerializer(serializers.ModelSerializer): +class RolOperadorSerializer(serializers.ModelSerializer): class Meta: - model = models.RolLinea + model = models.RolOperador fields = '__all__' class LetreroLUR_Serializer(serializers.ModelSerializer): diff --git a/project/api/urls.py b/project/api/urls.py index 150eab3..39c8d16 100755 --- a/project/api/urls.py +++ b/project/api/urls.py @@ -5,7 +5,7 @@ from api.views import usuario, auth, aplicacion, tipo, persona, comuna, region, from api.views import mapa, linea, letrero_lur, operador,red_transporte,gtfs_archivo from api.views import paradero, paradero_imagen, linea_paradero from api.views import dispositivo -from api.views import rol_linea +from api.views import rol_operador from api.views import upload router = routers.DefaultRouter() @@ -25,12 +25,12 @@ router.register('paraderos-image', paradero_imagen.ParaderoImagenListView, basen router.register('lineas', linea.LineaViewSet) router.register('lineas-paradero', linea_paradero.LineaParaderoViewSet) router.register('letreros-lur', letrero_lur.LetreroLUR_ViewSet) -router.register('operadores', operador.OperadorViewSet) +router.register('operadores', operador.OperadorViewSet, basename='operadores') router.register('red-transporte', red_transporte.RedTransporteViewSet) router.register('gtfs-archivo', gtfs_archivo.GtfsArchivoViewSet) router.register('roles', rol.RolViewSet) router.register('rolyaplicacion', rolaplicacion.RolAplicacionViewSet, basename='rol_aplicacion') -router.register('roles-lineas', rol_linea.RolLineaViewSet, basename='rol_linea') +router.register('roles-operadores', rol_operador.RolOperadorViewSet, basename='rol_operador') urlpatterns = [ path('', include(router.urls)), diff --git a/project/api/views/linea.py b/project/api/views/linea.py index 682fa5b..cf397b2 100755 --- a/project/api/views/linea.py +++ b/project/api/views/linea.py @@ -18,20 +18,9 @@ class LineaViewSet(viewsets.ModelViewSet): queryset = models.Linea.objects.all() serializer_class = serializers.LineaSerializer filter_backends = [DjangoFilterBackend, OrderingFilter] - filterset_fields = ['id_operador', 'route_short_name', 'route_long_name', 'vigente', 'rollinea__id_rol'] + filterset_fields = ['id_operador', 'route_short_name', 'route_long_name', 'vigente'] ordering_fields = '__all__' - def list(self, request, pk=None, *args, **kwargs): - login = request.jwt_info['login'] - usuario = models.Usuario.objects.filter(login=login).first() - - if usuario.superuser != True: - self.request.GET.rollinea__id_rol = usuario.id_rol.id_rol - request.GET.rollinea__id_rol = usuario.id_rol.id_rol - # request.GET.setdefault('rollinea__id_rol',usuario.id_rol) - - return super().list(request, pk, *args, **kwargs) - @action(detail=False, methods=['get']) def proto(self, request, pk=None): id_paradero = request.GET['id_paradero'] diff --git a/project/api/views/operador.py b/project/api/views/operador.py index 4388cdb..c959ace 100755 --- a/project/api/views/operador.py +++ b/project/api/views/operador.py @@ -6,14 +6,25 @@ from django_filters.rest_framework import DjangoFilterBackend from rest_framework.filters import OrderingFilter from rest_framework import status from api import models, serializers +import logging class OperadorViewSet(viewsets.ModelViewSet): - queryset = models.Operador.objects.all() + # queryset = models.Operador.objects.all() serializer_class = serializers.OperadorSerializer filter_backends = [DjangoFilterBackend, OrderingFilter] - filterset_fields = ['id_region', 'nombre_operador', 'vigente'] + filterset_fields = ['id_region', 'nombre_operador', 'vigente', 'id_operador', 'roloperador__id_rol'] ordering_fields = '__all__' + 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) + + def create(self, request, *args, **kwargs): # Comprueba si 'id_operador' está presente en la petición y no está vacío id_operador = request.data.get('id_operador') diff --git a/project/api/views/rol_linea.py b/project/api/views/rol_linea.py deleted file mode 100644 index af87624..0000000 --- a/project/api/views/rol_linea.py +++ /dev/null @@ -1,14 +0,0 @@ -from rest_framework import viewsets -from .. import models, serializers -import logging - -class RolLineaViewSet(viewsets.ModelViewSet): - serializer_class = serializers.RolLineaSerializer - - def get_queryset(self): - id_rol = self.request.query_params.get('id_rol') # Obtener el valor del parámetro id_rol desde la solicitud - - if id_rol is not None: - return models.RolLinea.objects.filter(id_rol=id_rol) - - return models.RolLinea.objects.all() \ No newline at end of file diff --git a/project/api/views/rol_operador.py b/project/api/views/rol_operador.py new file mode 100644 index 0000000..51fd87d --- /dev/null +++ b/project/api/views/rol_operador.py @@ -0,0 +1,14 @@ +from rest_framework import viewsets +from api import models, serializers +import logging + +class RolOperadorViewSet(viewsets.ModelViewSet): + serializer_class = serializers.RolOperadorSerializer + + def get_queryset(self): + id_rol = self.request.query_params.get('id_rol') # Obtener el valor del parámetro id_rol desde la solicitud + + if id_rol is not None: + return models.RolOperador.objects.filter(id_rol=id_rol) + + return models.RolOperador.objects.all() \ No newline at end of file