factory/apps/pm/views.py

62 lines
2.1 KiB
Python

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 = mtasks | Mtask.objects.filter(parent__in=mtasks)
mtasks.update(state=Mtask.MTASK_ASSGINED)
return Response()