factory/apps/cm/models.py

42 lines
1.9 KiB
Python

from django.db import models
from apps.utils.models import BaseModel
from apps.mtm.models import Material
from apps.pum.models import Supplier
from apps.wpm.models import WmStateOption
from rest_framework.exceptions import NotFound, ParseError
# Create your models here.
class LableMat(BaseModel):
"""TN: 标签物料"""
state = models.PositiveSmallIntegerField('状态', default=10, choices=WmStateOption.choices)
material = models.ForeignKey(Material, on_delete=models.CASCADE)
batch = models.TextField('批次号', db_index=True)
supplier = models.ForeignKey(Supplier, verbose_name='外协供应商', on_delete=models.SET_NULL, null=True, blank=True)
notok_sign = models.CharField('不合格标记', max_length=10, null=True, blank=True)
defect = models.ForeignKey("qm.defect", verbose_name='缺陷', on_delete=models.SET_NULL, null=True, blank=True)
material_origin = models.ForeignKey(Material, verbose_name='原始物料', on_delete=models.SET_NULL, null=True, blank=True, related_name='lm_mo')
class LabelTemplate(BaseModel):
"""TN: 标签模板"""
name = models.TextField("名称")
commands = models.JSONField("指令模板", default=list, blank=True)
process_json = models.JSONField("工序", default=list, blank=True)
@classmethod
def gen_commands(cls, label_template, label_template_name, tdata):
if label_template:
lt = LabelTemplate.objects.get(id=label_template)
else:
lt = LabelTemplate.objects.filter(name=label_template_name).first()
if not lt:
raise NotFound("标签模板不存在")
commands:list = lt.commands
try:
n_commands = []
for item in commands:
item = item.format(**tdata)
n_commands.append(item)
except Exception as e:
raise ParseError(f"标签解析错误-{str(e)}")
return n_commands