diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 968ae690..f306bccc 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1049,6 +1049,11 @@ class MlogbwStartTestSerializer(serializers.Serializer): test_equip=test_equip ) +class MlogbOutPatchUpdateSerializer(CustomModelSerializer): + class Meta: + model = Mlogb + fields = ["batch"] + class MlogbOutUpdateSerializer(CustomModelSerializer): mlogbdefect = MlogbDefectSerializer(many=True, required=False) count_json = CountJsonSerializer(required=False, many=True) diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 236bd779..1a0fc458 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -50,7 +50,8 @@ from .serializers import ( MlogQuickSerializer, MlogbwStartTestSerializer, HandoverListSerializer, - BatchChangeSerializer + BatchChangeSerializer, + MlogbOutPatchUpdateSerializer ) from .services import mlog_submit, handover_submit, mlog_revert, get_batch_dag, handover_revert from apps.wpm.services import mlog_submit_validate, generate_new_batch @@ -1020,18 +1021,22 @@ class MlogbInViewSet(BulkCreateModelMixin, BulkUpdateModelMixin, BulkDestroyMode class MlogbOutViewSet(BulkUpdateModelMixin, CustomGenericViewSet): - perms_map = {"put": "mlog.update"} + perms_map = {"put": "mlog.update", "patch": "mlog.update"} queryset = Mlogb.objects.filter(material_out__isnull=False) serializer_class = MlogbOutUpdateSerializer + partial_update_serializer_class = MlogbOutPatchUpdateSerializer def perform_update(self, serializer): - ins: Mlogb = serializer.instance - mlog = MlogViewSet.lock_and_check_can_update(ins.mlog) - material_out = serializer.validated_data.get("material_out") - if material_out and material_out.tracking == Material.MA_TRACKING_SINGLE: - raise ParseError("单件产品不支持直接修改") - ins: Mlogb = serializer.save() - mlog.cal_mlog_count_from_mlogb() + if self.request.method == "PATCH": + serializer.save() + else: + ins: Mlogb = serializer.instance + mlog = MlogViewSet.lock_and_check_can_update(ins.mlog) + material_out = serializer.validated_data.get("material_out") + if material_out and material_out.tracking == Material.MA_TRACKING_SINGLE: + raise ParseError("单件产品不支持直接修改") + ins: Mlogb = serializer.save() + mlog.cal_mlog_count_from_mlogb() class FmlogViewSet(CustomModelViewSet):