Files
AS_timbres/Sistemas/models.py
2023-01-30 09:07:10 -06:00

111 lines
4.0 KiB
Python

from django.db import models
from django.core.exceptions import ValidationError
from Clientes.models import Clientes
from django.contrib.auth.models import User
from rest_framework.authtoken.models import Token
from django.contrib.auth.models import BaseUserManager
import re
class Sistema(models.Model):
nombre_sistema= models.CharField(max_length=100, blank=False,null=False,unique=True)
# class Meta:
# abstract=True
def __str__(self):
return self.nombre_sistema
class sistemas_por_cliente(models.Model):
id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc', on_delete=models.CASCADE)
cliente = models.ForeignKey(Clientes, related_name='cliente_spc', on_delete=models.CASCADE)
num_licencias= models.IntegerField(default=1)
def __str__(self):
return f'{self.cliente.Nombre}'
class Meta:
ordering= ('-cliente','id_sistema')
class DeviceManager(BaseUserManager):
def generate_unique_username(self,client, device_name, ip_address):
username = f"Device_{client.RFC}_{device_name}_{ip_address}"
username_ = re.sub(r'\W+', '', username)
if User.objects.filter(username=username_).exists():
raise ValidationError(f"El Usuario ya existe {username_}")
return username_
def create_user(self,client, device_name, device_os, ip_address ):
user_= User.objects.create_user(
username=self.generate_unique_username(client,device_name,ip_address)
)
device =self.model(
client=client,
device_name= device_name,
device_os=device_os,
ip_address=ip_address,
username=user_
)
device.save()
Token.objects.create(user=user_)
DeviceHistory.objects.create(device=device)
return device
class Device(models.Model):
client = models.ForeignKey(Clientes,on_delete=models.CASCADE)
device_name = models.CharField(max_length=255)
device_os = models.CharField(max_length=255)
ip_address= models.GenericIPAddressField()
token = models.OneToOneField(Token, on_delete=models.CASCADE, blank=True,null=True)
username = models.OneToOneField(User, on_delete=models.CASCADE)
sistema = models.ForeignKey(Sistema,on_delete=models.CASCADE, blank=True, null=True)
macAddress = models.CharField(max_length=30, unique=True, blank=True,null=True)
#objects = DeviceManager()
def generate_unique_username(self,client, device_name,ip_address, macAddress):
username = f"Device_{client.RFC}_{device_name}_{ip_address}_{macAddress}"
username_ = re.sub(r'\W+', '', username)
if User.objects.filter(username=username_).exists():
raise ValidationError(f"El Usuario ya existe {username_}")
obj= User.objects.create_user(
username=username_
)
return obj
def save(self, *args, **kwargs):
if not self.pk:
obj = self.generate_unique_username(self.client,self.device_name, self.ip_address, self.macAddress)
self.username= obj
token= Token.objects.create(user=obj)
self.token=token
super().save(*args, **kwargs)
DeviceHistory.objects.create(device=self,ip_address=self.ip_address)
def __str__(self):
return f'{self.username}'
class DeviceHistory(models.Model):
device = models.ForeignKey(Device, on_delete=models.CASCADE)
first_authentication = models.DateTimeField(auto_now_add=True)
last_authentication = models.DateTimeField(auto_now=True)
ip_address = models.GenericIPAddressField()
class Maquinas_Conectadas(models.Model):
UserName = models.CharField(max_length=255)
PC_Name = models.CharField(max_length=255)
Is64 = models.BooleanField()
OSversion= models.CharField(max_length=255)
local_ip = models.CharField(max_length=55)
public_ip= models.CharField(max_length=55)
Token = models.CharField(max_length=50)
Cliente = models.CharField(max_length=13)
class Meta:
abstract =True