半成品折合计算
This commit is contained in:
parent
438c49d7e1
commit
c9ad35b4b5
|
@ -22,6 +22,13 @@ class ResourceCalSerializer(serializers.Serializer):
|
||||||
id = serializers.IntegerField(label='产品ID')
|
id = serializers.IntegerField(label='产品ID')
|
||||||
count = serializers.IntegerField(label='生产数量')
|
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):
|
class ResourceCalListSerializer(serializers.ListSerializer):
|
||||||
child = ResourceCalSerializer()
|
child = ResourceCalSerializer()
|
||||||
|
|
||||||
|
|
|
@ -10,7 +10,7 @@ from apps.inm.serializers import MaterialBatchSerializer
|
||||||
from apps.mtm.models import Material, Step, SubProduction, SubprodctionMaterial
|
from apps.mtm.models import Material, Step, SubProduction, SubprodctionMaterial
|
||||||
from apps.pm.filters import PlanFilterSet, SubproductionProgressFilterSet
|
from apps.pm.filters import PlanFilterSet, SubproductionProgressFilterSet
|
||||||
from apps.system.mixins import CreateUpdateModelAMixin
|
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 rest_framework.mixins import CreateModelMixin, ListModelMixin, RetrieveModelMixin, UpdateModelMixin
|
||||||
from apps.pm.models import ProductionPlan, SubProductionProgress, SubProductionPlan
|
from apps.pm.models import ProductionPlan, SubProductionProgress, SubProductionPlan
|
||||||
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
from rest_framework.viewsets import GenericViewSet, ModelViewSet
|
||||||
|
@ -216,30 +216,90 @@ class ResourceViewSet(GenericViewSet):
|
||||||
rdata = request.data
|
rdata = request.data
|
||||||
serializer = self.get_serializer(data=rdata)
|
serializer = self.get_serializer(data=rdata)
|
||||||
serializer.is_valid(raise_exception=True)
|
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_d_list = []
|
||||||
res = []
|
res = []
|
||||||
for i in rdata:
|
for i in productList:
|
||||||
# 计算输入物料
|
# 计算输入物料
|
||||||
materials = SubprodctionMaterial.objects.filter(subproduction__product__id=i['id'],
|
materials = SubprodctionMaterial.objects.filter(subproduction__product__id=i['id'],
|
||||||
subproduction__is_deleted=False, is_deleted=False,
|
subproduction__is_deleted=False, is_deleted=False,
|
||||||
material__type__in=[Material.MA_TYPE_MAINSO,
|
type= SubprodctionMaterial.SUB_MA_TYPE_IN).order_by('material__number')\
|
||||||
Material.MA_TYPE_HELPSO], type= SubprodctionMaterial.SUB_MA_TYPE_IN).order_by('material__number')\
|
|
||||||
.values('material__id', 'material__name',
|
.values('material__id', 'material__name',
|
||||||
'material__number', 'material__type',
|
'material__number', 'material__type',
|
||||||
'count', 'material__count', 'material__count_safe')
|
'count', 'material__count', 'material__count_safe')
|
||||||
l_m = list(materials)
|
l_m = list(materials)
|
||||||
for m in l_m:
|
for m in l_m:
|
||||||
if m['material__id'] in res_d_list:
|
if m['material__id'] in res_d_list:
|
||||||
index = res_d_list.index(m['material__id'])
|
if m['material__type'] in [Material.MA_TYPE_MAINSO, Material.MA_TYPE_HELPSO]:
|
||||||
res[index]['count'] = res[index]['count'] + m['count']*i['count']
|
index = res_d_list.index(m['material__id'])
|
||||||
|
res[index]['count'] = res[index]['count'] + m['count']*i['count']
|
||||||
else:
|
else:
|
||||||
res_d_list.append(m['material__id'])
|
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'],
|
'type':m['material__type'], 'number':m['material__number'],
|
||||||
'count':m['count']*i['count'], 'inv_count':m['material__count'],
|
'count': None,'inv_count':m['material__count'],
|
||||||
'count_safe':m['material__count_safe']})
|
'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)
|
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)
|
@action(methods=['post'], detail=False, perms_map={'post':'resource_cal_equip'}, serializer_class=ResourceCalListSerializer)
|
||||||
def cal_equip(self, request, pk=None):
|
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)
|
steps = Step.objects.filter(usedstep__is_deleted=False, usedstep__subproduction__in=subproductions)
|
||||||
equips = Equipment.objects.filter(step_equips__in=steps, is_deleted=False).distinct()
|
equips = Equipment.objects.filter(step_equips__in=steps, is_deleted=False).distinct()
|
||||||
serializer = EquipmentSimpleSerializer(instance=equips, many=True)
|
serializer = EquipmentSimpleSerializer(instance=equips, many=True)
|
||||||
return Response(serializer.data)
|
return Response(serializer.data)
|
Loading…
Reference in New Issue