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 MaterialDetailSerializer, MaterialSerializer, MaterialSimpleSerializer, ProductProcessListSerializer, ProductProcessUpdateSerializer, ProcessSerializer, StepSerializer from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin from rest_framework.decorators import action from rest_framework.response import Response from utils.pagination import PageOrNot # Create your views here. class MaterialViewSet(PageOrNot, 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'] def get_serializer_class(self, *args, **kwargs): if self.action == 'retrieve': return MaterialDetailSerializer return MaterialSerializer # @action(methods=['get'], detail=True, perms_map={'get':'*'}, pagination_class=None, serializer_class=MaterialSimpleSerializer) # def processes(self, request, pk=None): # """ # 产品生产工艺流程 # """ # material = self.get_object() # serializer = self.serializer_class(instance=Process.objects.filter(id__in=material.processes), many=True) # return Response(serializer.data) class ProcessViewSet(PageOrNot, 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(PageOrNot, 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()