Sistema_Gestion_Transporte/project/api/views/linea.py

109 lines
3.6 KiB
Python
Raw Normal View History

from rest_framework import viewsets
2023-11-26 20:06:30 -03:00
# from rest_framework.response import Response
from rest_framework.decorators import action
from django_filters.rest_framework import DjangoFilterBackend
2023-11-26 20:06:30 -03:00
from django.db import connection
from .. import models, serializers
2023-11-26 20:06:30 -03:00
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']
2023-11-26 20:06:30 -03:00
2023-12-02 21:52:39 -03:00
@action(detail=False, methods=['get'])
def proto(self, request, pk=None):
id_paradero = request.GET['id_paradero']
2023-12-02 21:52:39 -03:00
query = "SELECT json_data \
from gtfs_posiciones_json \
where stop_id = %s"
2023-12-02 21:52:39 -03:00
with connection.cursor() as cursor:
cursor.execute(query, [ id_paradero ])
row = cursor.fetchone()
2023-11-26 20:06:30 -03:00
2023-12-02 21:52:39 -03:00
return JsonResponse(row[0], safe=False)
2023-12-02 21:52:39 -03:00
@action(detail=False, methods=['get'])
def paraderos(self, request, pk=None):
pk = request.GET['id_linea']
2023-12-02 21:52:39 -03:00
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)
2023-11-26 20:06:30 -03:00
2023-12-02 21:52:39 -03:00
@action(detail=False, methods=['get'])
def buses(self, request, pk=None):
pk = request.GET['id_linea']
2023-11-26 20:06:30 -03:00
2023-12-02 21:52:39 -03:00
query = "SELECT distinct \
l.route_color, \
l.route_text_color, \
gp.vehicle_license_plate as Patente_vehiculo, \
speed::numeric(5,2) as speed, \
gp.longitude::numeric, \
gp.latitude::numeric \
2023-12-02 21:52:39 -03:00
from gtfs_posiciones gp \
inner join linea l on (trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea \
where l.id_linea = %s"
2023-12-02 21:52:39 -03:00
2023-11-26 20:06:30 -03:00
with connection.cursor() as cursor:
2023-12-02 21:52:39 -03:00
cursor.execute(query, [ pk ])
rows = cursor.fetchall()
2023-11-26 20:06:30 -03:00
buses = []
for row in rows:
buses.append({
'route_color': row[0],
'route_text_color': row[1],
'Patente_vehiculo': row[2],
'speed': row[3],
'longitude': row[4],
'latitude': row[5],
})
return JsonResponse(buses, safe=False)
2023-11-26 20:06:30 -03:00
2023-12-02 21:52:39 -03:00
@action(detail=False, methods=['get'])
def buses_proto(self, request, pk=None):
pk = request.GET['id_linea']
2023-12-02 21:52:39 -03:00
detalle_buses = []
paraderos = models.Paradero.objects \
.filter(vigente=True, lineaparadero__id_linea=pk) \
.values('id_paradero') \
.all()
2023-12-02 21:52:39 -03:00
query = "SELECT json_data \
from gtfs_posiciones_json \
where stop_id = %s"
2023-12-02 21:52:39 -03:00
for p in paraderos:
params = [ p['id_paradero'] ]
with connection.cursor() as cursor:
cursor.execute(query, params)
row = cursor.fetchone()
2023-12-02 21:52:39 -03:00
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)
2023-12-02 21:52:39 -03:00
return JsonResponse(detalle_buses, safe=False)