93 lines
3.5 KiB
Python
93 lines
3.5 KiB
Python
from django.db import models
|
|
from api.licence.models import Licencia
|
|
from django.conf import settings
|
|
import uuid
|
|
|
|
class UsoAlmacenamiento(models.Model):
|
|
organizacion = models.OneToOneField('Organizacion', on_delete=models.CASCADE)
|
|
espacio_utilizado = models.PositiveBigIntegerField(default=0) # en bytes
|
|
|
|
class Meta:
|
|
verbose_name = "Uso de Almacenamiento"
|
|
verbose_name_plural = "Usos de Almacenamiento"
|
|
db_table = 'uso_almacenamiento'
|
|
|
|
def __str__(self):
|
|
return f"{self.organizacion} - {self.espacio_utilizado} bytes"
|
|
|
|
@property
|
|
def espacio_disponible(self):
|
|
# Convertir GB de la licencia a bytes (1 GB = 1024^3 bytes)
|
|
max_almacenamiento_bytes = self.organizacion.licencia.almacenamiento * 1024 ** 3
|
|
return max_almacenamiento_bytes - self.espacio_utilizado
|
|
|
|
@property
|
|
def porcentaje_utilizado(self):
|
|
max_almacenamiento_bytes = self.organizacion.licencia.almacenamiento * 1024 ** 3
|
|
if max_almacenamiento_bytes == 0:
|
|
return 0
|
|
return (self.espacio_utilizado / max_almacenamiento_bytes) * 100
|
|
|
|
class Organizacion(models.Model):
|
|
id = models.UUIDField(primary_key=True, default=uuid.uuid4, editable=False)
|
|
licencia = models.ForeignKey(Licencia, on_delete=models.CASCADE, related_name='organizaciones')
|
|
is_agente_aduanal = models.BooleanField(default=False)
|
|
nombre = models.CharField(max_length=100)
|
|
rfc = models.CharField(max_length=25)
|
|
titular = models.CharField(max_length=200)
|
|
email = models.EmailField(max_length=100)
|
|
telefono = models.CharField(max_length=25)
|
|
estado = models.CharField(max_length=50)
|
|
ciudad = models.CharField(max_length=50)
|
|
|
|
is_active = models.BooleanField(default=True)
|
|
is_verified = models.BooleanField(default=False)
|
|
|
|
inicio = models.DateField(null=True, blank=True)
|
|
vencimiento = models.DateField(null=True, blank=True)
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
observaciones = models.TextField(null=True, blank=True)
|
|
|
|
|
|
@property
|
|
def espacio_utilizado(self):
|
|
uso, created = UsoAlmacenamiento.objects.get_or_create(organizacion=self)
|
|
return uso.espacio_utilizado
|
|
|
|
@property
|
|
def espacio_disponible(self):
|
|
uso, created = UsoAlmacenamiento.objects.get_or_create(organizacion=self)
|
|
return (self.licencia.almacenamiento * 1024 ** 3) - uso.espacio_utilizado
|
|
|
|
@property
|
|
def porcentaje_utilizado(self):
|
|
uso, created = UsoAlmacenamiento.objects.get_or_create(organizacion=self)
|
|
if self.licencia.almacenamiento == 0:
|
|
return 0
|
|
return (uso.espacio_utilizado / (self.licencia.almacenamiento * 1024 ** 3)) * 100
|
|
|
|
def __str__(self):
|
|
return self.nombre
|
|
|
|
class Meta:
|
|
verbose_name = "Organizacion"
|
|
verbose_name_plural = "Organizaciones"
|
|
db_table = 'organizacion'
|
|
ordering = ['nombre']
|
|
|
|
class OrganizacionConfiguracion(models.Model):
|
|
organizacion = models.OneToOneField(Organizacion, on_delete=models.CASCADE, related_name='configuracion')
|
|
membretado = models.ImageField(upload_to='membretado/', null=True, blank=True)
|
|
membretado_2 = models.ImageField(upload_to='membretado/', null=True, blank=True)
|
|
|
|
|
|
class Meta:
|
|
verbose_name = "Configuración de Organización"
|
|
verbose_name_plural = "Configuraciones de Organizaciones"
|
|
db_table = 'organizacion_configuracion'
|
|
|
|
def __str__(self):
|
|
return f"Configuración de {self.organizacion.nombre}" |