diff --git a/hb_server/apps/pum/serializers.py b/hb_server/apps/pum/serializers.py index 4fe4ae7..a3957a6 100644 --- a/hb_server/apps/pum/serializers.py +++ b/hb_server/apps/pum/serializers.py @@ -19,6 +19,11 @@ class PuOrderItemSerializer(ModelSerializer): model = PuOrderItem fields = '__all__' +class PuOrderItemCreateUpdateSerializer(ModelSerializer): + class Meta: + model = PuOrderItem + fields = ['count', 'delivery_date'] + class PuOrderSerializer(ModelSerializer): vendor_ = VendorSimpleSerializer(source='vendor', read_only=True) items = PuOrderItemSerializer(source='item_pu_order', many=True, read_only=True) @@ -28,4 +33,5 @@ class PuOrderSerializer(ModelSerializer): class PuOrderCreateUpdateSerializer(ModelSerializer): class Meta: + model = PuOrder fields = ['number', 'vendor'] \ No newline at end of file diff --git a/hb_server/apps/pum/urls.py b/hb_server/apps/pum/urls.py index a81ad24..1ecc84b 100644 --- a/hb_server/apps/pum/urls.py +++ b/hb_server/apps/pum/urls.py @@ -1,11 +1,13 @@ from django.db.models import base from rest_framework import urlpatterns -from apps.pum.views import VendorViewSet +from apps.pum.views import PuOrderItemViewSet, PuOrderViewSet, VendorViewSet from django.urls import path, include from rest_framework.routers import DefaultRouter router = DefaultRouter() router.register('vendor', VendorViewSet, basename='vendor') +router.register('pu_order', PuOrderViewSet, basename='pu_order') +router.register('pu_order_item', PuOrderItemViewSet, basename='pu_order_item') urlpatterns = [ path('', include(router.urls)), ] diff --git a/hb_server/apps/pum/views.py b/hb_server/apps/pum/views.py index ec11c43..378362a 100644 --- a/hb_server/apps/pum/views.py +++ b/hb_server/apps/pum/views.py @@ -1,13 +1,17 @@ from django.shortcuts import render +from numpy import delete from rest_framework.viewsets import ModelViewSet from rest_framework.mixins import CreateModelMixin, DestroyModelMixin from rest_framework.viewsets import GenericViewSet -from apps.pum.models import PuOrder, Vendor -from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderSerializer, VendorSerializer +from apps.pum.models import PuOrder, PuOrderItem, Vendor +from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderItemCreateUpdateSerializer, PuOrderItemSerializer, PuOrderSerializer, VendorSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin - - +from rest_framework.exceptions import APIException, ValidationError +from rest_framework.decorators import action +from rest_framework import serializers +from rest_framework.response import Response +from rest_framework import status # Create your views here. class VendorViewSet(CreateUpdateModelAMixin, ModelViewSet): """ @@ -41,7 +45,53 @@ class PuOrderViewSet(CreateUpdateModelAMixin, ModelViewSet): return PuOrderCreateUpdateSerializer return super().get_serializer_class() + def update(self, request, *args, **kwargs): + obj = self.get_object() + if obj.is_audited: + raise ValidationError('该采购订单已审核') + return super().update(request, *args, **kwargs) + + def destroy(self, request, *args, **kwargs): + obj = self.get_object() + if obj.is_audited: + raise ValidationError('该采购订单已审核') + return super().destroy(request, *args, **kwargs) + @action(methods=['post'], detail=True, perms_map={'post':'*'}, + serializer_class=serializers.Serializer) + def audit(self, request, pk=None): + obj = self.get_object() + if obj.item_pu_order.exists() and not obj.is_audited: + obj.is_audited = True + obj.update_by = request.user + obj.save() + return Response() + return Response('订单状态有误', status=status.HTTP_400_BAD_REQUEST) class PuOrderItemViewSet(CreateModelMixin, DestroyModelMixin, GenericViewSet): - pass \ No newline at end of file + """ + 采购订单条目 + """ + perms_map = {'get': '*', 'post': '*', + 'put': '*', 'delete': '*'} + queryset = PuOrderItem.objects.select_related('material').all() + serializer_class = PuOrderItemSerializer + filterset_fields = ['pu_order', 'material'] + ordering = ['-create_time'] + + def get_serializer_class(self): + if self.action in ['create', 'update']: + return PuOrderItemCreateUpdateSerializer + return super().get_serializer_class() + + def create(self, request, *args, **kwargs): + obj = self.get_object() + if obj.pu_order.is_audited: + raise ValidationError('所属采购已审核') + return super().create(request, *args, **kwargs) + + def destroy(self, request, *args, **kwargs): + obj = self.get_object() + if obj.pu_order.is_audited: + raise ValidationError('所属采购已审核') + return super().destroy(request, *args, **kwargs) \ No newline at end of file