|
@@ -0,0 +1,532 @@
|
|
|
+import traceback
|
|
|
+from dateutil.relativedelta import relativedelta
|
|
|
+from django.http import StreamingHttpResponse
|
|
|
+from django.utils import timezone
|
|
|
+from rest_framework import viewsets
|
|
|
+from rest_framework.settings import api_settings
|
|
|
+from .files import FileRenderCN, FileRenderEN
|
|
|
+from .models import CyclecountModeDayModel
|
|
|
+from . import serializers
|
|
|
+from utils.page import MyPageNumberPagination
|
|
|
+from rest_framework.filters import OrderingFilter
|
|
|
+from django_filters.rest_framework import DjangoFilterBackend
|
|
|
+from rest_framework.response import Response
|
|
|
+from .filter import Filter
|
|
|
+from .filter import ManualFilter
|
|
|
+from .filter import QTYRecorderListFilter
|
|
|
+from .serializers import FileRenderSerializer, FileRenderAllSerializer
|
|
|
+from .models import QTYRecorder
|
|
|
+from .models import ManualCyclecountModeModel
|
|
|
+from userprofile.models import Users
|
|
|
+from stock.views import StockBinViewSet
|
|
|
+from utils.md5 import Md5
|
|
|
+from staff.models import ListModel as staff
|
|
|
+
|
|
|
+class QTYRecorderViewSet(viewsets.ModelViewSet):
|
|
|
+ """
|
|
|
+ list:
|
|
|
+ Response a data list(all)
|
|
|
+
|
|
|
+ """
|
|
|
+ pagination_class = MyPageNumberPagination
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time", "update_time", ]
|
|
|
+ filter_class = QTYRecorderListFilter
|
|
|
+
|
|
|
+ def get_queryset(self):
|
|
|
+ if self.request.user:
|
|
|
+ return QTYRecorder.objects.filter(openid=self.request.auth.openid)
|
|
|
+ else:
|
|
|
+ return QTYRecorder.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.QTYRecorderSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+class CyclecountModeDayViewSet(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)
|
|
|
+
|
|
|
+ partial_update:
|
|
|
+ Partial_update a data(patch:partial_update)
|
|
|
+
|
|
|
+ update:
|
|
|
+ Update a data(put:update)
|
|
|
+ """
|
|
|
+ pagination_class = None
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time", "update_time", ]
|
|
|
+ filter_class = Filter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ cur_date = timezone.now()
|
|
|
+ delt_date = relativedelta(days=1)
|
|
|
+ if id is None:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=0,
|
|
|
+ update_time__gte=str((cur_date -delt_date).date()) + ' 00:00:00',
|
|
|
+ update_time__lte=str((cur_date + delt_date).date()) + ' 00:00:00')
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=0,
|
|
|
+ update_time__gte=str((cur_date - delt_date).date()) + ' 00:00:00',
|
|
|
+ update_time__lte=str((cur_date + delt_date).date()) + ' 00:00:00', id=id)
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.CyclecountGetSerializer
|
|
|
+ elif self.action in ['create']:
|
|
|
+ return serializers.CyclecountPostSerializer
|
|
|
+ elif self.action in ['update']:
|
|
|
+ return serializers.CyclecountUpdateSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+ def create(self, request, *args, **kwargs):
|
|
|
+ data = self.request.data
|
|
|
+ for i in range(len(data)):
|
|
|
+ CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid,
|
|
|
+ t_code=data[i]['t_code']).update(
|
|
|
+ physical_inventory=data[i]['physical_inventory'], cyclecount_status=1,
|
|
|
+ difference=data[i]['physical_inventory'] - data[i]['goods_qty'])
|
|
|
+ return Response({"detail": "success"}, status=200)
|
|
|
+
|
|
|
+ def update(self, request, *args, **kwargs):
|
|
|
+ data = self.request.data
|
|
|
+ for i in range(len(data)):
|
|
|
+ scan_count_data = self.get_queryset().filter(openid=self.request.auth.openid,
|
|
|
+ t_code=data[i]['t_code']).first()
|
|
|
+ scan_count_data.physical_inventory = scan_count_data.physical_inventory + data[i]['physical_inventory']
|
|
|
+ scan_count_data.difference = data[i]['physical_inventory'] - data[i]['goods_qty']
|
|
|
+ scan_count_data.cyclecount_status = 1
|
|
|
+ scan_count_data.save()
|
|
|
+ return Response({"detail": "success"}, status=200)
|
|
|
+
|
|
|
+class CyclecountModeAllViewSet(viewsets.ModelViewSet):
|
|
|
+ """
|
|
|
+ list:
|
|
|
+ Response a data list(get)
|
|
|
+ """
|
|
|
+ pagination_class = MyPageNumberPagination
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time", "update_time", ]
|
|
|
+ filter_class = Filter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ date_choice = self.request.GET.get('create_time', '')
|
|
|
+ cur_time = timezone.now().date()
|
|
|
+ if date_choice:
|
|
|
+ if id is None:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=1,
|
|
|
+ update_time__gte=str(date_choice) + ' 00:00:00',
|
|
|
+ update_time__lte=str(date_choice) + ' 23:59:59')
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=1,
|
|
|
+ update_time__gte=str(date_choice) + ' 00:00:00',
|
|
|
+ update_time__lte=str(date_choice) + ' 23:59:59',
|
|
|
+ id=id)
|
|
|
+ else:
|
|
|
+ if id is None:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=1,
|
|
|
+ update_time__gte=str(cur_time) + ' 00:00:00',
|
|
|
+ update_time__lte=str(cur_time) + ' 23:59:59')
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=1,
|
|
|
+ update_time__gte=str(cur_time) + ' 00:00:00',
|
|
|
+ update_time__lte=str(cur_time) + ' 23:59:59',
|
|
|
+ id=id)
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.CyclecountGetSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+
|
|
|
+class FileDownloadView(viewsets.ModelViewSet):
|
|
|
+ renderer_classes = (FileRenderCN, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time"]
|
|
|
+ filter_class = Filter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ cur_date = timezone.now()
|
|
|
+ delt_date = relativedelta(days=1)
|
|
|
+ if id is None:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=0,
|
|
|
+ update_time__gte=str((cur_date -delt_date).date()) + ' 00:00:00')
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=0,
|
|
|
+ update_time__gte=str((cur_date -delt_date).date()) + ' 00:00:00', id=id)
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.FileRenderSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+ def get_lang(self, data):
|
|
|
+ lang = self.request.META.get('HTTP_LANGUAGE')
|
|
|
+ if lang:
|
|
|
+ if lang == 'zh-hans':
|
|
|
+ return FileRenderCN().render(data)
|
|
|
+ else:
|
|
|
+ return FileRenderEN().render(data)
|
|
|
+ else:
|
|
|
+ return FileRenderEN().render(data)
|
|
|
+
|
|
|
+ def list(self, request, *args, **kwargs):
|
|
|
+ from datetime import datetime
|
|
|
+ dt = datetime.now()
|
|
|
+ data = (
|
|
|
+ FileRenderSerializer(instance).data
|
|
|
+ for instance in self.filter_queryset(self.get_queryset())
|
|
|
+ )
|
|
|
+ renderer = self.get_lang(data)
|
|
|
+ response = StreamingHttpResponse(
|
|
|
+ renderer,
|
|
|
+ content_type="text/csv"
|
|
|
+ )
|
|
|
+ response['Content-Disposition'] = "attachment; filename='cyclecount_{}.csv'".format(str(dt.strftime('%Y%m%d%H%M%S%f')))
|
|
|
+ return response
|
|
|
+
|
|
|
+class FileDownloadAllView(viewsets.ModelViewSet):
|
|
|
+ renderer_classes = (FileRenderCN, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time"]
|
|
|
+ filter_class = Filter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ cur_date = timezone.now()
|
|
|
+ delt_date = relativedelta(days=1)
|
|
|
+ if id is None:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=1,
|
|
|
+ update_time__gte=str((cur_date -delt_date).date()) + ' 00:00:00',
|
|
|
+ update_time__lte=str((cur_date + delt_date).date()) + ' 23:59:59')
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.filter(openid=self.request.auth.openid, cyclecount_status=1,
|
|
|
+ update_time__gte=str((cur_date - delt_date).date()) + ' 00:00:00',
|
|
|
+ update_time__lte=str((cur_date + delt_date).date()) + ' 23:59:59', id=id)
|
|
|
+ else:
|
|
|
+ return CyclecountModeDayModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.FileRenderSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+ def get_lang(self, data):
|
|
|
+ lang = self.request.META.get('HTTP_LANGUAGE')
|
|
|
+ if lang:
|
|
|
+ if lang == 'zh-hans':
|
|
|
+ return FileRenderCN().render(data)
|
|
|
+ else:
|
|
|
+ return FileRenderEN().render(data)
|
|
|
+ else:
|
|
|
+ return FileRenderEN().render(data)
|
|
|
+
|
|
|
+ def list(self, request, *args, **kwargs):
|
|
|
+ from datetime import datetime
|
|
|
+ dt = datetime.now()
|
|
|
+ data = (
|
|
|
+ FileRenderAllSerializer(instance).data
|
|
|
+ for instance in self.filter_queryset(self.get_queryset())
|
|
|
+ )
|
|
|
+ renderer = self.get_lang(data)
|
|
|
+ response = StreamingHttpResponse(
|
|
|
+ renderer,
|
|
|
+ content_type="text/csv"
|
|
|
+ )
|
|
|
+ response['Content-Disposition'] = "attachment; filename='cyclecountall_{}.csv'".format(str(dt.strftime('%Y%m%d%H%M%S%f')))
|
|
|
+ return response
|
|
|
+
|
|
|
+class GetGoodsCyclecountViewSet(StockBinViewSet):
|
|
|
+ """
|
|
|
+ list:
|
|
|
+ Response a data list(get)
|
|
|
+ """
|
|
|
+ pagination_class = None
|
|
|
+
|
|
|
+ def list(self, request, *args, **kwargs):
|
|
|
+ staff_name = staff.objects.filter(openid=self.request.auth.openid, id=self.request.META.get('HTTP_OPERATOR')).first().staff_name
|
|
|
+ queryset = self.filter_queryset(self.get_queryset())
|
|
|
+ goods_code = self.request.GET.get('goods_code', '')
|
|
|
+ for i in queryset:
|
|
|
+ if (d:=ManualCyclecountModeModel.objects.filter(cyclecount_status=0, bin_name=i.bin_name, goods_code=goods_code)).exists():
|
|
|
+ d.delete()
|
|
|
+ data = {
|
|
|
+ 'openid': self.request.auth.openid,
|
|
|
+ 'creater': staff_name,
|
|
|
+ 'cyclecount_status': 0,
|
|
|
+ 'bin_name': i.bin_name,
|
|
|
+ 'goods_code': goods_code,
|
|
|
+ 'goods_qty': i.goods_qty,
|
|
|
+ 'physical_inventory': 0,
|
|
|
+ 'difference': 0,
|
|
|
+ 't_code': Md5.md5(goods_code)
|
|
|
+ }
|
|
|
+ serializer = serializers.ManualCyclecountPostSerializer(data=data)
|
|
|
+ serializer.is_valid(raise_exception=True)
|
|
|
+ serializer.save()
|
|
|
+ queryset = ManualCyclecountModeModel.objects.filter(goods_code=goods_code, cyclecount_status=0)
|
|
|
+ page = self.paginate_queryset(queryset)
|
|
|
+ if page is not None:
|
|
|
+ serializer = serializers.ManualCyclecountGetSerializer(instance=page, many=True)
|
|
|
+ return self.get_paginated_response(serializer.data)
|
|
|
+ serializer = serializers.ManualCyclecountGetSerializer(instance=queryset, many=True)
|
|
|
+ return Response(serializer.data)
|
|
|
+
|
|
|
+class ManualCyclecountViewSet(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)
|
|
|
+
|
|
|
+ partial_update:
|
|
|
+ Partial_update a data(patch:partial_update)
|
|
|
+
|
|
|
+ update:
|
|
|
+ Update a data(put:update)
|
|
|
+ """
|
|
|
+ pagination_class = None
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time", "update_time", ]
|
|
|
+ filter_class = ManualFilter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ cur_date = timezone.now()
|
|
|
+ delt_date = relativedelta(days=1)
|
|
|
+ u = Users.objects.filter(vip=9).first()
|
|
|
+ if u is None:
|
|
|
+ superopenid = None
|
|
|
+ else:
|
|
|
+ superopenid = u.openid
|
|
|
+ query_dict = {
|
|
|
+ 'cyclecount_status': 0,
|
|
|
+ 'update_time__gte': str((cur_date - delt_date).date()) + ' 00:00:00',
|
|
|
+ 'update_time__lte': str((cur_date + delt_date).date()) + ' 00:00:00'
|
|
|
+ }
|
|
|
+ if self.request.auth.openid != superopenid:
|
|
|
+ query_dict['openid'] = self.request.auth.openid
|
|
|
+ if id is not None:
|
|
|
+ query_dict['id'] = id
|
|
|
+ return ManualCyclecountModeModel.objects.filter(**query_dict)
|
|
|
+ else:
|
|
|
+ return ManualCyclecountModeModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.ManualCyclecountGetSerializer
|
|
|
+ elif self.action in ['create']:
|
|
|
+ return serializers.ManualCyclecountModeModel
|
|
|
+ elif self.action in ['update']:
|
|
|
+ return serializers.ManualCyclecountUpdateSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+ def create(self, request, *args, **kwargs):
|
|
|
+ data = self.request.data
|
|
|
+ for i in range(len(data)):
|
|
|
+ ManualCyclecountModeModel.objects.filter(openid=self.request.auth.openid, t_code=data[i]['t_code']).update(
|
|
|
+ physical_inventory=data[i]['physical_inventory'],
|
|
|
+ cyclecount_status=1,
|
|
|
+ difference=data[i]['physical_inventory'] - data[i]['goods_qty']
|
|
|
+ )
|
|
|
+ return Response({"detail": "success"}, status=200)
|
|
|
+
|
|
|
+ def update(self, request, *args, **kwargs):
|
|
|
+ data = self.request.data
|
|
|
+ for i in range(len(data)):
|
|
|
+ scan_count_data = self.get_queryset().filter(openid=self.request.auth.openid,
|
|
|
+ t_code=data[i]['t_code']).first()
|
|
|
+ scan_count_data.physical_inventory = scan_count_data.physical_inventory + data[i]['physical_inventory']
|
|
|
+ scan_count_data.difference = data[i]['physical_inventory'] - data[i]['goods_qty']
|
|
|
+ scan_count_data.cyclecount_status = 1
|
|
|
+ scan_count_data.save()
|
|
|
+ return Response({"detail": "success"}, status=200)
|
|
|
+
|
|
|
+class ManualCyclecountRecorderViewSet(viewsets.ModelViewSet):
|
|
|
+ """
|
|
|
+ list:
|
|
|
+ Response a data list(get)
|
|
|
+ """
|
|
|
+ pagination_class = MyPageNumberPagination
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time", "update_time", ]
|
|
|
+ filter_class = ManualFilter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ date_choice = self.request.GET.get('create_time', '')
|
|
|
+ cur_time = timezone.now().date()
|
|
|
+ u = Users.objects.filter(vip=9).first()
|
|
|
+ if u is None:
|
|
|
+ superopenid = None
|
|
|
+ else:
|
|
|
+ superopenid = u.openid
|
|
|
+ query_dict = {
|
|
|
+ 'cyclecount_status': 1
|
|
|
+ }
|
|
|
+ if self.request.auth.openid != superopenid:
|
|
|
+ query_dict['openid'] = self.request.auth.openid
|
|
|
+ if date_choice:
|
|
|
+ query_dict['update_time__gte'] = str(date_choice) + ' 00:00:00'
|
|
|
+ query_dict['update_time__lte'] = str(date_choice) + ' 23:59:59'
|
|
|
+ else:
|
|
|
+ query_dict['update_time__gte'] = str(cur_time) + ' 00:00:00'
|
|
|
+ query_dict['update_time__lte'] = str(cur_time) + ' 23:59:59'
|
|
|
+ if id is not None:
|
|
|
+ query_dict['id'] = id
|
|
|
+ return ManualCyclecountModeModel.objects.filter(**query_dict)
|
|
|
+ else:
|
|
|
+ return ManualCyclecountModeModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.ManualCyclecountGetSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+class ManualFileDownloadView(viewsets.ModelViewSet):
|
|
|
+ renderer_classes = (FileRenderCN, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
|
|
|
+ filter_backends = [DjangoFilterBackend, OrderingFilter, ]
|
|
|
+ ordering_fields = ['id', "create_time"]
|
|
|
+ filter_class = ManualFilter
|
|
|
+
|
|
|
+ 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:
|
|
|
+ cur_date = timezone.now()
|
|
|
+ delt_date = relativedelta(days=1)
|
|
|
+ u = Users.objects.filter(vip=9).first()
|
|
|
+ if u is None:
|
|
|
+ superopenid = None
|
|
|
+ else:
|
|
|
+ superopenid = u.openid
|
|
|
+ query_dict = {
|
|
|
+ 'cyclecount_status': 0,
|
|
|
+ 'update_time__gte': str((cur_date - delt_date).date()) + ' 00:00:00'
|
|
|
+ }
|
|
|
+ if self.request.auth.openid != superopenid:
|
|
|
+ query_dict['openid'] = self.request.auth.openid
|
|
|
+ if id is not None:
|
|
|
+ query_dict['id'] = id
|
|
|
+ return ManualCyclecountModeModel.objects.filter(**query_dict)
|
|
|
+ else:
|
|
|
+ return ManualCyclecountModeModel.objects.none()
|
|
|
+
|
|
|
+ def get_serializer_class(self):
|
|
|
+ if self.action in ['list']:
|
|
|
+ return serializers.ManualFileRenderSerializer
|
|
|
+ else:
|
|
|
+ return self.http_method_not_allowed(request=self.request)
|
|
|
+
|
|
|
+ def get_lang(self, data):
|
|
|
+ lang = self.request.META.get('HTTP_LANGUAGE')
|
|
|
+ if lang:
|
|
|
+ if lang == 'zh-hans':
|
|
|
+ return FileRenderCN().render(data)
|
|
|
+ else:
|
|
|
+ return FileRenderEN().render(data)
|
|
|
+ else:
|
|
|
+ return FileRenderEN().render(data)
|
|
|
+
|
|
|
+ def list(self, request, *args, **kwargs):
|
|
|
+ from datetime import datetime
|
|
|
+ dt = datetime.now()
|
|
|
+ data = (
|
|
|
+ serializers.ManualFileRenderSerializer(instance).data
|
|
|
+ for instance in self.filter_queryset(self.get_queryset())
|
|
|
+ )
|
|
|
+ renderer = self.get_lang(data)
|
|
|
+ response = StreamingHttpResponse(
|
|
|
+ renderer,
|
|
|
+ content_type="text/csv"
|
|
|
+ )
|
|
|
+ response['Content-Disposition'] = "attachment; filename='manualcyclecount_{}.csv'".format(str(dt.strftime('%Y%m%d%H%M%S%f')))
|
|
|
+ return response
|