62 lines
2.5 KiB
Python
62 lines
2.5 KiB
Python
from django.db import models
|
|
from django.contrib.auth.models import User
|
|
|
|
class MachineModel(models.Model):
|
|
name = models.CharField("Nombre", max_length=200)
|
|
brand = models.CharField("Marca", max_length=100)
|
|
manual_pdf = models.FileField("Manual (PDF)", upload_to='manuals/', blank=True, null=True)
|
|
|
|
class Meta:
|
|
verbose_name = "Modelo de Máquina"
|
|
verbose_name_plural = "Modelos de Máquinas"
|
|
|
|
def __str__(self):
|
|
return f"{self.brand} {self.name}"
|
|
|
|
class SparePart(models.Model):
|
|
reference_code = models.CharField("Código de Referencia", max_length=100, unique=True)
|
|
name = models.CharField("Nombre", max_length=200)
|
|
description = models.TextField("Descripción", blank=True)
|
|
stock_quantity = models.PositiveIntegerField("Cantidad en Stock", default=0)
|
|
low_stock_threshold = models.PositiveIntegerField("Umbral de Stock Bajo", default=10)
|
|
|
|
class Meta:
|
|
verbose_name = "Repuesto"
|
|
verbose_name_plural = "Repuestos"
|
|
|
|
def __str__(self):
|
|
return self.name
|
|
|
|
class ServiceIntervention(models.Model):
|
|
STATUS_CHOICES = [
|
|
('PENDING', 'Pendiente'),
|
|
('IN_PROGRESS', 'En Progreso'),
|
|
('COMPLETED', 'Completada'),
|
|
('CANCELLED', 'Cancelada'),
|
|
]
|
|
|
|
machine = models.ForeignKey(MachineModel, on_delete=models.CASCADE, related_name='interventions', verbose_name="Máquina")
|
|
technician = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True, related_name='interventions', verbose_name="Técnico")
|
|
status = models.CharField("Estado", max_length=20, choices=STATUS_CHOICES, default='PENDING')
|
|
description = models.TextField("Descripción")
|
|
created_at = models.DateTimeField("Fecha de Creación", auto_now_add=True)
|
|
resolved_at = models.DateTimeField("Fecha de Resolución", null=True, blank=True)
|
|
|
|
class Meta:
|
|
verbose_name = "Intervención de Servicio"
|
|
verbose_name_plural = "Intervenciones de Servicio"
|
|
|
|
def __str__(self):
|
|
return f"Intervención para {self.machine} el {self.created_at.strftime('%d-%m-%Y')}"
|
|
|
|
class TechnicianProfile(models.Model):
|
|
user = models.OneToOneField(User, on_delete=models.CASCADE, related_name='technician_profile', verbose_name="Usuario")
|
|
pin = models.CharField("PIN", max_length=4)
|
|
is_technician = models.BooleanField("Es técnico", default=True)
|
|
|
|
class Meta:
|
|
verbose_name = "Perfil de Técnico"
|
|
verbose_name_plural = "Perfiles de Técnico"
|
|
|
|
def __str__(self):
|
|
return self.user.get_full_name() or self.user.username |