testrecord update接口
This commit is contained in:
parent
759062e3a2
commit
2062ee7b75
|
@ -62,7 +62,6 @@ class TestRecord(CommonADModel):
|
|||
form = models.ForeignKey('mtm.recordform', verbose_name='所用表格', on_delete=models.CASCADE)
|
||||
type = models.PositiveSmallIntegerField(choices=type_choice, default=TEST_PROCESS)
|
||||
is_testok = models.BooleanField('是否合格', default=True)
|
||||
is_testok_robot = models.BooleanField('自动判定的是否合格', default=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)
|
||||
|
@ -82,5 +81,4 @@ class TestRecordItem(BaseModel):
|
|||
field_value = models.JSONField('录入值', default=dict, blank=True)
|
||||
is_hidden = models.BooleanField('是否隐藏', default=False)
|
||||
is_testok = models.BooleanField('是否合格', null=True, blank=True)
|
||||
is_testok_robot = models.BooleanField('自动判定的是否合格', null=True, blank=True)
|
||||
test_record = models.ForeignKey(TestRecord, verbose_name='关联的检验记录', on_delete=models.CASCADE, related_name='item_test_record')
|
|
@ -109,10 +109,9 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
|
|||
return super().to_representation(instance)
|
||||
|
||||
class TestRecordItemUpdatexSerializer(serializers.Serializer):
|
||||
id = serializers.PrimaryKeyRelatedField(queryset=TestRecordItem.objects.all())
|
||||
field_value = serializers.JSONField(allow_null=True, required=False)
|
||||
is_testok = serializers.BooleanField(allow_null=True, required=False)
|
||||
is_hidden = serializers.BooleanField(default=False)
|
||||
class Meta:
|
||||
model = TestRecordItem
|
||||
fields = ['form_field', 'field_value', 'is_hidden', 'is_testok']
|
||||
|
||||
class TestRecordUpdateSerializer(serializers.ModelSerializer):
|
||||
record_data = TestRecordItemUpdatexSerializer(many=True, write_only=True)
|
||||
|
@ -124,11 +123,23 @@ class TestRecordUpdateSerializer(serializers.ModelSerializer):
|
|||
record_data = validated_data.pop('record_data')
|
||||
for attr, value in validated_data.items():
|
||||
setattr(instance, attr, value)
|
||||
instance.save()
|
||||
for i in record_data:
|
||||
tri = i['id']
|
||||
tri.field_value = i['field_value']
|
||||
tri.is_testok = i['is_testok']
|
||||
tri.is_hidden = i['is_hidden']
|
||||
tri.save()
|
||||
instance.save(self.context['request'].user)
|
||||
# 更新items
|
||||
items = TestRecordItem.objects.filter(test_record=instance, is_deleted=False)
|
||||
for m in record_data: # 保存或创建记录详情
|
||||
form_field = m['form_field']
|
||||
for i in items:
|
||||
if i.form_field == form_field:
|
||||
# 更新操作
|
||||
i.field_value = m['field_value']
|
||||
i.is_testok = m['is_testok']
|
||||
i.is_hidden = m['is_hidden']
|
||||
i.save()
|
||||
else:
|
||||
TestRecordItem.objects.create(
|
||||
form_field=form_field,
|
||||
field_value=m['field_value'],
|
||||
is_testok = m['is_testok'],
|
||||
is_hidden = m['is_hidden'],
|
||||
test_record=instance)
|
||||
return instance
|
||||
|
|
|
@ -188,7 +188,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestFormInitSerializer)
|
||||
def test_init(self, request, pk=None):
|
||||
"""
|
||||
检验表单初始化
|
||||
检验记录创建及初始化
|
||||
"""
|
||||
serializer = WpmTestFormInitSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
|
@ -198,74 +198,31 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
if wproduct.test:
|
||||
raise exceptions.APIException('存在进行中检验')
|
||||
|
||||
data = RecordFormDetailSerializer(instance=form).data
|
||||
data['origin_test'] = None
|
||||
data['form'] = form.id
|
||||
# 如果是复检, 需要带入原数据
|
||||
if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST:
|
||||
# 查找最近一条检验记录
|
||||
trs = wproduct.last_process_test
|
||||
if trs:
|
||||
origin_test = TestRecordDetailSerializer(instance=trs).data
|
||||
data['origin_test_'] = origin_test
|
||||
data['origin_test'] = origin_test.get('id', None)
|
||||
o_dict = {}
|
||||
for i in origin_test['record_data']:
|
||||
o_dict[i['field_key']] = i['field_value']
|
||||
for i in data['form_fields']:
|
||||
i['origin_value'] = o_dict[i['field_key']] if i['field_key'] in o_dict else None
|
||||
i['is_hidden'] = o_dict[i['is_hidden']] if i['is_hidden'] in o_dict else False
|
||||
else:
|
||||
raise exceptions.APIException('原工序检验记录不存在')
|
||||
|
||||
# 后续加入系统自带数据
|
||||
return Response(data)
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer)
|
||||
@transaction.atomic
|
||||
def test(self, request, pk=None):
|
||||
"""
|
||||
检验记录提交
|
||||
"""
|
||||
serializer = WpmTestRecordCreateSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
vdata = serializer.validated_data
|
||||
record_data = vdata.pop('record_data')
|
||||
wproduct = vdata['wproduct']
|
||||
# 根据情况创建一条检验记录
|
||||
if wproduct.act_state not in [WProduct.WPR_ACT_STATE_TOTEST,
|
||||
WProduct.WPR_ACT_STATE_TORETEST, WProduct.WPR_ACT_STATE_TOFINALTEST, WProduct.WPR_ACT_STATE_TOCOMBTEST]:
|
||||
raise exceptions.APIException('该产品当前状态不可检验')
|
||||
if 'is_testok' not in vdata:
|
||||
raise exceptions.APIException('未填写检验结论')
|
||||
|
||||
savedict = dict(create_by = self.request.user,
|
||||
material=wproduct.material, number=wproduct.number, subproduction_plan=wproduct.subproduction_plan, step=wproduct.step)
|
||||
|
||||
savedict = dict(
|
||||
create_by = self.request.user,
|
||||
material=wproduct.material,
|
||||
number=wproduct.number,
|
||||
subproduction_plan=wproduct.subproduction_plan,
|
||||
step=wproduct.step,
|
||||
form=form)
|
||||
if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST:
|
||||
if not vdata['origin_test']:
|
||||
raise exceptions.APIException('自检记录不存在')
|
||||
# 查找最近一条检验记录
|
||||
trs = wproduct.last_process_test
|
||||
savedict['origin_test'] = trs
|
||||
if not trs:
|
||||
raise exceptions.APIException('原工序检验记录不存在')
|
||||
savedict['type'] = TestRecord.TEST_PROCESS_RE
|
||||
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOFINALTEST:
|
||||
savedict['type'] = TestRecord.TEST_FINAL
|
||||
elif wproduct.act_state == WProduct.WPR_ACT_STATE_TOCOMBTEST:
|
||||
savedict['type'] = TestRecord.TEST_COMB
|
||||
obj = serializer.save(**savedict)
|
||||
tris = []
|
||||
for m in record_data: # 保存记录详情
|
||||
m['is_testok'] = m['is_testok'] if 'is_testok' in m else None
|
||||
m['is_hidden'] = m['is_hidden'] if 'is_hidden' in m else None
|
||||
m['test_record'] = obj
|
||||
tris.append(TestRecordItem(**m))
|
||||
TestRecordItem.objects.bulk_create(tris)
|
||||
|
||||
# 如果提交检验
|
||||
if obj.is_submited:
|
||||
WpmServies.update_wproduct_by_test(obj, request.user)
|
||||
else:
|
||||
# 保存当前检验
|
||||
wproduct.test = obj
|
||||
wproduct.update_by = request.user
|
||||
wproduct.save()
|
||||
return Response()
|
||||
tr = TestRecord.objects.create(**savedict)
|
||||
return Response(TestRecordDetailSerializer(instance=tr).data)
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WproductPutInsSerializer)
|
||||
@transaction.atomic
|
||||
|
@ -551,7 +508,7 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd
|
|||
wps = WProduct.objects.filter(ow_wproduct__operation = op)
|
||||
wps.update(is_hidden=True, child=wproduct, update_by=request.user, update_time=timezone.now())
|
||||
else:
|
||||
raise exceptions.APIException('产出物料错误')
|
||||
raise exceptions.APIException('产出物料未填写或填写错误')
|
||||
op.is_submited = True
|
||||
op.save()
|
||||
return Response()
|
||||
|
|
Loading…
Reference in New Issue