# coding=utf-8 import json from django.db.models import Sum, F from django.db import transaction from django.db.models import Q from rest_framework.views import APIView from utils.custom_modelviewset import CustomModelViewSet from .serializers import * from .filters import * from apps.log.models import BizLog from apps.base import Formater from utils import response_ok, response_error from utils.permission import isLogin from apps.order.models import Order from apps.WeChatResponse import WechatAppletPay from django.contrib.auth import get_user_model User = get_user_model() class ProductView(APIView): def get(self, request): data = [] queryset = Product.objects.filter(enable=True) for row in queryset: item = { 'id':row.id, 'name':row.name, 'month':row.month, } data.append(item) return response_ok(data) class ProductViewSet(CustomModelViewSet): permission_classes = [isLogin, ] queryset = Product.objects.filter() serializer_class = ProductSerializer def filter_queryset(self, queryset): f = ProductFilter(self.request.GET, queryset=queryset) return f.qs class OrderViewSet(CustomModelViewSet): permission_classes = [isLogin, ] queryset = Order.objects.filter() serializer_class = OrderSerializer def list(self, request, *args, **kwargs): # 底栏合计 queryset = self.filter_queryset(self.get_queryset()) total = queryset.aggregate(total_amount=Sum('total_amount'), balance_deduction=Sum('balance_deduction'), actual_amount=Sum('actual_amount')) totalRow = {'totalRow': 1, 'total_amount': Formater.formatPriceShow(total['total_amount']), 'balance_deduction': Formater.formatPriceShow(total['balance_deduction']), 'actual_amount': Formater.formatPriceShow(total['actual_amount'], )} page = self.paginate_queryset(queryset) if page is not None: serializer = self.get_serializer(page, many=True) data = serializer.data if len(data) > 0: data.append(totalRow) return self.get_paginated_response(data) serializer = self.get_serializer(queryset, many=True) return response_ok(serializer.data) def filter_queryset(self, queryset): queryset = queryset.filter(Q(create_user=self.request.user)) f = OrderFilter(self.request.GET, queryset=queryset) return f.qs def create(self, request, *args, **kwargs): try: with transaction.atomic(): serializer = self.get_serializer(data=request.data) if serializer.is_valid(raise_exception=True): instance = serializer.save() BizLog.objects.addnew(self.request.user, BizLog.INSERT, u'添加订单[%s],id=%d' % (instance.id), request.data) return response_ok() except CustomError as e: return response_error(e.get_error_msg()) except Exception as e: import traceback traceback.print_exc() return response_error(str(e))