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)