Files
AS_timbres/IMMEX/models.py
2023-11-30 10:42:06 -06:00

121 lines
4.6 KiB
Python

from django.db import models
from django.contrib.auth.models import User
from Sistemas.models import Sistema
from rest_framework.authtoken.models import Token
from django.utils import timezone
import re
class ClientesA24(models.Model):
RFC = models.CharField(max_length=13, unique=True)
Nombre = models.CharField(max_length=100)
Activo = models.BooleanField(default=False)
fecha_baja = models.DateField(blank=True,null=True)
class Meta:
ordering = ('-Activo','RFC',)
def __str__(self):
return self.Nombre
class Sistemas_por_cliente_A24(models.Model):
id_sistema= models.ForeignKey(Sistema, related_name='sistema_spc_IMMEX', on_delete=models.CASCADE)
cliente = models.ForeignKey(ClientesA24, related_name='cliente_spc_IMMEX', on_delete=models.CASCADE)
num_licencias= models.IntegerField(default=1)
def __str__(self):
return f'{self.cliente.Nombre}, {self.id_sistema.nombre_sistema} '
class Meta:
ordering= ('-cliente','id_sistema')
unique_together = ('id_sistema', 'cliente')
class DeviceA24(models.Model):
clienteA24 = models.ForeignKey(ClientesA24,on_delete=models.CASCADE)
deviceName = models.CharField(max_length=255)
deviceOS = models.CharField(max_length=255)
deviceIP = models.GenericIPAddressField()
token = models.ForeignKey(Token, on_delete=models.CASCADE, max_length=40, blank=True,null=True)
username = models.ForeignKey(User, on_delete=models.CASCADE)
sistema = models.ForeignKey(Sistema, on_delete=models.CASCADE)
MAC = models.CharField(max_length=30, blank=True, null=True)
dataBase = models.CharField(max_length=40, blank=True,null=True)
timestamp = models.DateTimeField(auto_now_add=True)
class Meta:
ordering = ('username',)
#abstract=True
def generate_username(self,client, device_name, mac_address):
""""""
username_ = f"IMMEX_{client.RFC}_{device_name}_{mac_address}"
username_ = re.sub(r'\W+', '', username_)
if User.objects.filter(username=username_).exists():
return User.objects.get(username=username_)
return User.objects.create_user(username=username_)
def save(self,*args, **kwargs):
"""Overrides save method"""
if not self.pk:
obj = self.generate_username(self.clienteA24, self.deviceName, self.MAC)
self.username=obj
token, created = Token.objects.get_or_create(user=obj)
self.token = token
super().save(*args, **kwargs)
def __str__(self):
return f'{self.username}'
class ActiveTokenSession(models.Model):
token = models.ForeignKey(Token, on_delete=models.CASCADE, db_index=True)
start_time = models.DateTimeField(default=timezone.now)
last_time = models.DateTimeField(default=timezone.now)
has_expired = models.BooleanField(default=False)
def is_expired(self, expiration_minutes):
expiration_time = self.start_time + timezone.timedelta(minutes=expiration_minutes)
return expiration_time < timezone.now()
##--------------------------PERMISOS
class Permisos_A24(models.Model):
nombre= models.CharField(max_length=100)
def __str__(self) -> str:
return f'{self.nombre}'
class Modulo(models.Model):
nombre = models.CharField(max_length=100)
#sistema_cliente = models.ForeignKey(Sistemas_por_cliente_A24, on_delete=models.CASCADE)
permisos = models.ManyToManyField(Permisos_A24)
def __str__(self) -> str:
return f'{self.nombre}'
class Suspension_Modulos_Permisos_Cliente(models.Model):
sistema_cliente = models.ForeignKey(Sistemas_por_cliente_A24, on_delete=models.CASCADE)
def __str__(self) -> str:
return f'{self.sistema_cliente} {self.sistema_cliente.id_sistema.nombre_sistema}'
class SuspensionModulo(models.Model):
supension_modPerm_id = models.ForeignKey(Suspension_Modulos_Permisos_Cliente, on_delete=models.CASCADE)
modulo = models.ForeignKey(Modulo, on_delete=models.CASCADE)
suspendido = models.BooleanField(default=False)
def __str__(self) -> str:
return f'{self.modulo}'
class SuspensionPermiso(models.Model):
supension_modPermP = models.ForeignKey(Suspension_Modulos_Permisos_Cliente, on_delete=models.CASCADE)
suspension_modulo = models.ForeignKey(Modulo, on_delete=models.CASCADE,blank=True,null=True)
permiso = models.ForeignKey(Permisos_A24, on_delete=models.CASCADE)
suspendido = models.BooleanField(default=False)
def __str__(self) -> str:
return f'{self.permiso}'
class Meta:
ordering=['suspension_modulo']