hberp/hb_server/apps/inm/views.py

98 lines
3.6 KiB
Python

from django.shortcuts import render
from rest_framework import serializers
from rest_framework.mixins import ListModelMixin, RetrieveModelMixin
from rest_framework.viewsets import GenericViewSet, ModelViewSet
from apps.inm.filters import MbFilterSet
from apps.inm.models import FIFO, FIFODetail, MaterialBatch, WareHouse,Inventory
from apps.inm.serializers import FIFODetailSerializer, FIFOInPurSerializer, FIFOListSerializer, MaterialBatchQuerySerializer, MaterialBatchSerializer, WareHouseSerializer, WareHouseCreateUpdateSerializer,InventorySerializer
from apps.system.mixins import CreateUpdateModelAMixin, OptimizationMixin
from rest_framework.decorators import action
from rest_framework.response import Response
# Create your views here.
class WarehouseViewSet(CreateUpdateModelAMixin, ModelViewSet):
"""
仓库-增删改查
"""
perms_map = {'*': '*'}
queryset = WareHouse.objects.select_related('create_by').all()
serializer_class = WareHouseSerializer
search_fields = ['name', 'number', 'place']
filterset_fields = []
ordering_fields = ['create_time']
ordering = ['-create_time']
def get_serializer_class(self):
if self.action in ['create', 'update']:
return WareHouseCreateUpdateSerializer
return WareHouseSerializer
class InventoryViewSet(ListModelMixin, GenericViewSet):
"""
仓库物料表
"""
perms_map = {'*': '*'}
queryset = Inventory.objects.select_related('material', 'warehouse').all()
serializer_class = InventorySerializer
filterset_fields = ['material', 'warehouse']
search_fields = []
ordering_fields = ['create_time']
ordering = ['-create_time']
class MaterialBatchViewSet(ListModelMixin, GenericViewSet):
perms_map = {'*': '*'}
queryset = MaterialBatch.objects.select_related('material', 'warehouse').all()
serializer_class = MaterialBatchSerializer
# filterset_fields = ['material', 'warehouse']
filterset_class = MbFilterSet
search_fields = []
ordering_fields = ['create_time']
ordering = ['-create_time']
# @action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=MaterialBatchQuerySerializer)
# def query(self, request, pk=None):
# """
# 复杂查询
# """
# serializer = MaterialBatchQuerySerializer(data=request.data)
# serializer.is_valid(raise_exception=True)
# queryset = self.queryset.filter()
# return Response()
class FIFODetailViewSet(ListModelMixin, GenericViewSet):
"""
出入库记录详情表
"""
perms_map = {'*': '*'}
queryset = FIFODetail.objects.select_related('material', 'fifo').all()
serializer_class = FIFODetailSerializer
filterset_fields = ['material', 'fifo']
search_fields = []
ordering_fields = ['create_time']
ordering = ['-create_time']
class FIFOViewSet(ListModelMixin, GenericViewSet):
"""
出入库记录
"""
perms_map = {'*': '*'}
queryset = FIFO.objects.select_related('warehouse', 'operator')
serializer_class = FIFOListSerializer
filterset_fields = ['warehouse', 'type']
def get_serializer_class(self):
if self.action == 'list':
return FIFOListSerializer
return super().get_serializer_class()
@action(methods=['post'], detail=False, perms_map={'post':'*'}, serializer_class=FIFOInPurSerializer)
def in_pur(self, request, pk=None):
"""
采购入库
"""
serializer = self.get_serializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save(create_by=request.user)
return Response()