diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index 5c9a3e0..8653bde 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -1,6 +1,6 @@ from rest_framework import serializers, exceptions from rest_framework.serializers import ModelSerializer -from apps.inm.models import FIFO, FIFOItem, MaterialBatch, WareHouse +from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse from apps.inm.signals import update_inm from apps.mtm.models import Material, RecordForm, Step from apps.mtm.serializers import MaterialSimpleSerializer, StepSimpleSerializer @@ -18,6 +18,8 @@ class PickDetailSerializer(serializers.Serializer): batch = serializers.CharField(label='物料批次', allow_blank=True) warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") pick_count = serializers.IntegerField(label="领料数量", required=False) + iproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=IProduct.objects.all()), label='库存半成品ID', + required=False) class PickSerializer(serializers.Serializer): subproduction_plan=serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID") @@ -38,16 +40,33 @@ class PickSerializer(serializers.Serializer): # except: # raise exceptions.ValidationError('物料不存在') # 创建出库记录 + with transaction.atomic(): fifo = FIFO.objects.create(type=FIFO.FIFO_TYPE_DO_OUT, inout_date=timezone.now(), create_by=self.context['request'].user) for i in picks: # 更新出库详情 i['count'] = i.pop('pick_count', 0) + # 是否勾选每一个 + if 'iproducts' in i and len(i['iproducts'])>0: + i['count'] = len(i['iproducts']) + isLowLevel = True if i['count']>0: i['fifo'] = fifo i['is_testok'] = True # 默认检测合格 i['subproduction_plan'] = sp - FIFOItem.objects.create(**i) + fifoitem = FIFOItem.objects.create(**i) + # 创建再下一个层级 + if isLowLevel: + mls = [] + for m in i['iproducts']: + ml = {} + ml['material'] = m.material + ml['number'] = m.number + ml['wproduct'] = m.wproduct + ml['fifoitem'] = fifoitem + mls.append(FIFOItemProduct(**ml)) + FIFOItemProduct.objects.bulk_create(mls) + # 更新车间物料 wm, _ = WMaterial.objects.get_or_create(material=i['material'], batch=i['batch'], \ subproduction_plan=sp,defaults={ @@ -62,6 +81,12 @@ class PickSerializer(serializers.Serializer): spp = SubProductionProgress.objects.get(material=i['material'], subproduction_plan=sp, type=1) spp.count_pick = spp.count_pick + i['count'] spp.save() + # 更新半成品表 + wproducts = WProduct.objects.filter(pk__in=[x.wproduct for x in i['iproducts']]) + first_step = Step.objects.get(pk=sp.steps[0].id) + wproducts.update(p_state=first_step, is_executed=False, + act_state=WProduct.WPR_ACT_STATE_DOING, is_hidden=False, warehouse=None, + subproduction_plan=sp, production_plan=sp.production_plan) sp.is_picked=True sp.state = 3 #生产中 sp.state_date_real = timezone.now() #实际开工日期 diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index a1875a3..8c929c9 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -168,7 +168,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet): wproduct.save() # 更新子计划状态 # 获取该子计划主产品数, 更新进度 - main_count = WProduct.objects.filter(subproduction_plan=wproduct.subproduction_plan, act_stae=WProduct.WPR_ACT_STATE_OK).count() + main_count = WProduct.objects.filter(subproduction_plan=wproduct.subproduction_plan, act_state=WProduct.WPR_ACT_STATE_OK).count() instance = SubProductionProgress.objects.get(subproduction_plan=wproduct.subproduction_plan, is_main=True, type=SubprodctionMaterial.SUB_MA_TYPE_OUT) instance.count_real = main_count