单个半成品入库
This commit is contained in:
parent
43d297881e
commit
7e8ce5d60a
|
@ -17,6 +17,7 @@ from rest_framework.exceptions import APIException
|
|||
from rest_framework.response import Response
|
||||
from rest_framework.decorators import action
|
||||
from django.db.models import F
|
||||
from utils.tools import ranstr
|
||||
# Create your views here.
|
||||
|
||||
def updateOrderPlanedCount(order):
|
||||
|
@ -59,7 +60,7 @@ class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModel
|
|||
pass
|
||||
else:
|
||||
raise APIException('排产数量错误')
|
||||
instance = serializer.save(create_by=request.user, product=order.product)
|
||||
instance = serializer.save(create_by=request.user, product=order.product, number='JH-'+ranstr(7))
|
||||
updateOrderPlanedCount(instance.order)
|
||||
return Response()
|
||||
|
||||
|
|
|
@ -13,17 +13,21 @@ from apps.system.serializers import UserSimpleSerializer
|
|||
from apps.wpm.models import Operation, WMaterial, WProduct, OperationRecord, OperationRecordItem
|
||||
from django.db import transaction
|
||||
|
||||
class PickHalfSerializer(serializers.Serializer):
|
||||
wproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all(), label='半成品ID'),
|
||||
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',
|
||||
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")
|
||||
picks = PickDetailSerializer(many=True)
|
||||
picks = PickDetailSerializer(many=True) # 从库存里拿
|
||||
|
||||
|
||||
def create(self, validated_data):
|
||||
picks = validated_data.pop('picks')
|
||||
|
|
|
@ -5,7 +5,7 @@ from rest_framework.utils import serializer_helpers
|
|||
from rest_framework.utils.field_mapping import get_relation_kwargs
|
||||
from rest_framework.views import APIView
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct
|
||||
from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, WareHouse
|
||||
from apps.inm.signals import update_inm
|
||||
from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial
|
||||
from apps.mtm.serializers import RecordFormDetailSerializer
|
||||
|
@ -17,14 +17,14 @@ 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, WproductPutInSerializer
|
||||
from apps.wpm.serializers import OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, 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
|
||||
|
||||
from apps.wpm.services import WpmServies
|
||||
from django.utils import timezone
|
||||
import uuid
|
||||
from utils.tools import ranstr
|
||||
# Create your views here.
|
||||
class WPlanViewSet(ListModelMixin, GenericViewSet):
|
||||
"""
|
||||
|
@ -38,6 +38,21 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
|||
ordering_fields = []
|
||||
ordering = ['-id']
|
||||
|
||||
@action(methods=['post', 'get'], detail=True, perms_map={'post':'*', 'get':'*'}, serializer_class=PickHalfSerializer)
|
||||
@transaction.atomic
|
||||
def pick_half(self, request, pk=None):
|
||||
"""
|
||||
领半成品
|
||||
"""
|
||||
# if request.method=='GET'
|
||||
# subplan = self.get_object()
|
||||
# serializer= PickHalfSerializer(data=request.data)
|
||||
# serializer.is_valid(raise_exception=True)
|
||||
# vdata = serializer.data
|
||||
# wps = WProduct.objects.filter(pk__in=[x for x in vdata['wproducts']])
|
||||
# pass
|
||||
|
||||
|
||||
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WplanPutInSerializer)
|
||||
@transaction.atomic
|
||||
def putin(self, request, pk=None):
|
||||
|
@ -50,6 +65,7 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
|||
subplan = self.get_object()
|
||||
material = subplan.main_product
|
||||
batch = subplan.production_plan.number
|
||||
warehouse = WareHouse.objects.get(id=vdata['warehouse'])
|
||||
wproducts = WProduct.objects.filter(subproduction_plan=subplan,
|
||||
act_state=WProduct.WPR_ACT_STATE_OK, m_state=material, is_deleted=False)
|
||||
if wproducts.exists():
|
||||
|
@ -61,7 +77,7 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
|||
fifoitem = FIFOItem()
|
||||
fifoitem.is_tested = True
|
||||
fifoitem.is_testok = True
|
||||
fifoitem.warehouse = vdata['warehouse']
|
||||
fifoitem.warehouse = warehouse
|
||||
fifoitem.material = material
|
||||
fifoitem.count = wproducts.count()
|
||||
fifoitem.batch = batch
|
||||
|
@ -82,7 +98,7 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
|||
ips2 = []
|
||||
for i in wproducts:
|
||||
ip = {}
|
||||
ip['warehouse'] = vdata['warehouse']
|
||||
ip['warehouse'] = warehouse
|
||||
ip['batch'] = batch
|
||||
ip['wproduct'] = i
|
||||
ip['number'] = i.number
|
||||
|
@ -91,7 +107,7 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
|||
IProduct.objects.bulk_create(ips2)
|
||||
# 更新库存并修改半成品进行状态
|
||||
update_inm(fifo)
|
||||
wproducts.update(act_sate=WProduct.WPR_ACT_STATE_INM, warehouse=vdata['warehouse'])
|
||||
wproducts.update(act_sate=WProduct.WPR_ACT_STATE_INM, warehouse=warehouse)
|
||||
|
||||
return Response()
|
||||
|
||||
|
@ -165,7 +181,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
if obj.is_testok:
|
||||
wproduct.act_state = WProduct.WPR_ACT_STATE_OK
|
||||
if wproduct.number is None: # 产生半成品编号
|
||||
wproduct.number = uuid.uuid4()
|
||||
wproduct.number = 'WP-'+ranstr(7)
|
||||
wproduct.save()
|
||||
# 更新子计划状态
|
||||
# 获取该子计划主产品数, 更新进度
|
||||
|
@ -189,6 +205,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
serializer.is_valid(raise_exception=True)
|
||||
vdata = serializer.data
|
||||
wproduct = self.get_object()
|
||||
warehouse = WareHouse.objects.get(id=vdata['warehouse'])
|
||||
if wproduct.act_state != WProduct.WPR_ACT_STATE_OK:
|
||||
raise exceptions.APIException('半成品不可入库')
|
||||
material = wproduct.m_state
|
||||
|
@ -201,7 +218,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
fifoitem = FIFOItem()
|
||||
fifoitem.is_tested = True
|
||||
fifoitem.is_testok = True
|
||||
fifoitem.warehouse = vdata['warehouse']
|
||||
fifoitem.warehouse = warehouse
|
||||
fifoitem.material = material
|
||||
fifoitem.count = 1 # 单个半成品入库
|
||||
fifoitem.batch = batch
|
||||
|
@ -222,7 +239,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
ips2 = []
|
||||
for i in [wproduct]:
|
||||
ip = {}
|
||||
ip['warehouse'] = vdata['warehouse']
|
||||
ip['warehouse'] = warehouse
|
||||
ip['batch'] = batch
|
||||
ip['wproduct'] = i
|
||||
ip['number'] = i.number
|
||||
|
@ -232,7 +249,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
# 更新库存并修改半成品进行状态
|
||||
update_inm(fifo)
|
||||
wproduct.act_state=WProduct.WPR_ACT_STATE_INM
|
||||
wproduct.warehouse=vdata['warehouse']
|
||||
wproduct.warehouse=warehouse
|
||||
wproduct.save()
|
||||
return Response()
|
||||
|
||||
|
|
|
@ -0,0 +1,7 @@
|
|||
import random
|
||||
import string
|
||||
|
||||
def ranstr(num):
|
||||
salt = ''.join(random.sample(string.ascii_letters + string.digits, num))
|
||||
return salt
|
||||
ranstr(10)
|
Loading…
Reference in New Issue