diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 83152be0..cb24b878 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -109,7 +109,7 @@ class MIOItemCreateSerializer(CustomModelSerializer): class Meta: model = MIOItem fields = ['mio', 'warehouse', 'material', - 'batch', 'count', 'assemb', 'is_testok', 'mioitemw', 'mb', 'wm'] + 'batch', 'count', 'assemb', 'is_testok', 'mioitemw', 'mb', 'wm', 'unit_price'] extra_kwargs = { 'mio': {'required': True}, 'warehouse': {'required': False}, 'material': {'required': False}, 'batch': {'required': False}} @@ -207,8 +207,7 @@ class MIOItemAListSerializer(CustomModelSerializer): class MIOItemSerializer(CustomModelSerializer): - warehouse_name = serializers.CharField( - source='warehouse.name', read_only=True) + warehouse_name = serializers.CharField(source='warehouse.name', read_only=True) material_ = MaterialSerializer(source='material', read_only=True) assemb = MIOItemAListSerializer( source='a_mioitem', read_only=True, many=True) @@ -222,6 +221,15 @@ class MIOItemSerializer(CustomModelSerializer): model = MIOItem fields = '__all__' + def to_representation(self, instance): + ret = super().to_representation(instance) + ret["price"] = None + if ret["unit_price"] is not None: + ret["price"] = ret["count"] * ret["unit_price"] + return ret + +class MioItemDetailSerializer(MIOItemSerializer): + mio_ = MIOListSerializer(source='mio', read_only=True) class MIODoSerializer(CustomModelSerializer): diff --git a/apps/inm/views.py b/apps/inm/views.py index 0b57f514..2a1b8085 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -14,7 +14,7 @@ from apps.inm.serializers import ( MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer, MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer, - MIOItemwSerializer) + MIOItemwSerializer, MioItemDetailSerializer) from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.inm.services import InmService @@ -25,6 +25,8 @@ from apps.utils.permission import has_perm from .filters import MaterialBatchFilter, MioFilter from apps.qm.serializers import FtestProcessSerializer from apps.mtm.models import Material +from drf_yasg.utils import swagger_auto_schema +from drf_yasg import openapi # Create your views here. @@ -243,6 +245,7 @@ class MIOItemViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyMode perms_map = {'get': '*', 'post': '*', 'delete': '*'} queryset = MIOItem.objects.all() serializer_class = MIOItemSerializer + retrieve_serializer_class = MioItemDetailSerializer create_serializer_class = MIOItemCreateSerializer select_related_fields = ['warehouse', 'mio', 'material', 'test_user'] filterset_fields = { @@ -258,9 +261,28 @@ class MIOItemViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyMode ordering_fields = ['create_time', 'test_date'] def add_info_for_list(self, data): - + with_mio = self.request.query_params.get('with_mio', "no") + if with_mio == "yes" and isinstance(data, list): + mio_ids = [item['mio'] for item in data] + mio_qs = MIO.objects.filter(id__in=mio_ids) + mio_qs_= MIOListSerializer(mio_qs, many=True).data + mio_dict = {mio['id']: mio for mio in mio_qs_} + for item in data: + mioId = item['mio'] + item['mio_'] = mio_dict[mioId] return data + @swagger_auto_schema(manual_parameters=[ + openapi.Parameter(name="with_mio", in_=openapi.IN_QUERY, description="是否返回出入库记录信息", + type=openapi.TYPE_STRING, required=False), + openapi.Parameter(name="query", in_=openapi.IN_QUERY, description="定制返回数据", + type=openapi.TYPE_STRING, required=False), + openapi.Parameter(name="with_children", in_=openapi.IN_QUERY, description="带有children(yes/no/count)", + type=openapi.TYPE_STRING, required=False) + ]) + def list(self, request, *args, **kwargs): + return super().list(request, *args, **kwargs) + def perform_destroy(self, instance): if instance.mio.state != MIO.MIO_CREATE: raise ParseError('出入库记录非创建中不可删除')