物料消耗计算

This commit is contained in:
caoqianming 2021-10-13 10:39:31 +08:00
parent cf8be1af3f
commit 5bae28fba6
4 changed files with 37 additions and 6 deletions

View File

@ -15,3 +15,10 @@ class ProductionPlanSerializer(serializers.ModelSerializer):
class Meta:
model = ProductionPlan
fields ='__all__'
class ResourceCalSerializer(serializers.Serializer):
id = serializers.IntegerField(label='产品ID')
count = serializers.IntegerField(label='生产数量')
class ResourceCalListSerializer(serializers.ListSerializer):
child = ResourceCalSerializer()

View File

@ -1,4 +1,4 @@
from apps.pm.views import ProductionPlanViewSet
from apps.pm.views import ProductionPlanViewSet, ResourceViewSet
from django.db.models import base
from rest_framework import urlpatterns
from django.urls import path, include
@ -6,7 +6,7 @@ from rest_framework.routers import DefaultRouter
router = DefaultRouter()
router.register('productionplan', ProductionPlanViewSet, basename='productionplan')
router.register('resource', ResourceViewSet, basename='resource')
urlpatterns = [
path('', include(router.urls)),
]

View File

@ -1,6 +1,7 @@
from rest_framework.views import APIView
from apps.mtm.models import InputMaterial
from apps.system.mixins import CreateUpdateModelAMixin
from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer
from apps.pm.serializers import ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer
from rest_framework.mixins import CreateModelMixin, ListModelMixin
from apps.pm.models import ProductionPlan
from rest_framework.viewsets import GenericViewSet, ModelViewSet
@ -8,6 +9,7 @@ from django.shortcuts import render
from apps.sam.models import Order
from rest_framework.exceptions import APIException
from rest_framework.response import Response
from rest_framework.decorators import action
# Create your views here.
def updateOrderPlanedCount(order):
@ -52,5 +54,27 @@ class ProductionPlanViewSet(CreateUpdateModelAMixin, ListModelMixin, CreateModel
updateOrderPlanedCount(instance.order)
return Response()
class ResourceCalculate(APIView):
pass
class ResourceViewSet(GenericViewSet):
perms_map = {'*': '*'}
@action(methods=['post'], detail=False, perms_map={'get':'*'}, serializer_class=ResourceCalSerializer)
def cal(self, request, pk=None):
"""
物料消耗计算
"""
rdata = request.data
serializer = self.get_serializer(data=rdata, many=True)
serializer.is_valid(raise_exception=True)
res = []
for i in rdata:
materials = InputMaterial.objects.filter(subproduction__product__id=i['id'],
subproduction__is_deleted=False, is_deleted=False, material__type__in=[3,4]).order_by('material__number')
for m in materials:
for x in res:
if x['id'] == m.material.id:
x['count'] = x['count'] + m.count*i['count']
break
else:
res.append({'id':m.material.id, 'name':m.material.name, 'type':m.material.type, 'number':m.material.number, 'count':m.count*i['count']})
return Response(res)

View File

@ -56,7 +56,7 @@ class FitJSONRenderer(JSONRenderer):
data = data[prefix]
if isinstance(data, list):
data = data[0]
response_body.msg = prefix + ":" + data # 取一部分放入msg,方便前端alert
response_body.msg = prefix + ":" + str(data) # 取一部分放入msg,方便前端alert
else:
response_body.data = data
renderer_context.get("response").status_code = 200 # 统一成200响应,用code区分