from django.shortcuts import render from rest_framework.viewsets import ModelViewSet, GenericViewSet from rest_framework.mixins import CreateModelMixin, ListModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin from apps.mtm.models import Material, Process, ProductProcess, Step from apps.mtm.serializers import MaterialSerializer, ProductProcessListSerializer, ProductProcessUpdateSerializer, ProcessSerializer, StepSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action from rest_framework.response import Response # Create your views here. class MaterialViewSet(CreateUpdateModelAMixin, ModelViewSet): """ 物料表-增删改查 """ perms_map = {'get': '*', 'post': 'material_create', 'put': 'material_update', 'delete': 'material_delete'} queryset = Material.objects.all() serializer_class = MaterialSerializer search_fields = ['name', 'number'] filterset_fields = ['type'] ordering_fields = ['number', 'sort_str'] ordering = ['number'] @action(methods=['get'], detail=True, perms_map={'get':'*'}, pagination_class=None, serializer_class=StepSerializer) def steps(self, request, pk=None): """ 工序下的子工序 """ process = self.get_object() serializer = self.serializer_class(instance=Step.objects.filter(process=process, is_deleted=False), many=True) return Response(serializer.data) class ProcessViewSet(CreateUpdateModelAMixin, ModelViewSet): """ 工序表-增删改查 """ perms_map = {'get': '*', 'post': 'process_create', 'put': 'process_update', 'delete': 'process_delete'} queryset = Process.objects.select_related('instruction').all() serializer_class = ProcessSerializer search_fields = ['name', 'number'] filterset_fields = ['number'] ordering_fields = ['number'] ordering = ['number'] @action(methods=['get'], detail=True, perms_map={'get':'process_update'}, pagination_class=None, serializer_class=StepSerializer) def steps(self, request, pk=None): """ 工序下的子工序 """ process = self.get_object() serializer = self.serializer_class(instance=Step.objects.filter(process=process, is_deleted=False), many=True) return Response(serializer.data) class StepViewSet(CreateModelMixin, UpdateModelMixin, RetrieveModelMixin, DestroyModelMixin, GenericViewSet): """ """ perms_map = {'*':'process_update'} queryset = Step.objects.all() serializer_class = StepSerializer search_fields = ['name', 'number'] filterset_fields = ['process'] ordering = ['sort'] class ProductProcessViewSet(CreateModelMixin, UpdateModelMixin, ListModelMixin, DestroyModelMixin, GenericViewSet): """ 产品生产工艺流程增删改查 """ perms_map={'*':'*'} queryset = ProductProcess.objects.select_related('process', 'product').all() filterset_fields = ['process', 'product'] serializer_class = ProductProcessListSerializer ordering = ['sort'] def get_serializer_class(self): if self.action == 'update': return ProductProcessUpdateSerializer return super().get_serializer_class()