半成品批量入库

This commit is contained in:
caoqianming 2021-12-03 10:11:15 +08:00
parent 015491f469
commit a3ec039c00
2 changed files with 62 additions and 53 deletions

View File

@ -18,16 +18,14 @@ from django.db import transaction
class PickHalfSerializer(serializers.Serializer): class PickHalfSerializer(serializers.Serializer):
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID') id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
wproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label='半成品ID'), wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label='半成品ID', many=True, required=False) # 从半成品表里直接修改状态
required=False) # 从半成品表里直接修改状态
class PickDetailSerializer(serializers.Serializer): class PickDetailSerializer(serializers.Serializer):
material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label="物料ID") material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label="物料ID")
batch = serializers.CharField(label='物料批次', allow_blank=True) batch = serializers.CharField(label='物料批次', allow_blank=True)
warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID")
pick_count = serializers.IntegerField(label="领料数量", required=False) pick_count = serializers.IntegerField(label="领料数量", required=False)
iproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=IProduct.objects.all(), label='库存半成品ID'), iproducts = serializers.PrimaryKeyRelatedField(queryset=IProduct.objects.all(), label='库存半成品ID',required=False, many=True)
required=False)
class PickSerializer(serializers.Serializer): class PickSerializer(serializers.Serializer):
subproduction_plan=serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID") subproduction_plan=serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID")
@ -172,8 +170,7 @@ class OperationCreateSerializer(serializers.Serializer):
""" """
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID") step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
# subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False) # subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False)
wproducts = serializers.ListField(child= wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label="半成品ID列表", required=False, many=True)
serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label="半成品ID列表", required=False)
def validate(self, data): def validate(self, data):
# subproduction_plan = data['subproduction_plan'] # subproduction_plan = data['subproduction_plan']
@ -209,8 +206,7 @@ class OperationUpdateSerializer(serializers.ModelSerializer):
class OperationInitSerializer(serializers.Serializer): class OperationInitSerializer(serializers.Serializer):
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID") step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False) subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False)
wproducts = serializers.ListField(child= wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label="半成品ID列表", required=False, many=True)
serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label="半成品ID列表", required=False)
def validate(self, data): def validate(self, data):
# subproduction_plan = data['subproduction_plan'] # subproduction_plan = data['subproduction_plan']
@ -273,8 +269,7 @@ class OperationWproductListSerializer(serializers.ModelSerializer):
class OperationSubmitSerializer(serializers.Serializer): class OperationSubmitSerializer(serializers.Serializer):
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID") step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False) subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False)
wproducts = serializers.ListField(child= wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label="半成品ID列表", required=False, many=True)
serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label="半成品ID列表", required=False)
input = DoInputSerializer(many=True, required=False) input = DoInputSerializer(many=True, required=False)
output = DoOutputSerializer(many=True, required=False) output = DoOutputSerializer(many=True, required=False)
forms = OperationRecordSerializer(many=True, required=False) forms = OperationRecordSerializer(many=True, required=False)
@ -307,6 +302,12 @@ class WproductPutInSerializer(serializers.Serializer):
warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID") warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID")
remark = serializers.CharField(label="入库备注", required =False) remark = serializers.CharField(label="入库备注", required =False)
class WproductPutInsSerializer(serializers.Serializer):
warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID")
wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label='半成品ID', many=True)
remark = serializers.CharField(label="入库备注", required =False)
class OperationEquipListSerializer(serializers.Serializer): class OperationEquipListSerializer(serializers.Serializer):
equip_ = EquipmentSimpleSerializer(source='equip', read_only=True) equip_ = EquipmentSimpleSerializer(source='equip', read_only=True)
class Meta: class Meta:

View File

