forked from TDTP/admin_transporte_backend
Crea rol basado en Operador y App Tipo Cargo
parent
94a8805f0e
commit
b8d3e8a526
|
@ -52,17 +52,6 @@ class Dispositivo(models.Model):
|
|||
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):
|
||||
id_trip = models.ForeignKey('GtfsTrips', models.DO_NOTHING, db_column='id_trip', blank=True, null=True)
|
||||
start_time = models.TimeField(blank=True, null=True)
|
||||
|
@ -199,6 +188,15 @@ class LineaParadero(models.Model):
|
|||
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):
|
||||
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)
|
||||
|
@ -209,6 +207,7 @@ class Operador(models.Model):
|
|||
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)
|
||||
id_rol = models.ForeignKey(Rol, models.DO_NOTHING, db_column='id_rol', blank=False, null=True)
|
||||
|
||||
class Meta:
|
||||
managed = False
|
||||
|
@ -284,13 +283,6 @@ class Region(models.Model):
|
|||
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):
|
||||
|
@ -352,6 +344,14 @@ class TipoTransporte(models.Model):
|
|||
managed = False
|
||||
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):
|
||||
id_tipo_tratamiento = models.IntegerField(primary_key=True)
|
||||
|
@ -433,3 +433,31 @@ class GtfsArchivo(models.Model):
|
|||
managed = False
|
||||
db_table = 'gtfs_archivo'
|
||||
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 Meta:
|
||||
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__'
|
|
@ -3,7 +3,7 @@ from rest_framework import routers
|
|||
# from api import views
|
||||
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 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 rol_operador
|
||||
from api.views import upload
|
||||
|
@ -31,6 +31,7 @@ router.register('gtfs-archivo', gtfs_archivo.GtfsArchivoViewSet)
|
|||
router.register('roles', rol.RolViewSet)
|
||||
router.register('rolyaplicacion', rolaplicacion.RolAplicacionViewSet, basename='rol_aplicacion')
|
||||
router.register('roles-operadores', rol_operador.RolOperadorViewSet, basename='rol_operador')
|
||||
router.register('tipo-cargo', tipo_cargo.TipoCargoViewSet)
|
||||
|
||||
urlpatterns = [
|
||||
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 })
|
|
@ -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