317 lines
15 KiB
Python
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}"
|
|
|