lyh hai 1 ano
pai
achega
2e5b75d851

+ 1 - 1
apps/customer/models.py

@@ -133,7 +133,7 @@ class CustomerVehicle(models.Model):
 
 
 class CustomerAddress(models.Model):
-    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT)
+    customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False)
     name = models.CharField(max_length=100, verbose_name=u"姓名")
     tel = models.CharField(max_length=50, verbose_name=u'电话')
     area = models.CharField(max_length=200, verbose_name=u"地区")

+ 3 - 0
apps/wechat/activity/views.py

@@ -1,6 +1,7 @@
 # coding=utf-8
 
 from rest_framework import generics
+from utils.permission import IsCustomerUser
 
 from utils import response_ok
 from .serializers import ActivitySerializer
@@ -8,7 +9,9 @@ from apps.activity.models import Activity
 from apps.activity.filters import ActivityFilter
 
 
+
 class ActivityListViewSet(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Activity.objects.filter(delete=False)
     serializer_class = ActivitySerializer
 

+ 0 - 7
apps/wechat/customer/serializers.py

@@ -41,13 +41,6 @@ class CustomerAddressSerializer(serializers.ModelSerializer):
         instance = super(CustomerAddressSerializer, self).create(validated_data)
         return instance
 
-    def update(self, instance, validated_data):
-        if instance.delete:
-            raise CustomError(u'该收货地址已经被删除,禁止操作')
-        if validated_data['default']:
-            CustomerAddress.objects.filter(Q(customer=instance.customer), Q(delete=False), ~Q(id=instance.id)).update(default=False)
-        instance = super(CustomerAddressSerializer, self).update(instance, validated_data)
-        return instance
 
 
 class ProductOrderSerializer(serializers.ModelSerializer):

+ 5 - 2
apps/wechat/customer/urls.py

@@ -14,5 +14,8 @@ urlpatterns = [
     url(r'^maint_reserve/$', MaintOrderReserveViewSet.as_view()),
     url(r'^maint_reserve/options/$', MaintReserveOptionsView.as_view()),
     url(r'^vehicle/$', CustomerVehicleViewSet.as_view()),
-    url(r'^address/$', CustomerAddressViewSet.as_view()),
-]
+]
+
+router = SimpleRouter()
+router.register(r'address', CustomerAddressViewSet)
+urlpatterns += router.urls

+ 67 - 32
apps/wechat/customer/views.py

@@ -8,6 +8,9 @@ from utils import response_ok
 from apps.account import tenant_log
 from apps.foundation.models import BizLog
 from rest_framework.exceptions import NotFound
+from rest_framework.viewsets import ModelViewSet
+from utils.permission import IsCustomerUser
+from utils.custom_modelviewset import CustomModelViewSet
 
 from .serializers import *
 from apps.customer.filters import *
@@ -16,7 +19,8 @@ from apps.product_order.filters import *
 from apps.maint_order.filters import *
 
 
