2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
from django.db import transaction
|
2024-01-06 12:25:12 -03:00
|
|
|
from django.http import HttpResponse, JsonResponse
|
2023-12-05 10:34:47 -03:00
|
|
|
from rest_framework import viewsets
|
|
|
|
from rest_framework.response import Response
|
2024-01-06 12:25:12 -03:00
|
|
|
from rest_framework.decorators import action
|
2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
from .. import models, schemas, serializers
|
|
|
|
import json
|
|
|
|
import datetime
|
|
|
|
import logging
|
|
|
|
|
|
|
|
class UsuarioViewSet(viewsets.ModelViewSet):
|
|
|
|
queryset = models.Usuario.objects.all()
|
|
|
|
serializer_class = serializers.UsuarioSerializer
|
|
|
|
schema = schemas.UsuarioSchema()
|
|
|
|
|
|
|
|
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()
|
|
|
|
|
|
|
|
usuario = models.Usuario(
|
|
|
|
rut = persona,
|
|
|
|
login = input['login'],
|
|
|
|
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()
|
2024-01-06 12:25:12 -03:00
|
|
|
rol = models.Rol.objects.filter(id_rol = input.get('id_rol')).first()
|
2023-12-05 10:34:47 -03:00
|
|
|
|
|
|
|
usuario = models.Usuario.objects.filter(rut = pk).first()
|
|
|
|
usuario.vigente = input.get('vigente', False)
|
2024-01-06 12:25:12 -03:00
|
|
|
usuario.superuser = input.get('superuser', False)
|
|
|
|
usuario.id_rol = rol
|
2023-12-05 10:34:47 -03:00
|
|
|
usuario.save()
|
|
|
|
|
2024-01-06 12:25:12 -03:00
|
|
|
if 'clave' in input:
|
2023-12-05 10:34:47 -03:00
|
|
|
logging.error('Modificar clave de usuario')
|
2024-01-06 12:25:12 -03:00
|
|
|
logging.error(f'clave = {input["clave"]}')
|
|
|
|
|
2023-12-05 10:34:47 -03:00
|
|
|
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,
|
|
|
|
'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()
|
2024-01-06 12:25:12 -03:00
|
|
|
logging.error(e)
|
2023-12-05 10:34:47 -03:00
|
|
|
return HttpResponse(str(e), status = 500)
|
2024-01-06 12:25:12 -03:00
|
|
|
|
|
|
|
@action(detail=False, methods=['post'])
|
|
|
|
def permiso(self, request):
|
|
|
|
input = json.loads(request.body)
|
|
|
|
|
|
|
|
logging.error(request.jwt_info)
|
|
|
|
usuario = models.Usuario.objects.filter(login=input['login'])
|
|
|
|
|
|
|
|
|
|
|
|
return JsonResponse({
|
|
|
|
"path": input['path'],
|
|
|
|
"permisos": {
|
|
|
|
"": 1,
|
|
|
|
"MensajeParadero": "No considerar, uso futuro"
|
|
|
|
}
|
|
|
|
})
|