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}"