forked from TDTP/admin_transporte_backend
Merge branch 'develop/Ronald' of gitlab.com:m3f_usm/admin_transporte/backend into merge/francisco
commit
d5bfedd2a1
|
@ -42,7 +42,7 @@ class Conductor(models.Model):
|
||||||
|
|
||||||
class Dispositivo(models.Model):
|
class Dispositivo(models.Model):
|
||||||
id_dispositivo = models.CharField(primary_key=True, max_length=100)
|
id_dispositivo = models.CharField(primary_key=True, max_length=100)
|
||||||
id_paradero = models.ForeignKey('Paradero', models.DO_NOTHING, db_column='id_paradero', blank=True, null=True)
|
id_paradero = models.ForeignKey('Paradero', models.DO_NOTHING, db_column='id_paradero', blank=False, null=False)
|
||||||
vigente = models.BooleanField(blank=True, null=True)
|
vigente = models.BooleanField(blank=True, null=True)
|
||||||
ultima_conexion = models.DateField(blank=True, null=True)
|
ultima_conexion = models.DateField(blank=True, null=True)
|
||||||
id_tipo_dispositivo = models.ForeignKey('TipoDispositivo', models.DO_NOTHING, db_column='id_tipo_dispositivo')
|
id_tipo_dispositivo = models.ForeignKey('TipoDispositivo', models.DO_NOTHING, db_column='id_tipo_dispositivo')
|
||||||
|
@ -52,17 +52,6 @@ class Dispositivo(models.Model):
|
||||||
db_table = 'dispositivo'
|
db_table = 'dispositivo'
|
||||||
|
|
||||||
|
|
||||||
class Funcionario(models.Model):
|
|
||||||
rut = models.OneToOneField('Persona', models.DO_NOTHING, db_column='rut', primary_key=True)
|
|
||||||
id_operador = models.ForeignKey('Operador', models.DO_NOTHING, db_column='id_operador', blank=True, null=True)
|
|
||||||
desde = models.DateField(blank=True, null=True)
|
|
||||||
hasta = models.DateField(blank=True, null=True)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
managed = False
|
|
||||||
db_table = 'funcionario'
|
|
||||||
|
|
||||||
|
|
||||||
class GtfsFrequencie(models.Model):
|
class GtfsFrequencie(models.Model):
|
||||||
id_trip = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trip', 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)
|
start_time = models.TimeField(blank=True, null=True)
|
||||||
|
@ -199,6 +188,15 @@ class LineaParadero(models.Model):
|
||||||
db_table = 'linea_paradero'
|
db_table = 'linea_paradero'
|
||||||
|
|
||||||
|
|
||||||
|
class Rol(models.Model):
|
||||||
|
id_rol = models.IntegerField(primary_key=True)
|
||||||
|
nombre_rol = models.CharField(max_length=100)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'rol'
|
||||||
|
|
||||||
|
|
||||||
class Operador(models.Model):
|
class Operador(models.Model):
|
||||||
id_operador = models.CharField(primary_key=True, max_length=150)
|
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)
|
id_region = models.ForeignKey('Region', models.DO_NOTHING, db_column='id_region', blank=True, null=True)
|
||||||
|
@ -209,6 +207,7 @@ class Operador(models.Model):
|
||||||
agency_lang = models.CharField(max_length=50, 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_phone = models.CharField(max_length=50, blank=True, null=True)
|
||||||
agency_fare_url = models.CharField(max_length=50, blank=True, null=True)
|
agency_fare_url = models.CharField(max_length=50, blank=True, null=True)
|
||||||
|
id_rol = models.ForeignKey(Rol, models.DO_NOTHING, db_column='id_rol', blank=False, null=True)
|
||||||
|
|
||||||
class Meta:
|
class Meta:
|
||||||
managed = False
|
managed = False
|
||||||
|
@ -284,13 +283,6 @@ class Region(models.Model):
|
||||||
db_table = 'region'
|
db_table = 'region'
|
||||||
|
|
||||||
|
|
||||||
class Rol(models.Model):
|
|
||||||
id_rol = models.IntegerField(primary_key=True)
|
|
||||||
nombre_rol = models.CharField(max_length=100)
|
|
||||||
|
|
||||||
class Meta:
|
|
||||||
managed = False
|
|
||||||
db_table = 'rol'
|
|
||||||
|
|
||||||
|
|
||||||
class RolAplicacion(models.Model):
|
class RolAplicacion(models.Model):
|
||||||
|
@ -352,6 +344,14 @@ class TipoTransporte(models.Model):
|
||||||
managed = False
|
managed = False
|
||||||
db_table = 'tipo_transporte'
|
db_table = 'tipo_transporte'
|
||||||
|
|
||||||
|
class TipoCargo(models.Model):
|
||||||
|
id_cargo = models.IntegerField(primary_key=True)
|
||||||
|
descripcion = models.CharField(max_length=100, blank=True, null=True)
|
||||||
|
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'tipo_cargo'
|
||||||
|
db_table_comment = 'Registro de los cargos que se pueden asociar a un contrato'
|
||||||
|
|
||||||
class TipoTratamientoPersona(models.Model):
|
class TipoTratamientoPersona(models.Model):
|
||||||
id_tipo_tratamiento = models.IntegerField(primary_key=True)
|
id_tipo_tratamiento = models.IntegerField(primary_key=True)
|
||||||
|
@ -433,3 +433,31 @@ class GtfsArchivo(models.Model):
|
||||||
managed = False
|
managed = False
|
||||||
db_table = 'gtfs_archivo'
|
db_table = 'gtfs_archivo'
|
||||||
db_table_comment = 'Registro de los archivos GTFS que se cargan en el sistema'
|
db_table_comment = 'Registro de los archivos GTFS que se cargan en el sistema'
|
||||||
|
|
||||||
|
|
||||||
|
class VistaFuncionario(models.Model):
|
||||||
|
rut = models.ForeignKey('Persona', models.DO_NOTHING, db_column='rut', blank=True, null=True)
|
||||||
|
id_operador = models.ForeignKey('Operador', models.DO_NOTHING, db_column='id_operador', blank=True, null=True)
|
||||||
|
#patente = models.OneToOneField('Vehiculo', models.DO_NOTHING, db_column='patente', primary_key=True)
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'vw_funcionario'
|
||||||
|
|
||||||
|
class Contrato(models.Model):
|
||||||
|
rut = models.OneToOneField('Persona', models.DO_NOTHING, db_column='rut', primary_key=True)
|
||||||
|
id_operador = models.ForeignKey('Operador', models.DO_NOTHING, db_column='id_operador', blank=True, null=True)
|
||||||
|
desde = models.DateField(blank=True, null=True)
|
||||||
|
hasta = models.DateField(blank=True, null=True)
|
||||||
|
id_cargo = models.ForeignKey('TipoCargo', models.DO_NOTHING, db_column='id_cargo')
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'contrato'
|
||||||
|
|
||||||
|
class PersonaDatosLaborales(models.Model):
|
||||||
|
rut = models.OneToOneField('Persona', models.DO_NOTHING, db_column='rut', primary_key=True)
|
||||||
|
vigencia_clase_licencia = models.DateField(blank=True, null=True)
|
||||||
|
clase_licencia_conducir = models.CharField(max_length=50, blank=True, null=True)
|
||||||
|
profesion = models.CharField(max_length=100, blank=True, null=True)
|
||||||
|
class Meta:
|
||||||
|
managed = False
|
||||||
|
db_table = 'persona_datos_laborales'
|
|
@ -148,4 +148,24 @@ class RedTransporteSerializer(serializers.ModelSerializer):
|
||||||
class GtfsArchivoSerializer(serializers.ModelSerializer):
|
class GtfsArchivoSerializer(serializers.ModelSerializer):
|
||||||
class Meta:
|
class Meta:
|
||||||
model = models.GtfsArchivo
|
model = models.GtfsArchivo
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class TipoCargoSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.TipoCargo
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class VistaFuncionarioSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.VistaFuncionario
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class ContratoSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.Contrato
|
||||||
|
fields = '__all__'
|
||||||
|
|
||||||
|
class PersonaDatosLaboralesSerializer(serializers.ModelSerializer):
|
||||||
|
class Meta:
|
||||||
|
model = models.PersonaDatosLaborales
|
||||||
fields = '__all__'
|
fields = '__all__'
|
|
@ -3,7 +3,7 @@ from rest_framework import routers
|
||||||
# from api import views
|
# from api import views
|
||||||
from api.views import usuario, auth, aplicacion, tipo, persona, comuna, region, rol, rolaplicacion
|
from api.views import usuario, auth, aplicacion, tipo, persona, comuna, region, rol, rolaplicacion
|
||||||
from api.views import mapa, linea, letrero_lur, operador,red_transporte,gtfs_archivo
|
from api.views import mapa, linea, letrero_lur, operador,red_transporte,gtfs_archivo
|
||||||
from api.views import paradero, paradero_imagen, linea_paradero
|
from api.views import paradero, paradero_imagen, linea_paradero, tipo_cargo
|
||||||
from api.views import dispositivo
|
from api.views import dispositivo
|
||||||
from api.views import rol_operador
|
from api.views import rol_operador
|
||||||
from api.views import upload
|
from api.views import upload
|
||||||
|
@ -31,6 +31,7 @@ router.register('gtfs-archivo', gtfs_archivo.GtfsArchivoViewSet)
|
||||||
router.register('roles', rol.RolViewSet)
|
router.register('roles', rol.RolViewSet)
|
||||||
router.register('rolyaplicacion', rolaplicacion.RolAplicacionViewSet, basename='rol_aplicacion')
|
router.register('rolyaplicacion', rolaplicacion.RolAplicacionViewSet, basename='rol_aplicacion')
|
||||||
router.register('roles-operadores', rol_operador.RolOperadorViewSet, basename='rol_operador')
|
router.register('roles-operadores', rol_operador.RolOperadorViewSet, basename='rol_operador')
|
||||||
|
router.register('tipo-cargo', tipo_cargo.TipoCargoViewSet)
|
||||||
|
|
||||||
urlpatterns = [
|
urlpatterns = [
|
||||||
path('', include(router.urls)),
|
path('', include(router.urls)),
|
||||||
|
|
|
@ -0,0 +1,165 @@
|
||||||
|
|
||||||
|
from django.db import transaction
|
||||||
|
from django.http import HttpResponse, JsonResponse
|
||||||
|
from django.contrib.auth.hashers import make_password
|
||||||
|
from rest_framework import viewsets
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
|
||||||
|
from .. import models, schemas, serializers
|
||||||
|
import json
|
||||||
|
import datetime
|
||||||
|
import logging
|
||||||
|
|
||||||
|
class ContratoViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = models.Contrato.objects.all()
|
||||||
|
serializer_class = serializers.ContratoSerializer
|
||||||
|
schema = schemas.ContratoSchema()
|
||||||
|
|
||||||
|
def retrieve(self, request, pk=None):
|
||||||
|
data = super().retrieve(request, pk)
|
||||||
|
return data
|
||||||
|
|
||||||
|
def create(self, request):
|
||||||
|
try:
|
||||||
|
with transaction.atomic():
|
||||||
|
input = json.loads(request.body)
|
||||||
|
|
||||||
|
persona = models.Persona.objects.filter(rut = input['rut']).first()
|
||||||
|
id_tipo_tratamiento = input.get('id_tipo_tratamiento',None)
|
||||||
|
if not id_tipo_tratamiento:
|
||||||
|
id_tipo_tratamiento = None
|
||||||
|
|
||||||
|
if not persona:
|
||||||
|
persona = models.Persona(
|
||||||
|
rut = input['rut'],
|
||||||
|
dv = input['dv'],
|
||||||
|
nombres = input['nombres'],
|
||||||
|
apellido_a = input.get('apellido_a',None),
|
||||||
|
apellido_b = input.get('apellido_b',None),
|
||||||
|
email = input.get('email',None),
|
||||||
|
id_tipo_tratamiento = id_tipo_tratamiento
|
||||||
|
)
|
||||||
|
persona.save()
|
||||||
|
else:
|
||||||
|
persona.nombres = input['nombres']
|
||||||
|
persona.apellido_a = input.get('apellido_a',None)
|
||||||
|
persona.apellido_b = input.get('apellido_b',None)
|
||||||
|
persona.email = input.get('email',None)
|
||||||
|
persona.id_tipo_tratamiento = id_tipo_tratamiento
|
||||||
|
persona.save()
|
||||||
|
cargo = models.TipoCargo.objects.filter(id_cargo=input.get('id_cargo',None)).first()
|
||||||
|
operador=models.Operador.objects.filter(id_operador=input.get('id_operador',None)).first()
|
||||||
|
if cargo == None:
|
||||||
|
raise ValueError('Cargo no encontrado')
|
||||||
|
|
||||||
|
Contrato = models.Contrato(
|
||||||
|
rut = persona,
|
||||||
|
id_operador = operador,
|
||||||
|
desde = input['desde'],
|
||||||
|
hasta = input['hasta']
|
||||||
|
)
|
||||||
|
Contrato.save()
|
||||||
|
|
||||||
|
if input['clave']:
|
||||||
|
logging.error('Modificar clave de Contrato')
|
||||||
|
Contrato.clave = make_password(input['clave'])
|
||||||
|
Contrato.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': Contrato.login,
|
||||||
|
'vigente': Contrato.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)
|
||||||
|
try:
|
||||||
|
pk = input['rut']
|
||||||
|
with transaction.atomic():
|
||||||
|
|
||||||
|
# validaciones se realiza a nivel del model
|
||||||
|
persona = models.Persona.objects.filter(rut = pk).first()
|
||||||
|
rol = models.Rol.objects.filter(id_rol = input.get('id_rol')).first()
|
||||||
|
|
||||||
|
Contrato = models.Contrato.objects.filter(rut = pk).first()
|
||||||
|
Contrato.vigente = input.get('vigente', False)
|
||||||
|
Contrato.superuser = input.get('superuser', False)
|
||||||
|
Contrato.id_rol = rol
|
||||||
|
Contrato.save()
|
||||||
|
|
||||||
|
if 'clave' in input:
|
||||||
|
logging.error('Modificar clave de Contrato')
|
||||||
|
Contrato.clave = make_password(input['clave'])
|
||||||
|
Contrato.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': Contrato.login,
|
||||||
|
'vigente': Contrato.vigente,
|
||||||
|
})
|
||||||
|
|
||||||
|
except ValueError as e:
|
||||||
|
transaction.rollback()
|
||||||
|
return HttpResponse(str(e), status = 400)
|
||||||
|
|
||||||
|
except Exception as e:
|
||||||
|
transaction.rollback()
|
||||||
|
logging.error(e)
|
||||||
|
return HttpResponse(str(e), status = 500)
|
||||||
|
|
||||||
|
@action(detail=False, methods=['post'])
|
||||||
|
def permisos(self, request):
|
||||||
|
input = {}
|
||||||
|
if request.body > b'':
|
||||||
|
input = json.loads(request.body)
|
||||||
|
|
||||||
|
login = request.jwt_info['login']
|
||||||
|
Contrato = models.Contrato.objects.filter(login=login).first()
|
||||||
|
escritura = Contrato.superuser == True
|
||||||
|
|
||||||
|
if 'path' in input:
|
||||||
|
path = input.get('path')
|
||||||
|
aplicacion = models.Aplicacion.objects.filter(path_app=path).first()
|
||||||
|
|
||||||
|
if escritura == False:
|
||||||
|
rol_aplicacion = models.RolAplicacion.objects.filter(id_rol=Contrato.id_rol, id_aplicacion=aplicacion.id_aplicacion).first()
|
||||||
|
escritura = rol_aplicacion.solo_visualizar == False
|
||||||
|
|
||||||
|
return JsonResponse({
|
||||||
|
'path_app': path,
|
||||||
|
'nombre_app': aplicacion.nombre_app,
|
||||||
|
'escritura': escritura
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
registros = models.RolAplicacion.objects.filter(id_rol=Contrato.id_rol)
|
||||||
|
aplicaciones = []
|
||||||
|
for registro in registros:
|
||||||
|
if registro.id_aplicacion.vigente:
|
||||||
|
rol_app = models.RolAplicacion.objects.filter(id_rol=registro.id_rol, id_aplicacion=registro.id_aplicacion).first()
|
||||||
|
|
||||||
|
aplicaciones.append({
|
||||||
|
'path_app': registro.id_aplicacion.path_app,
|
||||||
|
'nombre_app': registro.id_aplicacion.nombre_app,
|
||||||
|
})
|
||||||
|
|
||||||
|
return JsonResponse({ "aplicaciones": aplicaciones })
|
|
@ -49,7 +49,7 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
"errorString": "Dispositivo no identificado"
|
"errorString": "Dispositivo no identificado"
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
@action(detail=False, methods=['post'])
|
@action(detail=False, methods=['post'])
|
||||||
def getInfoDevice(self, request, pk=None):
|
def getInfoDevice(self, request, pk=None):
|
||||||
|
@ -108,7 +108,7 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
|
|
||||||
detalle_lineas = []
|
detalle_lineas = []
|
||||||
for pk_linea in lineas_agrupadas:
|
for pk_linea in lineas_agrupadas:
|
||||||
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
detalle_lineas.append(lineas_agrupadas[pk_linea])
|
||||||
|
|
||||||
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
save_log_dispositivo(id_dispositivo=getInfoDevice['idDispositivo'], accion_url='getInfoDevice')
|
||||||
|
|
||||||
|
@ -119,4 +119,4 @@ class DispositivoViewSet(viewsets.ModelViewSet):
|
||||||
"NroParadero": record.nro_paradero,
|
"NroParadero": record.nro_paradero,
|
||||||
"NombreParadero": record.nombre_paradero
|
"NombreParadero": record.nombre_paradero
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
|
@ -0,0 +1,20 @@
|
||||||
|
from rest_framework import viewsets
|
||||||
|
from rest_framework.response import Response
|
||||||
|
from rest_framework.decorators import action
|
||||||
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
|
from rest_framework import status
|
||||||
|
from .. import models , serializers
|
||||||
|
from django.db import models as dj_models
|
||||||
|
|
||||||
|
class TipoCargoViewSet(viewsets.ModelViewSet):
|
||||||
|
queryset = models.TipoCargo.objects.all()
|
||||||
|
serializer_class = serializers.TipoCargoSerializer
|
||||||
|
|
||||||
|
def create(self, request, *args, **kwargs):
|
||||||
|
# se indica que si no se indico el id, entonces sea el maximo + 1
|
||||||
|
if not request.data.get('id_cargo', None):
|
||||||
|
max_id = models.TipoCargo.objects.aggregate(dj_models.Max('id_cargo'))['id_cargo__max']
|
||||||
|
new_id = max_id + 1 if max_id is not None else 1
|
||||||
|
request.data['id_cargo'] = new_id
|
||||||
|
|
||||||
|
return super().create(request, *args, **kwargs)
|
Loading…
Reference in New Issue