ДОбавил изделия и заполнение спецификции изделия
All checks were successful
Deploy MES Core / deploy (push) Successful in 3m27s

This commit is contained in:
2026-04-07 12:09:46 +03:00
parent eb708a3ab7
commit a238c83b04
16 changed files with 1722 additions and 3 deletions

View File

@@ -32,6 +32,9 @@ class ProductEntity(models.Model):
('product', 'Готовое изделие'),
('assembly', 'Сборочная единица'),
('part', 'Деталь'),
('purchased', 'Покупное'),
('casting', 'Литьё'),
('outsourced', 'Аутсорс'),
]
name = models.CharField("Наименование", max_length=255)
@@ -60,6 +63,8 @@ class ProductEntity(models.Model):
pdf_main = models.FileField("Чертёж (PDF)", upload_to="drawings_pdf/%Y/%m/", blank=True, null=True)
preview = models.ImageField("Превью", upload_to="previews/%Y/%m/", blank=True, null=True)
passport_filled = models.BooleanField('Паспорт заполнен', default=False)
class Meta:
verbose_name = "КД (изделие/деталь)"
verbose_name_plural = "КД (изделия/детали)"
@@ -94,4 +99,98 @@ class BOM(models.Model):
def __str__(self):
return f"{self.parent} -> {self.child} x{self.quantity}"
# Create your models here.
class AssemblyPassport(models.Model):
entity = models.OneToOneField(ProductEntity, on_delete=models.CASCADE, related_name='assembly_passport')
weight_kg = models.FloatField('Масса, кг', null=True, blank=True)
coating = models.CharField('Покрытие', max_length=200, blank=True, default='')
coating_color = models.CharField('Цвет', max_length=100, blank=True, default='')
coating_area_m2 = models.FloatField('Площадь покрытия, м²', null=True, blank=True)
technical_requirements = models.TextField('Технические требования', blank=True, default='')
class Meta:
verbose_name = 'Паспорт сборки/изделия'
verbose_name_plural = 'Паспорта сборок/изделий'
def __str__(self):
return str(self.entity)
class WeldingSeam(models.Model):
passport = models.ForeignKey(AssemblyPassport, related_name='welding_seams', on_delete=models.CASCADE)
name = models.CharField('Наименование', max_length=255)
leg_mm = models.FloatField('Катет, мм')
length_mm = models.FloatField('Длина, мм')
quantity = models.PositiveIntegerField('Кол-во', default=1)
class Meta:
verbose_name = 'Сварной шов'
verbose_name_plural = 'Сварные швы'
def __str__(self):
return f"{self.name}"
class PartPassport(models.Model):
entity = models.OneToOneField(ProductEntity, on_delete=models.CASCADE, related_name='part_passport')
thickness_mm = models.FloatField('Толщина, мм', null=True, blank=True)
length_mm = models.FloatField('Длина, мм', null=True, blank=True)
mass_kg = models.FloatField('Масса, кг', null=True, blank=True)
cut_length_mm = models.FloatField('Длина реза, мм', null=True, blank=True)
pierce_count = models.PositiveIntegerField('Кол-во врезок', null=True, blank=True)
engraving = models.TextField('Гравировка', blank=True, default='')
technical_requirements = models.TextField('Технические требования', blank=True, default='')
class Meta:
verbose_name = 'Паспорт детали'
verbose_name_plural = 'Паспорта деталей'
def __str__(self):
return str(self.entity)
class PurchasedPassport(models.Model):
entity = models.OneToOneField(ProductEntity, on_delete=models.CASCADE, related_name='purchased_passport')
gost = models.CharField('ГОСТ/ТУ', max_length=255, blank=True, default='')
class Meta:
verbose_name = 'Паспорт покупного'
verbose_name_plural = 'Паспорта покупного'
def __str__(self):
return str(self.entity)
class CastingPassport(models.Model):
entity = models.OneToOneField(ProductEntity, on_delete=models.CASCADE, related_name='casting_passport')
casting_material = models.CharField('Материал литья', max_length=200, blank=True, default='')
mass_kg = models.FloatField('Масса, кг', null=True, blank=True)
class Meta:
verbose_name = 'Паспорт литья'
verbose_name_plural = 'Паспорта литья'
def __str__(self):
return str(self.entity)
class OutsourcedPassport(models.Model):
entity = models.OneToOneField(ProductEntity, on_delete=models.CASCADE, related_name='outsourced_passport')
technical_requirements = models.TextField('Технические требования', blank=True, default='')
notes = models.TextField('Пояснения', blank=True, default='')
class Meta:
verbose_name = 'Паспорт аутсорса'
verbose_name_plural = 'Паспорта аутсорса'
def __str__(self):
return str(self.entity)