半成品折合计算

This commit is contained in:
caoqianming 2022-02-15 10:52:10 +08:00
parent 438c49d7e1
commit c9ad35b4b5
2 changed files with 77 additions and 10 deletions

View File

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

View File

@ -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:
index = res_d_list.index(m['material__id'])
res[index]['count'] = res[index]['count'] + m['count']*i['count']
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):
@ -256,4 +316,4 @@ class ResourceViewSet(GenericViewSet):
steps = Step.objects.filter(usedstep__is_deleted=False, usedstep__subproduction__in=subproductions)
equips = Equipment.objects.filter(step_equips__in=steps, is_deleted=False).distinct()
serializer = EquipmentSimpleSerializer(instance=equips, many=True)
return Response(serializer.data)
return Response(serializer.data)