diff --git a/hb_server/apps/develop/urls.py b/hb_server/apps/develop/urls.py index 6c1c780..250f0c3 100644 --- a/hb_server/apps/develop/urls.py +++ b/hb_server/apps/develop/urls.py @@ -2,9 +2,10 @@ from django.db.models import base from rest_framework import urlpatterns from django.urls import path, include from rest_framework.routers import DefaultRouter -from apps.develop.views import CleanDataView +from apps.develop.views import CleanDataView, UpdateCuttingView urlpatterns = [ path('cleandata/', CleanDataView.as_view()), + path('update_cutting/', UpdateCuttingView.as_view()) ] diff --git a/hb_server/apps/develop/views.py b/hb_server/apps/develop/views.py index b3cf203..a36a550 100644 --- a/hb_server/apps/develop/views.py +++ b/hb_server/apps/develop/views.py @@ -1,4 +1,6 @@ +from django.db import transaction from django.shortcuts import render +from rest_framework.decorators import permission_classes from rest_framework.views import APIView from rest_framework.permissions import IsAdminUser from rest_framework.response import Response @@ -7,7 +9,8 @@ from apps.mtm.models import Material from apps.pm.models import ProductionPlan from apps.sam.models import Order from apps.wf.models import Ticket -from apps.wpm.models import Operation +from apps.wpm.models import Operation, OperationMaterial, WProduct, WproductFlow +from apps.wpm.services import WpmServies # Create your views here. class CleanDataView(APIView): @@ -25,4 +28,22 @@ class CleanDataView(APIView): Inventory.objects.filter(material__type__in=[Material.MA_TYPE_GOOD, Material.MA_TYPE_HALFGOOD]).delete() Ticket.objects.all().delete(soft=False) Operation.objects.all().delete() - return Response() \ No newline at end of file + return Response() + + +class UpdateCuttingView(APIView): + permission_classes = [IsAdminUser] + @transaction.atomic + def post(self, request, format=None): + """ + 更新下料清单 + """ + for i in WProduct.objects.all(): + sp = WproductFlow.objects.filter(wproduct=i).order_by('id').first().subproduction_plan + op_q = OperationMaterial.objects.filter(subproduction_plan=sp, operation__step__id=1, operation__is_submited=True) + op = op_q.first().operation + i.coperation = op + i.save() + WproductFlow.objects.filter(wproduct=i).update(coperation=op) + WpmServies.update_cutting_list_with_operation(op) + return Response() diff --git a/hb_server/apps/wpm/filters.py b/hb_server/apps/wpm/filters.py index bf3783e..7719d7b 100644 --- a/hb_server/apps/wpm/filters.py +++ b/hb_server/apps/wpm/filters.py @@ -2,7 +2,7 @@ from django_filters import rest_framework as filters from apps.mtm.models import Material, Step from apps.wpm.services import WpmServies -from .models import Operation, WMaterial, WProduct +from .models import Operation, OperationMaterial, WMaterial, WProduct class WMaterialFilterSet(filters.FilterSet): @@ -33,4 +33,10 @@ class WProductFilterSet(filters.FilterSet): def filter_tag(self, queryset, name, value): if value == 'no_scrap': queryset = queryset.exclude(act_state=WProduct.WPR_ACT_STATE_SCRAP) - return queryset \ No newline at end of file + return queryset + +class CuttingFilterSet(filters.FilterSet): + production_plan = filters.NumberFilter(field_name='subproduction_plan__production_plan') + class Meta: + model = OperationMaterial + fields = ['operation', 'subproduction_plan', 'material'] \ No newline at end of file diff --git a/hb_server/apps/wpm/serializers.py b/hb_server/apps/wpm/serializers.py index b5d168c..cb36774 100644 --- a/hb_server/apps/wpm/serializers.py +++ b/hb_server/apps/wpm/serializers.py @@ -207,7 +207,7 @@ class OperationCreateSerializer(serializers.Serializer): class OperationUpdateSerializer(serializers.ModelSerializer): class Meta: model = Operation - fields =['use_scrap', 'remark'] + fields =['remark'] class OperationInitSerializer(serializers.Serializer): step = serializers.PrimaryKeyRelatedField(queryset=Step.objects.all(), label="子工序ID") diff --git a/hb_server/apps/wpm/services.py b/hb_server/apps/wpm/services.py index dcff705..829b938 100644 --- a/hb_server/apps/wpm/services.py +++ b/hb_server/apps/wpm/services.py @@ -166,7 +166,10 @@ class WpmServies(object): from_batch = '' for m in input_q: count_cut = count_cut + m.count - from_batch = from_batch + ';' + m.batch if m.batch else from_batch + if from_batch and m.batch: + from_batch = from_batch + ';' + m.batch + else: + from_batch = m.batch i.count_cut = count_cut i.from_batch = from_batch wpfs = WproductFlow.objects.filter(subproduction_plan=i.subproduction_plan, diff --git a/hb_server/apps/wpm/views.py b/hb_server/apps/wpm/views.py index 464f0bd..08dc91b 100644 --- a/hb_server/apps/wpm/views.py +++ b/hb_server/apps/wpm/views.py @@ -19,7 +19,7 @@ from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action from apps.wf.models import Workflow from apps.wf.serializers import WorkflowSimpleSerializer -from apps.wpm.filters import WMaterialFilterSet, WProductFilterSet +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, WProductListSerializer, WplanPutInSerializer, WpmTestFormInitSerializer, WpmTestRecordCreateSerializer, WproductPutInSerializer, WproductPutInsSerializer, WproductTicketListSerializer @@ -807,7 +807,7 @@ class CuttingListViewSet(ListModelMixin, GenericViewSet): queryset = OperationMaterial.objects.select_related('operation', 'subproduction_plan', 'material', 'create_by').filter(operation__step__process__id=1) serializer_class = CuttingListSerializer - filterset_fields = ['operation', 'subproduction_plan', 'material'] + filterset_class = CuttingFilterSet ordering_fields = ['id'] ordering = ['-id']