44 lines
1.6 KiB
Python
44 lines
1.6 KiB
Python
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)
|
|
|