diff --git a/project/api/models.py b/project/api/models.py index e57995b..baa7c15 100755 --- a/project/api/models.py +++ b/project/api/models.py @@ -191,7 +191,7 @@ class Linea(models.Model): class LineaParadero(models.Model): id_linea_paradero = models.AutoField(primary_key=True) id_linea = models.ForeignKey(Linea, models.DO_NOTHING, db_column='id_linea') - id_paradero = models.ForeignKey('Paradero', models.DO_NOTHING, db_column='id_paradero') + id_paradero = models.ForeignKey('Paradero', models.DO_NOTHING, db_column='id_paradero', blank=True, null=True) class Meta: managed = False diff --git a/project/api/urls.py b/project/api/urls.py index 244b821..69f68aa 100755 --- a/project/api/urls.py +++ b/project/api/urls.py @@ -34,4 +34,6 @@ urlpatterns = [ path('mapas/paraderos/', mapa.paraderos, name='mapa-paraderos'), path('mapas/rutas/', mapa.rutas, name='mapa-rutas'), path('paraderos/info-public/', paradero.info_public, name='paradero-infopublic'), + path('lineas//paraderos', linea.paraderos_x_linea, name='paraderos-x-linea'), + path('lineas//buses', linea.buses_x_linea, name='buses-x-linea'), ] diff --git a/project/api/views/linea.py b/project/api/views/linea.py index 35af9c3..7469929 100755 --- a/project/api/views/linea.py +++ b/project/api/views/linea.py @@ -1,12 +1,51 @@ from rest_framework import viewsets -from rest_framework.response import Response +# from rest_framework.response import Response from rest_framework.decorators import action from django_filters.rest_framework import DjangoFilterBackend +from django.db import connection from .. import models, serializers +from django.http import JsonResponse class LineaViewSet(viewsets.ModelViewSet): queryset = models.Linea.objects.all() serializer_class = serializers.LineaSerializer filter_backends = [DjangoFilterBackend] filterset_fields = ['id_operador', 'route_short_name', 'route_long_name', 'vigente'] + +def paraderos_x_linea(request, pk): + paraderos = models.Paradero.objects \ + .filter(vigente=True, lineaparadero__id_linea=pk) \ + .values('id_paradero','stop_lat','stop_lon','stop_name') \ + .all() + return JsonResponse(list(paraderos), safe=False) + +def buses_x_linea(request, pk): + detalle_buses = [] + paraderos = models.Paradero.objects \ + .filter(vigente=True, lineaparadero__id_linea=pk) \ + .values('id_paradero') \ + .all() + + query = "SELECT json_data \ + from gtfs_posiciones_json \ + where stop_id = %s" + + for p in paraderos: + params = [ p['id_paradero'] ] + with connection.cursor() as cursor: + cursor.execute(query, params) + row = cursor.fetchone() + + if row != None: + buses = list(filter(lambda linea: linea['linea'] == pk, row[0])) + for bus in buses: + for llegada in bus['Llegadas']: + data_bus = { + 'patente': llegada['patente'], + 'estimada_gps': llegada['EstimadaGPS'], + 'distancia_gps': llegada['DistanciaGPS'], + } + detalle_buses.append(data_bus) + + return JsonResponse(detalle_buses, safe=False)