Files
AS_timbres/IMMEX/serializers.py
2023-11-13 11:45:10 -06:00

194 lines
7.2 KiB
Python

from rest_framework import serializers
from django.contrib.auth import get_user_model
from allauth.account.models import EmailAddress
from django.contrib.auth.models import Permission
from Sistemas.models import Sistema
from .models import ClientesA24, Sistemas_por_cliente_A24, DeviceA24,Modulo
class CustomPermissionSerializer(serializers.ModelSerializer):
activo = serializers.BooleanField(read_only=True)
class Meta:
model = Permission
fields = '__all__'
class ModulosSerializer(serializers.ModelSerializer):
class Meta:
model=Modulo
fields = '__all__'
depth =1
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 = ('pk','RFC', 'Nombre','Activo','fecha_baja',)
class DeviceA24_admin_Serialiazer(serializers.ModelSerializer):
clienteA24 = serializers.SerializerMethodField()
sistema = serializers.SerializerMethodField()
class Meta:
model = DeviceA24
fields = '__all__'
def get_clienteA24(self, obj):
return obj.clienteA24.RFC if obj.clienteA24.RFC else ""
def get_sistema(self,obj):
return obj.sistema.nombre_sistema if obj.sistema.nombre_sistema else ""
class SerialiazerA24(serializers.ModelSerializer):
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)
class Meta:
model = User
fields = ['username', 'password', 'email', 'first_name', 'last_name']
def validate(self, data):
print(f'DATA {data}')
if data['password'] != data['password2']:
raise serializers.ValidationError("Las contraseñas no coinciden.")
return data
def create(self, validated_data):
print(f'CREATE {validated_data}')
password2 = validated_data.get('password2')
if password2:
validated_data.pop('password2')
# Asegurarse de tener el campo 'username' en validated_data
username = self.context['request'].data.get('username')
email = self.context['request'].data.get('email')
first_name = self.context['request'].data.get('first_name')
last_name = self.context['request'].data.get('last_name')
if not username:
raise serializers.ValidationError("El campo 'username' es requerido.")
# Crear el usuario con los datos validados
user = User.objects.create_user(username=username, password=validated_data['password'], email=email, first_name=first_name, last_name= last_name)
# Crea el objeto Email asociado al usuario
EmailAddress.objects.create(user=user, email=user.email, primary=True, verified=False)
return user