半成品折合计算
This commit is contained in:
parent
438c49d7e1
commit
c9ad35b4b5
|
@ -22,6 +22,13 @@ class ResourceCalSerializer(serializers.Serializer):
|
|||
id = serializers.IntegerField(label='产品ID')
|
||||
count = serializers.IntegerField(label='生产数量')
|
||||
|
||||
class ResourceConvertSerializer(serializers.Serializer):
|
||||
id = serializers.IntegerField(label='半成品ID')
|
||||
count = serializers.IntegerField(label='折合数量')
|
||||
|
||||
class ResourceConvertListSerializer(serializers.ListSerializer):
|
||||
child = ResourceConvertSerializer()
|
||||
|
||||
class ResourceCalListSerializer(serializers.ListSerializer):
|
||||
child = ResourceCalSerializer()
|
||||
|
||||
|
|
|
@ -10,7 +10,7 @@ from apps.inm.serializers import MaterialBatchSerializer
|
|||
from apps.mtm.models import Material, Step, SubProduction, SubprodctionMaterial
|
||||
from apps.pm.filters import PlanFilterSet, SubproductionProgressFilterSet
|
||||
from apps.system.mixins import CreateUpdateModelAMixin
|
||||
from apps.pm.serializers import GenSubPlanSerializer, PickNeedSerializer, PlanDestorySerializer, ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer, SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer
|
||||
from apps.pm.serializers import GenSubPlanSerializer, PickNeedSerializer, PlanDestorySerializer, ProductionPlanCreateFromOrderSerializer, ProductionPlanSerializer, ResourceCalListSerializer, ResourceCalSerializer, ResourceConvertListSerializer, ResourceConvertSerializer, SubProductionPlanListSerializer, SubProductionPlanUpdateSerializer, SubProductionProgressSerializer
|
||||
from rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin
|
||||
from apps.pm.models import ProductionPlan, SubProductionProgress, SubProductionPlan
|
||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||
|
@ -216,30 +216,90 @@ class ResourceViewSet(GenericViewSet):
|
|||
rdata = request.data
|
||||
serializer = self.get_serializer(data=rdata)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
productIdList = []
|
||||
productList = []
|
||||
for i in rdata:
|
||||
if i['id'] not in productIdList:
|
||||
productIdList.append(i['id'])
|
||||
productList.append(i)
|
||||
else:
|
||||
index = productIdList.index(i['id'])
|
||||
productList[index]['count'] = productList[index]['count'] + i['count']
|
||||
|
||||
res_d_list = []
|
||||
res = []
|
||||
for i in rdata:
|
||||
for i in productList:
|
||||
# 计算输入物料
|
||||
materials = SubprodctionMaterial.objects.filter(subproduction__product__id=i['id'],
|
||||
subproduction__is_deleted=False, is_deleted=False,
|
||||
material__type__in=[Material.MA_TYPE_MAINSO,
|
||||
Material.MA_TYPE_HELPSO], type= SubprodctionMaterial.SUB_MA_TYPE_IN).order_by('material__number')\
|
||||
type= SubprodctionMaterial.SUB_MA_TYPE_IN).order_by('material__number')\
|
||||
.values('material__id', 'material__name',
|
||||
'material__number', 'material__type',
|
||||
'count', 'material__count', 'material__count_safe')
|
||||
l_m = list(materials)
|
||||
for m in l_m:
|
||||
if m['material__id'] in res_d_list:
|
||||
if m['material__type'] in [Material.MA_TYPE_MAINSO, Material.MA_TYPE_HELPSO]:
|
||||
index = res_d_list.index(m['material__id'])
|
||||
res[index]['count'] = res[index]['count'] + m['count']*i['count']
|
||||
else:
|
||||
res_d_list.append(m['material__id'])
|
||||
res.append({'id':m['material__id'], 'name':m['material__name'],
|
||||
item = {'id':m['material__id'], 'name':m['material__name'],
|
||||
'type':m['material__type'], 'number':m['material__number'],
|
||||
'count':m['count']*i['count'], 'inv_count':m['material__count'],
|
||||
'count_safe':m['material__count_safe']})
|
||||
'count': None,'inv_count':m['material__count'],
|
||||
'count_safe':m['material__count_safe']}
|
||||
if item['type'] in [Material.MA_TYPE_MAINSO, Material.MA_TYPE_HELPSO]:
|
||||
item['count'] = m['count']*i['count']
|
||||
res.append(item)
|
||||
return Response(res)
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post':'resource_cal'}, serializer_class=ResourceConvertListSerializer)
|
||||
def convert(self, request, pk=None):
|
||||
rdata = request.data
|
||||
serializer = self.get_serializer(data=rdata)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
res_d_list = []
|
||||
res = []
|
||||
half_list = rdata
|
||||
while half_list:
|
||||
fitem = half_list[0]
|
||||
sm = SubprodctionMaterial.objects.filter(
|
||||
type= SubprodctionMaterial.SUB_MA_TYPE_OUT,
|
||||
is_deleted = False,
|
||||
material__id = fitem['id']
|
||||
).first()
|
||||
if sm:
|
||||
spn = sm.subproduction
|
||||
sm_left_l = list(SubprodctionMaterial.objects.filter(
|
||||
subproduction = spn,
|
||||
type= SubprodctionMaterial.SUB_MA_TYPE_IN,
|
||||
is_deleted = False,
|
||||
).order_by('material__number')\
|
||||
.values('material__id', 'material__name',
|
||||
'material__number', 'material__type',
|
||||
'count', 'material__count', 'material__count_safe'))
|
||||
|
||||
for i in sm_left_l:
|
||||
if i['material__type'] == Material.MA_TYPE_HALFGOOD:
|
||||
item = {
|
||||
'id':i['material__id'],
|
||||
'count':(i['count']*fitem['count'])/(sm.count)
|
||||
}
|
||||
half_list.append(item)
|
||||
else:
|
||||
if i['material__id'] in res_d_list:
|
||||
index = res_d_list.index(i['material__id'])
|
||||
res[index]['count'] = res[index]['count'] + \
|
||||
(i['count']*fitem['count'])/(sm.count)
|
||||
else:
|
||||
res_d_list.append(i['material__id'])
|
||||
item = {
|
||||
'id': i['material__id'],
|
||||
'count':(i['count']*fitem['count'])/(sm.count)
|
||||
}
|
||||
res.append(item)
|
||||
del(half_list[0])
|
||||
return Response(res)
|
||||
|
||||
@action(methods=['post'], detail=False, perms_map={'post':'resource_cal_equip'}, serializer_class=ResourceCalListSerializer)
|
||||
def cal_equip(self, request, pk=None):
|
||||
|
|
Loading…
Reference in New Issue