admin_transporte_backend/project/api/views/usuario.py

152 lines
5.8 KiB
Python
Executable File

from django.db import transaction
from django.http import HttpResponse
from rest_framework import viewsets
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()
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)
# validaciones se realiza a nivel del model
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()
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,
'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)