from django.db import transaction from rest_framework.decorators import action from rest_framework.exceptions import ParseError from rest_framework.response import Response from apps.utils.serializers import PkSerializer from apps.utils.viewsets import CustomModelViewSet from .filters import MtaskFilter from .models import Mtask from .serializers import MtaskSerializer, SchedueSerializer from .services import PmService # Create your views here. class MtaskViewSet(CustomModelViewSet): """ list: 生产任务 生产任务 """ queryset = Mtask.objects.all() serializer_class = MtaskSerializer filterset_class = MtaskFilter select_related_fields = ['material', 'mgroup'] ordering_fields = ['start_date', 'mgroup__process__sort'] ordering = ['mgroup__process__sort', '-start_date', '-create_time'] @action(methods=['post'], detail=False, perms_map={'post': 'mtask.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(request.user, 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) @action(methods=['post'], detail=False, perms_map={'post': 'mtask.asgin'}, serializer_class=PkSerializer) @transaction.atomic def assgin(self, request): """下达任务 下达任务 """ ids = request.data.get('ids', []) mtasks = Mtask.objects.filter( id__in=ids, parent=None, state=Mtask.MTASK_CREATED) mtasks.update(state=Mtask.MTASK_ASSGINED) return Response()