Browse Source

产品管理

wushaodong 3 years ago
parent
commit
b5fb223168

+ 1 - 1
apps/account/models.py

@@ -52,7 +52,7 @@ class User(AbstractBaseUser, PermissionsMixin):
 
     is_active = models.BooleanField(verbose_name=u'是否可用', default=True, editable=False)
     date_joined = models.DateTimeField(verbose_name=u'注册时间', auto_now_add=True, editable=False)
-    type = models.PositiveSmallIntegerField(verbose_name=u"类型", choices=TYPE_CHOICES, editable=False, default=CUSTOMER)
+    type = models.PositiveSmallIntegerField(verbose_name=u"类型", choices=TYPE_CHOICES, default=CUSTOMER)
     name = models.CharField(max_length=20, verbose_name=u"姓名")
     gender = models.PositiveSmallIntegerField(choices=settings.GENDER_CHOICES, verbose_name=u"性别",
                                               default=settings.MALE)

+ 20 - 9
apps/account/serializers.py

@@ -62,21 +62,30 @@ class EmployeeSerializer(serializers.ModelSerializer):
 
     def create(self, validated_data):
         username = self.initial_data['username']
-        user = User.objects.filter(username=username).first()
+        user = User.objects.filter(username=username, type__in=[User.SELLER, User.EMPLOYEE]).first()
         if user:
-            raise CustomError(u'账号[{0}]已存在。'.format(username))
-        # 代理商添加的账号,默认就是操作人所在的代理商
-        validated_data['is_active'] = self.initial_data['is_active'] == '1'
-        user = self.context['request'].user
-        validated_data['create_user'] = user
-        validated_data['type'] = User.EMPLOYEE
-        instance = super(EmployeeSerializer, self).create(validated_data)
+            if user.type == User.CUSTOMER:
+                # 如果新添加的账号是游客,直接改成员工
+                validated_data['create_user'] = self.context['request'].user
+                validated_data['is_active'] = self.initial_data['is_active'] == '1'
+                instance = super(EmployeeSerializer, self).update(user, validated_data)
+            else:
+                raise CustomError(u'账号[{0}]和其他员工账号重复,禁止添加。'.format(username))
+        else:
+            # 代理商添加的账号,默认就是操作人所在的代理商
+            validated_data['is_active'] = self.initial_data['is_active'] == '1'
+            user = self.context['request'].user
+            validated_data['create_user'] = user
+            instance = super(EmployeeSerializer, self).create(validated_data)
         instance.set_password(self.initial_data['password'])
         instance.save()
         return instance
 
     def update(self, instance, validated_data):
-
+        username = self.initial_data['username']
+        user = User.objects.filter(username=username).exclude(id=instance.id).first()
+        if user:
+            raise CustomError(u'账号[{0}]和其他员工账号重复,禁止修改。'.format(username))
         password = instance.password
         validated_data['is_superuser'] = instance.is_superuser
         validated_data['is_active'] = self.initial_data['is_active'] == '1'
@@ -169,6 +178,7 @@ class WechatLoginSerializer(serializers.Serializer):
                 'name': customer_wechat.customer.name or '',
                 'tel': customer_wechat.customer.username or '',
                 'face': customer_wechat.customer.face,
+                'type': customer_wechat.customer.type,
             }
 
         else:
@@ -191,6 +201,7 @@ class WechatBindSerializer(serializers.Serializer):
                 'name': customer.name or '',
                 'tel': customer.username or '',
                 'face': customer.face,
+                'type': customer.type,
             }
 
         else:

+ 1 - 1
apps/account/views.py

@@ -70,7 +70,7 @@ class ChangePassword(APIView):
 
 class EmployeeViewSet(CustomModelViewSet):
     permission_classes = [isLogin, ]
-    queryset = User.objects.filter(type=User.EMPLOYEE)
+    queryset = User.objects.filter().exclude(type=User.CUSTOMER)
     serializer_class = EmployeeSerializer
 
     def filter_queryset(self, queryset):

