views.py 3.5 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. # coding=utf-8
  2. import json
  3. from django.db import transaction
  4. from django.db.models import Q, Sum
  5. from django.conf import settings
  6. from rest_framework.decorators import action
  7. from rest_framework.views import APIView
  8. from utils.custom_modelviewset import CustomModelViewSet
  9. from utils import response_ok, response_error
  10. from utils.exceptions import CustomError
  11. from utils.permission import IsCustomer, AnyOne
  12. from apps.config.models import Config
  13. from apps.commodity.models import Commodity
  14. from apps.customer.commodity.serializers import CommoditySerializer
  15. from apps.customer.models import SuperiorDistributor
  16. from apps.customer.filters import SuperiorDistributorFilter
  17. from apps.customer.distributor.serializers import DistributorSerializer
  18. from apps.rebate.models import CashRebate, PointRebate
  19. from apps.base import Formater
  20. from rest_framework import generics
  21. class DataTypeView(APIView):
  22. permission_classes = [AnyOne, ]
  23. def get(self, request):
  24. '''
  25. 分销商页面用来判断进入那个页面 如果用户登陆且是分销商 要请求下级分销商数据
  26. 如果用户没有登陆或者用户不是分销商 要请求成为分销商要购买的商品信息
  27. :param request:
  28. :return:
  29. '''
  30. type = 'no'
  31. if request.customer and request.customer.is_distributor:
  32. type = 'yes'
  33. return response_ok(type)
  34. class DistributorView(generics.ListAPIView):
  35. permission_classes = [IsCustomer, ]
  36. queryset = SuperiorDistributor.objects.filter()
  37. serializer_class = DistributorSerializer
  38. def filter_queryset(self, queryset):
  39. customer = self.request.customer
  40. queryset = queryset.filter(
  41. Q(one_level=customer) | Q(two_level=customer) | Q(three_level=customer) | Q(four_level=customer) | Q(five_level=customer)
  42. )
  43. f = SuperiorDistributorFilter(self.request.GET, queryset=queryset)
  44. return f.qs
  45. def list(self, request, *args, **kwargs):
  46. queryset = self.filter_queryset(self.get_queryset())
  47. sum_rows = queryset.aggregate(sum_count=Sum('customer__success_count'), sum_amount=Sum('customer__total_amount'), sum_point=Sum('customer__total_point'))
  48. sum_cash = CashRebate.objects.filter(customer=request.customer).aggregate(sum_amount=Sum('amount'))['sum_amount'] or 0
  49. sum_point = PointRebate.objects.filter(customer=request.customer).aggregate(sum_amount=Sum('amount'))['sum_amount'] or 0
  50. footer = {
  51. 'sum_count': sum_rows['sum_count'] or 0,
  52. 'sum_amount': Formater.formatValueShow(sum_rows['sum_amount'] or 0),
  53. 'total_point': sum_rows['sum_point'] or 0,
  54. 'sum_cash': Formater.formatValueShow(sum_cash),
  55. 'sum_point': sum_point,
  56. }
  57. page = self.paginate_queryset(queryset)
  58. if page is not None:
  59. serializer = self.get_serializer(page, many=True)
  60. return self.get_paginated_response({'data': serializer.data, 'footer': footer})
  61. serializer = self.get_serializer(queryset, many=True)
  62. return response_ok({'data': serializer.data, 'footer': footer})
  63. class DistributorCommodityView(APIView):
  64. def get(self, request):
  65. data = []
  66. commodity_id = Config.get_commodity()
  67. if commodity_id:
  68. commodity = Commodity.objects.filter(id=commodity_id, delete=False, status=settings.ONLINE).first()
  69. serializer = CommoditySerializer(commodity, many=False)
  70. data.append(serializer.data)
  71. return response_ok(data)