views.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # coding=utf-8
  2. import json
  3. from django.db.models import Sum, F
  4. from django.db import transaction
  5. from django.db.models import Q
  6. from rest_framework.views import APIView
  7. from utils.custom_modelviewset import CustomModelViewSet
  8. from .serializers import *
  9. from .filters import *
  10. from apps.log.models import BizLog
  11. from apps.base import Formater
  12. from utils import response_ok, response_error
  13. from utils.permission import isLogin
  14. from apps.order.models import Order
  15. from apps.WeChatResponse import WechatAppletPay
  16. from django.contrib.auth import get_user_model
  17. User = get_user_model()
  18. class ProductView(APIView):
  19. def get(self, request):
  20. data = []
  21. queryset = Product.objects.filter(enable=True)
  22. for row in queryset:
  23. item = {
  24. 'id':row.id,
  25. 'name':row.name,
  26. 'month':row.month,
  27. }
  28. data.append(item)
  29. return response_ok(data)
  30. class ProductViewSet(CustomModelViewSet):
  31. permission_classes = [isLogin, ]
  32. queryset = Product.objects.filter()
  33. serializer_class = ProductSerializer
  34. def filter_queryset(self, queryset):
  35. f = ProductFilter(self.request.GET, queryset=queryset)
  36. return f.qs
  37. class OrderViewSet(CustomModelViewSet):
  38. permission_classes = [isLogin, ]
  39. queryset = Order.objects.filter()
  40. serializer_class = OrderSerializer
  41. def list(self, request, *args, **kwargs):
  42. # 底栏合计
  43. queryset = self.filter_queryset(self.get_queryset())
  44. total = queryset.aggregate(total_amount=Sum('total_amount'), balance_deduction=Sum('balance_deduction'),
  45. actual_amount=Sum('actual_amount'))
  46. totalRow = {'totalRow': 1,
  47. 'total_amount': Formater.formatPriceShow(total['total_amount']),
  48. 'balance_deduction': Formater.formatPriceShow(total['balance_deduction']),
  49. 'actual_amount': Formater.formatPriceShow(total['actual_amount'], )}
  50. page = self.paginate_queryset(queryset)
  51. if page is not None:
  52. serializer = self.get_serializer(page, many=True)
  53. data = serializer.data
  54. if len(data) > 0:
  55. data.append(totalRow)
  56. return self.get_paginated_response(data)
  57. serializer = self.get_serializer(queryset, many=True)
  58. return response_ok(serializer.data)
  59. def filter_queryset(self, queryset):
  60. queryset = queryset.filter(Q(create_user=self.request.user))
  61. f = OrderFilter(self.request.GET, queryset=queryset)
  62. return f.qs
  63. def create(self, request, *args, **kwargs):
  64. try:
  65. with transaction.atomic():
  66. serializer = self.get_serializer(data=request.data)
  67. if serializer.is_valid(raise_exception=True):
  68. instance = serializer.save()
  69. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  70. u'添加订单[%s],id=%d' % (instance.id), request.data)
  71. return response_ok()
  72. except CustomError as e:
  73. return response_error(e.get_error_msg())
  74. except Exception as e:
  75. import traceback
  76. traceback.print_exc()
  77. return response_error(str(e))