Bladeren bron

优惠券

wushaodong 3 jaren geleden
bovenliggende
commit
157ec74db3
7 gewijzigde bestanden met toevoegingen van 64 en 11 verwijderingen
  1. 1 1
      apps/option/urls.py
  2. 5 1
      apps/option/views.py
  3. 3 0
      apps/order/models.py
  4. 1 0
      apps/order/serializers.py
  5. 1 0
      apps/order/urls.py
  6. 52 9
      apps/order/views.py
  7. 1 0
      uis/views/order/index.html

+ 1 - 1
apps/option/urls.py

@@ -8,7 +8,7 @@ urlpatterns = [
     url(r'get_school/$', SchoolView.as_view()), # 学校管理
     url(r'get_category/$', CategoryView.as_view()), # 商品分类
     url(r'get_category_tree/$', CategoryTreeView.as_view()), # 商品分类
-    url(r'get_wx_category/$', CategoryWXView.as_view()), # 商品分类首页展示
+    url(r'get_wx_category/$', CategoryWXView.as_view()), # 小程序商品分类首页展示
     url(r'school_tree/$', SchoolTreeView.as_view()),
     url(r'area_tree/$', AreaTreeView.as_view()),
 ]

+ 5 - 1
apps/option/views.py

@@ -1,6 +1,7 @@
 from utils.custom_modelviewset import CustomModelViewSet
 from django.db import transaction
 import json
+import random
 from rest_framework.decorators import action
 from .models import *
 from .serializers import *
@@ -53,7 +54,10 @@ class CategoryWXView(APIView):
 
     def get(self, request):
         rows = CommodityLevel.objects.filter(enable=True, home_show=True)
-        data = [{'id': item.id, 'value': item.name,'picture':''} for item in rows]
+        p_list = ['a','b','c','d','e',]
+        data = [{'id': item.id, 'value': item.name,
+                 'picture': '%s/up/%s.png' % (settings.SERVER_DOMAIN, random.choice(p_list))
+                 } for item in rows]
         return response_ok(data)
 
 class AreaTreeView(APIView):

+ 3 - 0
apps/order/models.py

@@ -87,6 +87,9 @@ class Pay(models.Model):
             order.status = Order.FINISH
             order.actual_amount = self.amount
             order.save()
+            if order.coupon:
+                order.coupon.count += 1
+                order.coupon.save()
 
     @staticmethod
     def getByNo(pay_no):

+ 1 - 0
apps/order/serializers.py

@@ -8,6 +8,7 @@ from apps.base import Formater
 from utils.booleancharfield import BooleanCharField
 
 class OrderSerializer(serializers.ModelSerializer):
+    coupon_name = serializers.CharField(source='coupon.name', read_only=True)
     commodity_name = serializers.CharField(source='commodity.name', read_only=True)
     student_text = serializers.CharField(source='student.name', read_only=True)
     create_user_text = serializers.CharField(source='create_user.username', read_only=True)

+ 1 - 0
apps/order/urls.py

@@ -6,6 +6,7 @@ from .views import *
 
 urlpatterns = [
     url(r'^export_data/$', ExportOrderDictView.as_view()),
+    url(r'^wx_get_coupon/$', WXGetCoupon.as_view()),
 ]
 
 router = SimpleRouter()

+ 52 - 9
apps/order/views.py

@@ -32,16 +32,17 @@ class OrderViewSet(CustomModelViewSet):
         queryset = self.filter_queryset(self.get_queryset())
         if export:
             queryset = queryset.filter(status=Order.FINISH).order_by('-student__classes_id',
-                                                                          '-student__classes__grade_id')
+                                                                     '-student__classes__grade_id')
             export_data = OrderResource().export(queryset)
             filename = attachment_save(export_data, '用户订单{}'.format(timezone.now().date()))
 
             return response_ok({'filename': filename})
