tesrecord update bug

This commit is contained in:
caoqianming 2021-12-15 08:45:57 +08:00
parent 3dc67158fc
commit 0a487d4277
8 changed files with 27 additions and 22 deletions

View File

@ -75,8 +75,8 @@ class FIFOItem(BaseModel):
"""
出入库详细条目
"""
is_tested = models.BooleanField('是否已检', default=False)
is_testok = models.BooleanField('是否检合格', default=False)
is_tested = models.BooleanField('是否已检', default=False)
is_testok = models.BooleanField('是否检合格', default=False)
warehouse = models.ForeignKey(WareHouse, on_delete=models.CASCADE, verbose_name='仓库')
material = models.ForeignKey(Material, verbose_name='物料类型', on_delete=models.CASCADE)
count = models.PositiveIntegerField('数量', default=0)

View File

@ -87,14 +87,14 @@ class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet):
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=InmTestRecordCreateSerializer)
def test(self, request, pk=None):
"""
"""
serializer = InmTestRecordCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
vdata = serializer.validated_data
record_data = vdata.pop('record_data')
if 'is_testok' not in vdata:
raise APIException('未填写检结论')
raise APIException('未填写检结论')
with transaction.atomic():
obj = serializer.save(create_by = self.request.user)
tris = []
@ -111,7 +111,7 @@ class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet):
tris.append(TestRecordItem(**m))
TestRecordItem.objects.bulk_create(tris)
# 如果检合格
# 如果检合格
if obj.fifo_item:
obj.fifo_item.is_testok = True if obj.is_testok else False
obj.fifo_item.is_tested = True

View File

@ -86,4 +86,4 @@ class TestRecordItem(BaseModel):
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')
test_record = models.ForeignKey(TestRecord, verbose_name='关联的检记录', on_delete=models.CASCADE, related_name='item_test_record')

View File

@ -106,16 +106,15 @@ class TestRecordDetailSerializer(serializers.ModelSerializer):
return super().to_representation(instance)
class TestRecordUpdateSerializer(serializers.ModelSerializer):
record_data = TestRecordItemUpdateSerializer(source='item_test_record', many=True)
record_data = TestRecordItemUpdateSerializer(many=True)
class Meta:
model = TestRecord
fields = ['is_testok', 'record_data']
def update(self, instance, validated_data):
with transaction.atomic():
record_data = validated_data.pop('record_data')
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
self.record_data.save()
return instance
record_data = validated_data.pop('record_data')
for attr, value in validated_data.items():
setattr(instance, attr, value)
instance.save()
self.record_data.save()
return instance

View File

@ -50,7 +50,7 @@ class TestItemViewSet(CreateUpdateModelAMixin, ModelViewSet):
class TestRecordViewSet(ListModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet):
"""
记录
记录
"""
perms_map = {'*': '*'}
queryset = TestRecord.objects.select_related('fifo_item', 'form').prefetch_related('item_test_record').all()
@ -67,13 +67,19 @@ class TestRecordViewSet(ListModelMixin, UpdateModelMixin, RetrieveModelMixin, De
return TestRecordUpdateSerializer
return super().get_serializer_class()
def update(self, request, *args, **kwargs):
obj = self.get_object()
if obj.is_submited:
raise exceptions.APIException('该记录已提交不可编辑')
return super().update(request, *args, **kwargs)
def destroy(self, request, *args, **kwargs):
obj = self.get_object()
if obj.is_submited:
raise exceptions.APIException('该记录已提交不可删除')
return super().destroy(request, *args, **kwargs)
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=serializers.Serializer)
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=TestRecordUpdateSerializer)
def submit(self, request, pk=None):
obj = self.get_object()
# 校验是否有未填项目
@ -90,7 +96,7 @@ class TestRecordViewSet(ListModelMixin, UpdateModelMixin, RetrieveModelMixin, De
# vdata = serializer.validated_data
# record_data = vdata.pop('record_data')
# if 'is_testok' not in vdata:
# raise APIException('未填写检结论')
# raise APIException('未填写检结论')
# with transaction.atomic():
# obj = serializer.save(create_by = self.request.user)
# tris = []
@ -107,7 +113,7 @@ class TestRecordViewSet(ListModelMixin, UpdateModelMixin, RetrieveModelMixin, De
# tris.append(TestRecordItem(**m))
# TestRecordItem.objects.bulk_create(tris)
# # 如果检合格
# # 如果检合格
# if obj.fifo_item:
# obj.fifo_item.is_testok = True if obj.is_testok else False
# obj.fifo_item.is_tested = True

View File

@ -65,7 +65,7 @@ class PickSerializer(serializers.Serializer):
if isLowLevel:
iproducts = i.pop('iproducts')
i['fifo'] = fifo
i['is_testok'] = True # 默认检合格
i['is_testok'] = True # 默认检合格
i['subproduction_plan'] = sp
fifoitem = FIFOItem.objects.create(**i)
# 创建再下一个层级

View File

@ -39,7 +39,7 @@ class WpmServies(object):
@classmethod
def update_wproduct_by_test(cls, test:TestRecord, user:User):
"""
根据检结果更新玻璃及相关状态
根据检结果更新玻璃及相关状态
"""
is_testok = test.is_testok
wproduct = test.wproduct

View File

@ -223,7 +223,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
@transaction.atomic
def test(self, request, pk=None):
"""
记录提交
记录提交
"""
serializer = WpmTestRecordCreateSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
@ -234,7 +234,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
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('未填写检结论')
raise exceptions.APIException('未填写检结论')
savedict = dict(create_by = self.request.user,
material=wproduct.material, number=wproduct.number, subproduction_plan=wproduct.subproduction_plan, step=wproduct.step)