半成品入库
This commit is contained in:
parent
6aa30e9c6a
commit
5379b84438
|
|
@ -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):
|
for i in FIFOItem.objects.filter(fifo=instance):
|
||||||
material = i.material
|
material = i.material
|
||||||
|
|
|
||||||
|
|
@ -187,10 +187,15 @@ class WpmTestRecordCreateSerializer(serializers.ModelSerializer):
|
||||||
model = TestRecord
|
model = TestRecord
|
||||||
fields = ['form', 'record_data', 'is_testok', 'wproduct']
|
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)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -5,6 +5,8 @@ from rest_framework.utils import serializer_helpers
|
||||||
from rest_framework.utils.field_mapping import get_relation_kwargs
|
from rest_framework.utils.field_mapping import get_relation_kwargs
|
||||||
from rest_framework.views import APIView
|
from rest_framework.views import APIView
|
||||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
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.models import Material, RecordForm, Step, SubprodctionMaterial
|
||||||
from apps.mtm.serializers import RecordFormDetailSerializer
|
from apps.mtm.serializers import RecordFormDetailSerializer
|
||||||
from apps.pm.models import SubProductionPlan, SubProductionProgress
|
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 rest_framework.decorators import action
|
||||||
from apps.wpm.models import WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem
|
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 rest_framework.response import Response
|
||||||
from django.db import transaction
|
from django.db import transaction
|
||||||
from rest_framework import exceptions
|
from rest_framework import exceptions, serializers
|
||||||
|
|
||||||
from apps.wpm.services import WpmServies
|
from apps.wpm.services import WpmServies
|
||||||
|
from django.utils import timezone
|
||||||
# Create your views here.
|
# Create your views here.
|
||||||
class WPlanViewSet(ListModelMixin, GenericViewSet):
|
class WPlanViewSet(ListModelMixin, GenericViewSet):
|
||||||
"""
|
"""
|
||||||
|
|
@ -34,6 +37,51 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
||||||
ordering_fields = ['process__number']
|
ordering_fields = ['process__number']
|
||||||
ordering = ['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):
|
class WMaterialViewSet(CreateUpdateModelAMixin, ListModelMixin, GenericViewSet):
|
||||||
"""
|
"""
|
||||||
车间物料表
|
车间物料表
|
||||||
|
|
@ -68,13 +116,6 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
||||||
ordering_fields = ['id']
|
ordering_fields = ['id']
|
||||||
ordering = ['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)
|
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer)
|
||||||
@transaction.atomic
|
@transaction.atomic
|
||||||
def test(self, request, pk=None):
|
def test(self, request, pk=None):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue