se agrega mantenedor de usuarios y api usuario entrega info de persona

develop/Rodrigo/Backend
Francisco Sandoval 2023-07-12 18:25:08 -04:00
parent b7d5a786ac
commit cb1c21031e
5 changed files with 113 additions and 87 deletions

View File

@ -1,5 +1,7 @@
from rest_framework import serializers from rest_framework import serializers
from django.forms.models import model_to_dict from django.forms.models import model_to_dict
from django.core.serializers import serialize
from . import models from . import models
class AplicacionSerializer(serializers.ModelSerializer): class AplicacionSerializer(serializers.ModelSerializer):
@ -38,22 +40,16 @@ class PersonaSerializer(serializers.ModelSerializer):
fields = '__all__' fields = '__all__'
class UsuarioSerializer(serializers.ModelSerializer): class UsuarioSerializer(serializers.ModelSerializer):
# muestro informacion de persona en un objeto aparte
persona = serializers.SerializerMethodField()
class Meta: class Meta:
model = models.Usuario model = models.Usuario
fields = '__all__' fields = '__all__'
read_only_fields = ['login'] read_only_fields = ['login']
def get_fields(self): def get_persona(self, row):
fields = super().get_fields() return model_to_dict(row.rut)
action = self.context['view'].action
print({ 'action': action })
if action == 'retrieve' or action == 'list':
fields = {
'login': fields['login'],
'vigente': fields['vigente'],
'rut': fields['rut'],
}
return fields
def to_representation(self, instance): def to_representation(self, instance):
representation = super().to_representation(instance) representation = super().to_representation(instance)

View File

@ -17,51 +17,64 @@ class UsuarioViewSet(viewsets.ModelViewSet):
serializer_class = serializers.UsuarioSerializer serializer_class = serializers.UsuarioSerializer
schema = schemas.UsuarioSchema() schema = schemas.UsuarioSchema()
def retrieve(self, request, pk=None):
print({ 'pk': pk })
data = super().retrieve(request, pk)
print({ 'data': data })
return data
def create(self, request): def create(self, request):
try: try:
with transaction.atomic(): with transaction.atomic():
input = json.loads(request.body) input = json.loads(request.body)
if not rut_valido(input['rut']): rut_completo = f"{input['rut']}-{input.get('dv','?')}"
if not rut_valido(rut_completo):
raise ValueError(f"RUT [{input['rut']}] no valido!") raise ValueError(f"RUT [{input['rut']}] no valido!")
num, dv = input['rut'].split('-')
usuario = models.Usuario.objects.filter(login = input['login']).first() usuario = models.Usuario.objects.filter(login = input['login']).first()
if usuario: if usuario:
raise ValueError(f"Usuario [{input['login']}] ya existe!") raise ValueError(f"Usuario [{input['login']}] ya existe!")
usuario = models.Usuario.objects.filter(rut = num).first() usuario = models.Usuario.objects.filter(rut = input['rut']).first()
if usuario: if usuario:
raise ValueError(f"Usuario con RUT [{input['rut']}] ya existe!") raise ValueError(f"Usuario con RUT [{input['rut']}] ya existe!")
persona = models.Persona.objects.filter(rut = num).first() 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: if not persona:
persona = models.Persona( persona = models.Persona(
rut = num, rut = input['rut'],
dv = dv, dv = input['dv'],
nombres = input['nombres'], nombres = input['nombres'],
apellido_a = input['apellido_a'], apellido_a = input.get('apellido_a',None),
apellido_b = input['apellido_b'], apellido_b = input.get('apellido_b',None),
email = input['email'], email = input.get('email',None),
id_tipo_tratamiento = id_tipo_tratamiento
) )
persona.save() persona.save()
else: else:
persona.nombres = input['nombres'] persona.nombres = input['nombres']
persona.apellido_a = input['apellido_a'] persona.apellido_a = input.get('apellido_a',None)
persona.apellido_b = input['apellido_b'] persona.apellido_b = input.get('apellido_b',None)
persona.email = input['email'] persona.email = input.get('email',None)
persona.id_tipo_tratamiento = id_tipo_tratamiento
persona.save() persona.save()
usuario = models.Usuario( usuario = models.Usuario(
rut = persona, rut = persona,
login = input['login'], login = input['login'],
clave = input['clave'], clave = input['clave'],
vigente = input['vigente'], vigente = input.get('vigente', False),
) )
usuario.save() usuario.save()
return Response({ return Response({
'rut': f'{persona.rut}-{persona.dv}', 'rut': persona.rut,
'dv': persona.dv,
'nombres': persona.nombres, 'nombres': persona.nombres,
'apellido_a': persona.apellido_a, 'apellido_a': persona.apellido_a,
'apellido_b': persona.apellido_b, 'apellido_b': persona.apellido_b,

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@ -4,7 +4,7 @@
<meta charset="UTF-8" /> <meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>...</title> <title>...</title>
<script type="module" crossorigin src="/assets/index-95f1227e.js"></script> <script type="module" crossorigin src="/assets/index-117b167d.js"></script>
<link rel="stylesheet" href="/assets/index-b640e145.css"> <link rel="stylesheet" href="/assets/index-b640e145.css">
</head> </head>
<body> <body>