se agrega mantenedor de usuarios y api usuario entrega info de persona
parent
b7d5a786ac
commit
cb1c21031e
|
@ -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)
|
||||||
|
|
|
@ -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','?')}"
|
||||||
raise ValueError(f"RUT [{input['rut']}] no valido!")
|
|
||||||
|
|
||||||
num, dv = input['rut'].split('-')
|
if not rut_valido(rut_completo):
|
||||||
|
raise ValueError(f"RUT [{input['rut']}] no valido!")
|
||||||
|
|
||||||
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
|
@ -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>
|
||||||
|
|
Loading…
Reference in New Issue