diff --git a/apps/bi/views.py b/apps/bi/views.py index 87e88192..6912ae74 100644 --- a/apps/bi/views.py +++ b/apps/bi/views.py @@ -146,7 +146,9 @@ class DatasetRecordViewSet(ListModelMixin, CustomGenericViewSet): queryset = DatasetRecord.objects.all() serializer_class = DatasetRecordSerializer filterset_fields = { - "timex": ["year", "month", "day"] + "timex": ["year", "month", "day"], + "dataset": ["exact"], + "dataset__code": ["exact"] } diff --git a/apps/mtm/models.py b/apps/mtm/models.py index d68d90e0..c81b87ed 100644 --- a/apps/mtm/models.py +++ b/apps/mtm/models.py @@ -119,6 +119,10 @@ class Material(CommonAModel): def __str__(self): return f'{self.name}|{self.specification if self.specification else ""}|{self.model if self.model else ""}|{self.process.name if self.process else ""}' + @property + def fname(self): + return f'{self.name}|{self.specification if self.specification else ""}|{self.model if self.model else ""}|{self.process.name if self.process else ""}' + class Shift(CommonBModel): """TN:班次 diff --git a/apps/utils/mixins.py b/apps/utils/mixins.py index ac80731d..c3df566c 100755 --- a/apps/utils/mixins.py +++ b/apps/utils/mixins.py @@ -94,10 +94,10 @@ class BulkCreateModelMixin(CreateModelMixin): for item in rdata: if "id" in item and item["id"]: raise ParseError('创建数据中不能包含id字段') + many = True else: if "id" in rdata and rdata["id"]: raise ParseError('创建数据中不能包含id字段') - many = True sr = self.get_serializer(data=rdata, many=many) sr.is_valid(raise_exception=True) self.perform_create(sr) diff --git a/apps/wf/services.py b/apps/wf/services.py index cddccfd4..3b6dcad3 100755 --- a/apps/wf/services.py +++ b/apps/wf/services.py @@ -304,7 +304,7 @@ class WfService(object): if ticket is None: # 创建工单逻辑 if transition: - if transition.workflow.id != workflow.id: + if workflow and transition.workflow.id != workflow.id: raise ParseError("当前流转不属于该工作流") workflow = transition.workflow diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 8143d366..4e2dd35e 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -1182,6 +1182,7 @@ class HandoverSerializer(CustomModelSerializer): material_ = MaterialSimpleSerializer(source='material', read_only=True) material_name = serializers.StringRelatedField( source='material', read_only=True) + material_changed_fname = serializers.CharField(source='material_changed.fname', read_only=True) wm_notok_sign = serializers.CharField(source='wm.notok_sign', read_only=True) handoverb = HandoverbSerializer(many=True, required=False) ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) @@ -1189,13 +1190,15 @@ class HandoverSerializer(CustomModelSerializer): def validate(self, attrs): if "mtype" not in attrs: attrs['mtype'] = Handover.H_NORMAL - mtype = attrs["mtype"] if 'type' not in attrs: attrs['type'] = Handover.H_NORMAL + if attrs["type"] == Handover.H_CHANGE: + attrs["mtype"] = Handover.H_MERGE if "material_changed" not in attrs: raise ParseError("必须指定改版后的物料") - + + mtype = attrs["mtype"] if mtype == Handover.H_MERGE: new_state = None new_wm:WMaterial = attrs.get("new_wm", None) diff --git a/apps/wpm/services.py b/apps/wpm/services.py index f6d1a27c..7bb9a5d5 100644 --- a/apps/wpm/services.py +++ b/apps/wpm/services.py @@ -720,8 +720,6 @@ def handover_submit(handover:Handover, user: User, now: Union[datetime.datetime, recive_mgroup = handover.recive_mgroup recive_dept = handover.recive_dept - if handover.type == Handover.H_CHANGE: - handover.mtype = Handover.H_MERGE new_batch = handover.new_batch if new_batch and mtype != Handover.H_MERGE: raise ParseError("只有合并时才能提供新批次号") diff --git a/apps/wpm/views.py b/apps/wpm/views.py index fe600205..d6c0ca6a 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -524,7 +524,7 @@ class HandoverViewSet(CustomModelViewSet): queryset = Handover.objects.all() list_serializer_class = HandoverListSerializer serializer_class = HandoverSerializer - select_related_fields = ["send_user", "send_mgroup", "send_dept", "recive_user", "recive_mgroup", "recive_dept", "wm"] + select_related_fields = ["send_user", "send_mgroup", "send_dept", "recive_user", "recive_mgroup", "recive_dept", "wm", "material_changed", "material"] filterset_class = HandoverFilter search_fields = ["id", "material__name", "material__number", "material__specification", "batch", "material__model", "b_handover__batch", "new_batch", "wm__batch"] prefetch_related_fields = [Prefetch("b_handover", queryset=Handoverb.objects.select_related("wm__defect"))]