-        total = queryset.aggregate(total_amount=Sum('total_amount'), coupon_deduction=Sum('coupon_deduction'), actual_amount=Sum('actual_amount'))
-        totalRow = {'totalRow':1,
+        total = queryset.aggregate(total_amount=Sum('total_amount'), coupon_deduction=Sum('coupon_deduction'),
+                                   actual_amount=Sum('actual_amount'))
+        totalRow = {'totalRow': 1,
                     'total_amount': Formater.formatPriceShow(total['total_amount']),
-                    'coupon_deduction':Formater.formatPriceShow(total['coupon_deduction']),
-                    'actual_amount':Formater.formatPriceShow(total['actual_amount'],)}
+                    'coupon_deduction': Formater.formatPriceShow(total['coupon_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)
@@ -59,7 +60,8 @@ class OrderViewSet(CustomModelViewSet):
             queryset = queryset.filter(create_user=self.request.user)
         elif self.request.user.type == User.AGENT:
             # 代理商,筛选代理的类别和学校
-            queryset = queryset.filter(Q(commodity__cogetory__in=self.request.user.cogetory) | Q(student__school=self.request.user.school))
+            queryset = queryset.filter(
+                Q(commodity__cogetory__in=self.request.user.cogetory) | Q(student__school=self.request.user.school))
 
         f = OrderFilter(self.request.GET, queryset=queryset)
         return f.qs
@@ -84,7 +86,7 @@ class OrderViewSet(CustomModelViewSet):
                 if serializer.is_valid(raise_exception=True):
                     instance = serializer.save()
 
-                    instance.total_amount = count * commodity.price * commodity.discount/100
+                    instance.total_amount = count * commodity.price * commodity.discount / 100
                     actual_amount = instance.total_amount
                     if coupon:
                         coupon = Coupon.objects.filter(id=coupon).first()
@@ -148,16 +150,56 @@ class OrderViewSet(CustomModelViewSet):
         except Exception as e:
             return response_error(str(e))
 
+
 class ExportOrderDictView(APIView):
     permission_classes = [isLogin]
 
     def get(self, request):
-        queryset = Order.objects.filter(status=Order.FINISH).order_by('-student__classes_id','-student__classes__grade_id')
+        queryset = Order.objects.filter(status=Order.FINISH).order_by('-student__classes_id',
+                                                                      '-student__classes__grade_id')
         export_data = OrderResource().export(queryset)
-        filename = attachment_save(export_data,'用户订单{}'.format(timezone.now().date()))
+        filename = attachment_save(export_data, '用户订单{}'.format(timezone.now().date()))
 
         return response_ok({'filename': filename})
 
+
+class WXGetCoupon(APIView):
+    permission_classes = [isLogin]
+
+    def get(self, request):
+        commodity_id = request.GET.get('commodity')
+        student_id = request.GET.get('student')
+        commodity = Commodity.objects.filter(id=commodity_id).first()
+        data = {
+            'coupon_name': '',
+            'coupon_amount': 0,
+        }
+        if not commodity:
+            return response_ok(data)
+        student = Student.objects.filter(id=student_id).first()
+        coupons = Coupon.objects.filter(enable=True, begin_date__lte=timezone.now().date(),
+                                        end_date__gte=timezone.now().date())
+        for coupon in coupons:
+            if coupon.category:
+                categorys = coupon.category.split(',')
+                if commodity.category and str(commodity.category.id) in categorys:
+                    data = {
+                        'coupon_id': coupon.id,
+                        'coupon_name': coupon.name,
+                        'coupon_amount': Formater.formatPriceShow(coupon.amount),
+                    }
+                    return response_ok(data)
+            if student and coupon.school:
+                schools = coupon.school.split(',')
+                if str(student.school.id) in schools:
+                    data = {
+                        'coupon_id': coupon.id,
+                        'coupon_name': coupon.name,
+                        'coupon_amount': Formater.formatPriceShow(coupon.amount),
+                    }
+                    return response_ok(data)
+        return response_ok(data)
+
 class ShoppingCartViewSet(CustomModelViewSet):
     permission_classes = [isLogin]
     queryset = ShoppingCart.objects.filter()
@@ -197,6 +239,7 @@ class ShoppingCartViewSet(CustomModelViewSet):
             traceback.print_exc()
             return response_error(str(e))
 
+
 class CouponViewSet(CustomModelViewSet):
     permission_classes = [isLogin]
     queryset = Coupon.objects.filter()

+ 1 - 0
uis/views/order/index.html

@@ -132,6 +132,7 @@
                 , {field: 'actual_amount', title: '实付金额',totalRow:true, width: 100}
                 , {field: 'status_text', title: '订单状态', width: 100}
                 , {field: 'notes', title: '备注', width: 150,}
+                , {field: 'coupon_name', title: '优惠券名称', width: 150,}
                 , {field: 'create_time', title: '下单时间', width: 180,}
                 , {field: 'create_user_text', title: '下单人', width: 150,}
                 , {field: 'student_text', title: '学生姓名', width: 100,}