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)