diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 7f3555c..593eb8e 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -17,7 +17,7 @@ class PickDetailSerializer(serializers.Serializer): material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label="物料ID") batch = serializers.CharField(label='物料批次', allow_blank=True) warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") - pick_count = serializers.IntegerField(label="领料数量") + pick_count = serializers.IntegerField(label="领料数量", required=False) class PickSerializer(serializers.Serializer): subproduction_plan=serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID") @@ -43,7 +43,7 @@ class PickSerializer(serializers.Serializer): for i in picks: # 更新出库详情 i['fifo'] = fifo - i['count'] = i.pop('pick_count') + i['count'] = i.pop('pick_count', 0) i['is_testok'] = True # 默认检测合格 i['subproduction_plan'] = sp FIFOItem.objects.create(**i) @@ -195,7 +195,10 @@ class WproductPutInSerializer(serializers.Serializer): class WplanPutInSerializer(serializers.Serializer): warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") remark = serializers.CharField(label="入库备注", required =False) - + +class WproductPutInSerializer(serializers.Serializer): + warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") + remark = serializers.CharField(label="入库备注", required =False) \ No newline at end of file diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index eebdae6..6f6ce82 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -17,7 +17,7 @@ from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action from apps.wpm.models import WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem -from apps.wpm.serializers import OperationDetailSerializer, OperationListSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestRecordCreateSerializer +from apps.wpm.serializers import OperationDetailSerializer, OperationListSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer from rest_framework.response import Response from django.db import transaction from rest_framework import exceptions, serializers @@ -116,6 +116,62 @@ class WMaterialViewSet(CreateUpdateModelAMixin, ListModelMixin, GenericViewSet): serializer.save() return Response() + @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductPutInSerializer) + @transaction.atomic + def putin(self, request, pk=None): + """ + 半成品入库 + """ + serializer= WproductPutInSerializer(data=request.data) + serializer.is_valid(raise_exception=True) + vdata = serializer.data + subplan = self.get_object() + material = subplan.main_product + batch = subplan.production_plan.number + wproducts = WProduct.objects.filter(subproduction_plan=subplan, + act_state=WProduct.WPR_ACT_STATE_OK, m_state=material, is_deleted=False) + if wproducts.exists(): + # 创建入库记录 + remark = vdata.get('remark', '') + fifo = FIFO.objects.create(type=FIFO.FIFO_TYPE_DO_IN, + is_audited=True, auditor=request.user, inout_date=timezone.now(), create_by=request.user, remark=remark) + # 创建入库明细 + fifoitem = FIFOItem() + fifoitem.is_tested = True + fifoitem.is_testok = True + fifoitem.warehouse = vdata['warehouse'] + fifoitem.material = material + fifoitem.count = wproducts.count() + fifoitem.batch = batch + fifoitem.fifo = fifo + fifoitem.subproduction_plan = subplan + fifoitem.save() + # 创建入库明细半成品 + ips = [] + for i in wproducts: + ip = {} + ip['fifoitem'] = fifoitem + ip['wproduct'] = i + ip['number'] = i.number + ip['material'] = material + ips.append(FIFOItemProduct(**ip)) + FIFOItemProduct.objects.bulk_create(ips) + # 创建IProduct + ips2 = [] + for i in wproducts: + ip = {} + ip['warehouse'] = vdata['warehouse'] + ip['batch'] = batch + ip['wproduct'] = i + ip['number'] = i.number + ip['material'] = material + ips2.append(IProduct(**ip)) + IProduct.objects.bulk_create(ips2) + # 更新库存并修改半成品进行状态 + update_inm(fifo) + wproducts.update(act_sate=WProduct.WPR_ACT_STATE_INM, warehouse=vdata['warehouse']) + + return Response() class WProductViewSet(ListModelMixin, GenericViewSet): """