hberp/hb_server/apps/qm/models.py

86 lines
3.9 KiB
Python

from django.db import models
from django.db.models.enums import Choices
from apps.mtm.models import RecordForm, RecordFormField
from apps.system.models import CommonADModel, CommonAModel, File
from utils.model import BaseModel
# Create your models here.
class Standard(CommonAModel):
"""
标准
"""
number = models.CharField('标准编号', max_length=100)
name = models.CharField('标准名称', max_length=100)
enabled = models.BooleanField('是否启用', default=True)
file = models.ForeignKey(File, verbose_name='文件', null=True, blank=True, on_delete=models.CASCADE)
class Meta:
verbose_name = '标准库'
verbose_name_plural = verbose_name
def __str__(self):
return self.number + '-' + self.name
class TestItem(CommonAModel):
"""
检验项目
"""
name = models.CharField('名称', max_length=100)
standard = models.ForeignKey(Standard, verbose_name='关联标准', on_delete=models.CASCADE)
term_number = models.CharField('条款号', max_length=100)
class Meta:
verbose_name = '检验项目'
verbose_name_plural = verbose_name
class AnalysisItem(CommonAModel):
"""
检验分析项
"""
name = models.CharField('名称', max_length=100)
testitem = models.ForeignKey(TestItem, on_delete=models.CASCADE, verbose_name='关联检验项目')
rules =models.JSONField('判定规则', default=list)
class Meta:
verbose_name = '检验分析项'
class TestRecord(CommonADModel):
"""
检验记录
"""
TEST_FIRST = 10
TEST_PROCESS = 20
TEST_PROCESS_RE = 30
TEST_COMB = 36
TEST_FINAL = 40
type_choice = (
(TEST_PROCESS, '工序检验'),
(TEST_PROCESS_RE, '工序复检'),
(TEST_COMB, '夹层检验'),
(TEST_FINAL, '成品检验'),
(TEST_FIRST, '首件检验')
)
form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE)
type = models.PositiveSmallIntegerField(choices=type_choice, default=TEST_PROCESS)
is_testok = models.BooleanField('是否合格', null=True, blank=True)
number = models.CharField('产品编号', null=True, blank=True, max_length=50)
wproduct = models.ForeignKey('wpm.wproduct', verbose_name='关联的动态产品', on_delete=models.CASCADE, null=True, blank=True, related_name='test_wproduct')
material = models.ForeignKey('mtm.material', verbose_name='关联的物料状态', on_delete=models.CASCADE, null=True, blank=True)
step = models.ForeignKey('mtm.step', verbose_name='关联的工序步骤', on_delete=models.CASCADE, null=True, blank=True)
subproduction_plan = models.ForeignKey('pm.subproductionplan', verbose_name='关联的生产子计划', on_delete=models.CASCADE, null=True, blank=True, related_name='test_subplan')
fifo_item = models.ForeignKey('inm.fifoitem', verbose_name='关联的出入库批次', on_delete=models.CASCADE, null=True, blank=True, related_name='test_fifoitem')
origin_test = models.ForeignKey('self', verbose_name='原检验记录', on_delete=models.CASCADE, null=True, blank=True)
is_submited = models.BooleanField('是否提交', default=False)
is_midtesting = models.BooleanField('是否子工序检验中', default=False)
remark = models.TextField('备注', default='')
number = models.CharField('玻璃编号', max_length=20, null=True, blank=True)
class TestRecordItem(CommonADModel):
"""
记录表格字段值
"""
form_field = models.ForeignKey(RecordFormField, verbose_name='关联自定义表格字段', on_delete=models.CASCADE)
field_value = models.JSONField('录入值', null=True, blank=True)
is_hidden = models.BooleanField('是否隐藏', default=False)
is_testok = models.BooleanField('是否合格', null=True, blank=True)
test_record = models.ForeignKey(TestRecord, verbose_name='关联的检验记录', on_delete=models.CASCADE, related_name='item_test_record')