wproduct 流程卡

This commit is contained in:
caoqianming 2022-01-10 13:05:30 +08:00
parent 73a88e2f86
commit 2b0bd78686
4 changed files with 59 additions and 2 deletions

View File

@ -15,3 +15,4 @@ class GanttPlan(ListAPIView):
queryset = ProductionPlan.objects.filter(is_deleted=False, is_planed=True).prefetch_related('subplan_plan', 'subplan_plan__process')
ordering = ['-id']

View File

@ -219,7 +219,7 @@ class OperationMaterial(BaseModel):
生产操作物料消耗产出表
"""
type = models.IntegerField('类型', default=0, choices=SubprodctionMaterial.type_choices)
operation = models.ForeignKey(Operation, verbose_name='关联的生产操作', on_delete=models.CASCADE)
operation = models.ForeignKey(Operation, verbose_name='关联的生产操作', on_delete=models.CASCADE, related_name='om_operation')
material = models.ForeignKey(Material, verbose_name='可能产出的产品', on_delete=models.CASCADE,
null=True, blank=True, related_name='om_material')

View File

@ -1,3 +1,4 @@
from django.db.models.query_utils import Q
from rest_framework import serializers, exceptions
from rest_framework.serializers import ModelSerializer
from apps.em.models import Equipment
@ -165,6 +166,53 @@ class WProductListSerializer(serializers.ModelSerializer):
return WProductBaseSerializer(instance=wps, many=True).data
return []
class WProductCardBaseSerializer(serializers.ModelSerializer):
"""
产品流程序列化
"""
material_ = MaterialSimpleSerializer(source='material', read_only=True)
step_ = StepSimpleSerializer(source='step', read_only=True)
subproduction_plan_ = SubproductionPlanSimpleSerializer(source='subproduction_plan', read_only=True)
warehouse_ = WareHouseSimpleSerializer(source='warehouse', read_only=True)
step_list_full = serializers.SerializerMethodField()
class Meta:
model = WProduct
fields = '__all__'
def get_step_list_full(self, obj):
"""
获取所有步骤信息
"""
step_list_full = []
comb_step = Step.objects.filter(type=Step.STEP_TYPE_COMB, is_deleted=False).first()
if obj.material.type == Material.MA_TYPE_GOOD:
# 如果是成品获取可能经过的步骤
steps = Step.objects.filter(number__gte=comb_step.number).order_by('number')
elif obj.material.type == Material.MA_TYPE_HALFGOOD:
steps = Step.objects.filter(number__lt=comb_step.number).order_by('number')
for i in steps:
actions = []
ops = Operation.objects.filter(Q(ow_operation__wproduct=obj)|Q(wp_coperation=obj))\
.filter(step=i, is_submited=True).distinct()
for m in ops:
actions.append({'action_by_name':m.create_by.name, 'action_time':m.update_time.strftime('%Y-%m-%d %H:%M:%S')})
step_list_full.append({'step_name':i.name, 'actions':actions})
return step_list_full
class WProductCardSerializer(WProductCardBaseSerializer):
"""
产品流程序列化
"""
parents = serializers.SerializerMethodField()
def get_parents(self, obj):
parent_wps = WProduct.objects.filter(child=obj)
return WProductCardBaseSerializer(instance=parent_wps, many=True).data
class WProductDetailSerializer(serializers.ModelSerializer):
"""

View File

@ -22,7 +22,7 @@ from apps.wf.serializers import WorkflowSimpleSerializer
from apps.wpm.filters import CuttingFilterSet, WMaterialFilterSet, WProductFilterSet
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem, WprouctTicket
from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductDetailSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductMtestSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer
from apps.wpm.serializers import CuttingListSerializer, OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductCardSerializer, WProductDetailSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductMtestSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer
from rest_framework.response import Response
from django.db import transaction
from rest_framework import exceptions, serializers
@ -454,6 +454,14 @@ class WProductViewSet(ListModelMixin, RetrieveModelMixin, GenericViewSet):
WpmServies.add_wproduct_flow_log(instance=obj, change_str=change_str)
return Response()
@action(methods=['get'], detail=True, perms_map={'get':'*'})
def card(self, request, pk=None):
"""
流程卡
"""
obj = self.get_object()
return Response(WProductCardSerializer(instance=obj).data)
class WproductTicketViewSet(ListModelMixin, GenericViewSet):
"""
玻璃审批工单