hberp/hb_server/apps/mtm/views.py

88 lines
3.5 KiB
Python

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()