Sistema_Gestion_Transporte/project/api/views/usuario.py

81 lines
2.9 KiB
Python
Raw Normal View History

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)