views.py 7.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202
  1. from rest_framework import viewsets
  2. from asn.models import AsnDetailModel
  3. from dn.models import DnDetailModel
  4. from asn import serializers as asnserializers
  5. from dn import serializers as dnserializers
  6. from utils.page import MyPageNumberPagination
  7. from utils.datasolve import sumOfList
  8. from utils.fbmsg import FBMsg
  9. from utils.md5 import Md5
  10. from rest_framework.filters import OrderingFilter
  11. from django_filters.rest_framework import DjangoFilterBackend
  12. from rest_framework.response import Response
  13. from asn.filter import AsnDetailFilter
  14. from dn.filter import DnDetailFilter
  15. from rest_framework.exceptions import APIException
  16. from django.shortcuts import render
  17. from dateutil.relativedelta import relativedelta
  18. from django.db.models.functions import TruncMonth,TruncYear,ExtractDay,ExtractMonth
  19. from django.db.models import Count
  20. from django.db import connection
  21. from django.db.models import Q
  22. from django.db.models import Sum
  23. import re
  24. from django.utils import timezone
  25. class ReceiptsViewSet(viewsets.ModelViewSet):
  26. """
  27. list:
  28. Response a data list(all)
  29. """
  30. pagination_class = None
  31. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  32. ordering_fields = ['id', "create_time", "update_time", ]
  33. filter_class = AsnDetailFilter
  34. def get_project(self):
  35. try:
  36. id = self.kwargs.get('pk')
  37. return id
  38. except:
  39. return None
  40. def get_queryset(self):
  41. id = self.get_project()
  42. if self.request.user:
  43. if id is None:
  44. return AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_status__gte=4,
  45. create_time__gte=timezone.now().date() - relativedelta(days=14),
  46. is_delete=False)
  47. else:
  48. return AsnDetailModel.objects.filter(openid=self.request.auth.openid, asn_status__gte=4,
  49. create_time__gte=timezone.now().date() - relativedelta(days=14),
  50. id=id, is_delete=False)
  51. else:
  52. return AsnDetailModel.objects.none()
  53. def get_serializer_class(self):
  54. if self.action in ['list']:
  55. return asnserializers.ASNDetailGetSerializer
  56. else:
  57. return self.http_method_not_allowed(request=self.request)
  58. def notice_lang(self):
  59. lang = self.request.META.get('HTTP_LANGUAGE')
  60. return lang
  61. def list(self, request, *args, **kwargs):
  62. qs = self.get_queryset()
  63. context = {}
  64. dataset = {}
  65. dimensions = ['product']
  66. source = []
  67. series = []
  68. bar_charts = {
  69. "type": 'bar',
  70. "barWidth": '4%',
  71. "barGap": '60%',
  72. "barCategoryGap": '10%',
  73. "itemStyle": {
  74. "normal": {
  75. "label": {
  76. "show": "true",
  77. "position": "top"
  78. }
  79. }
  80. }
  81. }
  82. receipt_res = qs.annotate(month=ExtractMonth('create_time'), day=ExtractDay('create_time')) \
  83. .values('month', 'day').order_by('month', 'day').annotate(number=Sum('goods_cost'))
  84. # qty_res = qs.values('goods_code').order_by('goods_code').annotate(number=Sum('goods_qty'))
  85. # rank_res = qs.values('goods_code').order_by('goods_code').annotate(number=Sum('goods_cost'))
  86. receipt_res_dict = {
  87. }
  88. # qty_res_dict = {
  89. # }
  90. # rank_res_dict = {
  91. # }
  92. for i in receipt_res:
  93. series.append(bar_charts)
  94. dimensions.append("%s-%s" % (i['month'], i['day']))
  95. receipt_res_dict.update({"%s-%s" % (i['month'], i['day']): round(i['number'], 2)})
  96. # for i in qty_res:
  97. # qty_res_dict.update({i['goods_code']: i['number']})
  98. # for i in rank_res:
  99. # rank_res_dict.update({i['goods_code']: i['number']})
  100. source.append(receipt_res_dict)
  101. # data_list.append(qty_res_dict)
  102. # data_list.append(rank_res_dict)
  103. dataset['source'] = source
  104. dataset['dimensions'] = dimensions
  105. context['dataset'] = dataset
  106. context['series'] = series
  107. return Response(context)
  108. class SalesViewSet(viewsets.ModelViewSet):
  109. """
  110. list:
  111. Response a data list(all)
  112. """
  113. pagination_class = None
  114. filter_backends = [DjangoFilterBackend, OrderingFilter, ]
  115. ordering_fields = ['id', "create_time", "update_time", ]
  116. filter_class = DnDetailFilter
  117. def get_project(self):
  118. try:
  119. id = self.kwargs.get('pk')
  120. return id
  121. except:
  122. return None
  123. def get_queryset(self):
  124. id = self.get_project()
  125. if self.request.user:
  126. if id is None:
  127. return DnDetailModel.objects.filter(openid=self.request.auth.openid, dn_status__gte=4,
  128. create_time__gte=timezone.now().date() - relativedelta(days=14),
  129. is_delete=False)
  130. else:
  131. return DnDetailModel.objects.filter(openid=self.request.auth.openid, dn_status__gte=4,
  132. create_time__gte=timezone.now().date() - relativedelta(days=14),
  133. id=id, is_delete=False)
  134. else:
  135. return DnDetailModel.objects.none()
  136. def get_serializer_class(self):
  137. if self.action in ['list']:
  138. return dnserializers.DNDetailGetSerializer
  139. else:
  140. return self.http_method_not_allowed(request=self.request)
  141. def notice_lang(self):
  142. lang = self.request.META.get('HTTP_LANGUAGE')
  143. return lang
  144. def list(self, request, *args, **kwargs):
  145. qs = self.get_queryset()
  146. context = {}
  147. dataset = {}
  148. dimensions = ['product']
  149. source = []
  150. series = []
  151. bar_charts = {
  152. "type": 'bar',
  153. "barWidth": '4%',
  154. "barGap": '60%',
  155. "barCategoryGap": '10%',
  156. "itemStyle": {
  157. "normal": {
  158. "label": {
  159. "show": "true",
  160. "position": "top"
  161. }
  162. }
  163. }
  164. }
  165. receipt_res = qs.annotate(month=ExtractMonth('create_time'), day=ExtractDay('create_time')) \
  166. .values('month', 'day').order_by('month', 'day').annotate(number=Sum('goods_cost'))
  167. # qty_res = qs.values('goods_code').order_by('goods_code').annotate(number=Sum('goods_qty'))
  168. # rank_res = qs.values('goods_code').order_by('goods_code').annotate(number=Sum('goods_cost'))
  169. receipt_res_dict = {
  170. }
  171. # qty_res_dict = {
  172. # }
  173. # rank_res_dict = {
  174. # }
  175. for i in receipt_res:
  176. series.append(bar_charts)
  177. dimensions.append("%s-%s" % (i['month'], i['day']))
  178. receipt_res_dict.update({"%s-%s" % (i['month'], i['day']): i['number']})
  179. # for i in qty_res:
  180. # qty_res_dict.update({i['goods_code']: i['number']})
  181. # for i in rank_res:
  182. # rank_res_dict.update({i['goods_code']: i['number']})
  183. source.append(receipt_res_dict)
  184. # data_list.append(qty_res_dict)
  185. # data_list.append(rank_res_dict)
  186. dataset['source'] = source
  187. dataset['dimensions'] = dimensions
  188. context['dataset'] = dataset
  189. context['series'] = series
  190. return Response(context)