137 lines
7.9 KiB
Python

from django.db import models
from django.core.validators import MinLengthValidator
class Directores(models.Model):
grado = models.CharField(max_length=100, verbose_name="Grado")
nombres = models.CharField(max_length=200, validators=[MinLengthValidator(3)], verbose_name="Nombres y Apellidos")
cargos = models.CharField(max_length=100, verbose_name="Cargos")
def __str__(self):
return f"{self.grado} {self.nombres}"
class Subjefes(models.Model):
grado = models.CharField(max_length=100, verbose_name="Grado")
nombres = models.CharField(max_length=200, validators=[MinLengthValidator(3)], verbose_name="Nombres y Apellidos")
cargos = models.CharField(max_length=100, verbose_name="Cargos")
director = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="subjefes", verbose_name="Director")
def __str__(self):
return f"{self.grado} {self.nombres}"
class Unidades(models.Model):
nombre = models.CharField(max_length=200, unique=True, verbose_name="Nombre de Unidad")
def __str__(self):
return self.nombre
class InventarioAdministrativo(models.Model):
placa_militar = models.CharField(max_length=50, unique=True, verbose_name="Placa Militar")
clase = models.CharField(max_length=100, verbose_name="Clase")
tipo = models.CharField(max_length=100, verbose_name="Tipo")
marca = models.CharField(max_length=100, verbose_name="Marca")
modelo = models.CharField(max_length=100, verbose_name="Modelo")
color = models.CharField(max_length=100, verbose_name="Color")
tipo_vehiculo = models.CharField(max_length=100, verbose_name="Tipo de Vehículo")
placa_mtc = models.CharField(max_length=100, verbose_name="Placa MTC", blank=True, null=True) # Opcional
ano = models.IntegerField(verbose_name="Año", blank=True, null=True) # Cambiado a IntegerField
serial_carroceria = models.CharField(max_length=100, unique=True, verbose_name="Serial de Carrocería")
fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
asignado = models.BooleanField(default=False, verbose_name="Asignado")
def __str__(self):
return f"{self.placa_militar} - {self.marca} {self.modelo} ({self.clase})"
class Meta:
verbose_name = "Inventario Administrativo"
verbose_name_plural = "Inventarios Administrativos"
ordering = ['-fecha_creacion']
indexes = [models.Index(fields=['placa_militar'])]
class InventarioTactico(models.Model):
placa_militar = models.CharField(max_length=50, unique=True, verbose_name="Placa Militar")
tipo = models.CharField(max_length=100, verbose_name="Tipo")
modelo = models.CharField(max_length=100, verbose_name="Modelo")
marca = models.CharField(max_length=100, verbose_name="Marca")
clase = models.CharField(max_length=100, verbose_name="Clase")
color = models.CharField(max_length=100, verbose_name="Color")
tipo_vehiculo = models.CharField(max_length=100, verbose_name="Tipo de Vehículo")
placa_mtc = models.CharField(max_length=100, verbose_name="Placa MTC", blank=True, null=True) # Opcional
ano = models.IntegerField(verbose_name="Año", blank=True, null=True) # Cambiado a IntegerField
serial_chasis = models.CharField(max_length=100, unique=True, verbose_name="Serial del Chasis")
serial_motor = models.CharField(max_length=100, unique=True, verbose_name="Serial del Motor")
fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
asignado = models.BooleanField(default=False, verbose_name="Asignado")
def __str__(self):
return f"{self.tipo_vehiculo} - {self.marca} {self.modelo} (Chasis: {self.serial_chasis})"
class Meta:
verbose_name = "Inventario Táctico"
verbose_name_plural = "Inventarios Tácticos"
ordering = ['-fecha_creacion']
indexes = [models.Index(fields=['placa_militar'])]
class AsignacionAdministrativa(models.Model):
unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_admin", verbose_name="Unidad")
directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_admin", verbose_name="Directores")
jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_admin", verbose_name="Grupo de Trabajo")
vehiculo = models.ForeignKey(InventarioAdministrativo, on_delete=models.CASCADE, related_name="asignaciones_temporales", verbose_name="Vehículo Administrativo")
fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")
def save(self, *args, **kwargs):
self.vehiculo.asignado = True
self.vehiculo.save()
super().save(*args, **kwargs)
def __str__(self):
return f"Asignación de {self.vehiculo} a {self.unidad}"
class AsignadaUnidadAdministrativa(models.Model):
unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_unidad_admin", verbose_name="Unidad")
directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_unidad_admin", verbose_name="Directores")
jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_unidad_admin", verbose_name="Grupo de Trabajo")
vehiculo = models.ForeignKey(InventarioAdministrativo, on_delete=models.CASCADE, related_name="asignaciones_historial", verbose_name="Vehículo")
fecha_creacion = models.DateField(verbose_name="Fecha de Creación")
comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")
def __str__(self):
return f"Asignación histórica de {self.vehiculo} a {self.unidad}"
class AsignacionTactica(models.Model):
unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_tacticas", verbose_name="Unidad")
directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_tacticas", verbose_name="Directores")
jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_tacticas", verbose_name="Grupo de Trabajo")
vehiculo = models.ForeignKey(InventarioTactico, on_delete=models.CASCADE, related_name="asignaciones_temporales", verbose_name="Vehículo Tactico")
fecha_creacion = models.DateField(auto_now_add=True, verbose_name="Fecha de Creación")
comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")
def save(self, *args, **kwargs):
self.vehiculo.asignado = True
self.vehiculo.save()
super().save(*args, **kwargs)
def __str__(self):
return f"Asignación de {self.vehiculo} a {self.unidad}"
class AsignadaUnidadTactica(models.Model):
unidad = models.ForeignKey(Unidades, on_delete=models.CASCADE, related_name="asignaciones_unidad_tacticas", verbose_name="Unidad")
directores = models.ForeignKey(Directores, on_delete=models.CASCADE, related_name="asignaciones_unidad_tacticas", verbose_name="Directores")
jefes = models.ForeignKey(Subjefes, on_delete=models.CASCADE, related_name="asignaciones_unidad_tacticas", verbose_name="Grupo de Trabajo")
vehiculo = models.ForeignKey(InventarioTactico, on_delete=models.CASCADE, related_name="asignaciones_historial", verbose_name="Vehículo")
fecha_creacion = models.DateField(verbose_name="Fecha de Creación")
comprobante = models.CharField(max_length=50, verbose_name="N° Comprobante")
precio = models.DecimalField(max_digits=15, decimal_places=2, verbose_name="Precio")
def __str__(self):
return f"Asignación histórica de {self.vehiculo} a {self.unidad}"