38207-vm/core/models.py
Flatlogic Bot b4bdae6d89 0.0.1
2026-02-05 09:02:25 +00:00

87 lines
3.2 KiB
Python

from django.db import models
from django.contrib.auth.models import User
class Plant(models.Model):
name = models.CharField(max_length=255)
location = models.CharField(max_length=255, blank=True)
def __str__(self):
return self.name
class Category(models.Model):
name = models.CharField(max_length=100)
class Meta:
verbose_name_plural = "Categories"
def __str__(self):
return self.name
class Product(models.Model):
name = models.CharField(max_length=255)
sku = models.CharField(max_length=100, unique=True)
category = models.ForeignKey(Category, on_delete=models.SET_NULL, null=True)
description = models.TextField(blank=True)
def __str__(self):
return f"{self.name} ({self.sku})"
class Inventory(models.Model):
plant = models.ForeignKey(Plant, on_delete=models.CASCADE, related_name='inventory')
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.DecimalField(max_digits=12, decimal_places=2, default=0)
lot_number = models.CharField(max_length=100, blank=True)
class Meta:
verbose_name_plural = "Inventory"
unique_together = ('plant', 'product', 'lot_number')
def __str__(self):
return f"{self.product.name} at {self.plant.name} - Lot: {self.lot_number or 'N/A'}"
class Machine(models.Model):
STATUS_CHOICES = [
('active', 'Active'),
('maintenance', 'Maintenance'),
('broken', 'Broken'),
]
name = models.CharField(max_length=255)
plant = models.ForeignKey(Plant, on_delete=models.CASCADE, related_name='machines')
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='active')
last_maintenance = models.DateField(null=True, blank=True)
def __str__(self):
return f"{self.name} ({self.plant.name})"
class WorkOrder(models.Model):
STATUS_CHOICES = [
('planned', 'Planned'),
('in_progress', 'In Progress'),
('completed', 'Completed'),
('cancelled', 'Cancelled'),
]
order_number = models.CharField(max_length=50, unique=True)
plant = models.ForeignKey(Plant, on_delete=models.CASCADE)
product = models.ForeignKey(Product, on_delete=models.CASCADE)
quantity = models.PositiveIntegerField()
machine = models.ForeignKey(Machine, on_delete=models.SET_NULL, null=True, blank=True)
status = models.CharField(max_length=20, choices=STATUS_CHOICES, default='planned')
start_date = models.DateTimeField(null=True, blank=True)
end_date = models.DateTimeField(null=True, blank=True)
def __str__(self):
return self.order_number
class Inspection(models.Model):
RESULT_CHOICES = [
('pass', 'Pass'),
('fail', 'Fail'),
]
work_order = models.ForeignKey(WorkOrder, on_delete=models.CASCADE, related_name='inspections')
inspector = models.ForeignKey(User, on_delete=models.SET_NULL, null=True)
result = models.CharField(max_length=10, choices=RESULT_CHOICES)
notes = models.TextField(blank=True)
timestamp = models.DateTimeField(auto_now_add=True)
def __str__(self):
return f"Inspection for {self.work_order.order_number} - {self.result}"