diff --git a/apps/pm/filters.py b/apps/pm/filters.py index a9734104..7f4f0d9d 100644 --- a/apps/pm/filters.py +++ b/apps/pm/filters.py @@ -43,6 +43,7 @@ class MtaskFilter(filters.FilterSet): "material_out__type": ["exact"], "material_out__is_hidden": ["exact"], "mgroup__belong_dept__name": ["exact"], + "utask": ["exact"] } def filter_tag(self, queryset, name, value): diff --git a/apps/pm/serializers.py b/apps/pm/serializers.py index 3cd64167..d793938a 100644 --- a/apps/pm/serializers.py +++ b/apps/pm/serializers.py @@ -47,3 +47,8 @@ class SchedueSerializer(serializers.Serializer): label='orderitem的ID列表', queryset=OrderItem.objects.all(), many=True) start_date = serializers.DateField(label='计划开工日期') end_date = serializers.DateField(label='计划完工日期') + + +class MtaskDaySerializer(serializers.Serializer): + belong_dept_name = serializers.CharField(label='车间名称') + date = serializers.DateField(label='日期') diff --git a/apps/pm/views.py b/apps/pm/views.py index b2318780..9659b2fc 100644 --- a/apps/pm/views.py +++ b/apps/pm/views.py @@ -9,7 +9,7 @@ from apps.utils.viewsets import CustomModelViewSet from .filters import MtaskFilter, UtaskFilter from .models import Mtask, Utask -from .serializers import MtaskSerializer, SchedueSerializer, UtaskSerializer +from .serializers import MtaskSerializer, SchedueSerializer, UtaskSerializer, MtaskDaySerializer from .services import PmService # Create your views here. @@ -92,6 +92,33 @@ class MtaskViewSet(CustomModelViewSet): ordering_fields = ['start_date', 'mgroup__process__sort'] ordering = ['-start_date', 'mgroup__process__sort', '-create_time'] + @action(methods=['post'], detail=False, perms_map={'post': '*'}, serializer_class=MtaskDaySerializer) + @transaction.atomic + def day(self, request): + """获取指定车间指定日期的最后工序生产任务 + + 获取指定车间指定日期的最后工序生产任务 + """ + sr = MtaskDaySerializer(data=request.data) + sr.is_valid(raise_exception=True) + vdata = sr.validated_data + mtasks = Mtask.objects.filter(mgroup__belong_dept__name=vdata['belong_dept_name'], start_date__lte=vdata['date'], end_date__gte=vdata['date']).order_by( + 'utask', 'mgroup__process__sort', 'create_time' + ) + data = MtaskSerializer(instance=mtasks, many=True).data + res_data = [] + len_data = len(data) + for ind, val in enumerate(data): + if val['utask'] is None: + res_data.append(val) + elif ind > 1: + before = data[ind-1] + if val['utask'] != before['utask']: + res_data.append(before) + elif ind == len_data - 1: + res_data.append(val) + return Response(res_data) + # @action(methods=['post'], detail=False, perms_map={'post': 'mtask.schedue'}, serializer_class=SchedueSerializer) # @transaction.atomic # def schedue_from_orderitems(self, request, *args, **kwargs): diff --git a/apps/wpm/serializers.py b/apps/wpm/serializers.py index 45438b52..d03698e8 100644 --- a/apps/wpm/serializers.py +++ b/apps/wpm/serializers.py @@ -110,5 +110,5 @@ class MlogSerializer(CustomModelSerializer): else: raise ValidationError('操作日期错误') if mtask.state != Mtask.MTASK_ASSGINED: - raise ValidationError('该任务状态不可提交日志!') + raise ValidationError(f'{mtask.mgroup.name}_不可提交日志!') return attrs