diff --git a/hb_server/apps/mtm/filters.py b/hb_server/apps/mtm/filters.py new file mode 100644 index 0000000..b4a2976 --- /dev/null +++ b/hb_server/apps/mtm/filters.py @@ -0,0 +1,15 @@ +from django_filters import rest_framework as filters +from apps.mtm.models import TechDoc + + + + +class TechDocFilterset(filters.FilterSet): + # operation = filters.NumberFilter(method='filter_operation') + operation = filters.NumberFilter(field_name="subproduction__subplan_subprod__ow_subplan__operation") + class Meta: + model = TechDoc + fields = ['subproduction', 'operation'] + + # def filter_operation(self, queryset, name, value): + # return queryset.filter(subproduction__subplan_subprod__ow_subplan__operation=value) diff --git a/hb_server/apps/mtm/views.py b/hb_server/apps/mtm/views.py index 2ab241c..e1c8f95 100644 --- a/hb_server/apps/mtm/views.py +++ b/hb_server/apps/mtm/views.py @@ -1,6 +1,7 @@ from django.shortcuts import render from rest_framework.viewsets import ModelViewSet, GenericViewSet from rest_framework.mixins import CreateModelMixin, ListModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin +from apps.mtm.filters import TechDocFilterset from apps.mtm.models import Material, Process, RecordForm, RecordFormField, Step, SubprodctionMaterial, TechDoc, UsedStep, SubProduction from apps.mtm.serializers import InputMaterialSerializer, InputMaterialUpdateSerializer, MaterialDetailSerializer, MaterialSerializer, MaterialSimpleSerializer, OtherMaterialSerializer, OutputMaterialSerializer, OutputMaterialUpdateSerializer, ProcessSerializer, RecordFormCreateSerializer, RecordFormDetailSerializer, RecordFormFieldCreateSerializer, RecordFormFieldSerializer, RecordFormFieldUpdateSerializer, RecordFormSerializer, RecordFormUpdateSerializer, StepDetailSerializer, StepSerializer, SubProductionSerializer, SubprodctionMaterialListSerializer, TechDocCreateSerializer, TechDocListSerializer, TechDocUpdateSerializer, UsedStepCreateSerializer, UsedStepListSerializer, UsedStepUpdateSerializer @@ -201,7 +202,7 @@ class TechDocViewSet(OptimizationMixin, CreateUpdateModelAMixin, ModelViewSet): """ perms_map = {'*':'*'} queryset = TechDoc.objects.select_related('file').all() - filterset_fields = ['subproduction'] + filterset_class = TechDocFilterset search_fields = ['name'] ordering = ['-id'] diff --git a/hb_server/apps/wf/models.py b/hb_server/apps/wf/models.py index bc1597c..4d06ca1 100644 --- a/hb_server/apps/wf/models.py +++ b/hb_server/apps/wf/models.py @@ -210,7 +210,7 @@ class Ticket(CommonBModel): participant = models.JSONField('当前处理人', default=list, blank=True, help_text='可以为空(无处理人的情况,如结束状态)、userid、userid列表') act_state = models.IntegerField('进行状态', default=1, help_text='当前工单的进行状态', choices=act_state_choices) multi_all_person = models.JSONField('全部处理的结果', default=dict, blank=True, help_text='需要当前状态处理人全部处理时实际的处理结果,json格式') - + # class TicketCustomField(BaseModel): # """ diff --git a/hb_server/apps/wpm/models.py b/hb_server/apps/wpm/models.py index 9ce228a..391b591 100644 --- a/hb_server/apps/wpm/models.py +++ b/hb_server/apps/wpm/models.py @@ -108,7 +108,7 @@ class OperationWproduct(BaseModel): wproduct = models.ForeignKey(WProduct, verbose_name='关联半成品', on_delete=models.CASCADE, related_name='ow_wproduct') number = models.CharField('物品编号', null=True, blank=True, max_length=50) material = models.ForeignKey(Material, verbose_name='操作时的物料状态', on_delete=models.CASCADE) - subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='当前子生产计划', on_delete=models.CASCADE) + subproduction_plan = models.ForeignKey(SubProductionPlan, verbose_name='当前子生产计划', on_delete=models.CASCADE, related_name='ow_subplan') class OperationMaterial(BaseModel): diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index 717a2d3..9db3504 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -12,6 +12,7 @@ from apps.mtm.serializers import RecordFormDetailSerializer, SubprodctionMateria from apps.pm.models import SubProductionPlan, SubProductionProgress from apps.pm.serializers import SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer from apps.qm.models import TestRecord, TestRecordItem +from apps.qm.serializers import TestRecordDetailSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action @@ -193,10 +194,20 @@ class WProductViewSet(ListModelMixin, GenericViewSet): vdata = serializer.validated_data wproduct = vdata['wproduct'] form = vdata['form'] - data = RecordFormDetailSerializer(instance=form).data - # 后续加入系统带入数据 - # 如果是复检记录, 需要带入原数据 + + # 如果是复检记录, 需要带入原数据 + if wproduct.act_state == WProduct.WPR_ACT_STATE_TORETEST: + # 查找最近一条检验记录 + trs = TestRecord.objects.filter(wproduct=wproduct, type=TestRecord.TEST_PROCESS).order_by('-id').first() + if trs: + origin_data = TestRecordDetailSerializer() + else: + raise exceptions.APIException('原工序检验记录不存在') + else: + data = RecordFormDetailSerializer(instance=form).data + + # 后续加入系统自带数据 return Response(data) @action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WpmTestRecordCreateSerializer) @@ -250,7 +261,6 @@ class WProductViewSet(ListModelMixin, GenericViewSet): wproduct.act_state = WProduct.WPR_ACT_STATE_OK if wproduct.number is None: # 产生半成品编号 wproduct.number = 'WP'+ranstr(7) - wproduct.save() # 更新子计划状态 # 更新子计划主产品数 instance = SubProductionProgress.objects.get(subproduction_plan=wproduct.subproduction_plan, @@ -259,8 +269,9 @@ class WProductViewSet(ListModelMixin, GenericViewSet): instance.save() else:# 如果不合格 wproduct.act_state = WProduct.WPR_ACT_STATE_NOTOK - wproduct.save() # 需要走不合格品审理单 + wproduct.update_by = request.user + wproduct.save() return Response() @action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=WproductPutInsSerializer) @@ -310,7 +321,7 @@ class WProductViewSet(ListModelMixin, GenericViewSet): FIFOItemProduct.objects.bulk_create(ips) # 更新库存并修改半成品进行状态 update_inm(fifo) - wproducts.update(act_state=WProduct.WPR_ACT_STATE_INM, warehouse=warehouse, update_by=request.user) + wproducts.update(act_state=WProduct.WPR_ACT_STATE_INM, warehouse=warehouse, update_by=request.user, update_time=timezone.now()) return Response() @action(methods=['post'], detail=True, perms_map={'post':'*'}, serializer_class=WproductPutInSerializer) @@ -504,6 +515,7 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd instance.count_real = instance.count_real + 1 # 这个地方可能会有问题,不够严谨 instance.save() wp.operation = None + wp.update_by = request.user wp.save() elif step.type == Step.STEP_TYPE_DIV: # 更新物料产出情况 @@ -534,10 +546,11 @@ class OperationViewSet(ListModelMixin, RetrieveModelMixin, CreateModelMixin, Upd instance = oms_w.subproduction_progress instance.count_real = instance.count_real + 1 # 这个地方可能会有问题,不够严谨 instance.save() + wproduct.create_by = request.user wproduct.save() # 隐藏原半成品 wps = WProduct.objects.filter(ow_wproduct__operation = op) - wps.update(is_hidden=True, child=wproduct) + wps.update(is_hidden=True, child=wproduct, update_by=request.user, update_time=timezone.now()) else: raise exceptions.APIException('产出物料错误') op.is_submited = True