2025-03-23 21:24:08 +10:00
|
|
|
|
from django.db import models
|
|
|
|
|
|
|
|
|
|
|
|
class IssueCategory(models.Model):
|
|
|
|
|
|
"""Категории проблем"""
|
|
|
|
|
|
name = models.CharField(max_length=255, unique=True)
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return self.name
|
|
|
|
|
|
|
|
|
|
|
|
class Zone(models.Model):
|
|
|
|
|
|
"""Зоны, где возникают проблемы"""
|
|
|
|
|
|
name = models.CharField(max_length=255, unique=True)
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return self.name
|
|
|
|
|
|
|
|
|
|
|
|
class Issue(models.Model):
|
|
|
|
|
|
"""Конкретные проблемы"""
|
|
|
|
|
|
category = models.ForeignKey(IssueCategory, on_delete=models.CASCADE, related_name="issues")
|
|
|
|
|
|
zone = models.ForeignKey(Zone, on_delete=models.CASCADE, related_name="issues")
|
|
|
|
|
|
description = models.TextField()
|
|
|
|
|
|
created_at = models.DateTimeField(auto_now_add=True)
|
|
|
|
|
|
updated_at = models.DateTimeField(auto_now=True)
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return f"{self.category.name} - {self.zone.name}: {self.description[:50]}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""GET /api/categories/ – список категорий
|
|
|
|
|
|
POST /api/categories/ – создать категорию
|
|
|
|
|
|
GET /api/zones/ – список зон
|
|
|
|
|
|
POST /api/zones/ – создать зону
|
|
|
|
|
|
GET /api/issues/ – список проблем
|
|
|
|
|
|
POST /api/issues/ – добавить проблему
|
|
|
|
|
|
DELETE /api/issues/<id>/ – удалить проблему"""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
"""Модели справочника номенклатура и сообщения"""
|
|
|
|
|
|
class Nomenclature(models.Model):
|
|
|
|
|
|
name = models.CharField(max_length=255)
|
|
|
|
|
|
short_name = models.CharField(max_length=100)
|
|
|
|
|
|
gtin = models.CharField(max_length=14, unique=True)
|
|
|
|
|
|
groupe_water = models.CharField(max_length=255)
|
|
|
|
|
|
groupe_names = models.CharField(max_length=255)
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return self.name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class Message(models.Model):
|
|
|
|
|
|
identifier = models.CharField(max_length=100, unique=True)
|
|
|
|
|
|
text = models.TextField()
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
2025-03-23 21:45:58 +10:00
|
|
|
|
return f"{self.identifier}: {self.text[:30]}"
|
|
|
|
|
|
|
|
|
|
|
|
class Plant(models.Model):
|
|
|
|
|
|
"""Справочник заводов"""
|
|
|
|
|
|
name = models.CharField(max_length=255, unique=True)
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return self.name
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProductionLine(models.Model):
|
|
|
|
|
|
"""Справочник производственных линий"""
|
|
|
|
|
|
name = models.CharField(max_length=255, unique=True)
|
|
|
|
|
|
plant = models.ForeignKey(Plant, on_delete=models.CASCADE, related_name="lines")
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return f"{self.plant.name} - {self.name}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class ProductionZone(models.Model):
|
|
|
|
|
|
"""Справочник производственных зон"""
|
|
|
|
|
|
name = models.CharField(max_length=255)
|
|
|
|
|
|
line = models.ForeignKey(ProductionLine, on_delete=models.CASCADE, related_name="zones")
|
|
|
|
|
|
|
|
|
|
|
|
class Meta:
|
|
|
|
|
|
unique_together = ('name', 'line') # Зона уникальна в пределах линии
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return f"{self.line.name} - {self.name}"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
class DowntimeReason(models.Model):
|
|
|
|
|
|
"""Справочник причин простоев"""
|
|
|
|
|
|
name = models.CharField(max_length=255, unique=True)
|
|
|
|
|
|
description = models.TextField(blank=True)
|
|
|
|
|
|
|
|
|
|
|
|
def __str__(self):
|
|
|
|
|
|
return self.name
|