avance con rutas de servicios en lineas
parent
15e5e389b9
commit
df7a02a1c7
|
@ -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)
|
||||
# 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)
|
|
@ -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<EFBFBD>or\r\nSe<EFBFBD>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,
|
||||
},
|
||||
),
|
||||
]
|
|
@ -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:
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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/<int:id>/', paradero.image, name='paradero-image')
|
||||
]
|
|
@ -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)
|
|
@ -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)
|
Loading…
Reference in New Issue