半成品入库

This commit is contained in:
caoqianming 2021-11-15 13:52:12 +08:00
parent 6aa30e9c6a
commit 5379b84438
3 changed files with 57 additions and 11 deletions

View File

@ -8,7 +8,7 @@ def update_inm(instance:FIFO, type:int=1):
"""
更新库存(正反)
"""
if instance.type in [FIFO.FIFO_TYPE_PUR_IN]: # 采购入库
if instance.type in [FIFO.FIFO_TYPE_PUR_IN, FIFO.FIFO_TYPE_DO_IN]: # 采购入库, 生产入库
# 更新相关表
for i in FIFOItem.objects.filter(fifo=instance):
material = i.material

View File

@ -187,10 +187,15 @@ class WpmTestRecordCreateSerializer(serializers.ModelSerializer):
model = TestRecord
fields = ['form', 'record_data', 'is_testok', 'wproduct']
class WproductPutin(serializers.Serializer):
class WproductPutInSerializer(serializers.Serializer):
"""
半成品入库序列化
"""
class WplanPutInSerializer(serializers.Serializer):
warehouse = serializers.PrimaryKeyRelatedField(queryset=WareHouse.objects.all(), label="仓库ID")
remark = serializers.CharField(label="入库备注", required =False)

View File

@ -5,6 +5,8 @@ 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
from apps.inm.signals import update_inm
from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial
from apps.mtm.serializers import RecordFormDetailSerializer
from apps.pm.models import SubProductionPlan, SubProductionProgress
@ -15,12 +17,13 @@ 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, WpmTestRecordCreateSerializer
from apps.wpm.serializers import OperationDetailSerializer, OperationListSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestRecordCreateSerializer
from rest_framework.response import Response
from django.db import transaction
from rest_framework import exceptions
from rest_framework import exceptions, serializers
from apps.wpm.services import WpmServies
from django.utils import timezone
# Create your views here.
class WPlanViewSet(ListModelMixin, GenericViewSet):
"""
@ -34,6 +37,51 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
ordering_fields = ['process__number']
ordering = ['process__number']
@action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WplanPutInSerializer)
@transaction.atomic
def putin(self, request, pk=None):
"""
半成品入库
"""
serializer= WplanPutInSerializer(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():
# 创建入库记录
fifo = FIFO.objects.create(type=FIFO.FIFO_TYPE_DO_IN,
is_audited=True, auditor=request.user, inout_date=timezone.now(), create_by=request.user)
# 创建入库明细
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)
# 更新库存隐藏半成品
update_inm(fifo)
wproducts.update(is_hidden=True)
return Response()
class WMaterialViewSet(CreateUpdateModelAMixin, ListModelMixin, GenericViewSet):
"""
车间物料表
@ -68,13 +116,6 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
ordering_fields = ['id']
ordering = ['id']
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer)
@transaction.atomic
def putin():
"""
半成品入库
"""
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer)
@transaction.atomic
def test(self, request, pk=None):