137 lines
7.9 KiB
Python
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}" |