diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index e9608aec..b23330ad 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -225,6 +225,50 @@ class MlogbDetailSerializer(CustomModelSerializer): model = Mlogb fields = '__all__' +class MlogListSerializer(CustomModelSerializer): + mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True) + supplier_name = serializers.CharField(source='supplier.name', read_only=True) + routepack_name = serializers.CharField(source='route.routepack.name', read_only=True) + belong_dept = serializers.CharField( + source='mgroup.belong_dept.id', read_only=True) + belong_dept_name = serializers.CharField( + source='mgroup.belong_dept.name', read_only=True) + mgroup_name = serializers.CharField( + source='mgroup.name', read_only=True) + mtask_count = serializers.IntegerField( + source='mtask.count', read_only=True) + create_by_name = serializers.CharField( + source='create_by.name', read_only=True) + update_by_name = serializers.CharField( + source='update_by.name', read_only=True) + material_in_ = MaterialSimpleSerializer( + source='material_in', read_only=True) + material_out_ = MaterialSimpleSerializer( + source='material_out', read_only=True) + material_out_name = serializers.StringRelatedField( + source='material_out', read_only=True) + material_in_name = serializers.StringRelatedField( + source='material_in', read_only=True) + handle_user_name = serializers.CharField( + source='handle_user.name', read_only=True) + handle_user_2_name = serializers.CharField( + source='handle_user_2.name', read_only=True) + handle_leader_name = serializers.CharField( + source='handle_leader.name', read_only=True) + equipment_name = serializers.StringRelatedField( + source='equipment', read_only=True) + equipment_2_name = serializers.StringRelatedField( + source='equipment_2', read_only=True) + shift_name = serializers.CharField(source='shift.name', read_only=True) + ticket_ = TicketSimpleSerializer(source='ticket', read_only=True) + test_user_name = serializers.CharField(source='test_user.name', read_only=True) + handle_users_ = UserSimpleSerializer( + source='handle_users', many=True, read_only=True) + + class Meta: + model = Mlog + fields = '__all__' + class MlogSerializer(CustomModelSerializer): mstate_json = serializers.JSONField(source='mgroup.process.mstate_json', read_only=True) supplier_name = serializers.CharField(source='supplier.name', read_only=True) diff --git a/apps/wpm/views.py b/apps/wpm/views.py index 2291ea32..0369e39c 100644 --- a/apps/wpm/views.py +++ b/apps/wpm/views.py @@ -25,7 +25,7 @@ from .serializers import (SflogExpSerializer, SfLogSerializer, StLogSerializer, AttLogSerializer, OtherLogSerializer, MlogInitSerializer, MlogChangeSerializer, MlogbDetailSerializer, MlogbInSerializer, MlogbInUpdateSerializer, MlogbOutUpdateSerializer, FmlogSerializer, FmlogUpdateSerializer, BatchStSerializer, - MlogbwCreateUpdateSerializer, HandoverMgroupSerializer) + MlogbwCreateUpdateSerializer, HandoverMgroupSerializer, MlogListSerializer, MlogbSerializer) from .services import mlog_submit, handover_submit, mlog_revert from apps.wpm.services import mlog_submit_validate, generate_new_batch from apps.wf.models import State @@ -167,6 +167,7 @@ class MlogViewSet(CustomModelViewSet): """ queryset = Mlog.objects.all() serializer_class = MlogSerializer + list_serializer_class = MlogListSerializer select_related_fields = ['create_by', 'update_by', 'mtask', 'mtaskb', 'handle_user', 'handle_user_2', 'equipment', 'mgroup__belong_dept', 'equipment_2', 'material_in', 'material_out', 'route__routepack', @@ -178,11 +179,18 @@ class MlogViewSet(CustomModelViewSet): 'material_in__number', 'material_in__specification', 'batch', 'material_in__model', 'material_out__name', 'material_out__number', 'material_out__specification', 'material_out__model',] - # @transaction.atomic - # def perform_create(self, serializer): - # ins = serializer.save() - # data = MlogSerializer(ins).data - # create_auditlog('create', ins, data) + def add_info_for_list(self, data): + data_dict = {item['id']: {**item, "mlogb_full": [], "mlogb": []} for item in data} + mlogb_qs = Mlogb.objects.filter(mlog__id__in=data_dict.keys()).select_related("material_in", "material_out").order_by("create_time") + mlogb_data = MlogbSerializer(instance=mlogb_qs, many=True).data + for item in mlogb_data: + item_dict = dict(item) + mlog_id = item_dict.get("mlog") + if mlog_id in data_dict: + data_dict[mlog_id]["mlogb_full"].append(item_dict) + if item.get("material_out"): + data_dict[mlog_id]["mlogb"].append(item_dict) + return list(data_dict.values()) @transaction.atomic def perform_destroy(self, instance): @@ -653,7 +661,7 @@ class MlogbwViewSet(CustomModelViewSet): queryset = Mlogbw.objects.all() serializer_class = MlogbwCreateUpdateSerializer filterset_fields = ['mlogb'] - ordering = ["number"] + ordering = ["number", "create_time"] ordering_fields = ["number", "create_time"] def filter_queryset(self, queryset):