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)