93 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			93 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			Python
		
	
	
	
| 
 | |
| from django.shortcuts import render
 | |
| from numpy import delete
 | |
| from rest_framework.viewsets import ModelViewSet
 | |
| from rest_framework.mixins import CreateModelMixin, DestroyModelMixin, ListModelMixin, RetrieveModelMixin
 | |
| from rest_framework.viewsets import GenericViewSet
 | |
| from apps.pum.models import PuOrder, PuOrderItem, Vendor
 | |
| from apps.pum.serializers import PuOrderCreateUpdateSerializer, PuOrderItemCreateSerializer, PuOrderItemSerializer, PuOrderItemUpdateSerializer, 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):
 | |
|     """
 | |
|     供应商-增删改查
 | |
|     """
 | |
|     perms_map = {'get': '*', 'post': 'vendor_create',
 | |
|                  'put': 'vendor_update', 'delete': 'vendor_delete'}
 | |
|     queryset = Vendor.objects.all()
 | |
|     serializer_class = VendorSerializer
 | |
|     search_fields = ['name', 'contact']
 | |
|     filterset_fields = []
 | |
|     ordering_fields = ['create_time']
 | |
|     ordering = ['-create_time']
 | |
| 
 | |
| 
 | |
| class PuOrderViewSet(CreateUpdateModelAMixin, ModelViewSet):
 | |
|     """
 | |
|     采购订单-增删改查
 | |
|     """
 | |
|     perms_map = {'get': '*', 'post': 'puorder_create',
 | |
|                  'put': 'puorder_update', 'delete': 'puorder_delete'}
 | |
|     queryset = PuOrder.objects.select_related('vendor').\
 | |
|         prefetch_related('item_pu_order').all()
 | |
|     serializer_class = PuOrderSerializer
 | |
|     search_fields = ['number', 'vendor__name']
 | |
|     filterset_fields = ['vendor']
 | |
|     ordering = ['-create_time']
 | |
| 
 | |
|     def get_serializer_class(self):
 | |
|         if self.action in ['create', 'update']:
 | |
|             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':'puorder_audit'}, 
 | |
|         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, ListModelMixin, DestroyModelMixin,  RetrieveModelMixin, GenericViewSet):
 | |
|     """
 | |
|     采购订单条目
 | |
|     """
 | |
|     perms_map = {'get': '*', 'post': 'puorder_update',
 | |
|                  'put': 'puorder_update', 'delete': 'puorder_update'}
 | |
|     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 == 'create':
 | |
|             return PuOrderItemCreateSerializer
 | |
|         elif self.action == 'update':
 | |
|             return PuOrderItemUpdateSerializer
 | |
|         return super().get_serializer_class()
 | |
| 
 | |
|     def destroy(self, request, *args, **kwargs):
 | |
|         obj = self.get_object()
 | |
|         if obj.pu_order.is_audited:
 | |
|             raise ValidationError('所属采购已审核')
 | |
|         return super().destroy(request, *args, **kwargs) |