半成品批量入库
This commit is contained in:
parent
015491f469
commit
a3ec039c00
|
@ -18,16 +18,14 @@ from django.db import transaction
|
|||
|
||||
class PickHalfSerializer(serializers.Serializer):
|
||||
id = serializers.PrimaryKeyRelatedField(queryset=SubProductionProgress.objects.all(), label='子计划进度ID')
|
||||
wproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label='半成品ID'),
|
||||
required=False) # 从半成品表里直接修改状态
|
||||
wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label='半成品ID', many=True, required=False) # 从半成品表里直接修改状态
|
||||
|
||||
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="领料数量", required=False)
|
||||
iproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=IProduct.objects.all(), label='库存半成品ID'),
|
||||
required=False)
|
||||
iproducts = serializers.PrimaryKeyRelatedField(queryset=IProduct.objects.all(), label='库存半成品ID',required=False, many=True)
|
||||
|
||||
class PickSerializer(serializers.Serializer):
|
||||
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")
|
||||
# subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False)
|
||||
wproducts = serializers.ListField(child=
|
||||
serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label="半成品ID列表", required=False)
|
||||
wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label="半成品ID列表", required=False, many=True)
|
||||
|
||||
def validate(self, data):
|
||||
# subproduction_plan = data['subproduction_plan']
|
||||
|
@ -209,8 +206,7 @@ class OperationUpdateSerializer(serializers.ModelSerializer):
|
|||
class OperationInitSerializer(serializers.Serializer):
|
||||
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
|
||||
subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False)
|
||||
wproducts = serializers.ListField(child=
|
||||
serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label="半成品ID列表", required=False)
|
||||
wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label="半成品ID列表", required=False, many=True)
|
||||
|
||||
def validate(self, data):
|
||||
# subproduction_plan = data['subproduction_plan']
|
||||
|
@ -273,8 +269,7 @@ class OperationWproductListSerializer(serializers.ModelSerializer):
|
|||
class OperationSubmitSerializer(serializers.Serializer):
|
||||
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
|
||||
subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID", required=False)
|
||||
wproducts = serializers.ListField(child=
|
||||
serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label="半成品ID列表", required=False)
|
||||
wproducts = serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label="半成品ID列表", required=False, many=True)
|
||||
input = DoInputSerializer(many=True, required=False)
|
||||
output = DoOutputSerializer(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")
|
||||
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):
|
||||
equip_ = EquipmentSimpleSerializer(source='equip', read_only=True)
|
||||
class Meta:
|
||||
|
|
|
@ -18,7 +18,7 @@ from rest_framework.decorators import action
|
|||
from apps.wpm.filters import WMaterialFilterSet
|
||||
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 django.db import transaction
|
||||
from rest_framework import exceptions, serializers
|
||||
|
@ -27,6 +27,7 @@ from apps.wpm.services import WpmServies
|
|||
from django.utils import timezone
|
||||
from utils.tools import ranstr
|
||||
from rest_framework import status
|
||||
from django.db.models import Count
|
||||
# Create your views here.
|
||||
class WPlanViewSet(ListModelMixin, GenericViewSet):
|
||||
"""
|
||||
|
@ -245,49 +246,56 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
wproduct.save()
|
||||
|
||||
return Response()
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductPutInsSerializer)
|
||||
@transaction.atomic
|
||||
def putins(self, request, pk=None):
|
||||
"""
|
||||
半成品批量入库
|
||||
"""
|
||||
serializer= WproductPutInsSerializer(data=request.data)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
vdata = serializer.data
|
||||
wproducts = WProduct.objects.filter(pk__in=[x for x in vdata['wproducts']])
|
||||
warehouse = WareHouse.objects.get(id=vdata['warehouse'])
|
||||
for i in wproducts:
|
||||
if i.act_state is not WProduct.WPR_ACT_STATE_OK:
|
||||
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()
|
||||
|
||||
wproducts_items = wproducts.filter(subproduction_plan=i['subproduction_plan'], material=i['material'])
|
||||
ips = []
|
||||
for i in wproducts_items:
|
||||
# 创建入库明细半成品
|
||||
ip = {}
|
||||
ip['fifoitem'] = fifoitem
|
||||
ip['wproduct'] = i
|
||||
ip['number'] = i.number
|
||||
ip['material'] = i.material
|
||||
ips.append(FIFOItemProduct(**ip))
|
||||
FIFOItemProduct.objects.bulk_create(ips)
|
||||
# 更新库存并修改半成品进行状态
|
||||
update_inm(fifo)
|
||||
wproducts.update(act_state=WProduct.WPR_ACT_STATE_INM, warehouse=warehouse, update_by=request.user)
|
||||
return Response()
|
||||
|
||||
# @action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer)
|
||||
# @transaction.atomic
|
||||
# def retest(self, request, pk=None):
|
||||
# """
|
||||
# 复检
|
||||
# """
|
||||
# serializer = WpmTestRecordCreateSerializer(data=request.data)
|
||||
# serializer.is_valid(raise_exception=True)
|
||||
# vdata = serializer.validated_data
|
||||
# record_data = vdata.pop('record_data')
|
||||
# wproduct = vdata['wproduct']
|
||||
# if wproduct.act_state != WProduct.WPR_ACT_STATE_TORETEST:
|
||||
# raise exceptions.APIException('该产品当前状态不可检验')
|
||||
# if 'is_testok' not in vdata:
|
||||
# raise exceptions.APIException('未填写检测结论')
|
||||
|
||||
# obj = serializer.save(create_by = self.request.user,
|
||||
# material=wproduct.material, number=wproduct.number, subproduction_plan=wproduct.subproduction_plan)
|
||||
# tris = []
|
||||
# for m in record_data: # 保存记录详情
|
||||
# form_field = m['form_field']
|
||||
# m['field_name'] = form_field.field_name
|
||||
# m['field_key'] = form_field.field_key
|
||||
# m['field_type'] = form_field.field_type
|
||||
# m['field_value'] = m['field_value']
|
||||
# m['sort'] = form_field.sort
|
||||
# m['need_judge'] = form_field.need_judge
|
||||
# m['is_testok'] = m['is_testok'] if 'is_testok' in m else None
|
||||
# m['test_record'] = obj
|
||||
# tris.append(TestRecordItem(**m))
|
||||
# TestRecordItem.objects.bulk_create(tris)
|
||||
|
||||
# # 如果检测合格, 变更动态产品进行状态
|
||||
|
||||
# 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)
|
||||
@transaction.atomic
|
||||
def putin(self, request, pk=None):
|
||||
|
|
Loading…
Reference in New Issue