85 lines
4.3 KiB
Python
85 lines
4.3 KiB
Python
from django.db import models
|
|
from django.db.models.base import Model
|
|
import django.utils.timezone as timezone
|
|
from django.db.models.query import QuerySet
|
|
from apps.pm.models import ProductionPlan, SubProductionPlan
|
|
from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File
|
|
from utils.model import SoftModel, BaseModel
|
|
from simple_history.models import HistoricalRecords
|
|
from apps.mtm.models import Material, Process, RecordFormField, Step, RecordForm
|
|
|
|
class WMaterial(BaseModel):
|
|
"""
|
|
车间生产物料
|
|
"""
|
|
# workshop = models.ForeignKey(Organization, verbose_name='生产车间', on_delete=models.CASCADE)
|
|
# process = models.ForeignKey(Process, verbose_name='关联大工序', on_delete=models.CASCADE)
|
|
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='关联子计划', on_delete=models.CASCADE)
|
|
material = models.ForeignKey(Material, verbose_name='关联物料', on_delete=models.CASCADE)
|
|
batch = models.CharField('批次号', max_length=100, null=True, blank=True)
|
|
count = models.IntegerField('当前数量', default=0)
|
|
|
|
class WProduct(CommonAModel):
|
|
"""
|
|
半成品/成品
|
|
"""
|
|
act_state_choices=(
|
|
(1, '生产中'),
|
|
(2, '待检测'),
|
|
(3, '已合格')
|
|
)
|
|
number = models.CharField('物品编号', unique=True, null=True, blank=True, max_length=50)
|
|
m_state = models.ForeignKey(Material, verbose_name='所属物料状态', on_delete=models.CASCADE)
|
|
p_state = models.ForeignKey(Step, verbose_name='所在步骤', on_delete=models.CASCADE, null=True, blank=True)
|
|
act_state = models.IntegerField('进行状态', default=0, choices=act_state_choices)
|
|
is_executed = models.BooleanField('子工序是否已执行', default=False)
|
|
parent = models.ForeignKey('self', verbose_name='上一级', on_delete=models.CASCADE, db_constraint=False, null=True, blank=True)
|
|
remark = models.CharField('备注', max_length=200, null=True, blank=True)
|
|
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='当前子生产计划', on_delete=models.CASCADE)
|
|
production_plan = models.ForeignKey(ProductionPlan, verbose_name='关联主生产计划', on_delete=models.CASCADE)
|
|
|
|
|
|
class WProductAction(CommonAModel):
|
|
"""
|
|
生产操作
|
|
"""
|
|
wproducts = models.JSONField('关联产品ID列表', default=list, blank=True)
|
|
m_state = models.ForeignKey(Material, verbose_name='操作时的物料状态', on_delete=models.CASCADE, null=True, blank=True)
|
|
p_state = models.ForeignKey(Step, verbose_name='操作步骤', on_delete=models.CASCADE, null=True, blank=True)
|
|
remark = models.CharField('操作备注', max_length=200, null=True, blank=True)
|
|
|
|
class WProductMaterial(BaseModel):
|
|
"""
|
|
车间生产物料消耗产出表
|
|
"""
|
|
type_choices=(
|
|
(1, '消耗'),
|
|
(2, '产出')
|
|
)
|
|
type = models.IntegerField('类型', default=0, choices=type_choices)
|
|
wproduct_action = models.ForeignKey(WProductAction, verbose_name='关联的生产操作', on_delete=models.CASCADE)
|
|
wmaterial = models.ForeignKey(WMaterial, verbose_name='关联的车间物料', on_delete=models.CASCADE, null=True, blank=True)
|
|
material = models.ForeignKey(Material, verbose_name='可能产出的副产品', on_delete=models.CASCADE, null=True, blank=True)
|
|
count = models.IntegerField('消耗或产出数量')
|
|
|
|
class WProductRecord(CommonAModel):
|
|
"""
|
|
记录表格
|
|
"""
|
|
form = models.ForeignKey(RecordForm, verbose_name='所用的生产记录表格', on_delete=models.CASCADE)
|
|
wproduct_action = models.ForeignKey(WProductAction, verbose_name='关联的生产操作', on_delete=models.CASCADE)
|
|
|
|
|
|
class WProductRecordDetail(BaseModel):
|
|
"""
|
|
记录表格字段值
|
|
"""
|
|
form_field = models.ForeignKey(RecordFormField, verbose_name='关联字段', on_delete=models.CASCADE, db_constraint=False)
|
|
field_name = models.CharField('字段名', max_length=50)
|
|
field_key = models.CharField('字段标识', max_length=50)
|
|
field_type = models.IntegerField('字段类型', choices=RecordForm.type_choices)
|
|
field_value = models.JSONField('录入值', default=dict, blank=True)
|
|
sort = models.IntegerField('排序号', default=1)
|
|
wproduct_record = models.ForeignKey(WProductRecord, verbose_name='关联的生产记录', on_delete=models.CASCADE)
|
|
|