317 lines
15 KiB
Python

from django.db import models
from django.utils import timezone
from django.core.exceptions import ValidationError
from django.core.validators import MinValueValidator
import random
# aqui va las tablas de Brigadas, Batallones y Unidades, Armas de las base de datos del saejb
class Brigada(models.Model):
code = models.CharField(max_length=100, unique=True)
nombreB = models.CharField(max_length=100, verbose_name='Brigada')
ubicacionB = models.CharField(max_length=100, verbose_name='Ubicacion')
comandante = models.CharField(max_length=100, verbose_name='Comandante')
telefono = models.CharField(max_length=100, verbose_name='Telefono')
correo = models.CharField(max_length=100, verbose_name='Correo Electronico')
fecha = models.DateField(auto_now_add=True)
def save(self, *args, **kwargs):
if not self.code:
self.code = self.generate_unique_code()
super().save(*args, **kwargs)
@staticmethod
def generate_unique_code():
prefix = 'SAEJB'
suffix = ''.join(str(random.randint(0, 9)) for _ in range(6))
return f'{prefix}{suffix}'
def __str__(self):
fila ="Brigada:" + self.nombreB + "_" + "Ubicación:" + self.ubicacionB + "_" + "Comandante:" + self.comandante + "_" + "Telefono:" + self.telefono + "_" + "Correo Electronico:" + self.correo
return fila
class Batallones(models.Model):
nombreB = models.CharField(max_length=100, verbose_name='Unidad')
ubicacionB = models.CharField(max_length=100, verbose_name='Ubicacion')
comandante = models.CharField(max_length=100, verbose_name='Comandante')
telefono = models.CharField(max_length=100, verbose_name='Telefono')
correo = models.CharField(max_length=100, verbose_name='Correo Electronico')
fecha = models.DateField(auto_now_add=True)
primero = models.ForeignKey(Brigada, on_delete=models.CASCADE, blank=True, default=None)
def __str__(self):
return self.nombreB, self.ubicacionB, self.comandante, self.telefono, self.correo, self.primero
class Armas(models.Model):
categoria = models.CharField(max_length=300, verbose_name='Categoria:')
tipoA = models.CharField(max_length=300, verbose_name='Tipo de Armas:')
modeloA = models.CharField(max_length=300, verbose_name='Modelo de la Armas:')
calibreA = models.CharField(max_length=300, verbose_name='Calibre de la Armas:')
serialA = models.CharField(max_length=8000, verbose_name='Serial de la Armas:')
serialAG = models.CharField(max_length=300, verbose_name='Serial del Asignación:')
fechaAG = models.DateField(verbose_name='Fecha de Asignación:')
opAM = models.CharField(max_length=300, verbose_name='Condiciones:')
cantidadA = models.IntegerField(verbose_name='Armas:')
cantidadC = models.IntegerField(verbose_name='Cargadores:')
ac = models.TextField(verbose_name="Accesorio:",null=True)
armaS = models.CharField(max_length=300, verbose_name='Arma Segundaria:')
calibreS = models.TextField(verbose_name='Tipo,Modelo,Calibre:', null=True, default=None)
serialS = models.TextField(verbose_name='Serial Segundario:', null=True, blank=True, default=None)
cantidadS = models.IntegerField(verbose_name='Cantidad Segundario:', null=True, blank=True, default=None)
fecha = models.DateField(auto_now_add=True)
segundo = models.ForeignKey(Batallones, on_delete=models.CASCADE, blank=True, default=None)
class Meta:
verbose_name_plural = "Armas"
ordering = ['categoria']
def __str__(self):
return f"{self.categoria} - {self.tipoA} - {self.modeloA} - {self.calibreA}- {self.serialA} - {self.serialAG}- {self.opAM} - {self.cantidadA}- {self.cantidadC} - {self.armaS} - {self.calibreS} - {self.serialS} - {self.cantidadS}- {self.ac}"
class Municiones(models.Model):
tipoM = models.CharField(max_length=100, verbose_name='Carga Basica')
serialAG = models.CharField(max_length=100, verbose_name='Serial Asignado')
fechaAG = models.DateField(verbose_name='Fecha de Asignación')
cantidadM = models.CharField(max_length=100, verbose_name='Cantidad')
lote = models.CharField(max_length=100, verbose_name='Lote N°')
fecha = models.DateField(auto_now_add=True)
tercero = models.ForeignKey(Batallones, on_delete=models.CASCADE, blank=True, default=None)
def __str__(self):
return self.tipoM, self.serialAG, self.fechaAG, self.cantidadM, self.lote, self.tercero
# aqui va las tablas de Personal con Armamento de las base de datos del saejb
def validate_year(value):
if value < 1 or value > 9999:
raise ValidationError("El año debe estar entre 1 y 9999.")
class Personas(models.Model):
code = models.CharField(max_length=300, unique=True)
categoria= models.CharField(max_length=300, verbose_name='Categoria:')
grado = models.CharField(max_length=100, verbose_name='Grado:')
promocion = models.TextField(null=True, verbose_name='Promoción:')
anio = models.IntegerField(validators=[validate_year], verbose_name="Año:")
unidad = models.TextField(null=True, verbose_name='Unidad:')
datos = models.CharField(max_length=300, verbose_name='Nombres y Apellidos:')
cedula = models.CharField(max_length=100, verbose_name='Cedula')
armaA = models.TextField(null=True, verbose_name='Arma de Asignada:')
cargadores = models.IntegerField(validators=[MinValueValidator(1)], verbose_name="Cargadores:")
municiones = models.IntegerField(validators=[MinValueValidator(1)], verbose_name="Carga Basica:")
serialA = models.CharField(max_length=100, verbose_name='Serial del Arma')
serialAG = models.CharField(max_length=100, verbose_name='Serial de Asignacion')
fechaAG = models.DateField(null=True, verbose_name='Fecha de Asignacion')
direccion = models.TextField(null=True, verbose_name='Dirección')
telefono = models.CharField(max_length=100, verbose_name='Telefono')
correo = models.CharField(max_length=100, verbose_name='Correo Electronico')
img = models.ImageField(upload_to='imagenes/',verbose_name="Imagen", null=True, blank=True, default='/imagenes/nohay.jpg')
fecha = models.DateField(auto_now_add=True)
def save(self, *args, **kwargs):
if not self.code:
self.code = self.generar_unico_codigo()
super().save(*args, **kwargs)
@staticmethod
def generar_unico_codigo():
prefix = 'SAPRS'
suffix = ''.join(str(random.randint(0, 9)) for _ in range(6))
return f'{prefix}{suffix}'
def delete(self, using=None, keep_parents=False):
self.img.storage.delete(self.img.name)
super().delete()
def __str__(self):
return (self.categoria,
self.grado,
self.promocion,
self.anio,
self.unidad,
self.datos,
self.cedula,
self.armaA,
self.cargadores,
self.municiones,
self.serialA,
self.serialAG,
self.fechaAG,
self.direccion,
self.telefono,
self.correo)
class ArmasDePersonas(models.Model):
armas = models.CharField(max_length=200, verbose_name="Armas Nuevas")
modelo = models.CharField(max_length=200, verbose_name="Modelo")
serial = models.CharField(max_length=200, verbose_name="Serial")
serialag = models.CharField(max_length=200, verbose_name="Serial de Asignación")
fechag = models.CharField(max_length=200, verbose_name="Fecha")
cargadores = models.CharField(max_length=200, verbose_name="Cargadores")
municiones = models.CharField(max_length=200, verbose_name="Munciones")
persona = models.ForeignKey(Personas, on_delete=models.CASCADE, blank=True, default=None)
def __str__(self):
return self.armas, self.modelo,self.serial,self.serialag,self.fechag,self.cargadores,self.municiones
# aqui digitalizacion de documentos antiguos saejb
class BrigadaDigital(models.Model):
nombre = models.CharField(max_length=200, verbose_name="Nombre")
fecha_entrada = models.DateField(auto_now_add=True)
def __str__(self):
return self.nombre
class UnidadDigital(models.Model):
nombreU = models.CharField(max_length=100 , verbose_name="Unidad")
descripcion = models.TextField(verbose_name="Descripcion",null=True)
img = models.ImageField(upload_to='imagenes/',verbose_name="Imagen", null=True)
fecha_entrada = models.DateField(auto_now_add=True)
digital = models.ForeignKey(BrigadaDigital, on_delete=models.CASCADE)
def __str__(self):
return self.nombreU, self.descripcion
def delete(self, using=None, keep_parents=False):
self.img.storage.delete(self.img.name)
super().delete()
# INVENTARIO saejb
class Producto(models.Model):
code = models.CharField(max_length=200, unique=True)
nombre = models.CharField(max_length=300, verbose_name="Producto:")
serial = models.TextField(null=True, verbose_name='Serial')
modelo = models.CharField(max_length=500, verbose_name='Modelo')
descripcion = models.TextField(verbose_name="Descripción", null=True)
fecha_entrada = models.DateField(auto_now_add=True)
cantidad = models.IntegerField(default=0)
precio = models.DecimalField(max_digits=6, decimal_places=2, default=0.0)
def save(self, *args, **kwargs):
if not self.code:
self.code = self.generar_unico_producto()
super().save(*args, **kwargs)
@staticmethod
def generar_unico_producto():
prefix = 'SAPRO'
suffix = ''.join(str(random.randint(0, 9)) for _ in range(6))
return f'{prefix}{suffix}'
def __str__(self):
return self.nombre, self.cantidad, self.descripcion, self.serial, self.modelo
def total(self):
return self.cantidad * self.precio
class Abastecimiento(models.Model):
nombre = models.CharField(max_length=255, verbose_name='Punto de Abastecimiento')
productos = models.ManyToManyField(Producto, through='ProductoAbastecimiento')
def __str__(self):
return self.nombre
class ProductoAbastecimiento(models.Model):
movimiento = models.CharField(max_length=200)
serial = models.TextField(verbose_name="serial", null=True)
producto = models.ForeignKey(Producto, on_delete=models.CASCADE)
abastecimiento = models.ForeignKey(Abastecimiento, on_delete=models.CASCADE)
fecha_salida = models.DateField(auto_now_add=True)
cantidad = models.IntegerField(default=0)
precio = models.DecimalField(max_digits=6, decimal_places=2)
def __str__(self):
return f'{self.producto.nombre} - {self.producto.precio} - {self.producto.serial}'
def total(self):
return self.cantidad * self.precio
class Cemanblin(models.Model):
code = models.CharField(max_length=200, unique=True)
unidad = models.CharField(max_length=300, verbose_name='Nombre de la Unidad')
equipo = models.TextField(verbose_name='Equipo', null=True)
fechaR = models.DateField(auto_now_add=True)
fechaE = models.DateField(verbose_name='Fecha de Entrega')
reparado = models.BooleanField(default=False)
seriales = models.TextField(null=True, blank=True)
descripcion = models.TextField(blank=True, null=True)
personauna = models.CharField(max_length=300, verbose_name='Personas a Firmar')
personados = models.CharField(max_length=300)
personatres = models.CharField(max_length=300)
def save(self, *args, **kwargs):
if not self.code:
self.code = self.generate_unique_code()
super().save(*args, **kwargs)
@staticmethod
def generate_unique_code():
prefix = 'CBLIN'
while True:
suffix = ''.join(str(random.randint(0, 9)) for _ in range(6))
code = f'{prefix}{suffix}'
if not Cemanblin.objects.filter(code=code).exists():
return code
def __str__(self):
return f"{self.unidad}, {self.fechaE}, {self.reparado}, {self.seriales}, {self.descripcion}, {self.personauna}, {self.personados}, {self.personatres}, {self.equipo}"
class Cemantar(models.Model):
code = models.CharField(max_length=200, unique=True)
unidad = models.CharField(max_length=300, verbose_name='Nombre de la Unidad')
equipo = models.TextField(verbose_name='Equipo', null=True)
fechaR = models.DateField(auto_now_add=True)
fechaE = models.DateField(verbose_name='Fecha de Entrega')
reparado = models.BooleanField(default=False)
seriales = models.TextField(null=True, blank=True)
descripcion = models.TextField(blank=True, null=True)
personauna = models.CharField(max_length=300, verbose_name='Personas a Firmar')
personados = models.CharField(max_length=300)
personatres = models.CharField(max_length=300)
def save(self, *args, **kwargs):
if not self.code:
self.code = self.generate_unique_code()
super().save(*args, **kwargs)
@staticmethod
def generate_unique_code():
prefix = 'CMANT'
while True:
suffix = ''.join(str(random.randint(0, 9)) for _ in range(6))
code = f'{prefix}{suffix}'
if not Cemanblin.objects.filter(code=code).exists():
return code
def __str__(self):
return f"{self.unidad}, {self.fechaE}, {self.reparado}, {self.seriales}, {self.descripcion}, {self.personauna}, {self.personados}, {self.personatres}, {self.equipo}"
class Cemansac(models.Model):
code = models.CharField(max_length=200, unique=True)
unidad = models.CharField(max_length=300, verbose_name='Nombre de la Unidad')
equipo = models.TextField(verbose_name='Equipo', null=True)
fechaR = models.DateField(auto_now_add=True)
fechaE = models.DateField(verbose_name='Fecha de Entrega')
reparado = models.BooleanField(default=False)
seriales = models.TextField(null=True, blank=True)
descripcion = models.TextField(blank=True, null=True)
personauna = models.CharField(max_length=300, verbose_name='Personas a Firmar')
personados = models.CharField(max_length=300)
personatres = models.CharField(max_length=300)
def save(self, *args, **kwargs):
if not self.code:
self.code = self.generate_unique_code()
super().save(*args, **kwargs)
@staticmethod
def generate_unique_code():
prefix = 'CMASC'
while True:
suffix = ''.join(str(random.randint(0, 9)) for _ in range(6))
code = f'{prefix}{suffix}'
if not Cemanblin.objects.filter(code=code).exists():
return code
def __str__(self):
return f"{self.unidad}, {self.fechaE}, {self.reparado}, {self.seriales}, {self.descripcion}, {self.personauna}, {self.personados}, {self.personatres}, {self.equipo}"