se modifica estructura de base de datos
parent
0f00441d12
commit
53849df320
|
@ -62,20 +62,33 @@ class Funcionario(models.Model):
|
|||
|
||||
|
||||
class GtfsCalendar(models.Model):
|
||||
id_linea = models.CharField(primary_key=True, max_length=150)
|
||||
service_id = 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)
|
||||
thursday = models.BooleanField(blank=True, null=True)
|
||||
friday = models.BooleanField(blank=True, null=True)
|
||||
salurday = models.BooleanField(blank=True, null=True)
|
||||
saturday = models.BooleanField(blank=True, null=True)
|
||||
sunday = models.BooleanField(blank=True, null=True)
|
||||
start_date = models.DateField(blank=True, null=True)
|
||||
end_date = models.DateField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'gtfs_calendar'
|
||||
|
||||
|
||||
class GtfsCalendarDates(models.Model):
|
||||
service_id = models.DecimalField(primary_key=True, max_digits=8, decimal_places=0) # The composite primary key (service_id, date) found, that is not supported. The first column is selected.
|
||||
date = models.CharField(max_length=10)
|
||||
exception_type = models.DecimalField(max_digits=2, decimal_places=0, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'gtfs_calendar_dates'
|
||||
unique_together = (('service_id', 'date'),)
|
||||
|
||||
|
||||
class GtfsFrequencie(models.Model):
|
||||
id_trip = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trip', blank=True, null=True)
|
||||
start_time = models.TimeField(blank=True, null=True)
|
||||
|
@ -89,7 +102,7 @@ class GtfsFrequencie(models.Model):
|
|||
|
||||
|
||||
class GtfsRouteType(models.Model):
|
||||
id_route_type = models.IntegerField(primary_key=True)
|
||||
id_route_type = models.DecimalField(primary_key=True, max_digits=2, decimal_places=0)
|
||||
descripcion = models.CharField(max_length=100, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
|
@ -97,43 +110,18 @@ class GtfsRouteType(models.Model):
|
|||
db_table = 'gtfs_route_type'
|
||||
|
||||
|
||||
class GtfsRoutes(models.Model):
|
||||
id_routes = models.IntegerField(primary_key=True)
|
||||
id_operador = models.ForeignKey('Operador', models.DO_NOTHING, db_column='id_operador', blank=True, null=True)
|
||||
id_route_type = models.ForeignKey(GtfsRouteType, models.DO_NOTHING, db_column='id_route_type', blank=True, null=True)
|
||||
short_name = models.CharField(max_length=100, blank=True, null=True)
|
||||
long_name = models.CharField(max_length=300, blank=True, null=True)
|
||||
descripcion = models.CharField(max_length=500, blank=True, null=True)
|
||||
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
|
||||
db_table = 'gtfs_routes'
|
||||
|
||||
|
||||
class GtfsShape(models.Model):
|
||||
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)
|
||||
shape_dist_traveled = models.FloatField(blank=True, null=True)
|
||||
id_gtfs_pk = models.AutoField(primary_key=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}"
|
||||
unique_together = (('id_shape', 'shape_dist_traveled'),)
|
||||
|
||||
|
||||
class GtfsStopTimes(models.Model):
|
||||
|
@ -151,13 +139,14 @@ class GtfsStopTimes(models.Model):
|
|||
|
||||
class GtfsTrips(models.Model):
|
||||
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.CharField(max_length=150, blank=True, null=True)
|
||||
id_shapes = models.IntegerField(blank=True, null=True)
|
||||
id_shape = 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)
|
||||
trip_short_name = models.CharField(max_length=100, blank=True, null=True)
|
||||
direction_id = models.IntegerField(blank=True, null=True)
|
||||
service_id = models.DecimalField(max_digits=8, decimal_places=0, blank=True, null=True, db_comment='de calendario')
|
||||
block_id = models.CharField(max_length=50, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
@ -165,16 +154,15 @@ class GtfsTrips(models.Model):
|
|||
|
||||
|
||||
class Linea(models.Model):
|
||||
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)
|
||||
id_linea = models.CharField(max_length=150, primary_key=True)
|
||||
id_operador = models.ForeignKey('Operador', models.DO_NOTHING, db_column='id_operador', blank=True, null=True)
|
||||
route_short_name = models.CharField(max_length=150, blank=True, null=True)
|
||||
route_desc = models.CharField(max_length=150, blank=True, null=True)
|
||||
route_type = models.ForeignKey(GtfsRouteType, models.DO_NOTHING, db_column='route_type', blank=True, null=True)
|
||||
route_url = models.CharField(max_length=150, blank=True, null=True)
|
||||
route_color = models.CharField(max_length=150, blank=True, null=True)
|
||||
route_text_color = models.CharField(max_length=150, blank=True, null=True)
|
||||
route_long_name = models.CharField(max_length=200, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
@ -186,6 +174,11 @@ class Operador(models.Model):
|
|||
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)
|
||||
agency_url = models.CharField(max_length=200, blank=True, null=True)
|
||||
agency_timezone = models.CharField(max_length=200, blank=True, null=True)
|
||||
agency_lang = models.CharField(max_length=50, blank=True, null=True)
|
||||
agency_phone = models.CharField(max_length=50, blank=True, null=True)
|
||||
agency_fare_url = models.CharField(max_length=50, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
@ -202,6 +195,12 @@ class Paradero(models.Model):
|
|||
stop_desc = models.CharField(max_length=300, blank=True, null=True)
|
||||
stop_lat = models.FloatField(blank=True, null=True)
|
||||
stop_lon = models.FloatField(blank=True, null=True)
|
||||
zone_id = models.CharField(max_length=200, blank=True, null=True)
|
||||
stop_url = models.CharField(max_length=200, blank=True, null=True)
|
||||
location_type = models.CharField(max_length=200, blank=True, null=True)
|
||||
parent_station = models.CharField(max_length=200, blank=True, null=True)
|
||||
stop_timezonene_id = models.CharField(max_length=200, blank=True, null=True)
|
||||
wheelchair_boarding = models.DecimalField(max_digits=2, decimal_places=0, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
@ -333,10 +332,10 @@ class TipoVehiculo(models.Model):
|
|||
|
||||
|
||||
class Usuario(models.Model):
|
||||
login = models.CharField(primary_key=True, max_length=20)
|
||||
login = models.CharField(primary_key=True, max_length=60)
|
||||
rut = models.ForeignKey(Persona, models.DO_NOTHING, db_column='rut', blank=True, null=True)
|
||||
clave = models.CharField(max_length=20, blank=True, null=True)
|
||||
vigente = models.BooleanField(blank=True, null=True)
|
||||
superuser = models.BooleanField(blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
@ -356,6 +355,18 @@ class Usuario(models.Model):
|
|||
super().save(*args, **kwargs)
|
||||
|
||||
|
||||
class UsuarioClave(models.Model):
|
||||
login = models.OneToOneField(Usuario, models.DO_NOTHING, db_column='login', primary_key=True)
|
||||
clave = models.CharField(max_length=60, blank=True, null=True)
|
||||
clave_anterior = models.CharField(max_length=60, blank=True, null=True)
|
||||
fecha_modificacion = models.DateField(blank=True, null=True)
|
||||
codigo = models.DecimalField(max_digits=8, decimal_places=0, blank=True, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
db_table = 'usuario_clave'
|
||||
|
||||
|
||||
class UsuarioRol(models.Model):
|
||||
login = models.ForeignKey(Usuario, models.DO_NOTHING, db_column='login', blank=True, null=True)
|
||||
id_rol = models.ForeignKey(Rol, models.DO_NOTHING, db_column='id_rol', blank=True, null=True)
|
||||
|
|
|
@ -54,6 +54,11 @@ class ParaderoSerializer(serializers.ModelSerializer):
|
|||
model = models.Paradero
|
||||
fields = '__all__'
|
||||
|
||||
class OperadorSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Operador
|
||||
fields = '__all__'
|
||||
|
||||
class LineaSerializer(serializers.ModelSerializer):
|
||||
class Meta:
|
||||
model = models.Linea
|
||||
|
|
|
@ -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, linea
|
||||
from api.views import mapa, linea, operador
|
||||
|
||||
router = routers.DefaultRouter()
|
||||
router.register('aplicaciones', aplicacion.AplicacionViewSet)
|
||||
|
@ -17,6 +17,7 @@ router.register('comunas', comuna.ComunaViewSet)
|
|||
router.register('regiones', region.RegionViewSet)
|
||||
router.register('paraderos', paradero.ParaderoViewSet)
|
||||
router.register('lineas', linea.LineaViewSet)
|
||||
router.register('operadores', operador.OperadorViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
path('', include(router.urls)),
|
||||
|
|
|
@ -10,6 +10,7 @@ from decouple import config
|
|||
import json
|
||||
import jwt
|
||||
from datetime import datetime, timedelta
|
||||
import logging
|
||||
|
||||
private_key = config('SECRET_JWT')
|
||||
|
||||
|
@ -21,6 +22,8 @@ private_key = config('SECRET_JWT')
|
|||
def jwt_login(request):
|
||||
if request.method == 'POST':
|
||||
count = models.Usuario.objects.filter(vigente = True).count()
|
||||
logging.error(f'count usuario vigente = {count}')
|
||||
|
||||
# validar username y password
|
||||
input = json.loads(request.body)
|
||||
username = input['username']
|
||||
|
@ -35,7 +38,9 @@ def jwt_login(request):
|
|||
if not usuario:
|
||||
return HttpResponse('Acceso no valido', status=400)
|
||||
|
||||
if usuario['clave'] != password:
|
||||
if username != '0':
|
||||
clave = models.UsuarioClave.objects.filter(login = username).first()
|
||||
if not clave or clave.clave != password:
|
||||
return HttpResponse('Acceso no valido', status=400)
|
||||
|
||||
ahora = datetime.utcnow()
|
||||
|
|
|
@ -7,11 +7,3 @@ 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', 'direction_id', 'trip_headsign') \
|
||||
.order_by('id_linea', 'service_id', 'direction_id') \
|
||||
.distinct()
|
||||
return Response(distinct_values)
|
|
@ -3,7 +3,7 @@ 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 ..models import Linea, GtfsShape, GtfsTrips
|
||||
from .paradero import url_image_paradero
|
||||
from logging import error
|
||||
|
||||
|
@ -44,22 +44,20 @@ def paraderos(request):
|
|||
@api_view(['GET'])
|
||||
def rutas(request):
|
||||
id_linea = request.GET.get('id_linea')
|
||||
service_id = request.GET.get('service_id')
|
||||
direction_id = request.GET.get('direction_id')
|
||||
|
||||
linea = Linea.objects \
|
||||
.filter(id_linea = id_linea, service_id = service_id, direction_id = direction_id) \
|
||||
.values('shape_id') \
|
||||
.first()
|
||||
|
||||
rutas = []
|
||||
if linea:
|
||||
rutas = GtfsShape.objects \
|
||||
.filter(id_shape = linea['shape_id']) \
|
||||
.order_by('shape_pt_sequence') \
|
||||
.values('shape_pt_lat','shape_pt_lon','shape_pt_sequence')
|
||||
sectores = GtfsTrips.objects.filter(id_linea = id_linea).all()
|
||||
data = []
|
||||
for s in sectores:
|
||||
rutas = GtfsShape.objects.filter(id_shape = s.id_shape).order_by('shape_pt_sequence')
|
||||
for r in rutas:
|
||||
data.append({
|
||||
'shape_pt_lat': r.shape_pt_lat,
|
||||
'shape_pt_lon': r.shape_pt_lon,
|
||||
'shape_pt_sequence': r.shape_pt_sequence
|
||||
})
|
||||
data_ordenada = sorted(data, key=lambda k: k['shape_pt_sequence'])
|
||||
|
||||
return JsonResponse({
|
||||
'google_api_key': google_api_key,
|
||||
'positions': list(rutas)
|
||||
'positions': data_ordenada
|
||||
})
|
|
@ -0,0 +1,9 @@
|
|||
|
||||
from rest_framework import viewsets
|
||||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import action
|
||||
from .. import models, serializers
|
||||
|
||||
class OperadorViewSet(viewsets.ModelViewSet):
|
||||
queryset = models.Operador.objects.all()
|
||||
serializer_class = serializers.OperadorSerializer
|
|
@ -7,6 +7,8 @@ from rest_framework.response import Response
|
|||
|
||||
from .. import models, schemas, serializers
|
||||
import json
|
||||
import datetime
|
||||
import logging
|
||||
|
||||
class UsuarioViewSet(viewsets.ModelViewSet):
|
||||
queryset = models.Usuario.objects.all()
|
||||
|
@ -51,11 +53,83 @@ class UsuarioViewSet(viewsets.ModelViewSet):
|
|||
usuario = models.Usuario(
|
||||
rut = persona,
|
||||
login = input['login'],
|
||||
clave = input['clave'],
|
||||
vigente = input.get('vigente', False),
|
||||
)
|
||||
usuario.save()
|
||||
|
||||
logging.error(f'clave = {input["clave"]}')
|
||||
if input['clave']:
|
||||
logging.error('Modificar clave de usuario')
|
||||
clave = models.UsuarioClave.objects.filter(login = usuario.login).first()
|
||||
if clave:
|
||||
logging.error('Clave Usuario ya existe')
|
||||
clave.clave_anterior = clave.clave
|
||||
clave.clave = input['clave']
|
||||
clave.fecha_modificacion = datetime.datetime.now()
|
||||
clave.save()
|
||||
else:
|
||||
logging.error('Clave Usuario se creará')
|
||||
clave = models.UsuarioClave(
|
||||
login = usuario.login,
|
||||
clave = input['clave'],
|
||||
fecha_modificacion = datetime.datetime.now()
|
||||
)
|
||||
clave.save()
|
||||
|
||||
return Response({
|
||||
'rut': persona.rut,
|
||||
'dv': persona.dv,
|
||||
'nombres': persona.nombres,
|
||||
'apellido_a': persona.apellido_a,
|
||||
'apellido_b': persona.apellido_b,
|
||||
'email': persona.email,
|
||||
'login': usuario.login,
|
||||
'vigente': usuario.vigente,
|
||||
})
|
||||
|
||||
except ValueError as e:
|
||||
transaction.rollback()
|
||||
return HttpResponse(str(e), status = 400)
|
||||
|
||||
except Exception as e:
|
||||
transaction.rollback()
|
||||
print(e)
|
||||
return HttpResponse(str(e), status = 500)
|
||||
|
||||
def update(self, request, *args, **kwargs):
|
||||
input = json.loads(request.body)
|
||||
logging.error(input)
|
||||
try:
|
||||
pk = input['rut']
|
||||
with transaction.atomic():
|
||||
|
||||
# validaciones se realiza a nivel del model
|
||||
|
||||
persona = models.Persona.objects.filter(rut = pk).first()
|
||||
|
||||
usuario = models.Usuario.objects.filter(rut = pk).first()
|
||||
usuario.vigente = input.get('vigente', False)
|
||||
usuario.save()
|
||||
|
||||
logging.error(f'clave = {input["clave"]}')
|
||||
if input['clave']:
|
||||
logging.error('Modificar clave de usuario')
|
||||
clave = models.UsuarioClave.objects.filter(login = usuario.login).first()
|
||||
if clave:
|
||||
logging.error('Clave Usuario ya existe')
|
||||
clave.clave_anterior = clave.clave
|
||||
clave.clave = input['clave']
|
||||
clave.fecha_modificacion = datetime.datetime.now()
|
||||
clave.save()
|
||||
else:
|
||||
logging.error('Clave Usuario se creará')
|
||||
clave = models.UsuarioClave(
|
||||
login = usuario,
|
||||
clave = input['clave'],
|
||||
fecha_modificacion = datetime.datetime.now()
|
||||
)
|
||||
clave.save()
|
||||
|
||||
return Response({
|
||||
'rut': persona.rut,
|
||||
'dv': persona.dv,
|
||||
|
|
File diff suppressed because one or more lines are too long
|
@ -4,7 +4,7 @@
|
|||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
|
||||
<title>...</title>
|
||||
<script type="module" crossorigin src="/assets/index-b482aa7b.js"></script>
|
||||
<script type="module" crossorigin src="/assets/index-a084edd6.js"></script>
|
||||
<link rel="stylesheet" href="/assets/index-2d1bb0fd.css">
|
||||
</head>
|
||||
<body>
|
||||
|
|
Loading…
Reference in New Issue