hberp/hb_server/apps/mtm/views.py

136 lines
5.7 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 InputMaterial, Material, OutputMaterial, Process, ProductProcess, Step
from apps.mtm.serializers import InputMaterialListSerializer, InputMaterialSerializer, InputMaterialUpdateSerializer, MaterialDetailSerializer, MaterialSerializer, MaterialSimpleSerializer, OutputMaterialListSerializer, OutputMaterialSerializer, OutputMaterialUpdateSerializer, 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
from rest_framework.exceptions import APIException
# 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(CreateUpdateModelAMixin, 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()
class InputMaterialViewSet(CreateUpdateModelAMixin, ModelViewSet):
"""
输入物料-增删改查
"""
perms_map = {'*':'*'}
queryset = InputMaterial.objects.select_related('material').all()
serializer_class = InputMaterialSerializer
filterset_fields = ['process', 'material']
ordering = ['sort', '-create_time']
def get_serializer_class(self):
if self.action == 'list':
return InputMaterialListSerializer
elif self.action == 'update':
return InputMaterialUpdateSerializer
return InputMaterialSerializer
def perform_create(self, serializer):
data = serializer.data
if InputMaterial.objects.filter(material=data['material'], product=data['product'], process=data['process'], is_deleted=False).exists():
raise APIException('该物料已存在')
serializer.save(create_by =self.request.user)
class OutputMaterialViewSet(CreateUpdateModelAMixin, ModelViewSet):
"""
输出物料-增删改查
"""
perms_map = {'*':'*'}
queryset = OutputMaterial.objects.select_related('material').all()
serializer_class = OutputMaterialSerializer
filterset_fields = ['process', 'material']
ordering = ['sort', '-create_time']
def get_serializer_class(self):
if self.action == 'list':
return OutputMaterialListSerializer
elif self.action == 'update':
return OutputMaterialUpdateSerializer
return OutputMaterialSerializer
def perform_create(self, serializer):
data = serializer.data
if OutputMaterial.objects.filter(material=data['material'], product=data['product'], process=data['process'], is_deleted=False).exists():
raise APIException('该物料已存在')
serializer.save(create_by=self.request.user)