From df7a02a1c7c1c6d6bdbe61ebba465c2b05bf7d6e Mon Sep 17 00:00:00 2001 From: Francisco Sandoval Date: Tue, 15 Aug 2023 22:22:38 -0400 Subject: [PATCH] avance con rutas de servicios en lineas --- project/api/__init__.py | 0 project/api/admin.py | 20 ++--- project/api/apps.py | 0 project/api/exceptions.py | 0 project/api/middlewares.py | 0 project/api/migrations/0001_initial.py | 101 ------------------------- project/api/migrations/__init__.py | 0 project/api/models.py | 68 ++++++++++------- project/api/schemas.py | 0 project/api/serializers.py | 5 ++ project/api/tests.py | 0 project/api/urls.py | 4 +- project/api/validaciones.py | 0 project/api/views/__init__.py | 0 project/api/views/aplicacion.py | 0 project/api/views/auth.py | 0 project/api/views/comuna.py | 0 project/api/views/linea.py | 17 +++++ project/api/views/mapa.py | 24 +++++- project/api/views/paradero.py | 0 project/api/views/persona.py | 0 project/api/views/region.py | 0 project/api/views/tipo.py | 0 project/api/views/usuario.py | 0 24 files changed, 97 insertions(+), 142 deletions(-) mode change 100644 => 100755 project/api/__init__.py mode change 100644 => 100755 project/api/admin.py mode change 100644 => 100755 project/api/apps.py mode change 100644 => 100755 project/api/exceptions.py mode change 100644 => 100755 project/api/middlewares.py delete mode 100644 project/api/migrations/0001_initial.py delete mode 100644 project/api/migrations/__init__.py mode change 100644 => 100755 project/api/models.py mode change 100644 => 100755 project/api/schemas.py mode change 100644 => 100755 project/api/serializers.py mode change 100644 => 100755 project/api/tests.py mode change 100644 => 100755 project/api/urls.py mode change 100644 => 100755 project/api/validaciones.py mode change 100644 => 100755 project/api/views/__init__.py mode change 100644 => 100755 project/api/views/aplicacion.py mode change 100644 => 100755 project/api/views/auth.py mode change 100644 => 100755 project/api/views/comuna.py create mode 100755 project/api/views/linea.py mode change 100644 => 100755 project/api/views/mapa.py mode change 100644 => 100755 project/api/views/paradero.py mode change 100644 => 100755 project/api/views/persona.py mode change 100644 => 100755 project/api/views/region.py mode change 100644 => 100755 project/api/views/tipo.py mode change 100644 => 100755 project/api/views/usuario.py diff --git a/project/api/__init__.py b/project/api/__init__.py old mode 100644 new mode 100755 diff --git a/project/api/admin.py b/project/api/admin.py old mode 100644 new mode 100755 index 9700d06..1e11e95 --- a/project/api/admin.py +++ b/project/api/admin.py @@ -1,13 +1,13 @@ from django.contrib import admin -from .models import Usuario, Rol, UsuarioRol -from .models import Aplicacion, RolAplicacion -from .models import Persona, TipoTratamientoPersona +# from .models import Usuario, Rol, UsuarioRol +# from .models import Aplicacion, RolAplicacion +# from .models import Persona, TipoTratamientoPersona # Register your models here. -admin.site.register(Usuario) -admin.site.register(UsuarioRol) -admin.site.register(Persona) -admin.site.register(TipoTratamientoPersona) -admin.site.register(Rol) -admin.site.register(RolAplicacion) -admin.site.register(Aplicacion) \ No newline at end of file +# admin.site.register(Usuario) +# admin.site.register(UsuarioRol) +# admin.site.register(Persona) +# admin.site.register(TipoTratamientoPersona) +# admin.site.register(Rol) +# admin.site.register(RolAplicacion) +# admin.site.register(Aplicacion) \ No newline at end of file diff --git a/project/api/apps.py b/project/api/apps.py old mode 100644 new mode 100755 diff --git a/project/api/exceptions.py b/project/api/exceptions.py old mode 100644 new mode 100755 diff --git a/project/api/middlewares.py b/project/api/middlewares.py old mode 100644 new mode 100755 diff --git a/project/api/migrations/0001_initial.py b/project/api/migrations/0001_initial.py deleted file mode 100644 index 0048a72..0000000 --- a/project/api/migrations/0001_initial.py +++ /dev/null @@ -1,101 +0,0 @@ -# Generated by Django 4.2.2 on 2023-06-24 17:03 - -from django.db import migrations, models -import django.db.models.deletion - - -class Migration(migrations.Migration): - - initial = True - - dependencies = [ - ] - - operations = [ - migrations.CreateModel( - name='Aplicaciones', - fields=[ - ('id_aplicacion', models.IntegerField(primary_key=True, serialize=False)), - ('app', models.CharField(blank=True, max_length=100, null=True)), - ('vigente', models.BooleanField(blank=True, null=True)), - ], - options={ - 'db_table': 'aplicaciones', - 'managed': False, - }, - ), - migrations.CreateModel( - name='Persona', - fields=[ - ('rut', models.DecimalField(decimal_places=0, max_digits=12, primary_key=True, serialize=False)), - ('dv', models.CharField(blank=True, max_length=1, null=True)), - ('nombres', models.CharField(blank=True, max_length=100, null=True)), - ('apellido_a', models.CharField(blank=True, max_length=100, null=True)), - ('apellido_b', models.CharField(blank=True, max_length=100, null=True)), - ('fono', models.CharField(blank=True, max_length=100, null=True)), - ('email', models.CharField(blank=True, max_length=100, null=True)), - ('fecha_nacimiento', models.DateField(blank=True, null=True)), - ], - options={ - 'db_table': 'persona', - 'managed': False, - }, - ), - migrations.CreateModel( - name='Rol', - fields=[ - ('id_rol', models.IntegerField(primary_key=True, serialize=False)), - ('nombre_rol', models.CharField(max_length=100)), - ], - options={ - 'db_table': 'rol', - 'managed': False, - }, - ), - migrations.CreateModel( - name='TipoTratamientoPersona', - fields=[ - ('id_tipo_tratamiento', models.IntegerField(primary_key=True, serialize=False)), - ('tratamiento', models.CharField(blank=True, max_length=50, null=True)), - ], - options={ - 'db_table': 'tipo_tratamiento_persona', - 'db_table_comment': 'Establece el tratamiento de como dirigirse hacia una persona:\r\nEjemplo\r\nSe�or\r\nSe�ora\r\nSrta', - 'managed': False, - }, - ), - migrations.CreateModel( - name='Usuario', - fields=[ - ('login', models.CharField(max_length=20, primary_key=True, serialize=False)), - ('clave', models.CharField(blank=True, max_length=20, null=True)), - ('vigente', models.BooleanField(blank=True, null=True)), - ], - options={ - 'db_table': 'usuario', - 'managed': False, - }, - ), - migrations.CreateModel( - name='UsuarioRol', - fields=[ - ('id', models.BigAutoField(auto_created=True, primary_key=True, serialize=False, verbose_name='ID')), - ('vigente', models.BooleanField(blank=True, null=True)), - ], - options={ - 'db_table': 'usuario_rol', - 'managed': False, - }, - ), - migrations.CreateModel( - name='RolAplicacion', - fields=[ - ('id_aplicacion', models.OneToOneField(db_column='id_aplicacion', on_delete=django.db.models.deletion.DO_NOTHING, primary_key=True, serialize=False, to='api.aplicaciones')), - ('solo_visualizar', models.BooleanField(blank=True, null=True)), - ], - options={ - 'db_table': 'rol_aplicacion', - 'managed': False, - }, - ), - ] diff --git a/project/api/migrations/__init__.py b/project/api/migrations/__init__.py deleted file mode 100644 index e69de29..0000000 diff --git a/project/api/models.py b/project/api/models.py old mode 100644 new mode 100755 index 7f68b7c..ed6531a --- a/project/api/models.py +++ b/project/api/models.py @@ -5,10 +5,8 @@ # * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior # * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table # Feel free to rename the models, but don't rename db_table values or field names. -from typing import Collection, Optional from django.db import models from .validaciones import rut_valido -import logging class Aplicacion(models.Model): @@ -64,7 +62,7 @@ class Funcionario(models.Model): class GtfsCalendar(models.Model): - id_linea = models.OneToOneField('Linea', models.DO_NOTHING, db_column='id_linea', primary_key=True) + id_linea = models.CharField(primary_key=True, max_length=150) monday = models.BooleanField(blank=True, null=True) tuesday = models.BooleanField(blank=True, null=True) wednesday = models.BooleanField(blank=True, null=True) @@ -79,7 +77,7 @@ class GtfsCalendar(models.Model): class GtfsFrequencie(models.Model): - id_trips = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trips', blank=True, null=True) + id_trip = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trip', blank=True, null=True) start_time = models.TimeField(blank=True, null=True) end_time = models.TimeField(blank=True, null=True) headway_secs = models.IntegerField(blank=True, null=True) @@ -109,6 +107,13 @@ class GtfsRoutes(models.Model): route_color = models.CharField(max_length=6, blank=True, null=True) route_text_color = models.CharField(max_length=6, blank=True, null=True) route_sort_order = models.IntegerField(blank=True, null=True) + route_id = models.IntegerField(blank=True, null=True) + agency_id = models.CharField(max_length=50, blank=True, null=True) + route_short_name = models.CharField(max_length=50, blank=True, null=True) + route_long_name = models.CharField(max_length=50, blank=True, null=True) + route_desc = models.CharField(max_length=50, blank=True, null=True) + route_type = models.IntegerField(blank=True, null=True) + route_url = models.CharField(max_length=50, blank=True, null=True) class Meta: managed = False @@ -116,20 +121,24 @@ class GtfsRoutes(models.Model): class GtfsShape(models.Model): - id_shapes = models.IntegerField(primary_key=True) - shape_pt_lat = models.TextField(blank=True, null=True) # This field type is a guess. - shape_pt_lon = models.TextField(blank=True, null=True) # This field type is a guess. + id_shape = models.DecimalField(max_digits=18, decimal_places=0) + shape_pt_lat = models.FloatField(blank=True, null=True) + shape_pt_lon = models.FloatField(blank=True, null=True) shape_pt_sequence = models.IntegerField(blank=True, null=True) shaoe_dist_traveled = models.FloatField(blank=True, null=True) class Meta: managed = False db_table = 'gtfs_shape' + unique_together = (('id_shape','shape_pt_sequence'),) + + def __str__(self): + return f"{self.id_shape}-{self.shape_pt_sequence}" class GtfsStopTimes(models.Model): - id_paradero = models.OneToOneField('Paradero', models.DO_NOTHING, db_column='id_paradero', primary_key=True) # The composite primary key (id_paradero, id_trips) found, that is not supported. The first column is selected. - id_trips = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trips') + id_paradero = models.OneToOneField('Paradero', models.DO_NOTHING, db_column='id_paradero', primary_key=True) # The composite primary key (id_paradero, id_trip) found, that is not supported. The first column is selected. + id_trip = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trip') arrival_time = models.TimeField(blank=True, null=True) stop_sequence = models.IntegerField(blank=True, null=True) stop_headsign = models.CharField(max_length=100, blank=True, null=True) @@ -137,15 +146,15 @@ class GtfsStopTimes(models.Model): class Meta: managed = False db_table = 'gtfs_stop_times' - unique_together = (('id_paradero', 'id_trips'),) + unique_together = (('id_paradero', 'id_trip'),) class GtfsTrips(models.Model): - id_trips = models.IntegerField(primary_key=True) + id_trip = models.CharField(primary_key=True, max_length=150) id_routes = models.ForeignKey(GtfsRoutes, models.DO_NOTHING, db_column='id_routes', blank=True, null=True) - id_linea = models.ForeignKey('Linea', models.DO_NOTHING, db_column='id_linea', blank=True, null=True) - id_shapes = models.ForeignKey(GtfsShape, models.DO_NOTHING, db_column='id_shapes', blank=True, null=True) - id_trips_regreso = models.ForeignKey('self', models.DO_NOTHING, db_column='id_trips_regreso', blank=True, null=True) + id_linea = models.CharField(max_length=150, blank=True, null=True) + id_shapes = models.IntegerField(blank=True, null=True) + id_trip_regreso = models.ForeignKey('self', models.DO_NOTHING, db_column='id_trip_regreso', blank=True, null=True) trip_headsign = models.CharField(max_length=100, blank=True, null=True) short_name = models.CharField(max_length=100, blank=True, null=True) direccion_id = models.IntegerField(blank=True, null=True) @@ -156,13 +165,16 @@ class GtfsTrips(models.Model): class Linea(models.Model): - id_linea = models.IntegerField(primary_key=True) - id_operador = models.ForeignKey('Operador', models.DO_NOTHING, db_column='id_operador', blank=True, null=True) - iid_tipo_transporte = models.ForeignKey('TipoTransporte', models.DO_NOTHING, db_column='iid_tipo_transporte', blank=True, null=True) - id_region = models.ForeignKey('Region', models.DO_NOTHING, db_column='id_region', blank=True, null=True) - vigente = models.BooleanField(blank=True, null=True) - nombre = models.CharField(max_length=100, blank=True, null=True) - url = models.CharField(max_length=300, blank=True, null=True) + id_linea = models.CharField(max_length=150) + service_id = models.CharField(max_length=150, blank=True, null=True) + trip_id = models.CharField(primary_key=True, max_length=150, blank=False, null=False) + trip_headsign = models.CharField(max_length=150, blank=True, null=True) + trip_short_name = models.CharField(max_length=150, blank=True, null=True) + direction_id = models.CharField(max_length=150, blank=True, null=True) + block_id = models.CharField(max_length=150, blank=True, null=True) + shape_id = models.CharField(max_length=150, blank=True, null=True) + wheelchair_accessible = models.CharField(max_length=150, blank=True, null=True) + bikes_allowed = models.CharField(max_length=150, blank=True, null=True) class Meta: managed = False @@ -170,9 +182,10 @@ class Linea(models.Model): class Operador(models.Model): - id_operador = models.IntegerField(primary_key=True) + id_operador = models.CharField(primary_key=True, max_length=150) id_region = models.ForeignKey('Region', models.DO_NOTHING, db_column='id_region', blank=True, null=True) vigente = models.BooleanField(blank=True, null=True) + nombre_operador = models.CharField(max_length=150, blank=True, null=True) class Meta: managed = False @@ -187,8 +200,8 @@ class Paradero(models.Model): stop_code = models.CharField(max_length=100, blank=True, null=True) stop_name = models.CharField(max_length=100, blank=True, null=True) stop_desc = models.CharField(max_length=300, blank=True, null=True) - stop_lat = models.TextField(blank=True, null=True) # This field type is a guess. - stop_lon = models.TextField(blank=True, null=True) # This field type is a guess. + stop_lat = models.FloatField(blank=True, null=True) + stop_lon = models.FloatField(blank=True, null=True) class Meta: managed = False @@ -198,7 +211,7 @@ class Paradero(models.Model): class ParaderoImagen(models.Model): id_paradero = models.OneToOneField(Paradero, models.DO_NOTHING, db_column='id_paradero', primary_key=True) imagen = models.BinaryField(blank=True, null=True) - content_type = models.CharField(max_length=100, blank=False, null=True) + content_type = models.CharField(max_length=50, blank=True, null=True) class Meta: managed = False @@ -231,6 +244,7 @@ class Persona(models.Model): super().save(*args, **kwargs) + class Region(models.Model): id_region = models.IntegerField(primary_key=True) nombre_region = models.CharField(max_length=100) @@ -291,7 +305,7 @@ class TipoParadero(models.Model): class TipoTransporte(models.Model): - iid_tipo_transporte = models.IntegerField(primary_key=True) + id_tipo_transporte = models.IntegerField(primary_key=True) descripcion = models.CharField(max_length=50, blank=True, null=True) class Meta: @@ -364,7 +378,7 @@ class Vehiculo(models.Model): class VehiculoLinea(models.Model): patente = models.ForeignKey(Vehiculo, models.DO_NOTHING, db_column='patente', blank=True, null=True) - id_linea = models.ForeignKey(Linea, models.DO_NOTHING, db_column='id_linea', blank=True, null=True) + id_linea = models.CharField(max_length=150, blank=True, null=True) vigente = models.BooleanField(blank=True, null=True) class Meta: diff --git a/project/api/schemas.py b/project/api/schemas.py old mode 100644 new mode 100755 diff --git a/project/api/serializers.py b/project/api/serializers.py old mode 100644 new mode 100755 index d24977d..ec7c6da --- a/project/api/serializers.py +++ b/project/api/serializers.py @@ -54,6 +54,11 @@ class ParaderoSerializer(serializers.ModelSerializer): model = models.Paradero fields = '__all__' +class LineaSerializer(serializers.ModelSerializer): + class Meta: + model = models.Linea + fields = '__all__' + class UsuarioSerializer(serializers.ModelSerializer): # muestro informacion de persona en un objeto aparte persona = serializers.SerializerMethodField() diff --git a/project/api/tests.py b/project/api/tests.py old mode 100644 new mode 100755 diff --git a/project/api/urls.py b/project/api/urls.py old mode 100644 new mode 100755 index 6b32ba1..8c68c22 --- a/project/api/urls.py +++ b/project/api/urls.py @@ -2,7 +2,7 @@ from django.urls import path, include from rest_framework import routers # from api import views from api.views import usuario, auth, aplicacion, tipo, persona, comuna, region, paradero -from api.views import mapa +from api.views import mapa, linea router = routers.DefaultRouter() router.register('aplicaciones', aplicacion.AplicacionViewSet) @@ -16,10 +16,12 @@ router.register('tipos/vehiculo', tipo.TipoVehiculoViewSet) router.register('comunas', comuna.ComunaViewSet) router.register('regiones', region.RegionViewSet) router.register('paraderos', paradero.ParaderoViewSet) +router.register('lineas', linea.LineaViewSet) urlpatterns = [ path('', include(router.urls)), path('auth/', auth.jwt_login, name='auth'), path('mapas/paraderos/', mapa.paraderos, name='mapa-paraderos'), + path('mapas/rutas/', mapa.rutas, name='mapa-rutas'), path('paraderos/image//', paradero.image, name='paradero-image') ] \ No newline at end of file diff --git a/project/api/validaciones.py b/project/api/validaciones.py old mode 100644 new mode 100755 diff --git a/project/api/views/__init__.py b/project/api/views/__init__.py old mode 100644 new mode 100755 diff --git a/project/api/views/aplicacion.py b/project/api/views/aplicacion.py old mode 100644 new mode 100755 diff --git a/project/api/views/auth.py b/project/api/views/auth.py old mode 100644 new mode 100755 diff --git a/project/api/views/comuna.py b/project/api/views/comuna.py old mode 100644 new mode 100755 diff --git a/project/api/views/linea.py b/project/api/views/linea.py new file mode 100755 index 0000000..2021209 --- /dev/null +++ b/project/api/views/linea.py @@ -0,0 +1,17 @@ + +from rest_framework import viewsets +from rest_framework.response import Response +from rest_framework.decorators import action +from .. import models, serializers + +class LineaViewSet(viewsets.ModelViewSet): + queryset = models.Linea.objects.all() + serializer_class = serializers.LineaSerializer + + @action(detail=False, methods=['GET']) + def servicios(self, request): + distinct_values = models.Linea.objects \ + .values('id_linea', 'service_id') \ + .order_by('id_linea', 'service_id') \ + .distinct() + return Response(distinct_values) \ No newline at end of file diff --git a/project/api/views/mapa.py b/project/api/views/mapa.py old mode 100644 new mode 100755 index 6471a43..ff11d99 --- a/project/api/views/mapa.py +++ b/project/api/views/mapa.py @@ -3,18 +3,18 @@ from django.http import JsonResponse from rest_framework.decorators import action, api_view, schema from django.views.decorators.csrf import csrf_exempt from ..models import Paradero, ParaderoImagen +from ..models import Linea, GtfsShape from .paradero import url_image_paradero from logging import error +google_api_key = 'AIzaSyDnFO9w_SsodjBuY5tOK8-kQJns_l5klQ4' +center = {'lat': -36.8077884, 'lng': -73.0775401} @csrf_exempt @action(detail=False, methods=['get']) @api_view(['GET']) -# @schema(schemas.AuthSchema()) def paraderos(request): - google_api_key = 'AIzaSyDnFO9w_SsodjBuY5tOK8-kQJns_l5klQ4' zoom = 17 - center = {'lat': -36.8077884, 'lng': -73.0775401} marks = [] paraderos = Paradero.objects.all() @@ -37,3 +37,21 @@ def paraderos(request): 'center': center, 'marks': marks }) + + +@csrf_exempt +@action(detail=False, methods=['get']) +@api_view(['GET']) +def rutas(request): + id_linea = request.GET.get('id_linea') + service_id = request.GET.get('service_id') + + linea = Linea.objects \ + .filter(id_linea = id_linea, service_id = service_id, direction_id = '0') \ + .values('shape_id') \ + .first() + rutas = GtfsShape.objects \ + .filter(id_shape = linea['shape_id']) \ + .order_by('shape_pt_sequence') \ + .values('shape_pt_lat','shape_pt_lon','shape_pt_sequence') + return JsonResponse(list(rutas), safe=False) \ No newline at end of file diff --git a/project/api/views/paradero.py b/project/api/views/paradero.py old mode 100644 new mode 100755 diff --git a/project/api/views/persona.py b/project/api/views/persona.py old mode 100644 new mode 100755 diff --git a/project/api/views/region.py b/project/api/views/region.py old mode 100644 new mode 100755 diff --git a/project/api/views/tipo.py b/project/api/views/tipo.py old mode 100644 new mode 100755 diff --git a/project/api/views/usuario.py b/project/api/views/usuario.py old mode 100644 new mode 100755