半成品表直接领
This commit is contained in:
parent
b990bd535e
commit
f939b827a8
|
@ -4,7 +4,7 @@ import django.utils.timezone as timezone
|
|||
from django.db.models.query import QuerySet
|
||||
from apps.inm.models import WareHouse
|
||||
from apps.pm.models import ProductionPlan, SubProductionPlan
|
||||
from apps.system.models import CommonAModel, CommonBModel, Organization, User, Dict, File
|
||||
from apps.system.models import CommonADModel, CommonAModel, CommonBModel, Organization, User, Dict, File
|
||||
from utils.model import SoftModel, BaseModel
|
||||
from simple_history.models import HistoricalRecords
|
||||
from apps.mtm.models import Material, Process, RecordFormField, Step, RecordForm
|
||||
|
@ -45,7 +45,7 @@ class WProduct(CommonAModel):
|
|||
production_plan = models.ForeignKey(ProductionPlan, verbose_name='关联主生产计划', on_delete=models.CASCADE)
|
||||
warehouse = models.ForeignKey(WareHouse, verbose_name='所在仓库', on_delete=models.SET_NULL, null=True, blank=True)
|
||||
|
||||
class Operation(CommonAModel):
|
||||
class Operation(CommonADModel):
|
||||
"""
|
||||
生产操作
|
||||
"""
|
||||
|
|
|
@ -14,6 +14,7 @@ from apps.wpm.models import Operation, WMaterial, WProduct, OperationRecord, Ope
|
|||
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) # 从半成品表里直接修改状态
|
||||
class PickDetailSerializer(serializers.Serializer):
|
||||
|
@ -148,6 +149,37 @@ class OperationListSerializer(serializers.ModelSerializer):
|
|||
model = Operation
|
||||
fields = '__all__'
|
||||
|
||||
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)
|
||||
|
||||
def validate(self, data):
|
||||
# subproduction_plan = data['subproduction_plan']
|
||||
step = data['step']
|
||||
|
||||
# stepIds=[i['id'] for i in subproduction_plan.steps]
|
||||
# if step.id not in stepIds:
|
||||
# raise exceptions.ValidationError('请选择正确的子工序操作')
|
||||
|
||||
if 'wproducts' in data and data['wproducts']:
|
||||
if step.type == Step.STEP_TYPE_DIV:
|
||||
raise exceptions.ValidationError(_('不可进行此操作'))
|
||||
for i in data['wproducts']:
|
||||
if i.is_executed:
|
||||
raise exceptions.ValidationError('不可进行操作')
|
||||
# if i.subproduction_plan != subproduction_plan:
|
||||
# raise exceptions.ValidationError('半成品所属子计划不一致')
|
||||
if i.step != step:
|
||||
raise exceptions.ValidationError('半成品所属子工序不一致')
|
||||
else:
|
||||
if step.type != Step.STEP_TYPE_DIV:
|
||||
raise exceptions.ValidationError(_('请选择半成品进行操作'))
|
||||
return data
|
||||
|
||||
class OperationInitSerializer(serializers.Serializer):
|
||||
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
|
||||
|
|
|
@ -1,6 +1,6 @@
|
|||
from django.shortcuts import render
|
||||
from rest_framework.generics import CreateAPIView, GenericAPIView
|
||||
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
|
||||
from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin
|
||||
from rest_framework.utils import serializer_helpers
|
||||
from rest_framework.utils.field_mapping import get_relation_kwargs
|
||||
from rest_framework.views import APIView
|
||||
|
@ -10,14 +10,14 @@ from apps.inm.signals import update_inm
|
|||
from apps.mtm.models import Material, RecordForm, Step, SubprodctionMaterial, TechDoc
|
||||
from apps.mtm.serializers import RecordFormDetailSerializer, SubprodctionMaterialListSerializer, TechDocListSerializer
|
||||
from apps.pm.models import SubProductionPlan, SubProductionProgress
|
||||
from apps.pm.serializers import SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer
|
||||
from apps.pm.serializers import SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer
|
||||
from apps.qm.models import TestRecordItem
|
||||
|
||||
from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin
|
||||
from rest_framework.decorators import action
|
||||
from apps.wpm.models import OperationWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem
|
||||
|
||||
from apps.wpm.serializers import OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer
|
||||
from apps.wpm.serializers import OperationCreateSerializer, 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
|
||||
|
@ -49,19 +49,25 @@ class WPlanViewSet(ListModelMixin, GenericViewSet):
|
|||
"""
|
||||
领半成品
|
||||
"""
|
||||
mIds = SubProductionProgress.objects.filter(type=SubprodctionMaterial.SUB_MA_TYPE_IN,
|
||||
material__type=Material.MA_TYPE_HALFGOOD).values_list('material', flat=True)
|
||||
queyset = WProduct.objects.filter(is_hidden=False, material__in=mIds, act_state=WProduct.WPR_ACT_STATE_OK)
|
||||
return Response(WProductListSerializer(instance=queyset, many=True).data)
|
||||
spps = SubProductionProgress.objects.filter(type=SubprodctionMaterial.SUB_MA_TYPE_IN,
|
||||
material__type=Material.MA_TYPE_HALFGOOD, subproduction_plan=sp).select_related('material')
|
||||
return Response(SubProductionProgressSerializer(instance=spps, many=True).data)
|
||||
elif request.method=='POST':
|
||||
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']])
|
||||
first_step = Step.objects.get(pk=sp.steps[0].id)
|
||||
wps.update(step=first_step, is_executed=False,
|
||||
act_state=WProduct.WPR_ACT_STATE_DOING, is_hidden=False, warehouse=None,
|
||||
subproduction_plan=sp, production_plan=sp.production_plan)
|
||||
for i in vdata:
|
||||
if 'wproducts' in i and len(i['wproducts'])>0:
|
||||
spp = SubProductionProgress.objects.get(pk=i['id'])
|
||||
spp.count_pick = spp.count_pick + len(i['wproducts'])
|
||||
if spp.count_pick > spp.count:
|
||||
raise exceptions.APIException('超过计划数')
|
||||
spp.save()
|
||||
wps = WProduct.objects.filter(pk__in=[x for x in i['wproducts']])
|
||||
wps.update(step=first_step, is_executed=False,
|
||||
act_state=WProduct.WPR_ACT_STATE_DOING, is_hidden=False, warehouse=None,
|
||||
subproduction_plan=sp, production_plan=sp.production_plan)
|
||||
return Response()
|
||||
|
||||
|
||||
|
@ -253,7 +259,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
|
|||
wproduct.save()
|
||||
return Response()
|
||||
|
||||
class OperationViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
||||
class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, GenericViewSet):
|
||||
"""
|
||||
生产操作记录
|
||||
"""
|
||||
|
@ -267,8 +273,18 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
|
|||
def get_serializer_class(self):
|
||||
if self.action == 'retrieve':
|
||||
return OperationDetailSerializer
|
||||
elif self.action == 'create':
|
||||
return OperationCreateSerializer
|
||||
return super().get_serializer_class()
|
||||
|
||||
@transaction.atomic
|
||||
def create(self, request, *args, **kwargs):
|
||||
data = request.data
|
||||
serializer = OperationCreateSerializer(data=data, context={'request':self.request})
|
||||
serializer.is_valid(raise_exception=True)
|
||||
vdata = serializer.validated_data #校验之后的数据
|
||||
return Response()
|
||||
|
||||
class DoFormInit(CreateAPIView, GenericAPIView):
|
||||
perms_map={'*':'*'}
|
||||
serializer_class=OperationInitSerializer
|
||||
|
|
Loading…
Reference in New Issue