feat: fmlog 移除route字段

This commit is contained in:
caoqianming 2024-11-28 17:06:42 +08:00
parent 31b1aae03c
commit 6396eff968
4 changed files with 57 additions and 14 deletions

View File

@ -0,0 +1,32 @@
# Generated by Django 3.2.12 on 2024-11-28 09:03
from django.db import migrations, models
import django.utils.timezone
class Migration(migrations.Migration):
dependencies = [
('wpm', '0074_mlog_count_n_b'),
]
operations = [
migrations.CreateModel(
name='BatchSt',
fields=[
('id', models.CharField(editable=False, help_text='主键ID', max_length=20, primary_key=True, serialize=False, verbose_name='主键ID')),
('create_time', models.DateTimeField(default=django.utils.timezone.now, help_text='创建时间', verbose_name='创建时间')),
('update_time', models.DateTimeField(auto_now=True, help_text='修改时间', verbose_name='修改时间')),
('is_deleted', models.BooleanField(default=False, help_text='删除标记', verbose_name='删除标记')),
('batch', models.TextField(verbose_name='批次号')),
('data', models.JSONField(blank=True, default=list, verbose_name='数据')),
],
options={
'abstract': False,
},
),
migrations.RemoveField(
model_name='fmlog',
name='route',
),
]

View File

@ -12,6 +12,17 @@ from django.utils.translation import gettext_lazy as _
# Create your models here.
# class Good(BaseModel):
# """
# 产品状态
# """
# pass
class BatchSt(BaseModel):
"""
批次统计表
"""
batch = models.TextField("批次号")
data = models.JSONField("数据", default=list, blank=True)
class SfLog(CommonADModel):
"""值班记录
@ -139,7 +150,6 @@ class WMaterial(CommonBDModel):
)
class Fmlog(CommonADModel):
route = models.ForeignKey(Route, verbose_name='生产路线', on_delete=models.SET_NULL, null=True, blank=True)
mtask = models.ForeignKey(Mtask, verbose_name='任务', on_delete=models.CASCADE, related_name='fmlog_mtask')
mgroup = models.ForeignKey(Mgroup, verbose_name='工段', on_delete=models.CASCADE, related_name='fmlog_mgroup')
note = models.TextField('备注', default='', blank=True)
@ -274,7 +284,15 @@ class Mlog(CommonADModel):
def audit_ignore_fields(self):
return ['create_by', 'update_by',
'create_time', 'update_time', 'id']
@property
def count_fields(self):
mlog_count_fields = []
for f in Mlog._meta.fields:
if f.name.startswith("count"):
mlog_count_fields.append(f.name)
mlog_count_fields.remove("count_real_eweight")
return mlog_count_fields
class Mlogb(BaseModel):
mlog = models.ForeignKey(Mlog, verbose_name='关联日志',

View File

@ -420,9 +420,10 @@ class MlogSerializer(CustomModelSerializer):
pass
else:
raise ParseError('未提供消耗的车间物料')
attrs['route'] = fmlog.route
attrs['mgroup'] = fmlog.mgroup
attrs['mtask'] = fmlog.mtask
if attrs['mtask'].route:
attrs['route'] = attrs['mtask'].route
if attrs['mtask'].mtaskb and mtaskb is None:
raise ParseError('子任务不能为空')
if mtaskb and mtaskb.mtask != fmlog.mtask:
@ -456,8 +457,6 @@ class MlogSerializer(CustomModelSerializer):
mtask = mtaskb.mtask
attrs['mtask'] = mtask
attrs['handle_user'] = mtaskb.handle_user
else:
mtask: Mtask = attrs.get('mtask', None)
if mtask:
attrs['mgroup'] = mtask.mgroup
attrs['material_in'] = mtask.material_in
@ -792,7 +791,7 @@ class AttLogSerializer(CustomModelSerializer):
class FmlogSerializer(CustomModelSerializer):
routepack_name = serializers.CharField(
source='route.routepack.name', read_only=True)
source='mtask.route.routepack.name', read_only=True)
mtask_number = serializers.CharField(source='mtask.number', read_only=True)
class Meta:
model = Fmlog
@ -800,15 +799,9 @@ class FmlogSerializer(CustomModelSerializer):
read_only_fields = EXCLUDE_FIELDS
def validate(self, attrs):
route: Route = attrs['route']
mtask: Mtask = attrs['mtask']
if mtask.state != Mtask.MTASK_ASSGINED:
raise ParseError('该任务非下达中不可选择')
mgroup: Mgroup = attrs['mgroup']
if route.process != mgroup.process:
raise ParseError('工序不匹配')
if mtask.mgroup != mgroup:
raise ParseError('工段不匹配')
return attrs
class FmlogUpdateSerializer(CustomModelSerializer):

View File

@ -503,8 +503,8 @@ class FmlogViewSet(CustomModelViewSet):
queryset = Fmlog.objects.all()
serializer_class = FmlogSerializer
update_serializer_class = FmlogUpdateSerializer
filterset_fields = ['mtask', 'mgroup', 'route']
select_related_fields = ['mtask', 'mgroup', 'route', 'route__routepack']
filterset_fields = ['mtask', 'mgroup', 'mtask__route']
select_related_fields = ['mtask', 'mgroup', 'mtask__route', 'mtask__route__routepack']
def destroy(self, request, *args, **kwargs):
ins = self.get_object()