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) |