hberp/hb_server/apps/pm/views.py

52 lines
1.9 KiB
Python

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