+ 2 - 2
apps/order/filters.py

@@ -12,8 +12,8 @@ class ProductFilter(django_filters.FilterSet):
 
 class OrderFilter(django_filters.FilterSet):
     status = django_filters.CharFilter(field_name='status')
-    no = django_filters.CharFilter(field_name='no', lookup_expr='icontains')
-    tel = django_filters.CharFilter(field_name='create_user__username', lookup_expr='icontains')
+    tel = django_filters.CharFilter(field_name='tel', lookup_expr='icontains')
+    name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
     create_time_0 = django_filters.DateTimeFilter(field_name='create_time', lookup_expr='gte')
     create_time_1 = django_filters.DateTimeFilter(field_name='create_time', lookup_expr='lte')
 

+ 53 - 0
apps/order/models.py

@@ -146,3 +146,56 @@ class Order(models.Model):
             raise CustomError('未找到对应的订单')
         return instance
 
+class OrderImages(models.Model):
+    ZERO = 0
+    ONE = 1
+    TOW = 2
+    THREE = 3
+    FOUR = 4
+    FIVE = 5
+    TYPE_CHOICE = (
+        (ZERO, '身份证'),
+        (ONE, '驾驶证'),
+        (TOW, '收入类'),
+        (THREE, '流水类'),
+        (FOUR, '营业执照'),
+        (FIVE, '挂靠协议'),
+    )
+    type = models.PositiveSmallIntegerField(choices=TYPE_CHOICE, default=ZERO)
+    order = models.ForeignKey(Order, verbose_name=u'产品', on_delete=models.PROTECT, related_name='order_images')
+    image = models.ForeignKey(Upload, verbose_name=u'图片', on_delete=models.PROTECT)
+
+    class Meta:
+        db_table = "order_images"
+        verbose_name = u"订单图片"
+        ordering = ('id',)
+        default_permissions = ()
+
+    @staticmethod
+    def getById(id):
+        try:
+            id = int(id)
+        except:
+            raise CustomError(u'无效的ID')
+
+        instance = OrderImages.objects.filter(pk=id).first()
+        if not instance:
+            raise CustomError(u'未找到相应的图片')
+        return instance
+
+class OrderDetailEdit(models.Model):
+    ZERO = 0
+    ONE = 1
+    TYPE_CHOICE = (
+        (ZERO, '资料'),
+        (ONE, '图片'),
+    )
+    type = models.PositiveSmallIntegerField(choices=TYPE_CHOICE, default=ZERO)
+    order_detail = models.IntegerField(verbose_name=u'订单明细对象') # 文字资料和图片资料id
+    edit_time = models.DateTimeField(verbose_name=u'修改时间')
+
+    class Meta:
+        db_table = "order_detail_edit"
+        verbose_name = u"订单明细修改"
+        ordering = ('id',)
+        default_permissions = ()

+ 13 - 0
apps/order/serializers.py

@@ -32,6 +32,19 @@ class ProductSerializer(serializers.ModelSerializer):
         instance.save()
         return instance
 
