ilab_gestion_backend/project/api/views/dispositivo.py

89 lines
2.8 KiB
Python
Raw Normal View History

2023-12-05 10:34:47 -03:00
from rest_framework import viewsets
from django.http import JsonResponse
from django.db.models import F
from django.db import connection
from django_filters.rest_framework import DjangoFilterBackend
from rest_framework.decorators import action
from .. import models, serializers
import json
import logging
class DispositivoViewSet(viewsets.ModelViewSet):
queryset = models.Dispositivo.objects.all()
serializer_class = serializers.DispositivoSerializer
filter_backends = [DjangoFilterBackend]
filterset_fields = ['id_paradero', 'id_tipo_dispositivo']
@action(detail=False, methods=['post'])
def whoami(self, request, pk=None):
input = json.loads(request.body)
whoami = input['whoami']
record = models.Paradero.objects \
.filter(dispositivo__id_dispositivo=whoami['idDispositivo']) \
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
.first()
if (record):
return JsonResponse({
"WhoamiResponse": {
"NroParadero": record.nro_paradero,
"NombreParadero": record.nombre_paradero,
"Status": "OK"
}
})
# retorna json de no existente
return JsonResponse({
"WhoamiResponse": {
"Status": "NOK",
"errorString": "Dispositivo no identificado"
}
})
@action(detail=False, methods=['post'])
def getInfoDevice(self, request, pk=None):
input = json.loads(request.body)
getInfoDevice = input['GetInfoDevice']
record = models.Paradero.objects \
.filter(dispositivo__id_dispositivo=getInfoDevice['idDispositivo']) \
.annotate(nro_paradero=F('id_paradero'), nombre_paradero=F('stop_name')) \
.first()
query = "SELECT json_data \
from gtfs_posiciones_json \
where stop_id = %s"
params = [ record.nro_paradero ]
with connection.cursor() as cursor:
cursor.execute(query, params)
row = cursor.fetchone()
connection.close()
detalle_lineas = []
for linea in row[0]:
# logging.error(linea['linea'])
data_linea = {
'Linea': linea['linea'],
'Descripcion': linea['Descripcion'],
'TipoLocomocion': linea['tipo_locomocion'],
'colorFondo': linea['colorFondo'],
'colorLetra': linea['colorLetra'],
'Llegadas': linea['Llegadas']
}
detalle_lineas.append(data_linea)
return JsonResponse({
"GetInfoDeviceResponse": {
"DetalleLineas": detalle_lineas,
"MensajeParadero": "No considerar, uso futuro"
}
})