@ -18,7 +18,7 @@ from rest_framework.decorators import action
from apps.wpm.filters import WMaterialFilterSet from apps.wpm.filters import WMaterialFilterSet
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem
from apps.wpm.serializers import OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer from apps.wpm.serializers import OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer
from rest_framework.response import Response from rest_framework.response import Response
from django.db import transaction from django.db import transaction
from rest_framework import exceptions, serializers from rest_framework import exceptions, serializers
@ -27,6 +27,7 @@ from apps.wpm.services import WpmServies
from django.utils import timezone from django.utils import timezone
from utils.tools import ranstr from utils.tools import ranstr
from rest_framework import status from rest_framework import status
from django.db.models import Count
# Create your views here. # Create your views here.
class WPlanViewSet(ListModelMixin, GenericViewSet): class WPlanViewSet(ListModelMixin, GenericViewSet):
""" """
@ -246,47 +247,54 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
return Response() return Response()
# @action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer) @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductPutInsSerializer)
# @transaction.atomic @transaction.atomic
# def retest(self, request, pk=None): def putins(self, request, pk=None):
# """ """
# 复检 半成品批量入库
# """ """
# serializer = WpmTestRecordCreateSerializer(data=request.data) serializer= WproductPutInsSerializer(data=request.data)
# serializer.is_valid(raise_exception=True) serializer.is_valid(raise_exception=True)
# vdata = serializer.validated_data vdata = serializer.data
# record_data = vdata.pop('record_data') wproducts = WProduct.objects.filter(pk__in=[x for x in vdata['wproducts']])
# wproduct = vdata['wproduct'] warehouse = WareHouse.objects.get(id=vdata['warehouse'])
# if wproduct.act_state != WProduct.WPR_ACT_STATE_TORETEST: for i in wproducts:
# raise exceptions.APIException('该产品当前状态不可检验') if i.act_state is not WProduct.WPR_ACT_STATE_OK:
# if 'is_testok' not in vdata: raise exceptions.APIException('存在不可入库产品')
# raise exceptions.APIException('未填写检测结论') # 聚合一下
wproducts_a = wproducts.values('subproduction_plan', 'material', 'subproduction_plan__number').annotate(total=Count('id'))
# 创建入库记录
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)
# 创建入库明细
for i in wproducts_a:
fifoitem = FIFOItem()
fifoitem.is_tested = True
fifoitem.is_testok = True
fifoitem.warehouse = warehouse
fifoitem.material = i['material']
fifoitem.count = i['total']
fifoitem.batch = i['subproduction_plan__number']
fifoitem.fifo = fifo
fifoitem.subproduction_plan = i['subproduction_plan']
fifoitem.save()
# obj = serializer.save(create_by = self.request.user, wproducts_items = wproducts.filter(subproduction_plan=i['subproduction_plan'], material=i['material'])
# material=wproduct.material, number=wproduct.number, subproduction_plan=wproduct.subproduction_plan) ips = []
# tris = [] for i in wproducts_items:
# for m in record_data: # 保存记录详情 # 创建入库明细半成品
# form_field = m['form_field'] ip = {}
# m['field_name'] = form_field.field_name ip['fifoitem'] = fifoitem
# m['field_key'] = form_field.field_key ip['wproduct'] = i
# m['field_type'] = form_field.field_type ip['number'] = i.number
# m['field_value'] = m['field_value'] ip['material'] = i.material
# m['sort'] = form_field.sort ips.append(FIFOItemProduct(**ip))
# m['need_judge'] = form_field.need_judge FIFOItemProduct.objects.bulk_create(ips)
# m['is_testok'] = m['is_testok'] if 'is_testok' in m else None # 更新库存并修改半成品进行状态
# m['test_record'] = obj update_inm(fifo)
# tris.append(TestRecordItem(**m)) wproducts.update(act_state=WProduct.WPR_ACT_STATE_INM, warehouse=warehouse, update_by=request.user)
# TestRecordItem.objects.bulk_create(tris) return Response()
# # 如果检测合格, 变更动态产品进行状态
# if obj.is_testok:
# wproduct.act_state = WProduct.WProduct.WPR_ACT_STATE_DOWAIT
# wproduct.save()
# else:# 如果不合格
# wproduct.act_state = WProduct.WPR_ACT_STATE_NOTOK
# wproduct.save()
# return Response()
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductPutInSerializer) @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductPutInSerializer)
@transaction.atomic @transaction.atomic