from rest_framework import viewsets from utils.page import MyPageNumberPagination from utils.datasolve import sumOfList, transportation_calculate from utils.md5 import Md5 from rest_framework.filters import OrderingFilter from django_filters.rest_framework import DjangoFilterBackend from rest_framework.response import Response from rest_framework.exceptions import APIException from django.utils import timezone from .models import BoundListModel, BoundDetailModel,BoundBatchModel # from .files import FileListRenderCN, FileDetailRenderCN from .serializers import BoundListGetSerializer,BoundListPostSerializer,BoundBatchGetSerializer,BoundBatchPostSerializer,BoundDetailGetSerializer,BoundDetailPostSerializer from .filter import BoundListFilter, BoundDetailFilter,BoundBatchFilter # 以后添加模块检验 from warehouse.models import ListModel as warehouse from staff.models import ListModel as staff from rest_framework.permissions import AllowAny class BoundListViewSet(viewsets.ModelViewSet): """ retrieve: Response a data list(get) list: Response a data list(all) create: Create a data line(post) delete: Delete a data line(delete) """ # authentication_classes = [] # 禁用所有认证类 # permission_classes = [AllowAny] # 允许任意访问 pagination_class = MyPageNumberPagination filter_backends = [DjangoFilterBackend, OrderingFilter, ] ordering_fields = ['id', "create_time", "update_time", ] filter_class = BoundListFilter def get_project(self): try: id = self.kwargs.get('pk') return id except: return None def get_queryset(self): id = self.get_project() if self.request.user: if id is None: return BoundListModel.objects.filter( is_delete=False) else: return BoundListModel.objects.filter( id=id, is_delete=False) else: return BoundListModel.objects.none() def get_serializer_class(self): if self.action in ['list', 'destroy','retrieve']: return BoundListGetSerializer elif self.action in ['create', 'update']: return BoundListPostSerializer else: return self.http_method_not_allowed(request=self.request) def create(self, request, *args, **kwargs): data = self.request.data # if BoundListModel.objects.filter(code=data['code'], is_delete=False).exists(): # raise APIException({"detail": "Data exists"}) # else: data['openid'] = self.request.auth.openid data['bound_date'] =str(timezone.now().strftime('%Y-%m-%d')) order_day=str(timezone.now().strftime('%Y-%m-')) data['bound_month'] =str(timezone.now().strftime('%Y%m')) if data['bound_type'] == 'in': data['bound_status'] = '100' else: data['bound_status'] = '200' qs_set = BoundListModel.objects.filter(bound_month=data['bound_month'], bound_code_type=data['bound_code_type'], is_delete=False) print('qs_set是:', len(qs_set)) if len(qs_set) > 0: bound_last_code = qs_set.order_by('-id').first().bound_code data['bound_code'] = data['bound_code_type'] +'-'+ order_day + str(int(bound_last_code.split('-')[-1])+1).zfill(4) else: data['bound_code'] = data['bound_code_type'] +'-'+ order_day + '0001' serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) def update(self, request, pk): qs = self.get_object() data = self.request.data serializer = self.get_serializer(qs, data=data) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) def destroy(self, request, pk): qs = self.get_object() if qs.openid != self.request.auth.openid: raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"}) else: qs.is_delete = True qs.bound_code =qs.bound_code+'-delete'+str(timezone.now().strftime('%Y%m%d%H%M%S')) qs.save() serializer = self.get_serializer(qs, many=False) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) class BoundBatchViewSet(viewsets.ModelViewSet): """ retrieve: Response a data list(get) list: Response a data list(all) create: Create a data line(post) delete: Delete a data line(delete) """ # authentication_classes = [] # 禁用所有认证类 # permission_classes = [AllowAny] # 允许任意访问 pagination_class = MyPageNumberPagination filter_backends = [DjangoFilterBackend, OrderingFilter, ] ordering_fields = ['id', "create_time", "update_time", ] filter_class = BoundBatchFilter def get_project(self): try: id = self.kwargs.get('pk') return id except: return None def get_queryset(self): id = self.get_project() if self.request.user: if id is None: return BoundBatchModel.objects.filter( is_delete=False) else: return BoundBatchModel.objects.filter( id=id, is_delete=False) else: return BoundBatchModel.objects.none() def get_serializer_class(self): if self.action in ['list', 'destroy','retrieve']: return BoundBatchGetSerializer elif self.action in ['create', 'update']: return BoundBatchPostSerializer else: return self.http_method_not_allowed(request=self.request) def create(self, request, *args, **kwargs): data = self.request.data data['openid'] = self.request.auth.openid data['goods_total_weight'] = data['goods_weight']*data['goods_qty'] order_day=str(timezone.now().strftime('-%Y%m')) order_month=str(timezone.now().strftime('%Y%m')) data['bound_month'] =str(timezone.now().strftime('%Y%m')) qs_set = BoundBatchModel.objects.filter( goods_code=data['goods_code'], bound_month=order_month, is_delete=False) print('qs_set是:', len(qs_set)) if len(qs_set) > 0: bound_last_code = qs_set.order_by('-id').first().bound_number data['bound_number'] = data['goods_code'] + '-' + str(int(bound_last_code.split('-')[-1])+1) else: data['bound_number'] = data['goods_code'] + order_day + '01' serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) def update(self, request, pk): qs = self.get_object() data = self.request.data serializer = self.get_serializer(qs, data=data) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) def destroy(self, request, pk): qs = self.get_object() if qs.openid != self.request.auth.openid: raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"}) else: qs.is_delete = True qs.save() serializer = self.get_serializer(qs, many=False) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) class BoundDetailViewSet(viewsets.ModelViewSet): """ retrieve: Response a data list(get) list: Response a data list(all) create: Create a data line(post) delete: Delete a data line(delete) """ # authentication_classes = [] # 禁用所有认证类 # permission_classes = [AllowAny] # 允许任意访问 pagination_class = MyPageNumberPagination filter_backends = [DjangoFilterBackend, OrderingFilter, ] ordering_fields = ['id', "create_time", "update_time", ] filter_class = BoundDetailFilter def get_project(self): try: id = self.kwargs.get('pk') return id except: return None def get_queryset(self): id = self.get_project() if self.request.user: if id is None: return BoundDetailModel.objects.filter( is_delete=False) else: return BoundDetailModel.objects.filter( id=id, is_delete=False) else: return BoundDetailModel.objects.none() def get_serializer_class(self): if self.action in ['list', 'destroy','retrieve']: return BoundDetailGetSerializer elif self.action in ['create', 'update']: return BoundDetailPostSerializer else: return self.http_method_not_allowed(request=self.request) def create(self, request, *args, **kwargs): data = self.request.data data['openid'] = self.request.auth.openid data.setdefault('is_delete', False) # 验证并保存数据 data['detail_code'] = f"DC-{data['bound_list']:02}{data['bound_batch']:02}" print(data['detail_code']) if BoundDetailModel.objects.filter(detail_code=data['detail_code'], is_delete=False).exists(): raise APIException({"detail": "Data exists"}) else: serializer = self.get_serializer(data=data) serializer.is_valid(raise_exception=True) serializer.save() # 返回响应 headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) def update(self, request, pk): qs = self.get_object() data = self.request.data serializer = self.get_serializer(qs, data=data) serializer.is_valid(raise_exception=True) serializer.save() headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers) def destroy(self, request, pk): qs = self.get_object() if qs.openid != self.request.auth.openid: raise APIException({"detail": "该入库非您所属,禁止删除,您可以进行编辑"}) else: qs.is_delete = True qs.save() serializer = self.get_serializer(qs, many=False) headers = self.get_success_headers(serializer.data) return Response(serializer.data, status=200, headers=headers)