Cambios API Clientes permisos

This commit is contained in:
fjrodriguez
2023-09-22 15:28:52 -06:00
parent 4bdb833cdb
commit ac80bf6a45
12 changed files with 452 additions and 55 deletions

View File

@@ -1,19 +1,142 @@
from rest_framework import serializers
from django.contrib.auth import get_user_model
from allauth.account.models import EmailAddress
from .models import ClientesA24
from Sistemas.models import Sistema
from .models import ClientesA24, Sistemas_por_cliente_A24, DeviceA24
class Sistema_A24_PKRF(serializers.PrimaryKeyRelatedField):
def to_internal_value(self,data):
try:
return Sistema.objects.get(nombre_sistema=data)
except Sistema.DoesNotExist:
raise serializers.ValidationError("Sistema no existe")
class ClientA24_PKRF(serializers.PrimaryKeyRelatedField):
def to_internal_value(self,data):
try:
return ClientesA24.objects.get(RFC=data)
except ClientesA24.DoesNotExist:
raise serializers.ValidationError("No existe Cliente")
class ClientA24_Create_PKRF(serializers.PrimaryKeyRelatedField):
def to_internal_value(self,data):
try:
return ClientesA24.objects.get(RFC=data)
except ClientesA24.DoesNotExist:
return None
#--------SERAILIZERS
class Sistema_Serializer(serializers.ModelSerializer):
class Meta:
model = Sistema
fields = ('nombre_sistema',)
class ClientesA24Serailizer(serializers.ModelSerializer):
class Meta:
model =ClientesA24
fields = ('RFC', 'Nombre','Activo','fecha_baja',)
fields = ('pk','RFC', 'Nombre','Activo','fecha_baja',)
class SerialiazerA24(serializers.ModelSerializer):
pass
clienteA24 = ClientA24_PKRF(queryset=ClientesA24.objects.all())
sistema = Sistema_A24_PKRF(queryset=Sistema.objects.all())
token = serializers.CharField(read_only=True)
class Meta:
model = DeviceA24
fields= ('clienteA24', 'deviceName', 'deviceOS', 'deviceIP', 'token', 'sistema', 'MAC', 'dataBase',)
def create(self, validated_data):
# Extraer los datos obligatorios de la solicitud
clienteA24 = validated_data['clienteA24']
deviceName = validated_data['deviceName']
deviceOS = validated_data['deviceOS']
deviceIP = validated_data['deviceIP']
MAC = validated_data['MAC']
sistema=validated_data['sistema']
dataBase = validated_data['dataBase']
# Verificar si ya existe un dispositivo con los mismos datos
existing_device = DeviceA24.objects.filter(
clienteA24=clienteA24,
#deviceName=deviceName,
#deviceOS=deviceOS,
#deviceIP=deviceIP,
MAC=MAC,
sistema=sistema,
dataBase=dataBase
).first()
if existing_device:
# Si ya existe un dispositivo con los mismos datos, puedes devolverlo
return existing_device
# Si no existe, crear un nuevo objeto DeviceA24
device_a24 = DeviceA24.objects.create(
clienteA24=clienteA24,
deviceName=deviceName,
deviceOS=deviceOS,
deviceIP=deviceIP,
MAC=MAC,
sistema=sistema,
dataBase=dataBase,
)
# Generar el nombre de usuario y otros campos automáticos
device_a24.username = device_a24.generate_username(clienteA24, deviceName, MAC)
device_a24.save() # Guardar para generar el timestamp
return device_a24
class Sistema_Por_Cliente_Serializer(serializers.ModelSerializer):
id_sistema = Sistema_A24_PKRF(queryset=Sistema.objects.all())
cliente = ClientA24_Create_PKRF(queryset=ClientesA24.objects.all())
clienteA24 = serializers.CharField(read_only=True)
token = serializers.CharField(read_only=True)
nombre_sistema = serializers.SerializerMethodField() # Agrega estos campos
rfc_cliente = serializers.SerializerMethodField()
class Meta:
model = Sistemas_por_cliente_A24
fields = ('id_sistema','cliente', 'clienteA24', 'token', 'nombre_sistema', 'rfc_cliente',)
def create(self, validated_data):
cliente = validated_data.get('cliente')
print('validated_data', validated_data)
if not cliente:
print("context clienteA24 ",self.context.get('clienteA24'))
print("context DeviceA24 ",self.context.get('DeviceA24'))
nuevo_cliente = self.context.get('clienteA24')
cliente = ClientesA24.objects.create(**nuevo_cliente)
sistema_por_cliente = Sistemas_por_cliente_A24.objects.create(
id_sistema=validated_data['id_sistema'],
cliente=cliente
)
device_serializer_data = self.context.get('DeviceA24')
device_serailizer = SerialiazerA24(data=device_serializer_data)
if device_serailizer.is_valid():
device = device_serailizer.save()
sistema_por_cliente.token=device.token
else:
sistema_por_cliente.token=""
return sistema_por_cliente
def get_nombre_sistema(self, obj):
return obj.id_sistema.nombre_sistema if obj.id_sistema else ""
def get_rfc_cliente(self, obj):
return obj.cliente.RFC if obj.cliente else ""
User = get_user_model()
class SignupSerializer(serializers.Serializer):
password = serializers.CharField(write_only=True)
password2 = serializers.CharField(write_only=True)