采购订单的审核

This commit is contained in:
caoqianming 2022-01-27 16:08:20 +08:00
parent c8c6945a38
commit 7271c78cd6
3 changed files with 64 additions and 6 deletions

View File

@ -19,6 +19,11 @@ class PuOrderItemSerializer(ModelSerializer):
model = PuOrderItem model = PuOrderItem
fields = '__all__' fields = '__all__'
class PuOrderItemCreateUpdateSerializer(ModelSerializer):
class Meta:
model = PuOrderItem
fields = ['count', 'delivery_date']
class PuOrderSerializer(ModelSerializer): class PuOrderSerializer(ModelSerializer):
vendor_ = VendorSimpleSerializer(source='vendor', read_only=True) vendor_ = VendorSimpleSerializer(source='vendor', read_only=True)
items = PuOrderItemSerializer(source='item_pu_order', many=True, 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 PuOrderCreateUpdateSerializer(ModelSerializer):
class Meta: class Meta:
model = PuOrder
fields = ['number', 'vendor'] fields = ['number', 'vendor']

View File

@ -1,11 +1,13 @@
from django.db.models import base from django.db.models import base
from rest_framework import urlpatterns 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 django.urls import path, include
from rest_framework.routers import DefaultRouter from rest_framework.routers import DefaultRouter
router = DefaultRouter() router = DefaultRouter()
router.register('vendor', VendorViewSet, basename='vendor') 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 = [ urlpatterns = [
path('', include(router.urls)), path('', include(router.urls)),
] ]

View File

@ -1,13 +1,17 @@
from django.shortcuts import render from django.shortcuts import render
from numpy import delete
from rest_framework.viewsets import ModelViewSet from rest_framework.viewsets import ModelViewSet
from rest_framework.mixins import CreateModelMixin, DestroyModelMixin from rest_framework.mixins import CreateModelMixin, DestroyModelMixin
from rest_framework.viewsets import GenericViewSet from rest_framework.viewsets import GenericViewSet
from apps.pum.models import PuOrder, Vendor from apps.pum.models import PuOrder, PuOrderItem, Vendor
from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderSerializer, VendorSerializer from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderItemCreateUpdateSerializer, PuOrderItemSerializer, PuOrderSerializer, VendorSerializer
from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin 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. # Create your views here.
class VendorViewSet(CreateUpdateModelAMixin, ModelViewSet): class VendorViewSet(CreateUpdateModelAMixin, ModelViewSet):
""" """
@ -41,7 +45,53 @@ class PuOrderViewSet(CreateUpdateModelAMixin, ModelViewSet):
return PuOrderCreateUpdateSerializer return PuOrderCreateUpdateSerializer
return super().get_serializer_class() 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): class PuOrderItemViewSet(CreateModelMixin, DestroyModelMixin, GenericViewSet):
pass """
采购订单条目
"""
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)