feat: 通过指定mat_in/mat_out复制工艺路线
This commit is contained in:
parent
a8f9676ed0
commit
b400b13ded
|
@ -149,6 +149,11 @@ class RoutePackSerializer(CustomModelSerializer):
|
|||
# raise ParseError('不可变更产品')
|
||||
# return super().update(instance, validated_data)
|
||||
|
||||
class RoutePackCopySerializer(serializers.Serializer):
|
||||
routepack = serializers.CharField(label='工艺包ID')
|
||||
new_name = serializers.CharField(label='新名称')
|
||||
material_in = serializers.CharField(label='原料ID')
|
||||
material_out = serializers.CharField(label='产品ID')
|
||||
|
||||
class RouteSerializer(CustomModelSerializer):
|
||||
material_ = MaterialSerializer(source='material', read_only=True)
|
||||
|
@ -184,7 +189,8 @@ class RouteSerializer(CustomModelSerializer):
|
|||
raise ParseError('切分数量必须大于1')
|
||||
return super().validate(attrs)
|
||||
|
||||
def gen_material_out(self, instance: Route, material_out_tracking:int):
|
||||
@classmethod
|
||||
def gen_material_out(cls, instance: Route, material_out_tracking:int, user=None):
|
||||
"""
|
||||
自动形成物料
|
||||
"""
|
||||
|
@ -218,8 +224,8 @@ class RouteSerializer(CustomModelSerializer):
|
|||
'type': Material.MA_TYPE_HALFGOOD,
|
||||
'cate': material.cate,
|
||||
'tracking': material_out_tracking,
|
||||
'create_by': self.request.user,
|
||||
'update_by': self.request.user,
|
||||
'create_by': user,
|
||||
'update_by': user,
|
||||
})
|
||||
return material_out
|
||||
|
||||
|
@ -227,7 +233,6 @@ class RouteSerializer(CustomModelSerializer):
|
|||
process = validated_data['process']
|
||||
routepack = validated_data.get('routepack', None)
|
||||
material_out_tracking = validated_data.pop("material_out_tracking", Material.MA_TRACKING_BATCH)
|
||||
need_save = False
|
||||
if routepack:
|
||||
pass
|
||||
# if Route.objects.filter(routepack=routepack, process=process).exists():
|
||||
|
@ -252,7 +257,7 @@ class RouteSerializer(CustomModelSerializer):
|
|||
# raise ParseError('物料工序错误!请重新选择')
|
||||
else:
|
||||
if instance.material:
|
||||
instance.material_out = self.gen_material_out(instance, material_out_tracking)
|
||||
instance.material_out = RouteSerializer.gen_material_out(instance, material_out_tracking, user=self.request.user)
|
||||
instance.save()
|
||||
rx = Route.objects.filter(material_in=instance.material_in, material_out=instance.material_out, process=process).exclude(id=instance.id).first()
|
||||
if rx:
|
||||
|
@ -269,7 +274,6 @@ class RouteSerializer(CustomModelSerializer):
|
|||
with transaction.atomic():
|
||||
instance = super().update(instance, validated_data)
|
||||
material_out = instance.material_out
|
||||
need_save = False
|
||||
if material_out:
|
||||
if material_out.process is None:
|
||||
material_out.process = process
|
||||
|
@ -282,7 +286,7 @@ class RouteSerializer(CustomModelSerializer):
|
|||
# raise ParseError('物料工序错误!请重新选择')
|
||||
else:
|
||||
if instance.material:
|
||||
instance.material_out = self.gen_material_out(instance, material_out_tracking)
|
||||
instance.material_out = RouteSerializer.gen_material_out(instance, material_out_tracking, user=self.request.user)
|
||||
instance.save()
|
||||
rx = Route.objects.filter(material_in=instance.material_in, material_out=instance.material_out, process=process).exclude(id=instance.id).first()
|
||||
if rx:
|
||||
|
|
|
@ -11,7 +11,7 @@ from apps.mtm.serializers import (GoalSerializer, MaterialSerializer,
|
|||
MgroupGoalYearSerializer, MgroupSerializer, MgroupDaysSerializer,
|
||||
ShiftSerializer, TeamSerializer, ProcessSerializer,
|
||||
RouteSerializer, TeamMemberSerializer, RoutePackSerializer,
|
||||
SruleSerializer, RouteMatSerializer)
|
||||
SruleSerializer, RouteMatSerializer, RoutePackCopySerializer)
|
||||
from apps.mtm.services import get_mgroup_goals, daoru_material, get_mgroup_days
|
||||
from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet
|
||||
from apps.utils.mixins import BulkCreateModelMixin, BulkDestroyModelMixin, CustomListModelMixin
|
||||
|
@ -232,26 +232,43 @@ class RoutePackViewSet(CustomModelViewSet):
|
|||
return Response(status=204)
|
||||
|
||||
@transaction.atomic
|
||||
@action(methods=['post'], detail=True, perms_map={'post': 'routepack.create'}, serializer_class=Serializer)
|
||||
@action(methods=['post'], detail=False, perms_map={'post': 'routepack.create'}, serializer_class=RoutePackCopySerializer)
|
||||
def copy(self, request, *args, **kwargs):
|
||||
"""复制工艺路线
|
||||
|
||||
复制工艺路线
|
||||
"""
|
||||
obj = self.get_object()
|
||||
data = request.data
|
||||
sr = RoutePackCopySerializer(data=data)
|
||||
sr.is_valid(raise_exception=True)
|
||||
vdata = sr.validated_data
|
||||
user = request.user
|
||||
now = timezone.now()
|
||||
new_name = vdata["name"]
|
||||
rp = RoutePack.objects.get(id=vdata["id"])
|
||||
matin = Material.objects.get(id=vdata["material_in"])
|
||||
matout = Material.objects.get(id=vdata["material_out"])
|
||||
obj_c = RoutePack()
|
||||
obj_c.name = f'{obj.name}_copy'
|
||||
obj_c.material = obj.material
|
||||
obj_c.name = new_name
|
||||
obj_c.material = matout
|
||||
obj_c.create_by = user
|
||||
obj_c.create_time = now
|
||||
obj_c.save()
|
||||
for route in Route.objects.filter(routepack=obj):
|
||||
genM = {}
|
||||
for ind, route in enumerate(Route.get_routes(routepack=rp)):
|
||||
route_new = Route()
|
||||
process = route.process
|
||||
for f in Route._meta.fields:
|
||||
if f.name not in ['id', 'create_by', 'update_by', 'create_time', 'update_time']:
|
||||
if f.name in ['process', 'sort', 'is_autotask', 'is_count_utask', 'out_rate', 'div_number', 'hour_work', 'batch_bind']:
|
||||
setattr(route_new, f.name, getattr(route, f.name, None))
|
||||
route_new.material = matout
|
||||
material_out = RouteSerializer.gen_material_out(instance=route_new, material_out_tracking=route.material_out.tracking)
|
||||
route_new.material_out = material_out
|
||||
if ind == 0:
|
||||
route_new.material_in = matin
|
||||
elif route.material_in.process and route.material_in.process.id in genM:
|
||||
route_new.material_in = genM[route.material_in.process.id]
|
||||
genM[process.id] = material_out
|
||||
route_new.routepack = obj_c
|
||||
route_new.create_by = user
|
||||
route_new.create_time = now
|
||||
|
@ -261,7 +278,7 @@ class RoutePackViewSet(CustomModelViewSet):
|
|||
rm_new.route = route_new
|
||||
rm_new.material = rm.material
|
||||
rm_new.save()
|
||||
return Response()
|
||||
return Response({"id": route_new.id})
|
||||
|
||||
@transaction.atomic
|
||||
@action(methods=['post'], detail=True, permission_classes = [IsAdminUser], serializer_class=Serializer)
|
||||
|
|
Loading…
Reference in New Issue