2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
from rest_framework import viewsets
|
|
|
|
# from rest_framework.response import Response
|
2023-12-05 13:52:03 -03:00
|
|
|
from rest_framework.decorators import action, api_view
|
2023-12-05 10:34:47 -03:00
|
|
|
from django_filters.rest_framework import DjangoFilterBackend
|
|
|
|
from django.db import connection
|
|
|
|
from .. import models, serializers
|
|
|
|
from django.http import JsonResponse
|
|
|
|
import logging
|
|
|
|
|
|
|
|
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']
|
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def proto(self, request, pk=None):
|
|
|
|
id_paradero = request.GET['id_paradero']
|
|
|
|
|
|
|
|
query = "SELECT json_data \
|
|
|
|
from gtfs_posiciones_json \
|
|
|
|
where stop_id = %s"
|
|
|
|
|
|
|
|
with connection.cursor() as cursor:
|
|
|
|
cursor.execute(query, [ id_paradero ])
|
|
|
|
row = cursor.fetchone()
|
|
|
|
|
|
|
|
return JsonResponse(row[0], safe=False)
|
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def paraderos(self, request, pk=None):
|
|
|
|
pk = request.GET['id_linea']
|
|
|
|
|
2023-12-05 13:52:03 -03:00
|
|
|
logging.error(request.GET)
|
|
|
|
|
2023-12-05 10:34:47 -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)
|
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def buses(self, request, pk=None):
|
|
|
|
pk = request.GET['id_linea']
|
|
|
|
|
|
|
|
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 \
|
|
|
|
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"
|
|
|
|
|
|
|
|
with connection.cursor() as cursor:
|
|
|
|
cursor.execute(query, [ pk ])
|
|
|
|
rows = cursor.fetchall()
|
|
|
|
|
|
|
|
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)
|
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def buses_proto(self, request, pk=None):
|
|
|
|
pk = request.GET['id_linea']
|
|
|
|
|
|
|
|
linea = models.Linea.objects \
|
|
|
|
.filter(id_linea=pk) \
|
|
|
|
.first()
|
|
|
|
|
|
|
|
logging.error(linea)
|
|
|
|
|
|
|
|
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:
|
|
|
|
id_paradero = p['id_paradero']
|
|
|
|
|
|
|
|
with connection.cursor() as cursor:
|
|
|
|
cursor.execute(query, [ id_paradero ])
|
|
|
|
datajson = cursor.fetchone()
|
|
|
|
|
|
|
|
if datajson != None:
|
|
|
|
buses = list(filter(lambda rowjson: rowjson['Descripcion'] == linea.route_short_name, datajson[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)
|
2023-12-09 21:14:04 -03:00
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def count(self, request, pk=None):
|
|
|
|
|
|
|
|
queryset = models.Linea.objects.all()
|
|
|
|
|
|
|
|
if 'vigente' in request.GET and request.GET['vigente'] == '1':
|
|
|
|
queryset = queryset.filter(vigente=True)
|
|
|
|
|
|
|
|
if 'vigente' in request.GET and request.GET['vigente'] == '0':
|
|
|
|
queryset = queryset.filter(vigente=False)
|
|
|
|
|
|
|
|
return JsonResponse({ 'count': queryset.count() })
|
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def count_buses(self, request, pk=None):
|
|
|
|
|
|
|
|
query = "SELECT \
|
|
|
|
l.route_short_name, \
|
|
|
|
(select count(distinct vehicle_license_plate) \
|
|
|
|
from gtfs_posiciones as gp \
|
|
|
|
where (trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea \
|
|
|
|
) as count \
|
|
|
|
from linea l \
|
|
|
|
where \
|
|
|
|
(select count(distinct vehicle_license_plate) from gtfs_posiciones as gp where \
|
|
|
|
(trim(gp.route_id)||'-'||trim(gp.direction_id::varchar)) = l.id_linea)>0"
|
|
|
|
|
|
|
|
with connection.cursor() as cursor:
|
|
|
|
cursor.execute(query)
|
|
|
|
result = cursor.fetchall()
|
|
|
|
|
|
|
|
data = []
|
|
|
|
for row in result:
|
|
|
|
data.append({
|
|
|
|
'route_short_name': row[0],
|
|
|
|
'count': row[1]
|
|
|
|
})
|
|
|
|
|
|
|
|
return JsonResponse(data, safe=False)
|
|
|
|
|
|
|
|
|
|
|
|
@action(detail=False, methods=['get'])
|
|
|
|
def count_buses_recorridos(self, request, pk=None):
|
|
|
|
query = "select count(distinct vehicle_license_plate) from gtfs_posiciones"
|
|
|
|
|
|
|
|
with connection.cursor() as cursor:
|
|
|
|
cursor.execute(query)
|
|
|
|
result = cursor.fetchone()
|
|
|
|
|
|
|
|
return JsonResponse({ 'count': result[0] })
|
|
|
|
|