75 lines
		
	
	
		
			2.6 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			75 lines
		
	
	
		
			2.6 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()
 | |
| 
 | |
|     @action(methods=['post'], detail=False, perms_map={'post': 'mtask.submit'}, serializer_class=PkSerializer)
 | |
|     @transaction.atomic
 | |
|     def submit(self, request):
 | |
|         """提交任务
 | |
| 
 | |
|         提交任务后不可更新日志
 | |
|         """
 | |
|         ids = request.data.get('ids', [])
 | |
|         mtasks = Mtask.objects.filter(
 | |
|             id__in=ids, parent=None, state=Mtask.MTASK_ASSGINED)
 | |
|         PmService.mtasks_submit(mtasks)
 | |
|         return Response()
 |