79 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			Python
		
	
	
	
| from apps.sam.filters import ContractFilterSet, OrderFilterSet
 | |
| from apps.sam.serializers import ContractCreateUpdateSerializer, ContractSerializer, \
 | |
|     CustomerCreateUpdateSerializer, CustomerSerializer, OrderCreateUpdateSerializer, OrderSerializer
 | |
| from apps.sam.models import Contract, Customer, Order
 | |
| from rest_framework.viewsets import ModelViewSet
 | |
| from apps.system.mixins import CreateUpdateCustomMixin
 | |
| from django.db.models import F
 | |
| from rest_framework.response import Response
 | |
| from rest_framework.decorators import action
 | |
| # Create your views here.
 | |
| class CustomerViewSet(CreateUpdateCustomMixin, ModelViewSet):
 | |
|     """
 | |
|     客户-增删改查
 | |
|     """
 | |
|     perms_map = {'get': '*', 'post':'customer_create',
 | |
|                 'put':'customer_update', 'delete':'customer_delete'}
 | |
|     queryset = Customer.objects.all()
 | |
|     serializer_class = CustomerSerializer
 | |
|     search_fields = ['name', 'contact']
 | |
|     filterset_fields = []
 | |
|     ordering_fields = ['create_time']
 | |
|     ordering = ['-create_time']
 | |
| 
 | |
|     def get_serializer_class(self):
 | |
|         if self.action in ['create', 'update']:
 | |
|             return CustomerCreateUpdateSerializer
 | |
|         return CustomerSerializer
 | |
| 
 | |
| 
 | |
| class ContractViewSet(CreateUpdateCustomMixin, ModelViewSet):
 | |
|     """
 | |
|     合同-增删改查
 | |
|     """
 | |
|     perms_map = {'get': '*', 'post':'contract_create',
 | |
|                 'put':'contract_update', 'delete':'contract_delete'}
 | |
|     queryset = Contract.objects.select_related('customer').all()
 | |
|     serializer_class = ContractSerializer
 | |
|     search_fields = ['name']
 | |
|     filterset_class = ContractFilterSet
 | |
|     ordering_fields = ['create_time']
 | |
|     ordering = ['-create_time']
 | |
| 
 | |
|     def get_serializer_class(self):
 | |
|         if self.action in ['create', 'update']:
 | |
|             return ContractCreateUpdateSerializer
 | |
|         return ContractSerializer
 | |
| 
 | |
| class OrderViewSet(CreateUpdateCustomMixin, ModelViewSet):
 | |
|     """
 | |
|     订单-增删改查
 | |
|     """
 | |
|     perms_map = {'get': '*', 'post':'order_create',
 | |
|                 'put':'order_update', 'delete':'order_delete'}
 | |
|     queryset = Order.objects.select_related('contract', 'customer').all()
 | |
|     serializer_class = OrderSerializer
 | |
|     search_fields = ['number', 'product']
 | |
|     filterset_class = OrderFilterSet
 | |
|     ordering_fields = ['create_time']
 | |
|     ordering = ['-create_time']
 | |
| 
 | |
|     def get_serializer_class(self):
 | |
|         if self.action in ['create', 'update']:
 | |
|             return OrderCreateUpdateSerializer
 | |
|         return super().get_serializer_class()
 | |
| 
 | |
|     @action(methods=['get'], detail=False, perms_map={'get':'order_toplan'})
 | |
|     def toplan(self, request, pk=None):
 | |
|         queryset = Order.objects.filter(count__gt=F('planed_count')).order_by('-id')
 | |
|         page = self.paginate_queryset(queryset)
 | |
|         if page is not None:
 | |
|             serializer = self.get_serializer(page, many=True)
 | |
|             return self.get_paginated_response(serializer.data)
 | |
|         serializer = self.get_serializer(queryset, many=True)
 | |
|         return Response(serializer.data)
 | |
| 
 | |
| 
 | |
| 
 | |
|     
 | |
|      |