wpm post bug

This commit is contained in:
caoqianming 2021-11-09 15:37:50 +08:00
parent 48caae5c9a
commit 5beb5026ff
3 changed files with 53 additions and 6 deletions

View File

@ -8,7 +8,8 @@ from apps.mtm.serializers import MaterialSimpleSerializer, StepSimpleSerializer
from apps.pm.models import SubProductionPlan, SubProductionProgress
from django.utils import timezone
from django.utils.translation import gettext_lazy as _
from apps.wpm.models import WMaterial, WProduct, OperationRecord, OperationRecordItem
from apps.system.serializers import UserSimpleSerializer
from apps.wpm.models import Operation, WMaterial, WProduct, OperationRecord, OperationRecordItem
class PickDetailSerializer(serializers.Serializer):
material = serializers.PrimaryKeyRelatedField(queryset=Material.objects.all(), label="物料ID")
@ -90,6 +91,27 @@ class WProductListSerializer(serializers.ModelSerializer):
model = WProduct
fields = '__all__'
class OperationDetailSerializer(serializers.ModelSerializer):
wproducts_ = serializers.SerializerMethodField()
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
m_state_ = MaterialSimpleSerializer(source='m_state', read_only=True)
p_state_ = StepSimpleSerializer(source='p_state', read_only=True)
class Meta:
model = Operation
fields = '__all__'
def get_wproducts_(self, obj):
return list(WProduct.objects.filter(id__in=obj.wproducts_).values('id', 'number'))
class OperationListSerializer(serializers.ModelSerializer):
create_by_ = UserSimpleSerializer(source='create_by', read_only=True)
m_state_ = MaterialSimpleSerializer(source='m_state', read_only=True)
p_state_ = StepSimpleSerializer(source='p_state', read_only=True)
class Meta:
model = Operation
fields = '__all__'
class OperationInitSerializer(serializers.Serializer):
step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID")
subproduction_plan = serializers.PrimaryKeyRelatedField(queryset=SubProductionPlan.objects.all(), label="子计划ID")
@ -105,10 +127,14 @@ class OperationInitSerializer(serializers.Serializer):
raise serializers.ValidationError('请选择正确的子工序操作')
if 'wproducts' in data and data['wproducts']:
if step.type == Step.STEP_TYPE_DIV:
raise serializers.ValidationError(_('不可进行此操作'))
for i in data['wproducts']:
if i.is_executed:
raise serializers.ValidationError('不可进行操作')
if i.subproduction_plan != subproduction_plan:
raise serializers.ValidationError('半成品所属子计划不一致')
if i.step != step:
if i.p_state != step:
raise serializers.ValidationError('半成品所属子工序不一致')
else:
if step.type != Step.STEP_TYPE_DIV:

View File

@ -3,11 +3,12 @@ from rest_framework import urlpatterns
from django.urls import path, include
from rest_framework.routers import DefaultRouter
from apps.wpm.views import DoFormInit, DoFormSubmit, WMaterialViewSet, WPlanViewSet, WProductViewSet
from apps.wpm.views import DoFormInit, DoFormSubmit, OperationViewSet, WMaterialViewSet, WPlanViewSet, WProductViewSet
router = DefaultRouter()
router.register('wmaterial', WMaterialViewSet, basename='wmaterial')
router.register('wproduct', WProductViewSet, basename='wproduct')
router.register('operation', OperationViewSet, basename='operation')
router.register('subplan', WPlanViewSet, basename='wplan')
urlpatterns = [
path('do/init/', DoFormInit.as_view()),

View File

@ -1,6 +1,6 @@
from django.shortcuts import render
from rest_framework.generics import CreateAPIView, GenericAPIView
from rest_framework.mixins import ListModelMixin
from rest_framework.mixins import 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
@ -14,7 +14,7 @@ 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 PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer
from apps.wpm.serializers import OperationDetailSerializer, OperationListSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer
from rest_framework.response import Response
# Create your views here.
class WPlanViewSet(ListModelMixin, GenericViewSet):
@ -55,13 +55,33 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
半成品
"""
perms_map={'*':'*'}
queryset = WProduct.objects.select_related('p_state', 'm_state').all()
queryset = WProduct.objects.select_related('p_state', 'm_state').filter(is_hidden=True)
serializer_class = WProductListSerializer
filterset_fields = ['p_state', 'subproduction_plan', 'm_state', 'production_plan', 'p_state__process']
search_fields = ['number']
ordering_fields = ['id']
ordering = ['id']
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=PickSerializer)
def test():
pass
class OperationViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
"""
生产操作记录
"""
perms_map={'*':'*'}
queryset = Operation.objects.select_related('p_state', 'm_state').all()
serializer_class = OperationListSerializer
filterset_fields = ['p_state', 'm_state']
ordering_fields = ['id']
ordering = ['-id']
def get_serializer_class(self):
if self.action == 'retrieve':
return OperationDetailSerializer
return super().get_serializer_class()
class DoFormInit(CreateAPIView, GenericAPIView):
perms_map={'*':'*'}
serializer_class=OperationInitSerializer