78 lines
2.8 KiB
Python
78 lines
2.8 KiB
Python
|
|
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
|
|
|
|
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'],
|
|
clave = input['clave'],
|
|
vigente = input.get('vigente', False),
|
|
)
|
|
usuario.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)
|