81 lines
2.9 KiB
Python
81 lines
2.9 KiB
Python
|
|
from django.db import transaction
|
|
from django.http import HttpResponse
|
|
from django.http import JsonResponse
|
|
from django.core.serializers import serialize
|
|
|
|
from rest_framework import viewsets
|
|
from rest_framework.response import Response
|
|
from rest_framework.decorators import action, api_view, schema
|
|
|
|
from .. import models, schemas, serializers
|
|
from ..validaciones import rut_valido
|
|
import json
|
|
|
|
class UsuarioViewSet(viewsets.ModelViewSet):
|
|
queryset = models.Usuario.objects.all()
|
|
serializer_class = serializers.UsuarioSerializer
|
|
schema = schemas.UsuarioSchema()
|
|
|
|
def create(self, request):
|
|
try:
|
|
with transaction.atomic():
|
|
input = json.loads(request.body)
|
|
if not rut_valido(input['rut']):
|
|
raise ValueError(f"RUT [{input['rut']}] no valido!")
|
|
|
|
num, dv = input['rut'].split('-')
|
|
|
|
usuario = models.Usuario.objects.filter(login = input['login']).first()
|
|
if usuario:
|
|
raise ValueError(f"Usuario [{input['login']}] ya existe!")
|
|
|
|
usuario = models.Usuario.objects.filter(rut = num).first()
|
|
if usuario:
|
|
raise ValueError(f"Usuario con RUT [{input['rut']}] ya existe!")
|
|
|
|
persona = models.Persona.objects.filter(rut = num).first()
|
|
if not persona:
|
|
persona = models.Persona(
|
|
rut = num,
|
|
dv = dv,
|
|
nombres = input['nombres'],
|
|
apellido_a = input['apellido_a'],
|
|
apellido_b = input['apellido_b'],
|
|
email = input['email'],
|
|
)
|
|
persona.save()
|
|
else:
|
|
persona.nombres = input['nombres']
|
|
persona.apellido_a = input['apellido_a']
|
|
persona.apellido_b = input['apellido_b']
|
|
persona.email = input['email']
|
|
persona.save()
|
|
|
|
usuario = models.Usuario(
|
|
rut = persona,
|
|
login = input['login'],
|
|
clave = input['clave'],
|
|
vigente = input['vigente'],
|
|
)
|
|
usuario.save()
|
|
|
|
return Response({
|
|
'rut': f'{persona.rut}-{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)
|