瀏覽代碼

活动细化

lyh 2 年之前
父節點
當前提交
70262fe9d8

+ 4 - 3
apps/activity/base.py

@@ -17,8 +17,9 @@ class OrderUpdate():
         Order.objects.filter(
             Q(status=Order.DEFAULT),
             Q(
-                Q(activity__enabled=False)|
-                Q(activity__delete=True)|
-                Q(activity__end_date__lt=now_date)
+                Q(activity_detail__main__enabled=False)|
+                Q(activity_detail__delete=True)|
+                Q(activity_detail__main__delete=True)|
+                Q(activity_detail__main__end_date__lt=now_date)
             )
         ).update(status=Order.FAIL)

+ 3 - 2
apps/activity/filters.py

@@ -58,9 +58,10 @@ class MemberCouponFilter(django_filters.FilterSet):
 
 
 class OrderFilter(django_filters.FilterSet):
-    activity_name = django_filters.CharFilter(field_name='activity__title', lookup_expr='icontains')
+    activity_name = django_filters.CharFilter(field_name='activity_detail__main__title', lookup_expr='icontains')
+    activity_detail = django_filters.CharFilter(field_name='activity_detail__name', lookup_expr='icontains')
     branch_name = django_filters.CharFilter(field_name='branch__name', lookup_expr='icontains')
-    activity = django_filters.CharFilter(field_name='activity')
+    activity = django_filters.CharFilter(field_name='activity_detail__main')
     delete = django_filters.CharFilter(field_name='delete')
 
     order_status = django_filters.CharFilter(method='find_by_order_status')

+ 15 - 1
apps/activity/models.py

@@ -93,6 +93,19 @@ class ActivityDetails(models.Model):
             raise CustomError(u'未找到相应的活动明细')
         return instance
 
+    def checkStatus(self):
+        if not self.main.enabled:
+            raise CustomError(u'该活动已禁用!')
+        if self.main.delete:
+            raise CustomError(u'该活动已删除!')
+        if self.delete:
+            raise CustomError(u'该明细已删除!')
+        if self.main.check_status != settings.PASS:
+            raise CustomError(u'该活动尚未生效!')
+        now = datetime.datetime.date(timezone.now())
+        if self.main.end_date and now > self.main.end_date:
+            raise CustomError(u'该活动已过期!')
+
 
 class SplitAccount(models.Model):
     WAIT = 1
@@ -429,7 +442,8 @@ class Order(models.Model):
         (FAIL, u'失败'),
     )
     branch = models.ForeignKey(Branch, verbose_name=u"门店", on_delete=models.PROTECT, editable=False)
-    activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
+    #activity = models.ForeignKey(Activity, verbose_name=u"活动", on_delete=models.PROTECT)
+    activity_detail = models.ForeignKey(ActivityDetails, verbose_name=u"活动明细", on_delete=models.PROTECT)
     pay = models.ForeignKey(Pay, verbose_name='支付信息', on_delete=models.PROTECT, null=True)
     splitaccount = models.ForeignKey(SplitAccount, verbose_name='分账信息', on_delete=models.PROTECT, null=True)
     member = models.ForeignKey(Customer, verbose_name=u"会员", on_delete=models.PROTECT, editable=False)

+ 1 - 1
apps/activity/serializers.py

@@ -88,7 +88,7 @@ class MemberCouponSerializer(serializers.ModelSerializer):
 
 
 class OrderSerializer(serializers.ModelSerializer):
-    activity_name = serializers.CharField(source='activity.title', read_only=True)
+    activity_name = serializers.CharField(source='activity_detail.main.title', read_only=True)
     member_name = serializers.CharField(source='member.name', read_only=True)
     recommend_member_name = serializers.CharField(source='recommend_member.name', read_only=True)
     member_tel = serializers.CharField(source='member.tel', read_only=True)

+ 15 - 2
apps/customer/activity/serializers.py

@@ -3,16 +3,29 @@
 from django.conf import settings
 
 from rest_framework import serializers
-from apps.activity.models import Activity
+from apps.activity.models import Activity, ActivityDetails
 
 
 class ActivitySerializer(serializers.ModelSerializer):
     pic = serializers.SerializerMethodField()
     describe = serializers.SerializerMethodField()
+    details = serializers.SerializerMethodField()
 
     class Meta:
         model = Activity
-        fields = ('branch_address', 'branch_name', 'branch_tel', 'describe', 'title', 'amount', 'pic', )
+        fields = ('branch_address', 'branch_name', 'branch_tel', 'describe', 'title', 'pic', 'details',)
+
+    def get_details(self, obj):
+        rows = ActivityDetails.objects.filter(main=obj, delete=False).values('name', 'amount', 'id')
+        data = []
+        for row in rows:
+            item = {
+                'id': row['id'],
+                'name': row['name'],
+                'amount': row['amount'],
+            }
+            data.append(item)
+        return data
 
     def get_pic(self, obj):
         if obj.pic:

+ 7 - 7
apps/customer/order/serializers.py

@@ -36,11 +36,11 @@ class OrderSerializer(serializers.ModelSerializer):
 
     def validate(self, attrs):
         attrs['member'] = self.context['request'].customer
-        if 'activity' in attrs and attrs['activity']:
-            attrs['activity'].checkStatus()
+        if 'activity_detail' in attrs and attrs['activity_detail']:
+            attrs['activity_detail'].checkStatus()
             required_signs = []
-            if attrs['activity'].required_signs:
-                required_signs = attrs['activity'].required_signs.split(',')
+            if attrs['activity_detail'].main.required_signs:
+                required_signs = attrs['activity_detail'].main.required_signs.split(',')
             for item in required_signs:
                 if item == u'姓名':
                     if ('name' not in attrs) or (not attrs['name']):
@@ -58,8 +58,8 @@ class OrderSerializer(serializers.ModelSerializer):
         return attrs
 
     def create(self, validated_data):
-        validated_data['branch'] = validated_data['activity'].branch
-        validated_data['amount'] = Formater.formatPrice(validated_data['activity'].amount)
-        validated_data['rebate'] = Formater.formatPrice(validated_data['activity'].rebate)
+        validated_data['branch'] = validated_data['activity_detail'].main.branch
+        validated_data['amount'] = Formater.formatPrice(validated_data['activity_detail'].amount)
+        validated_data['rebate'] = Formater.formatPrice(validated_data['activity_detail'].rebate)
         instance = super(OrderSerializer, self).create(validated_data)
         return instance

+ 1 - 1
apps/customer/order/views.py

@@ -132,7 +132,7 @@ class ActivityOrderListView(generics.ListAPIView):
         activity_id = self.request.GET.get('activity_id')
         activity = Activity.getById(activity_id)
 
-        queryset = queryset.filter(activity=activity)
+        queryset = queryset.filter(activity_detail__main=activity)
         f = OrderFilter(self.request.GET, queryset=queryset)
         return f.qs
 

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

@@ -68,6 +68,12 @@
                     <input type="text" name="activity_name" autocomplete="off" class="layui-input">
                 </div>
             </div>
+              <div class="layui-col-xs12 layui-col-sm12">
+                <label class="layui-form-label">活动项目:</label>
+                <div class="layui-input-block">
+                    <input type="text" name="activity_detail" autocomplete="off" class="layui-input">
+                </div>
+            </div>
 
                <div class="layui-col-xs12 layui-col-sm12">
                 <label class="layui-form-label">门店:</label>