-class VehicleDriveReserveViewSet(generics.ListAPIView):
+class VehicleDriveReserveViewSet(generics.ListCreateAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = VehicleDriveReserve.objects.filter(delete=False)
     serializer_class = VehicleDriveReserveSerializer
 
@@ -32,13 +36,20 @@ class VehicleDriveReserveViewSet(generics.ListAPIView):
             return response_ok([])
         return data
 
-    def perform_create(self, serializer):
-        super(VehicleDriveReserveViewSet, self).perform_create(serializer)
-        instance = serializer.instance
-        validated_data = serializer.validated_data
-        tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加预约试驾,id=%d' % instance.id, validated_data)
+    def create(self, request, *args, **kwargs):
+        with transaction.atomic():
+            serializer = self.get_serializer(data=request.data)
+            serializer.is_valid(raise_exception=True)
+            serializer.save()
+            instance = serializer.instance
+            validated_data = serializer.validated_data
+            tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加预约试驾,id=%d' % instance.id, validated_data)
+
+        return response_ok()
 
-class VehicleInquiryViewSet(generics.ListAPIView):
+
+class VehicleInquiryViewSet(generics.ListCreateAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = VehicleInquiry.objects.filter(delete=False)
     serializer_class = VehicleInquirySerializer
 
@@ -54,14 +65,19 @@ class VehicleInquiryViewSet(generics.ListAPIView):
             return response_ok([])
         return data
 
-    def perform_create(self, serializer):
-        super(VehicleInquiryViewSet, self).perform_create(serializer)
-        instance = serializer.instance
-        validated_data = serializer.validated_data
-        tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加新车询价,id=%d' % instance.id, validated_data)
+    def create(self, request, *args, **kwargs):
+        with transaction.atomic():
+            serializer = self.get_serializer(data=request.data)
+            serializer.is_valid(raise_exception=True)
+            serializer.save()
+            instance = serializer.instance
+            validated_data = serializer.validated_data
+            tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加新车询价,id=%d' % instance.id, validated_data)
 
+        return response_ok()
 
-class UsedVehicleInquiryViewSet(generics.ListAPIView):
+class UsedVehicleInquiryViewSet(generics.ListCreateAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = UsedVehicleInquiry.objects.filter(delete=False)
     serializer_class = UsedVehicleInquirySerializer
 
@@ -77,14 +93,19 @@ class UsedVehicleInquiryViewSet(generics.ListAPIView):
             return response_ok([])
         return data
 
-    def perform_create(self, serializer):
-        super(UsedVehicleInquiryViewSet, self).perform_create(serializer)
-        instance = serializer.instance
-        validated_data = serializer.validated_data
-        tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加二手车询价,id=%d' % instance.id, validated_data)
+    def create(self, request, *args, **kwargs):
+        with transaction.atomic():
+            serializer = self.get_serializer(data=request.data)
+            serializer.is_valid(raise_exception=True)
+            serializer.save()
+            instance = serializer.instance
+            validated_data = serializer.validated_data
+            tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加二手车询价,id=%d' % instance.id, validated_data)
 
+        return response_ok()
 
-class UsedVehicleEstimateViewSet(generics.ListAPIView):
+class UsedVehicleEstimateViewSet(generics.ListCreateAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = UsedVehicleEstimate.objects.filter(delete=False)
     serializer_class = UsedVehicleEstimateSerializer
 
@@ -100,14 +121,20 @@ class UsedVehicleEstimateViewSet(generics.ListAPIView):
             return response_ok([])
         return data
 
-    def perform_create(self, serializer):
-        super(UsedVehicleEstimateViewSet, self).perform_create(serializer)
-        instance = serializer.instance
-        validated_data = serializer.validated_data
-        tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加二手车预估,id=%d' % instance.id, validated_data)
+    def create(self, request, *args, **kwargs):
+        with transaction.atomic():
+            serializer = self.get_serializer(data=request.data)
+            serializer.is_valid(raise_exception=True)
+            serializer.save()
+            instance = serializer.instance
+            validated_data = serializer.validated_data
+            tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加二手车预估,id=%d' % instance.id, validated_data)
+
+        return response_ok()
 
 
-class MaintOrderReserveViewSet(generics.ListAPIView):
+class MaintOrderReserveViewSet(generics.ListCreateAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = MaintOrderReserve.objects.filter(delete=False)
     serializer_class = MaintOrderReserveSerializer
 
@@ -123,14 +150,20 @@ class MaintOrderReserveViewSet(generics.ListAPIView):
             return response_ok([])
         return data
 
-    def perform_create(self, serializer):
-        super(MaintOrderReserveViewSet, self).perform_create(serializer)
-        instance = serializer.instance
-        validated_data = serializer.validated_data
-        tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加售后预约单,id=%d' % instance.id, validated_data)
+    def create(self, request, *args, **kwargs):
+        with transaction.atomic():
+            serializer = self.get_serializer(data=request.data)
+            serializer.is_valid(raise_exception=True)
+            serializer.save()
+            instance = serializer.instance
+            validated_data = serializer.validated_data
+            tenant_log(instance.customer.user, BizLog.INSERT, u'客户添加售后预约单,id=%d' % instance.id, validated_data)
+
+        return response_ok()
 
 
 class ProductOrderViewSet(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = ProductOrder.objects.filter(delete=False)
     serializer_class = ProductOrderSerializer
 
@@ -147,7 +180,8 @@ class ProductOrderViewSet(generics.ListAPIView):
         return data
 
 
-class CustomerVehicleViewSet(generics.ListAPIView):
+class CustomerVehicleViewSet(generics.ListCreateAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = CustomerVehicle.objects.filter()
     serializer_class = CustomerVehicleSerializer
 
@@ -191,7 +225,8 @@ class CustomerVehicleViewSet(generics.ListAPIView):
         return response_ok()
 
 
-class CustomerAddressViewSet(generics.ListAPIView):
+class CustomerAddressViewSet(CustomModelViewSet):
+    permission_classes = [IsCustomerUser, ]
     queryset = CustomerAddress.objects.filter(delete=False)
     serializer_class = CustomerAddressSerializer
 

+ 20 - 0
apps/wechat/customer/xgj.py

@@ -0,0 +1,20 @@
+# coding=utf-8
+
+from django.db import transaction
+from rest_framework.views import APIView
+from rest_framework.decorators import action
+from rest_framework import generics
+from utils import response_ok
+from apps.account import tenant_log
+from apps.foundation.models import BizLog, Config
+from rest_framework.exceptions import NotFound
+
+
+class XGJ():
+    @staticmethod
+    def drive_reserve(instance): #试驾预约单
+        xgj_ip = Config.getConfigValue(Config.KEY_XGJ_IP)
+        xgj_session_key = Config.getConfigValue(Config.KEY_XGJ_SESSION_KEY)
+
+        if xgj_ip and xgj_session_key:
+            pass

+ 0 - 0
apps/wechat/maint_order/__init__.py


+ 4 - 0
apps/wechat/product/views.py

@@ -2,6 +2,7 @@
 
 from rest_framework import generics
 from rest_framework.exceptions import NotFound
+from utils.permission import IsCustomerUser
 
 from utils import response_ok
 from utils.exceptions import CustomError
@@ -15,6 +16,7 @@ from .serializers import ProductSerializer, ProductDetailSerializer, ProductType
 
 
 class ProductListView(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Product.objects.filter(delete=False)
     serializer_class = ProductSerializer
 
@@ -31,6 +33,7 @@ class ProductListView(generics.ListAPIView):
 
 
 class ProductTypeListView(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Option.objects.filter(enable=True, delete=False, type=Option.PRODUCT_CATEGORY)
     serializer_class = ProductTypeSerializer
 
@@ -47,6 +50,7 @@ class ProductTypeListView(generics.ListAPIView):
 
 
 class ProductDetailView(generics.RetrieveAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Product.objects.filter(enabled=True, delete=False)
     serializer_class = ProductDetailSerializer
 

+ 4 - 3
apps/wechat/serializers.py

@@ -74,9 +74,9 @@ class WechatLoginSerializer(serializers.Serializer):
 
             payload = jwt_payload_handler(user)
             tenant_log(user, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
-            return {
+            result = {
                 'bind': 1,
-                'token': jwt_encode_handler(payload),
+                'token': 'JWT {}'.format(jwt_encode_handler(payload)),
                 'openid': customer_wechat.openid,
                 'customer': customer_wechat.customer_id,
                 'name': customer_wechat.customer.name or '',
@@ -84,6 +84,7 @@ class WechatLoginSerializer(serializers.Serializer):
                 'face': customer_wechat.customer.face and customer_wechat.customer.face.get_path() or '',
                 'gender': customer_wechat.customer.gender or 0,
             }
+            return result
 
         else:
             msg = '参数无效'
@@ -103,7 +104,7 @@ class WechatBindSerializer(serializers.Serializer):
             tenant_log(user, BizLog.INSERT, u'用户微信登录,username=%s' % user.username)
 
             return {
-                'token': jwt_encode_handler(payload),
+                'token': 'JWT {}'.format(jwt_encode_handler(payload)),
                 'customer': customer.id or '',
                 'name': customer.name or '',
                 'tel': customer.tel or '',

+ 3 - 0
apps/wechat/store/views.py

@@ -1,6 +1,7 @@
 # coding=utf-8
 
 from rest_framework import generics
+from utils.permission import IsCustomerUser
 
 from utils import response_ok
 
@@ -10,6 +11,7 @@ from .serializers import *
 
 
 class ShopViewSet(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Shop.objects.filter(delete=False)
     serializer_class = ShopSerializer
 
@@ -24,6 +26,7 @@ class ShopViewSet(generics.ListAPIView):
 
 
 class ShopMapListView(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Shop.objects.filter(delete=False)
     serializer_class = ShopDetailSerializer
 

+ 3 - 0
apps/wechat/usedvehicle/views.py

@@ -3,6 +3,7 @@
 from rest_framework import generics
 from rest_framework.views import APIView
 from rest_framework.exceptions import NotFound
+from utils.permission import IsCustomerUser
 
 from utils import response_ok
 from utils.exceptions import CustomError
@@ -15,6 +16,7 @@ from .serializers import UsedVehicleSerializer, UsedVehicleDetailSerializer
 
 
 class UsedVehicleListView(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = UsedVehicle.objects.filter(delete=False,status=UsedVehicle.STOCK)
     serializer_class = UsedVehicleSerializer
 
@@ -45,6 +47,7 @@ class OptionTypesView(APIView):
         return response_ok(data)
 
 class UsedVehicleDetailView(generics.RetrieveAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = UsedVehicle.objects.filter(delete=False,status=UsedVehicle.STOCK)
     serializer_class = UsedVehicleDetailSerializer
 

+ 4 - 0
apps/wechat/vehicle/views.py

@@ -7,9 +7,11 @@ from utils.exceptions import CustomError
 from .serializers import SeriesSerializer, ModelSerializer, ModelDetailSerializer
 from apps.vehicle.filters import SeriesFilter, ModelFilter
 from apps.vehicle.models import Series, Model
+from utils.permission import IsCustomerUser
 
 
 class SeriesListViewSet(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Series.objects.filter(enabled=True, delete=False)
     serializer_class = SeriesSerializer
 
@@ -24,6 +26,7 @@ class SeriesListViewSet(generics.ListAPIView):
 
 
 class ModelListViewSet(generics.ListAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Model.objects.filter(enabled=True, delete=False)
     serializer_class = ModelSerializer
 
@@ -38,6 +41,7 @@ class ModelListViewSet(generics.ListAPIView):
 
 
 class ModelDetailViewSet(generics.RetrieveAPIView):
+    permission_classes = [IsCustomerUser, ]
     queryset = Model.objects.filter(enabled=True, delete=False)
     serializer_class = ModelDetailSerializer