views.py 6.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180
  1. from rest_framework import viewsets
  2. from utils.page import MyPageNumberPagination
  3. from utils.md5 import Md5
  4. from rest_framework.filters import OrderingFilter
  5. from django_filters.rest_framework import DjangoFilterBackend
  6. from rest_framework.response import Response
  7. from rest_framework.exceptions import APIException
  8. from django.http import StreamingHttpResponse
  9. from rest_framework.settings import api_settings
  10. from django.db import transaction
  11. from rest_framework import status
  12. from reportcenter.models import flowModel as flowlist
  13. from . import serializers
  14. from .filter import FlowFilter
  15. from .files import FileFlowListRenderCN
  16. class FileListDownloadView(viewsets.ModelViewSet):
  17. renderer_classes = (FileFlowListRenderCN, ) + tuple(api_settings.DEFAULT_RENDERER_CLASSES)
  18. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  19. ordering_fields = ['id', "document_date" ]
  20. filter_class = FlowFilter
  21. def get_project(self):
  22. try:
  23. id = self.kwargs.get('pk')
  24. return id
  25. except:
  26. return None
  27. def get_queryset(self):
  28. id = self.get_project()
  29. if self.request.user:
  30. if id is None:
  31. return flowlist.objects.filter()
  32. else:
  33. return flowlist.objects.filter(id=id)
  34. else:
  35. return flowlist.objects.none()
  36. def get_serializer_class(self):
  37. if self.action in ['list']:
  38. return serializers.flowSerializer
  39. else:
  40. return self.http_method_not_allowed(request=self.request)
  41. def get_render(self, data):
  42. # lang = self.request.META.get('HTTP_LANGUAGE')
  43. # if lang:
  44. # if lang == 'zh-hans':
  45. # return FileListRenderCN().render(data)
  46. # else:
  47. # return FileListRenderEN().render(data)
  48. # else:
  49. # return FileListRenderEN().render(data)
  50. return FileFlowListRenderCN().render(data)
  51. def list(self, request, *args, **kwargs):
  52. from datetime import datetime
  53. dt = datetime.now()
  54. data = (
  55. serializers.flowSerializer(instance).data
  56. for instance in self.filter_queryset(self.get_queryset())
  57. )
  58. renderer = self.get_render(data)
  59. response = StreamingHttpResponse(
  60. renderer,
  61. content_type="text/csv"
  62. )
  63. response['Content-Disposition'] = "attachment; filename='stocklist_{}.csv'".format(str(dt.strftime('%Y%m%d%H%M%S%f')))
  64. return response
  65. class FlowsStatsViewSet(viewsets.ModelViewSet):
  66. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  67. ordering_fields = ['id', "create_time", "update_time", ]
  68. filter_class = FlowFilter
  69. pagination_class = MyPageNumberPagination
  70. """
  71. list:
  72. Response a data list(all)
  73. post:
  74. Create a new data(create)
  75. """
  76. def get_project(self):
  77. try:
  78. id = self.kwargs.get('pk')
  79. return id
  80. except:
  81. return None
  82. def get_queryset(self):
  83. id = self.get_project()
  84. if self.request.user:
  85. if id is None:
  86. return flowlist.objects.filter()
  87. else:
  88. return flowlist.objects.filter(id=id)
  89. else:
  90. return flowlist.objects.none()
  91. def get_serializer_class(self):
  92. if self.action in ['list', 'create', ]:
  93. return serializers.flowSerializer
  94. # elif self.action in ['retrieve','update',]:
  95. # return serializers.stocklistpartialSerializer
  96. else:
  97. return self.http_method_not_allowed(request=self.request)
  98. # def create(self, request, *args, **kwargs):
  99. # data = request.data.copy()
  100. # warehouse_code = data.get('warehouse_code')
  101. # warehouse_name = data.get('warehouse_name')
  102. # shelf_type = data.get('shelf_type')
  103. # shelf_name = data.get('shelf_name')
  104. # rows = int(data.get('rows', 0))
  105. # cols = int(data.get('cols', 0))
  106. # layers = int(data.get('layers', 0))
  107. # existing_positions = flowlist.get_existing_positions(warehouse_code,shelf_name, rows, cols, layers)
  108. # # 生成所有可能的坐标
  109. # instances = []
  110. # for r in range(1, rows+1):
  111. # for c in range(1, cols+1):
  112. # for l in range(1, layers+1):
  113. # if (r, c, l) not in existing_positions :
  114. # instances.append(flowlist(
  115. # warehouse_code=warehouse_code,
  116. # warehouse_name=warehouse_name,
  117. # shelf_type=shelf_type,
  118. # shelf_name=shelf_name,
  119. # row=r,
  120. # col=c,
  121. # layer=l,
  122. # ))
  123. # try:
  124. # with transaction.atomic():
  125. # flowlist.objects.bulk_create(instances, batch_size=1000)
  126. # except Exception as e:
  127. # return Response(
  128. # {"error": str(e)},
  129. # status=status.HTTP_500_INTERNAL_SERVER_ERROR
  130. # )
  131. # return Response({
  132. # "created": len(instances),
  133. # "skipped": (rows*cols*layers) - len(instances)
  134. # }, status=status.HTTP_201_CREATED)
  135. # def update(self, request, pk):
  136. # qs = self.get_object()
  137. # print(qs.id)
  138. # # return Response({"detail": "暂不支持修改"}, status=status.HTTP_400_BAD_REQUEST)
  139. # data = self.request.data
  140. # print(data)
  141. # serializer = self.get_serializer(qs, data=data)
  142. # serializer.is_valid(raise_exception=True)
  143. # serializer.save()
  144. # headers = self.get_success_headers(serializer.data)
  145. # return Response(serializer.data, status=200, headers=headers)
  146. # def retrieve(self, request, pk):
  147. # qs = self.get_object()
  148. # serializer = self.get_serializer(qs)
  149. # return Response(serializer.data)