from django.shortcuts import render from apps.utils.viewsets import CustomModelViewSet from apps.pm.models import Mtask from apps.pm.serializers import MtaskSerializer, SchedueSerializer from apps.pm.filters import MtaskFilter from rest_framework.decorators import action from django.db import transaction from apps.pm.services import PmService from rest_framework.response import Response from rest_framework.exceptions import ParseError # Create your views here. class MtaskViewSet(CustomModelViewSet): """ list: 生产任务 生产任务 """ queryset = Mtask.objects.all() serializer_class = MtaskSerializer filterset_class = MtaskFilter select_related_fields = ['material', 'process', 'order'] ordering_fields = ['start_date', 'process__sort'] ordering = ['process__sort', '-start_date', '-create_time'] @action(methods=['post'], detail=False, perms_map={'post': 'mtasks.schedue'}, serializer_class=SchedueSerializer) @transaction.atomic def schedue_from_orderitems(self, request, *args, **kwargs): """从多个订单明细自动排产 从多个订单明细自动排产 """ sr = SchedueSerializer(data=request.data) sr.is_valid(raise_exception=True) vdata = sr.validated_data PmService.schedue_from_orderitems(vdata['orderitems'], vdata['start_date'], vdata.get('end_date', None)) return Response() def perform_destroy(self, instance): if instance.state != Mtask.MTASK_CREATED: raise ParseError('该任务非创建中不可删除') return super().perform_destroy(instance)