from apps.system.mixins import CreateUpdateModelAMixin from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer from rest_framework.mixins import CreateModelMixin, ListModelMixin from apps.pm.models import ProductionPlan from rest_framework.viewsets import GenericViewSet, ModelViewSet from django.shortcuts import render from apps.sam.models import Order from rest_framework.exceptions import APIException from rest_framework.response import Response # Create your views here. def updateOrderPlanedCount(order): """ 更新订单已排数量 """ planed_count = 0 plans = ProductionPlan.objects.filter(order=order) for i in plans: planed_count = planed_count + i.count order.planed_count = planed_count order.save() class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModelMixin, GenericViewSet): """ 生产计划 """ perms_map = {'*': '*'} queryset = ProductionPlan.objects.select_related('order', 'order__contract', 'product') serializer_class = ProductionPlanSerializer search_fields = ['number'] filterset_fields = [] ordering_fields = ['id'] ordering = ['-id'] def get_serializer_class(self): if self.action in ['create']: return ProductionPlanCreateFromOrderSerializer return ProductionPlanSerializer def create(self, request, *args, **kwargs): data = request.data serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) if data.get('order', None): order = Order.objects.get(pk=data['order']) if order.planed_count >= data['count'] or data['count'] > 0: pass else: raise APIException('排产数量错误') instance = serializer.save(create_by=request.user, product=order.product) updateOrderPlanedCount(instance.order) return Response()