diff --git a/apps/inm/migrations/0036_mioitem_pack_index.py b/apps/inm/migrations/0036_mioitem_pack_index.py new file mode 100644 index 00000000..6052f860 --- /dev/null +++ b/apps/inm/migrations/0036_mioitem_pack_index.py @@ -0,0 +1,18 @@ +# Generated by Django 3.2.12 on 2025-08-01 06:00 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('inm', '0035_auto_20250731_1404'), + ] + + operations = [ + migrations.AddField( + model_name='mioitem', + name='pack_index', + field=models.PositiveSmallIntegerField(blank=True, null=True, verbose_name='装箱序号'), + ), + ] diff --git a/apps/inm/models.py b/apps/inm/models.py index b06dc50b..584fdb3f 100644 --- a/apps/inm/models.py +++ b/apps/inm/models.py @@ -185,6 +185,9 @@ class MIOItem(BaseModel): is_testok = models.BooleanField('检验是否合格', null=True, blank=True) note = models.TextField('备注', null=True, blank=True) + pack_index = models.PositiveSmallIntegerField('装箱序号', null=True, blank=True) + + # 以下字段暂时不用 pack = models.ForeignKey(Pack, verbose_name='关联装箱单', on_delete=models.SET_NULL, related_name='mioitem_pack', null=True, blank=True) @classmethod diff --git a/apps/inm/serializers.py b/apps/inm/serializers.py index 1bca21e5..1d80751f 100644 --- a/apps/inm/serializers.py +++ b/apps/inm/serializers.py @@ -428,4 +428,5 @@ class PackSerializer(CustomModelSerializer): class PackMioSerializer(serializers.Serializer): mioitems = serializers.ListField(child=serializers.CharField(), label="明细ID") - pack = serializers.CharField(label="包装箱ID") \ No newline at end of file + pack_index = serializers.IntegerField(label="包装箱序号") + # pack = serializers.CharField(label="包装箱ID") \ No newline at end of file diff --git a/apps/inm/urls.py b/apps/inm/urls.py index c1d0a13f..48000721 100644 --- a/apps/inm/urls.py +++ b/apps/inm/urls.py @@ -3,7 +3,7 @@ from rest_framework.routers import DefaultRouter from apps.inm.views import ( WarehouseVIewSet, MaterialBatchViewSet, MIOViewSet, MIOItemViewSet, MioDoViewSet, MioSaleViewSet, - MioPurViewSet, MioOtherViewSet, MIOItemwViewSet, PackViewSet) + MioPurViewSet, MioOtherViewSet, MIOItemwViewSet) API_BASE_URL = 'api/inm/' HTML_BASE_URL = 'dhtml/inm/' @@ -19,7 +19,7 @@ router.register('mio/pur', MioPurViewSet) router.register('mio/other', MioOtherViewSet) router.register('mioitem', MIOItemViewSet, basename='mioitem') router.register('mioitemw', MIOItemwViewSet, basename='mioitemw') -router.register('pack', PackViewSet, basename='pack') +# router.register('pack', PackViewSet, basename='pack') urlpatterns = [ path(API_BASE_URL, include(router.urls)), ] diff --git a/apps/inm/views.py b/apps/inm/views.py index 0c512d3a..c85da891 100644 --- a/apps/inm/views.py +++ b/apps/inm/views.py @@ -236,6 +236,29 @@ class MIOViewSet(CustomModelViewSet): return Response() + @action(methods=['post'], detail=True, perms_map={'post': 'mio.update'}, serializer_class=PackMioSerializer) + @transaction.atomic + def pack_mioitem(self, request, *args, **kwargs): + """装箱 + + 装箱 + """ + mio:MIO = self.get_object() + if mio.submit_time is not None: + raise ParseError('该出入库已提交不可装箱') + vdata = PackMioSerializer(data=request.data) + pack_index = vdata["pack_index"] + mioitems = vdata["mioitems"] + if not mioitems: + raise ParseError('未选择明细') + for id in mioitems: + mioitem = MIOItem.objects.get(id=id) + if mioitem.mio != mio: + raise ParseError('存在明细不属于该箱') + mioitem.pack_index = pack_index + mioitem.save(update_fields=['pack_index', 'update_time']) + return Response() + class PackViewSet(CustomListModelMixin, BulkCreateModelMixin, BulkDestroyModelMixin, CustomGenericViewSet): """ list: 装箱记录