from django.shortcuts import render from rest_framework.mixins import ListModelMixin, DestroyModelMixin from rest_framework.exceptions import ParseError, PermissionDenied from rest_framework.decorators import action from django.db import transaction from rest_framework import serializers from django.utils import timezone from rest_framework.response import Response from apps.inm.models import WareHouse, MaterialBatch, MIO from apps.inm.serializers import (MaterialBatchSerializer, WareHourseSerializer, MIOSerializer) from apps.utils.viewsets import CustomGenericViewSet, CustomModelViewSet from apps.inm.services import InmService # Create your views here. class WarehouseVIewSet(CustomModelViewSet): """ list: 仓库信息 仓库信息 """ queryset = WareHouse.objects.all() serializer_class = WareHourseSerializer search_fields = ['name', 'number', 'place'] ordering = ['create_time'] def perform_destroy(self, instance): if MaterialBatch.objects.filter(warehouse=instance).exclude(count=0).exists(): raise ParseError('该仓库存在物料') instance.delete() class MaterialBatchViewSet(ListModelMixin, CustomGenericViewSet): """ list: 物料批次 物料批次 """ perms_map = {'get': '*'} queryset = MaterialBatch.objects.all() serializer_class = MaterialBatchSerializer select_related_fields = ['warehouse', 'material'] filterset_fields = ['warehouse', 'material'] class MIOViewSet(ListModelMixin, DestroyModelMixin, CustomGenericViewSet): """ list: 出入库记录 出入库记录 """ perms_map = {'get': '*', 'delete': 'mio.delete'} queryset = MIO.objects.all() select_related_fields = ['create_by'] serializer_class = MIOSerializer def perform_destroy(self, instance): if instance.state != MIO.MIO_CREATE: raise ParseError('非创建中不可删除') return super().perform_destroy(instance) @action(methods=['post'], detail=True, perms_map={'post': 'mio.update'}, serializer_class=serializers.Serializer) @transaction.atomic def submit(self, request, *args, **kwargs): """提交 提交 """ ins = self.get_object() user = request.user if ins.create_by != user: raise PermissionDenied('非创建人不可提交') if ins.state != MIO.MIO_CREATE: raise ParseError('订单非创建中') ins.submit_time = timezone.now() ins.state = MIO.MIO_SUBMITED ins.save() InmService.update_inm(ins) return Response() class MIOItemViewSet(CustomModelViewSet): pass