diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 8b5d61e4..2aa6aa10 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -416,4 +416,9 @@ class PackSerializer(CustomModelSerializer): class Meta: model = Pack fields = "__all__" - read_only_fields = EXCLUDE_FIELDS_BASE \ No newline at end of file + read_only_fields = EXCLUDE_FIELDS_BASE + + +class PackMioSerializer(CustomModelSerializer): + mioitems = serializers.ListField(child=serializers.CharField(), label="明细ID") + pack = serializers.CharField(label="包装箱ID") \ No newline at end of file diff --git a/apps/inm/views.py b/apps/inm/views.py index 451a9c9e..0c512d3a 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -9,12 +9,12 @@ from django.utils import timezone from rest_framework.response import Response from django.db.models import Sum -from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem, MIOItemw +from apps.inm.models import WareHouse, MaterialBatch, MIO, MIOItem, MIOItemw, Pack from apps.inm.serializers import ( MaterialBatchSerializer, WareHourseSerializer, MIOListSerializer, MIOItemSerializer, MioItemAnaSerializer, MIODoSerializer, MIOSaleSerializer, MIOPurSerializer, MIOOtherSerializer, MIOItemCreateSerializer, MaterialBatchDetailSerializer, MIODetailSerializer, MIOItemTestSerializer, MIOItemPurInTestSerializer, - MIOItemwSerializer, MioItemDetailSerializer) + MIOItemwSerializer, MioItemDetailSerializer, PackSerializer, PackMioSerializer) from apps.inm.serializers2 import MIOItemwCreateUpdateSerializer from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.inm.services import InmService @@ -236,6 +236,41 @@ class MIOViewSet(CustomModelViewSet): return Response() +class PackViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet): + """ + list: 装箱记录 + + 装箱记录 + """ + perms_map = {'get': '*', 'post': '*', 'delete': '*'} + queryset = Pack.objects.all() + serializer_class = PackSerializer + filterset_fields = ["mio"] + ordering = ["mio", "index"] + + @action(methods=['post'], detail=False, perms_map={'post': 'mio.update'}, serializer_class=PackMioSerializer) + @transaction.atomic + def pack_mioitem(self, request, *args, **kwargs): + """装箱 + + 装箱 + """ + vdata = PackMioSerializer(data=request.data) + packId = vdata["pack"] + pack:Pack = Pack.objects.get(id=packId) + mioitems = vdata["mioitems"] + if not mioitems: + raise ParseError('未选择明细') + for id in mioitems: + mioitem = MIOItem.objects.get(id=id) + if mioitem.mio != pack.mio: + raise ParseError('存在明细不属于该装箱记录') + mioitem.pack = pack + mioitem.save(update_fields=['pack', 'update_time']) + return Response() + + + class MIOItemViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet): """ list: 出入库明细