+class OrderListSerializer(serializers.ModelSerializer):
+    seller_text = serializers.CharField(source='seller.name', read_only=True)
+    create_user_text = serializers.CharField(source='create_user.name', read_only=True)
+    create_time_f = serializers.DateTimeField(source='create_time', format=settings.SHORT_DATETIME_FORMAT,
+                                              read_only=True)
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
+    sex_text = serializers.CharField(source='get_sex_display', read_only=True)
+    package_text = serializers.CharField(source='package__name', read_only=True)
+
+    class Meta:
+        model = Order
+        fields = ('name','tel','sex_text','inumber','package_text','status_text','create_time_f','create_user_text',)
+
 class OrderSerializer(serializers.ModelSerializer):
     create_user_text = serializers.CharField(source='create_user.username', read_only=True)
     create_time_f = serializers.DateTimeField(source='create_time', format=settings.SHORT_DATETIME_FORMAT,

+ 1 - 0
apps/order/urls.py

@@ -11,5 +11,6 @@ urlpatterns = [
 
 router = SimpleRouter()
 router.register(r'product', ProductViewSet)
+router.register(r'list', OrderListViewSet)
 router.register(r'', OrderViewSet)
 urlpatterns += router.urls

+ 11 - 21
apps/order/views.py

@@ -118,33 +118,23 @@ class ProductViewSet(CustomModelViewSet):
             data.append(commodity_image_item)
         return response_ok(data)
 
+class OrderListViewSet(CustomModelViewSet):
+    permission_classes = [isLogin, ]
+    queryset = Order.objects.filter()
+    serializer_class = OrderListSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
+        f = OrderFilter(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))
+        queryset = queryset.filter(Q(create_user=self.request.user) | Q(seller=self.request.user))
         f = OrderFilter(self.request.GET, queryset=queryset)
         return f.qs
 

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

@@ -82,7 +82,6 @@
             , cols: [[
                 {field: 'name', title: '姓名', width: 120}
                 , {field: 'gender_text', title: '性别', width: 80}
-                , {field: 'tel', title: '电话', width: 120}
                 , {field: 'username', title: '账号', width: 120}
                 , {field: 'type_text', title: '类别', width: 120}
                 , {field: 'enable_text', title: '是否在用', width: 100}

+ 16 - 13
uis/views/order/index.html

@@ -72,19 +72,20 @@
                    placeholder="电话"/>
         </div>
         <div class="seach_items">
-            <input type="text" name="no" autocomplete="off" class="layui-input"
-                   placeholder="订单号"/>
+            <input type="text" name="name" autocomplete="off" class="layui-input"
+                   placeholder="电话"/>
         </div>
         <div class="seach_items">
             <select name="status" style="width: 40px;">
                 <option value="">请选择状态</option>
-                <option value="1">待付款</option>
-                <option value="2">已完成</option>
-                <option value="3">已取消</option>
+                <option value="0">待审核</option>
+                <option value="1">已通过</option>
+                <option value="2">退回修改</option>
+                <option value="3">拒绝审批</option>
             </select>
         </div>
         <div class="seach_items">
-            <input type="text" class="layui-input" name="create_time" id="id_create_time" placeholder="下单时间">
+            <input type="text" class="layui-input" name="create_time" id="id_create_time" placeholder="提交时间">
         </div>
         <button class="layui-btn layui-btn-sm" lay-submit lay-filter="query-form-element">查询
         </button>
@@ -106,18 +107,20 @@
 
         table.render({
             elem: '#datagrid'
-            , url: '/order/'
+            , url: '/order/list/?category=1'
             , toolbar: '#toolbarDemo'
             , title: '用户订单' //标题
             , totalRow: true
             , cols: [[
-                {field: 'no', title: '订单号', width: 215}
-                , {field: 'total_amount', title: '总金额', totalRow: true, align: 'right', width: 100}
-                , {field: 'balance_deduction', title: '余额抵扣', totalRow: true,align: 'right', width: 100}
-                , {field: 'actual_amount', title: '实付金额', totalRow: true,align: 'right', width: 100}
+                {field: 'name', title: '姓名', width: 150}
+                , {field: 'sex_text', title: '性别', totalRow: true, align: 'right', width: 100}
+                , {field: 'tel', title: '手机号', totalRow: true,align: 'right', width: 130}
+                , {field: 'inumber', title: '证件号', totalRow: true,align: 'right', width: 150}
+                , {field: 'package_text', title: '贷款产品', totalRow: true,align: 'right', width: 200}
                 , {field: 'status_text', title: '订单状态', width: 100}
-                , {field: 'create_time', title: '下单时间', width: 180,}
-                , {field: 'create_user_text', title: '下单人', width: 150,}
+                , {field: 'create_time_f', title: '下单时间', width: 180,}
+                , {field: 'create_user_text', title: '下单人', width: 120,}
+                , {field: 'seller_text', title: '业务人员', width: 120,}
             ]]
             , page: true
             , height: 'full-108'