报废操作针对冷加工进行修改

This commit is contained in:
caoqianming 2021-12-21 16:20:20 +08:00
parent 0bd5516cef
commit d892a0651d
3 changed files with 53 additions and 10 deletions

View File

@ -48,6 +48,16 @@ class WProduct(CommonAModel):
(WPR_ACT_STATE_TOFINALTEST, '待成品检验'),
(WPR_ACT_STATE_SCRAP, '已报废')
)
SCRAP_REASON_QIPAO = 10
SCRAP_REASON_PODIAN = 20
SCRAP_REASON_HUA = 30
SCRAP_REASON_OTHER = 40
scrap_reason_choices = (
(10, '气泡'),
(20, '破点'),
(30, '划伤'),
(40, '其他')
)
number = models.CharField('物品编号', unique=True, null=True, blank=True, max_length=50)
material = models.ForeignKey(Material, verbose_name='所属物料状态', on_delete=models.CASCADE)
pre_step = models.ForeignKey(Step, verbose_name='已执行到', help_text='已执行完的步骤', null=True, blank=True, on_delete=models.CASCADE, related_name='w_pre_step')
@ -58,6 +68,7 @@ class WProduct(CommonAModel):
remark = models.CharField('备注', max_length=200, null=True, blank=True)
subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='当前子生产计划', on_delete=models.CASCADE, related_name='wproduct_subplan')
scrap_reason = models.IntegerField('报废原因', choices=scrap_reason_choices, null=True, blank=True)
warehouse = models.ForeignKey(WareHouse, verbose_name='所在仓库', on_delete=models.SET_NULL, null=True, blank=True)
operation = models.ForeignKey('wpm.operation', verbose_name='当前操作',
on_delete=models.SET_NULL, null=True, blank=True, related_name='wp_operation')

View File

@ -414,4 +414,8 @@ class OperationRecordDetailSerializer(serializers.ModelSerializer):
fields = '__all__'
def get_record_data(self, obj):
return OperationRecordItemSerializer(instance=obj.item_operation_record.order_by('form_field__sort'), many=True).data
return OperationRecordItemSerializer(instance=obj.item_operation_record.order_by('form_field__sort'), many=True).data
class ScrapSerializer(serializers.Serializer):
scrap_reason = serializers.ChoiceField(choices=WProduct.scrap_reason_choices, required=False)
# wproducts = serializers.ListField(child=serializers.PrimaryKeyRelatedField(queryset=WProduct.objects.all()), label='半成品ID列表')

View File

@ -21,7 +21,7 @@ from apps.wf.serializers import WorkflowSimpleSerializer
from apps.wpm.filters import WMaterialFilterSet
from apps.wpm.models import OperationEquip, OperationWproduct, Pick, PickWproduct, WMaterial, WProduct, Operation, OperationMaterial, OperationRecord, OperationRecordItem
from apps.wpm.serializers import OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer
from apps.wpm.serializers import OperationEquipListSerializer, OperationEquipUpdateSerializer, OperationMaterialCreate1ListSerailizer, OperationMaterialCreate1Serailizer, OperationMaterialCreate2ListSerailizer, OperationMaterialCreate2Serailizer, OperationMaterialCreate3Serializer, OperationMaterialListSerializer, OperationRecordDetailSerializer, OperationRecordListSerializer, OperationRecordSubmitSerializer, OperationUpdateSerializer, OperationWproductListSerializer, OperationCreateSerializer, OperationDetailSerializer, OperationListSerializer, PickHalfSerializer, PickHalfsSerializer, PickSerializer, OperationInitSerializer, OperationSubmitSerializer, ScrapSerializer, WMaterialListSerializer, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer
from rest_framework.response import Response
from django.db import transaction
from rest_framework import exceptions, serializers
@ -332,26 +332,54 @@ class WProductViewSet(ListModelMixin, GenericViewSet):
wproduct.save()
return Response()
@action(methods=['post'], detail=True, perms_map={'post':'*'})
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=ScrapSerializer)
def scrap(self, request, pk=None):
"""
报废操作
"""
obj = self.get_object()
if Operation.objects.filter(ow_operation__wproduct=obj, is_submited=True).count() >4 or obj.act_state != WProduct.WPR_ACT_STATE_NOTOK:
raise exceptions.APIException('该产品不支持直接报废')
serializer = ScrapSerializer(data=request.data)
vdata = serializer.validated_data
if obj.act_state == WProduct.WPR_ACT_STATE_NOTOK:
pass
elif obj.step.process == 1: # 如果是冷加工可直接报废
if vdata.get('scrap_reason', None):
obj.scrap_reason = vdata['scrap_reason']
else:
raise exceptions.APIException('请填写报废原因')
else:
raise exceptions.APIException('该产品不可报废')
obj.act_state = WProduct.WPR_ACT_STATE_SCRAP
obj.update_by = request.user
obj.save()
return Response()
@action(methods=['get'], detail=False, perms_map={'get':'*'})
def workflows(self, request, pk=None):
# @action(methods=['get'], detail=False, perms_map={'get':'*'})
# def workflows(self, request, pk=None):
# """
# 可发起的工作流
# """
# wfs = Workflow.objects.filter(key__startswith= 'wp_')
# return WorkflowSimpleSerializer(instance=wfs, many=True).data
@action(methods=['get'], detail=True, perms_map={'get':'*'})
def bhg_wf(self, request, pk=None):
"""
可发起的工作流
发起不合格审理单
"""
wfs = Workflow.objects.filter(key__startswith= 'wp')
return WorkflowSimpleSerializer(instance=wfs, many=True).data
obj = self.get_object()
if obj.act_state != WProduct.WPR_ACT_STATE_NOTOK:
raise exceptions.APIException('非检验不合格产品不可发起不合格审理')
ret = {
'sys_wproduct':obj.id,
'sys_name':obj.material.name,
'sys_specification':obj.material.specification,
'sys_finder':request.user.id,
'sys_process':obj.step.process.id,
}
return Response(ret)