diff --git a/hb_server/apps/develop/urls.py b/hb_server/apps/develop/urls.py index 8f6e395..b284243 100644 --- a/hb_server/apps/develop/urls.py +++ b/hb_server/apps/develop/urls.py @@ -2,11 +2,13 @@ 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, UpdateCuttingView, UpdateLastTestResult +from apps.develop.views import CleanDataView, UpdateCuttingView, UpdateFIFOItem, UpdateLastTestResult urlpatterns = [ path('cleandata/', CleanDataView.as_view()), path('update_cutting/', UpdateCuttingView.as_view()), - path('update_last_result/', UpdateLastTestResult.as_view()) + path('update_last_result/', UpdateLastTestResult.as_view()), + path('update_last_result/', UpdateLastTestResult.as_view()), + path('update_fifoitem/', UpdateFIFOItem.as_view()) ] diff --git a/hb_server/apps/develop/views.py b/hb_server/apps/develop/views.py index 7ca4ca8..f02f55f 100644 --- a/hb_server/apps/develop/views.py +++ b/hb_server/apps/develop/views.py @@ -4,7 +4,7 @@ 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 -from apps.inm.models import FIFO, Inventory, MaterialBatch +from apps.inm.models import FIFO, FIFOItem, Inventory, MaterialBatch from apps.mtm.models import Material from apps.pm.models import ProductionPlan from apps.sam.models import Order @@ -62,3 +62,21 @@ class UpdateLastTestResult(APIView): i.last_test_result = tr.is_testok i.save() return Response() + +class UpdateFIFOItem(APIView): + + permission_classes = [IsAdminUser] + @transaction.atomic + def post(self, request, format=None): + """ + 更新出入库结果 + """ + for i in FIFOItem.objects.all(): + if i.fifo.type == FIFO.FIFO_TYPE_PUR_IN: + if i.is_testok: + i.need_test = True + i.save() + else: + i.is_testok = None + i.save() + return Response() diff --git a/hb_server/apps/inm/migrations/0028_alter_fifoitem_files.py b/hb_server/apps/inm/migrations/0028_alter_fifoitem_files.py new file mode 100644 index 0000000..df29017 --- /dev/null +++ b/hb_server/apps/inm/migrations/0028_alter_fifoitem_files.py @@ -0,0 +1,19 @@ +# Generated by Django 3.2.9 on 2022-01-14 08:28 + +from django.db import migrations, models + + +class Migration(migrations.Migration): + + dependencies = [ + ('system', '0003_auto_20210812_0909'), + ('inm', '0027_auto_20220114_1551'), + ] + + operations = [ + migrations.AlterField( + model_name='fifoitem', + name='files', + field=models.ManyToManyField(blank=True, to='system.File', verbose_name='上传材料'), + ), + ] diff --git a/hb_server/apps/inm/models.py b/hb_server/apps/inm/models.py index af1b84a..ee9d786 100644 --- a/hb_server/apps/inm/models.py +++ b/hb_server/apps/inm/models.py @@ -96,7 +96,7 @@ class FIFOItem(BaseModel): on_delete=models.CASCADE) subproduction_plan = models.ForeignKey( SubProductionPlan, verbose_name='关联子生产计划', on_delete=models.CASCADE, null=True, blank=True) - files = models.ManyToManyField(File, verbose_name='上传材料') + files = models.ManyToManyField(File, verbose_name='上传材料', blank=True) class IProduct(BaseModel): diff --git a/hb_server/apps/inm/serializers.py b/hb_server/apps/inm/serializers.py index 32abb80..34d26f4 100644 --- a/hb_server/apps/inm/serializers.py +++ b/hb_server/apps/inm/serializers.py @@ -1,3 +1,4 @@ +from rest_framework import exceptions from rest_framework import serializers from apps.inm.models import FIFO, FIFOItem, FIFOItemProduct, IProduct, MaterialBatch, WareHouse, Inventory @@ -169,3 +170,19 @@ class InmTestRecordCreateSerializer(serializers.ModelSerializer): class Meta: model = TestRecord fields = ['form', 'record_data', 'is_testok', 'fifo_item'] + + + +class FIFOItemUpdateSerializer(serializers.ModelSerializer): + class Meta: + model = FIFOItem + fields = ['need_test', 'files'] + + def validate(self, attrs): + ins = self.instance + fifo = ins.fifo + if fifo.is_audited: + raise exceptions.APIException('该记录已审核') + if ins.is_testok is not None: + attrs.pop('need_test') + return super().validate(attrs) \ No newline at end of file diff --git a/hb_server/apps/inm/views.py b/hb_server/apps/inm/views.py index d36b6ec..932a1d1 100644 --- a/hb_server/apps/inm/views.py +++ b/hb_server/apps/inm/views.py @@ -1,12 +1,12 @@ from rest_framework import serializers from rest_framework import exceptions from rest_framework.exceptions import APIException -from rest_framework.mixins import DestroyModelMixin, ListModelMixin +from rest_framework.mixins import DestroyModelMixin, ListModelMixin, UpdateModelMixin from rest_framework.viewsets import GenericViewSet, ModelViewSet from apps.inm.filters import IProductFilterSet, MbFilterSet from apps.inm.models import FIFO, FIFOItem, IProduct, MaterialBatch, WareHouse, Inventory -from apps.inm.serializers import FIFOItemSerializer, FIFOInPurSerializer, FIFOListSerializer, IProductListSerializer, \ +from apps.inm.serializers import FIFOItemSerializer, FIFOInPurSerializer, FIFOItemUpdateSerializer, FIFOListSerializer, IProductListSerializer, \ InmTestRecordCreateSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, \ WareHouseCreateUpdateSerializer, InventorySerializer from apps.inm.signals import update_inm @@ -77,7 +77,7 @@ class MaterialBatchViewSet(ListModelMixin, GenericViewSet): return Response(MaterialBatchSerializer(instance=queryset, many=True).data) -class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): +class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, UpdateModelMixin, GenericViewSet): """ 出入库记录详情表 """ @@ -85,11 +85,16 @@ class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): queryset = FIFOItem.objects.select_related('material', 'fifo').all() serializer_class = FIFOItemSerializer filterset_fields = ['material', 'fifo', - 'fifo__type', 'is_tested', 'is_testok'] + 'fifo__type', 'need_test', 'is_testok'] search_fields = [] ordering_fields = ['create_time'] ordering = ['-create_time'] + def get_serializer_class(self): + if self.action == 'update': + return FIFOItemUpdateSerializer + return super().get_serializer_class() + def perform_destroy(self, instance): if instance.fifo.is_audited: raise APIException('该出入库记录已通过审核, 无法删除') @@ -119,7 +124,6 @@ class FIFOItemViewSet(ListModelMixin, DestroyModelMixin, GenericViewSet): # 如果检验合格 if obj.fifo_item: obj.fifo_item.is_testok = True if obj.is_testok else False - obj.fifo_item.is_tested = True obj.fifo_item.save() return Response()