forked from TDTP/admin_transporte_backend
se procesa archivo gtfs
parent
e2b5e7aadd
commit
90d4d9d223
|
@ -7,7 +7,15 @@ ALTER TABLE linea_paradero drop CONSTRAINT IF EXISTS linea_paradero_id_linea_fke
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from gtfs_calendar ;
|
ALTER TABLE gtfs_stop_times drop CONSTRAINT IF EXISTS fk_gtfs_sto_reference_gtfs_tri;
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
ALTER TABLE gtfs_frequencie drop CONSTRAINT IF EXISTS fk_gtfs_fre_reference_gtfs_tri;
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
DELETE FROM gtfs_calendar;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -46,24 +54,22 @@ delete from linea_paradero;
|
||||||
update linea
|
update linea
|
||||||
set vigente = false
|
set vigente = false
|
||||||
where id_red in (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
|
where id_red in (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
|
||||||
and id_linea not in (select trim(zr.route_id)||'-'||trim(zt.direction_id::varchar)
|
and id_linea not in (
|
||||||
from z_routes zr
|
select trim(zr.route_id)||'-'||trim(zt.direction_id::varchar)
|
||||||
inner join z_trips zt
|
from z_routes zr
|
||||||
on zr.route_id =zt.route_id
|
inner join z_trips zt on zr.route_id =zt.route_id
|
||||||
|
);
|
||||||
);
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
update linea
|
update linea
|
||||||
set vigente = true
|
set vigente = true
|
||||||
where id_red in (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
|
where id_red in (select id_red from gtfs_archivo where trim(upper(status))='PROCESANDO' )
|
||||||
and id_linea in (select trim(zr.route_id)||'-'||trim(zt.direction_id::varchar)
|
and id_linea in (
|
||||||
from z_routes zr
|
select trim(zr.route_id)||'-'||trim(zt.direction_id::varchar)
|
||||||
inner join z_trips zt
|
from z_routes zr
|
||||||
on zr.route_id =zt.route_id
|
inner join z_trips zt on zr.route_id =zt.route_id
|
||||||
|
);
|
||||||
);
|
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -128,7 +134,7 @@ order by 1;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from gtfs_shape;
|
truncate table gtfs_shape;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -139,15 +145,15 @@ from z_shapes zs;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from gtfs_stop_times;
|
truncate table gtfs_stop_times;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from gtfs_frequencie;
|
truncate table gtfs_frequencie;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
delete from gtfs_trips;
|
truncate table gtfs_trips;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -156,7 +162,7 @@ select
|
||||||
trip_id,
|
trip_id,
|
||||||
trim(route_id)||'-'||trim(direction_id::varchar) as route_id,
|
trim(route_id)||'-'||trim(direction_id::varchar) as route_id,
|
||||||
shape_id::numeric ,null as regreso, trip_headsign,trip_short_name,direction_id::numeric,service_id::varchar,block_id
|
shape_id::numeric ,null as regreso, trip_headsign,trip_short_name,direction_id::numeric,service_id::varchar,block_id
|
||||||
from z_trips zt ;
|
from z_trips zt;
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
|
@ -191,9 +197,13 @@ SET stop_name = REGEXP_REPLACE(
|
||||||
);
|
);
|
||||||
|
|
||||||
-----
|
-----
|
||||||
update paradero
|
update paradero
|
||||||
set id_comuna = (select id_comuna from comuna_georeferencia as c where ST_Contains(c.geom, ST_SetSRID(ST_MakePoint(paradero.stop_lon, paradero.stop_lat), 4326)) limit 1);
|
set id_comuna = (select id_comuna from comuna_georeferencia as c where ST_Contains(c.geom, ST_SetSRID(ST_MakePoint(paradero.stop_lon, paradero.stop_lat), 4326)) limit 1)
|
||||||
|
where id_comuna is not null;
|
||||||
|
-----
|
||||||
|
|
||||||
|
delete from rol_linea where id_linea not in (select id_linea from linea);
|
||||||
|
|
||||||
-----
|
-----
|
||||||
|
|
||||||
ALTER TABLE rol_linea ADD CONSTRAINT rol_linea_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);
|
ALTER TABLE rol_linea ADD CONSTRAINT rol_linea_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);
|
||||||
|
@ -202,4 +212,12 @@ ALTER TABLE rol_linea ADD CONSTRAINT rol_linea_id_linea_fkey FOREIGN KEY (id_lin
|
||||||
|
|
||||||
ALTER TABLE linea_paradero ADD CONSTRAINT linea_paradero_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);
|
ALTER TABLE linea_paradero ADD CONSTRAINT linea_paradero_id_linea_fkey FOREIGN KEY (id_linea) REFERENCES linea(id_linea);
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
ALTER TABLE gtfs_stop_times ADD CONSTRAINT fk_gtfs_sto_reference_gtfs_tri FOREIGN KEY (id_trip) REFERENCES gtfs_trips(id_trip) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||||
|
|
||||||
|
-----
|
||||||
|
|
||||||
|
ALTER TABLE gtfs_frequencie ADD CONSTRAINT fk_gtfs_fre_reference_gtfs_tri FOREIGN KEY (id_trip) REFERENCES gtfs_trips(id_trip) ON DELETE RESTRICT ON UPDATE RESTRICT;
|
||||||
|
|
||||||
-----
|
-----
|
|
@ -1,4 +1,5 @@
|
||||||
from django.core.management.base import BaseCommand
|
from django.core.management.base import BaseCommand
|
||||||
|
from django.utils import timezone
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from api.models import GtfsArchivo, RedTransporte
|
from api.models import GtfsArchivo, RedTransporte
|
||||||
from decouple import config
|
from decouple import config
|
||||||
|
@ -7,6 +8,7 @@ import csv
|
||||||
import zipfile
|
import zipfile
|
||||||
import tempfile
|
import tempfile
|
||||||
import threading
|
import threading
|
||||||
|
import datetime
|
||||||
|
|
||||||
class Command(BaseCommand):
|
class Command(BaseCommand):
|
||||||
help = 'Procesa los archivos gtfs en formato comprimido (zip)'
|
help = 'Procesa los archivos gtfs en formato comprimido (zip)'
|
||||||
|
@ -14,25 +16,31 @@ class Command(BaseCommand):
|
||||||
def handle(self, *args, **options):
|
def handle(self, *args, **options):
|
||||||
# Lógica de tu comando aquí
|
# Lógica de tu comando aquí
|
||||||
folder = config('GTFS_UPLOADS','/tmp')
|
folder = config('GTFS_UPLOADS','/tmp')
|
||||||
|
fecha_hoy = timezone.now().replace(hour=0, minute=0, second=0, microsecond=0)
|
||||||
|
|
||||||
redes = RedTransporte.objects.filter(vigente=True)
|
redes = RedTransporte.objects.filter(vigente=True)
|
||||||
for red in redes:
|
for red in redes:
|
||||||
print(f'nombre red: {red.nombre_red}')
|
self.stdout.write(self.style.SUCCESS(f'nombre red: {red.nombre_red}'))
|
||||||
|
|
||||||
gtfs_archivo = GtfsArchivo.objects \
|
gtfs_archivo = GtfsArchivo.objects \
|
||||||
.filter(vigente=False, id_red = red.id_red, status = 'PENDIENTE') \
|
.filter(vigente=False, id_red = red.id_red, status = 'PENDIENTE', created__gte = fecha_hoy) \
|
||||||
.order_by('-created').first()
|
.order_by('-created') \
|
||||||
|
.first()
|
||||||
|
|
||||||
if gtfs_archivo != None:
|
if gtfs_archivo != None:
|
||||||
|
gtfs_archivo.status = 'PROCESANDO'
|
||||||
|
gtfs_archivo.save()
|
||||||
|
|
||||||
filepath = os.path.join(folder, gtfs_archivo.ruta_archivo)
|
filepath = os.path.join(folder, gtfs_archivo.ruta_archivo)
|
||||||
print(f'procesa: {filepath}')
|
print(f'procesa: {filepath}')
|
||||||
procesa_zip(filepath)
|
procesa_zip(filepath)
|
||||||
|
|
||||||
registro_anterior = GtfsArchivo.objects.filter(vigente=True, id_red = red.id_red)
|
registro_anterior = GtfsArchivo.objects.filter(vigente=True, id_red = red.id_red)
|
||||||
registro_anterior.vigente = False
|
if registro_anterior:
|
||||||
registro_anterior.save()
|
registro_anterior.vigente = False
|
||||||
|
registro_anterior.save()
|
||||||
|
|
||||||
gtfs_archivo.status = 'PROCESADO'
|
gtfs_archivo.status = 'GTFS CARGADO'
|
||||||
gtfs_archivo.vigente = True
|
gtfs_archivo.vigente = True
|
||||||
gtfs_archivo.save()
|
gtfs_archivo.save()
|
||||||
|
|
||||||
|
|
|
@ -2,9 +2,10 @@
|
||||||
from rest_framework import viewsets
|
from rest_framework import viewsets
|
||||||
# from rest_framework.response import Response
|
# from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action, api_view
|
from rest_framework.decorators import action, api_view
|
||||||
|
from rest_framework.filters import OrderingFilter
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
from django.db import connection
|
from django.db import connection
|
||||||
from .. import models, serializers
|
from api import models, serializers
|
||||||
from django.http import JsonResponse, HttpResponse
|
from django.http import JsonResponse, HttpResponse
|
||||||
from django.forms.models import model_to_dict
|
from django.forms.models import model_to_dict
|
||||||
from os import getenv
|
from os import getenv
|
||||||
|
@ -16,8 +17,9 @@ import logging
|
||||||
class LineaViewSet(viewsets.ModelViewSet):
|
class LineaViewSet(viewsets.ModelViewSet):
|
||||||
queryset = models.Linea.objects.all()
|
queryset = models.Linea.objects.all()
|
||||||
serializer_class = serializers.LineaSerializer
|
serializer_class = serializers.LineaSerializer
|
||||||
filter_backends = [DjangoFilterBackend]
|
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', 'rollinea__id_rol']
|
||||||
|
ordering_fields = '__all__'
|
||||||
|
|
||||||
def list(self, request, pk=None, *args, **kwargs):
|
def list(self, request, pk=None, *args, **kwargs):
|
||||||
login = request.jwt_info['login']
|
login = request.jwt_info['login']
|
||||||
|
|
|
@ -3,14 +3,16 @@ from rest_framework import viewsets
|
||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.decorators import action
|
from rest_framework.decorators import action
|
||||||
from django_filters.rest_framework import DjangoFilterBackend
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from rest_framework.filters import OrderingFilter
|
||||||
from rest_framework import status
|
from rest_framework import status
|
||||||
from .. import models, serializers
|
from api import models, serializers
|
||||||
|
|
||||||
class OperadorViewSet(viewsets.ModelViewSet):
|
class OperadorViewSet(viewsets.ModelViewSet):
|
||||||
queryset = models.Operador.objects.all()
|
queryset = models.Operador.objects.all()
|
||||||
serializer_class = serializers.OperadorSerializer
|
serializer_class = serializers.OperadorSerializer
|
||||||
filter_backends = [DjangoFilterBackend]
|
filter_backends = [DjangoFilterBackend, OrderingFilter]
|
||||||
filterset_fields = ['id_region', 'nombre_operador', 'vigente']
|
filterset_fields = ['id_region', 'nombre_operador', 'vigente']
|
||||||
|
ordering_fields = '__all__'
|
||||||
|
|
||||||
def create(self, request, *args, **kwargs):
|
def create(self, request, *args, **kwargs):
|
||||||
# Comprueba si 'id_operador' está presente en la petición y no está vacío
|
# Comprueba si 'id_operador' está presente en la petición y no está vacío
|
||||||
|
|
Loading…
Reference in New Issue