lyh 1 rok temu
rodzic
commit
9fb2afaab5

+ 1 - 1
apps/customer/models.py

@@ -138,7 +138,7 @@ class CustomerAddress(models.Model):
     tel = models.CharField(max_length=50, verbose_name=u'电话')
     area = models.CharField(max_length=200, verbose_name=u"地区")
     addr = models.CharField(max_length=500, verbose_name=u"详细地址")
-    is_default = models.BooleanField(verbose_name=u"默认", default=False)
+    default = models.BooleanField(verbose_name=u"默认", default=False)
     delete = models.BooleanField(verbose_name=u"删除", default=False)
     create_time = models.DateTimeField(verbose_name=u"添加时间", default=timezone.now, editable=False)
 

+ 0 - 10
apps/images/models.py

@@ -62,9 +62,6 @@ class ImagesManager(models.Manager):
             Images.VEHICLE_MODEL_THUMBNAIL: vehicle_cover,
             Images.CUSTOMER_FACE: customer_face_file,
             Images.SHOP_FILE: shop_file,
-            Images.VEHICLE_LICENSE: vehicle_license,
-            Images.DRIVE_LICENSE_FRONT: vehicle_license,
-            Images.DRIVE_LICENSE_BACK: vehicle_license,
         }
 
         return path_map[type] + str(user_id) + '/'
@@ -88,7 +85,6 @@ vehicle_cover = "vehicle/"
 activity_cover = "activity/"
 customer_face_file = 'customer/face/'
 shop_file = 'store/'
-vehicle_license = 'customer/vehicle/'
 
 class Images(models.Model):
     USEDVEHICLE_FILE = 1
@@ -100,9 +96,6 @@ class Images(models.Model):
     VEHICLE_MODEL_THUMBNAIL = 7
     CUSTOMER_FACE = 8
     SHOP_FILE = 9
-    VEHICLE_LICENSE = 10
-    DRIVE_LICENSE_FRONT = 11
-    DRIVE_LICENSE_BACK = 12
     TYPE_CHOICES = (
         (USEDVEHICLE_FILE, u'二手车图片'),
         (USEDVEHICLE_THUMBNAIL, u'二手车缩略图'),
@@ -113,9 +106,6 @@ class Images(models.Model):
         (VEHICLE_MODEL_THUMBNAIL, u'车型展示图'),
         (CUSTOMER_FACE, u'客户头像'),
         (SHOP_FILE, u'门店图片'),
-        (VEHICLE_LICENSE, u'行驶证'), #不使用
-        (DRIVE_LICENSE_FRONT, u'驾驶证正面'),
-        (DRIVE_LICENSE_BACK, u'驾驶证反面'),
     )
 
     user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)

+ 2 - 3
apps/maint_order/models.py

@@ -4,7 +4,7 @@ from django.db import models
 
 from apps.foundation.models import Option
 from apps.vehicle.models import Series
-from apps.customer.models import Customer
+from apps.customer.models import Customer, CustomerVehicle
 from apps.store.models import Shop
 
 
@@ -19,8 +19,7 @@ class MaintOrderReserve(models.Model):
         (REVOKE, u'已取消'),
     )
     type = models.ForeignKey(Option, verbose_name=u'服务类型', on_delete=models.PROTECT)
-    series = models.ForeignKey(Series, verbose_name=u'车系', on_delete=models.PROTECT)
-    number = models.CharField(max_length=100, verbose_name=u'车牌号', null=True)
+    vehicle = models.ForeignKey(CustomerVehicle, verbose_name=u'车辆', on_delete=models.PROTECT)
     shop = models.ForeignKey(Shop, verbose_name=u'门店', on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=RESERVEING)

+ 1 - 2
apps/maint_order/serializers.py

@@ -6,8 +6,7 @@ from .models import MaintOrderReserve
 
 class MaintOrderReserveSerializer(serializers.ModelSerializer):
     shop_name = serializers.CharField(source='shop.name', read_only=True)
-    brand_name = serializers.CharField(source='series.brand.name', read_only=True)
-    series_name = serializers.CharField(source='series.name', read_only=True)
+    model_name = serializers.CharField(source='vehicle.model', read_only=True)
     customer_name = serializers.CharField(source='customer.name', read_only=True)
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)

+ 1 - 0
apps/product/filters.py

@@ -7,6 +7,7 @@ from .models import Product, ProductImg
 
 class ProductFilter(django_filters.FilterSet):
     id = django_filters.CharFilter(field_name='id')
+    type = django_filters.CharFilter(field_name='type')
     name = django_filters.CharFilter(field_name='name', lookup_expr='icontains')
 
     class Meta:

+ 37 - 0
apps/usedvehicle/filters.py

@@ -16,6 +16,43 @@ class UsedVehicleFilter(django_filters.FilterSet):
     seat_count = django_filters.CharFilter(field_name='seat_count')
     oil_type = django_filters.CharFilter(field_name='oil_type')
 
+    price_range = django_filters.CharFilter(method='find_base_range_price')
+    mileage_range = django_filters.CharFilter(method='find_base_range_mileage')
+    years_range = django_filters.CharFilter(method='find_base_range_years')
+
+    def find_base_range_price(self, queryset, *args):
+        if args[1]:
+            prices = args[1].split(',')
+            b_price = int(prices[0]) * 10000
+            if len(prices) > 1:
+                e_price = int(prices[1]) * 10000
+                queryset = queryset.filter(sale_price__gte=b_price, sale_price__lte=e_price)
+            else:
+                queryset = queryset.filter(sale_price__gte=b_price)
+        return queryset
+
+    def find_base_range_mileage(self, queryset, *args):
+        if args[1]:
+            mileages = args[1].split(',')
+            b_mileage = int(mileages[0]) * 10000
+            if len(mileages) > 1:
+                e_mileage = int(mileages[1]) * 10000
+                queryset = queryset.filter(mileage__gte=b_mileage, mileage__lte=e_mileage)
+            else:
+                queryset = queryset.filter(mileage__gte=b_mileage)
+        return queryset
+
+    def find_base_range_years(self, queryset, *args):
+        if args[1]:
+            years = args[1].split(',')
+            b_year = int(years[0])
+            if len(years) > 1:
+                e_year = int(years[1])
+                queryset = queryset.filter(years__gte=b_year, years__lte=e_year)
+            else:
+                queryset = queryset.filter(years__gte=b_year)
+        return queryset
+
     class Meta:
         model = UsedVehicle
         fields = '__all__'

+ 1 - 1
apps/vehicle_order/filters.py

@@ -44,11 +44,11 @@ class UsedVehicleInquiryFilter(django_filters.FilterSet):
         fields = '__all__'
 
 
-
 class UsedVehicleEstimateFilter(django_filters.FilterSet):
     name = django_filters.CharFilter(field_name='customer__name', lookup_expr='icontains')
     tel = django_filters.CharFilter(field_name='customer__tel', lookup_expr='icontains')
     brand = django_filters.CharFilter(field_name='brand')
+    shop = django_filters.CharFilter(field_name='shop')
     status = django_filters.CharFilter(field_name='status')
     id = django_filters.CharFilter(field_name='id')
     customer = django_filters.CharFilter(field_name='customer')

+ 1 - 4
apps/vehicle_order/models.py

@@ -27,10 +27,6 @@ class VehicleDriveReserve(models.Model):
     name = models.CharField(max_length=100, verbose_name=u'名称', null=True)
     tel = models.CharField(max_length=20, verbose_name=u'电话', null=True)
     date = models.DateField(verbose_name=u'预约日期', null=True)
-    img1 = models.ForeignKey(Images, verbose_name=u'驾驶证正面', on_delete=models.PROTECT,
-                                  related_name=u'vehicle_drive_reserve_front', null=True)
-    img2 = models.ForeignKey(Images, verbose_name=u'驾驶证反面', on_delete=models.PROTECT,
-                                  related_name=u'vehicle_drive_reserve_back', null=True)
     notes = models.CharField(max_length=500, verbose_name=u'备注', null=True)
     delete = models.BooleanField(verbose_name=u'删除', default=False, editable=False)
 
@@ -101,6 +97,7 @@ class UsedVehicleEstimate(models.Model):
         (VISITED, u'已回访'),
     )
     brand = models.ForeignKey(Option, verbose_name=u'品牌', on_delete=models.PROTECT)
+    shop = models.ForeignKey(Shop, verbose_name=u'门店', on_delete=models.PROTECT)
     create_time = models.DateTimeField(verbose_name=u"添加时间", auto_now_add=True, editable=False)
     status = models.PositiveSmallIntegerField(choices=STATUS_CHOICES, verbose_name=u'状态', default=WAIT_VISIT)
     customer = models.ForeignKey(Customer, verbose_name=u'客户', on_delete=models.PROTECT, editable=False)

+ 1 - 12
apps/vehicle_order/serializers.py

@@ -15,18 +15,6 @@ class VehicleDriveReserveSerializer(serializers.ModelSerializer):
     status_text = serializers.CharField(source='get_status_display', read_only=True)
     create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
     date = serializers.DateField(format='%Y-%m-%d')
-    img1_url = serializers.SerializerMethodField()
-    img2_url = serializers.SerializerMethodField()
-
-    def get_img1_url(self, obj):
-        if obj.img1:
-            return '%s%s' % (settings.MEDIA_URL, obj.img1.picture)
-        return ''
-
-    def get_img2_url(self, obj):
-        if obj.img2:
-            return '%s%s' % (settings.MEDIA_URL, obj.img2.picture)
-        return ''
 
     class Meta:
         model = VehicleDriveReserve
@@ -65,6 +53,7 @@ class UsedVehicleInquirySerializer(serializers.ModelSerializer):
 
 
 class UsedVehicleEstimateSerializer(serializers.ModelSerializer):
+    shop_name = serializers.CharField(source='shop.name', read_only=True)
     brand_name = serializers.CharField(source='brand.name', read_only=True)
     customer_name = serializers.CharField(source='customer.name', read_only=True)
     customer_tel = serializers.CharField(source='customer.tel', read_only=True)

+ 53 - 1
apps/wechat/customer/serializers.py

@@ -7,13 +7,21 @@ from apps.vehicle_order.models import *
 from apps.product_order.models import *
 from apps.base import Formater
 from utils.exceptions import CustomError
+from apps.maint_order.models import MaintOrderReserve
 
 
 class CustomerVehicleSerializer(serializers.ModelSerializer):
+
     class Meta:
         model = CustomerVehicle
         fields = '__all__'
 
+    def create(self, validated_data):
+        customer = self.context['request'].customer
+        validated_data['customer'] = customer
+        instance = super(CustomerVehicleSerializer, self).create(validated_data)
+        return instance
+
 class CustomerAddressSerializer(serializers.ModelSerializer):
     full_addr = serializers.SerializerMethodField()
 
@@ -29,7 +37,7 @@ class CustomerAddressSerializer(serializers.ModelSerializer):
         customer = self.context['request'].customer
         validated_data['customer'] = customer
         if validated_data['default']:
-            CustomerAddress.objects.filter(Q(customer=customer), Q(delete=False)).update(default=False)
+            CustomerAddress.objects.filter(customer=customer).update(default=False)
         instance = super(CustomerAddressSerializer, self).create(validated_data)
         return instance
 
@@ -91,6 +99,12 @@ class VehicleDriveReserveSerializer(serializers.ModelSerializer):
         model = VehicleDriveReserve
         fields = '__all__'
 
+    def create(self, validated_data):
+        customer = self.context['request'].customer
+        validated_data['customer'] = customer
+        instance = super(VehicleDriveReserveSerializer, self).create(validated_data)
+        return instance
+
 
 class VehicleInquirySerializer(serializers.ModelSerializer):
     shop_name = serializers.CharField(source='shop.name', read_only=True)
@@ -109,6 +123,12 @@ class VehicleInquirySerializer(serializers.ModelSerializer):
         model = VehicleInquiry
         fields = '__all__'
 
+    def create(self, validated_data):
+        customer = self.context['request'].customer
+        validated_data['customer'] = customer
+        instance = super(VehicleInquirySerializer, self).create(validated_data)
+        return instance
+
 
 class UsedVehicleInquirySerializer(serializers.ModelSerializer):
     brand_name = serializers.CharField(source='brand.name', read_only=True)
@@ -122,6 +142,12 @@ class UsedVehicleInquirySerializer(serializers.ModelSerializer):
         model = UsedVehicleInquiry
         fields = '__all__'
 
+    def create(self, validated_data):
+        customer = self.context['request'].customer
+        validated_data['customer'] = customer
+        instance = super(UsedVehicleInquirySerializer, self).create(validated_data)
+        return instance
+
 
 class UsedVehicleEstimateSerializer(serializers.ModelSerializer):
     brand_name = serializers.CharField(source='brand.name', read_only=True)
@@ -135,3 +161,29 @@ class UsedVehicleEstimateSerializer(serializers.ModelSerializer):
         model = UsedVehicleEstimate
         fields = '__all__'
 
+    def create(self, validated_data):
+        customer = self.context['request'].customer
+        validated_data['customer'] = customer
+        instance = super(UsedVehicleEstimateSerializer, self).create(validated_data)
+        return instance
+
+
+class MaintOrderReserveSerializer(serializers.ModelSerializer):
+    shop_name = serializers.CharField(source='shop.name', read_only=True)
+    model_name = serializers.CharField(source='vehicle.model', read_only=True)
+    customer_name = serializers.CharField(source='customer.name', read_only=True)
+    status_text = serializers.CharField(source='get_status_display', read_only=True)
+    create_time = serializers.DateTimeField(format='%Y-%m-%d %H:%M', read_only=True)
+    date = serializers.DateField(format='%Y-%m-%d')
+
+    class Meta:
+        model = MaintOrderReserve
+        fields = '__all__'
+
+
+    def create(self, validated_data):
+        customer = self.context['request'].customer
+        validated_data['customer'] = customer
+        instance = super(MaintOrderReserveSerializer, self).create(validated_data)
+        return instance
+

+ 3 - 1
apps/wechat/customer/urls.py

@@ -11,6 +11,8 @@ urlpatterns = [
     url(r'^usedvehicle_inquiry/$', UsedVehicleInquiryViewSet.as_view()),
     url(r'^usedvehicle_estimate/$', UsedVehicleEstimateViewSet.as_view()),
     url(r'^product_order/$', ProductOrderViewSet.as_view()),
-    url(r'^vehicles/$', CustomerVehicleViewSet.as_view()),
+    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()),
 ]

+ 94 - 12
apps/wechat/customer/views.py

@@ -1,7 +1,7 @@
 # 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
@@ -13,6 +13,7 @@ from .serializers import *
 from apps.customer.filters import *
 from apps.vehicle_order.filters import *
 from apps.product_order.filters import *
+from apps.maint_order.filters import *
 
 
 class VehicleDriveReserveViewSet(generics.ListAPIView):
@@ -20,6 +21,7 @@ class VehicleDriveReserveViewSet(generics.ListAPIView):
     serializer_class = VehicleDriveReserveSerializer
 
     def filter_queryset(self, queryset):
+        queryset = queryset.filter(customer=self.request.customer)
         f = VehicleDriveReserveFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -30,12 +32,18 @@ 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)
 
 class VehicleInquiryViewSet(generics.ListAPIView):
     queryset = VehicleInquiry.objects.filter(delete=False)
     serializer_class = VehicleInquirySerializer
 
     def filter_queryset(self, queryset):
+        queryset = queryset.filter(customer=self.request.customer)
         f = VehicleInquiryFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -46,12 +54,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)
+
 
 class UsedVehicleInquiryViewSet(generics.ListAPIView):
     queryset = UsedVehicleInquiry.objects.filter(delete=False)
     serializer_class = UsedVehicleInquirySerializer
 
     def filter_queryset(self, queryset):
+        queryset = queryset.filter(customer=self.request.customer)
         f = UsedVehicleInquiryFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -62,12 +77,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)
+
 
 class UsedVehicleEstimateViewSet(generics.ListAPIView):
     queryset = UsedVehicleEstimate.objects.filter(delete=False)
     serializer_class = UsedVehicleEstimateSerializer
 
     def filter_queryset(self, queryset):
+        queryset = queryset.filter(customer=self.request.customer)
         f = UsedVehicleEstimateFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -78,12 +100,42 @@ 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)
+
+
+class MaintOrderReserveViewSet(generics.ListAPIView):
+    queryset = MaintOrderReserve.objects.filter(delete=False)
+    serializer_class = MaintOrderReserveSerializer
+
+    def filter_queryset(self, queryset):
+        queryset = queryset.filter(customer=self.request.customer)
+        f = MaintOrderReserveFilter(self.request.GET, queryset=queryset)
+        return f.qs
+
+    def list(self, request, *args, **kwargs):
+        try:
+            data = super(MaintOrderReserveViewSet, self).list(request)
+        except NotFound:
+            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)
+
 
 class ProductOrderViewSet(generics.ListAPIView):
     queryset = ProductOrder.objects.filter(delete=False)
     serializer_class = ProductOrderSerializer
 
     def filter_queryset(self, queryset):
+        queryset = queryset.filter(customer=self.request.customer)
         f = ProductOrderFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -100,7 +152,7 @@ class CustomerVehicleViewSet(generics.ListAPIView):
     serializer_class = CustomerVehicleSerializer
 
     def filter_queryset(self, queryset):
-        queryset = queryset.filter()
+        queryset = queryset.filter(customer=self.request.customer)
         f = CustomerVehicleFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -111,13 +163,40 @@ class CustomerVehicleViewSet(generics.ListAPIView):
             return response_ok([])
         return data
 
+    def perform_create(self, serializer):
+        super(CustomerVehicleViewSet, 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)
+
+    @action(methods=['post'], detail=True)
+    def vehicle_update(self, request, *args, **kwargs):
+        with transaction.atomic():
+            instance = self.get_object()
+            serializer = self.get_serializer(instance, 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.UPDATE, u'客户修改车辆信息,id=%d' % instance.id, validated_data)
+        return response_ok()
+
+    @action(methods=['get'], detail=True)
+    def addr_destroy(self, request, *args, **kwargs):
+        with transaction.atomic():
+            instance = self.get_object()
+            queryset = self.get_queryset().filter(customer=self.request.customer).exclude(id=instance.id)
+            instance.destory(queryset)
+            tenant_log(instance.customer.user, BizLog.INSERT, u'客户删除车辆信息,id=%d' % instance.id)
+        return response_ok()
+
 
 class CustomerAddressViewSet(generics.ListAPIView):
     queryset = CustomerAddress.objects.filter(delete=False)
     serializer_class = CustomerAddressSerializer
 
     def filter_queryset(self, queryset):
-        queryset = queryset.filter()
+        queryset = queryset.filter(customer=self.request.customer)
         f = CustomerAddressFilter(self.request.GET, queryset=queryset)
         return f.qs
 
@@ -143,6 +222,10 @@ class CustomerAddressViewSet(generics.ListAPIView):
             serializer.save()
             instance = serializer.instance
             validated_data = serializer.validated_data
+
+            if instance.default:
+                CustomerAddress.objects.filter(Q(customer=request.customer, delete=False), ~Q(id=instance.id)).update(default=False)
+
             tenant_log(instance.customer.user, BizLog.UPDATE, u'客户修改收货地址,id=%d' % instance.id, validated_data)
         return response_ok()
 
@@ -155,12 +238,11 @@ class CustomerAddressViewSet(generics.ListAPIView):
             tenant_log(instance.customer.user, BizLog.INSERT, u'客户删除收货地址,id=%d' % instance.id)
         return response_ok()
 
-    @action(methods=['get'], detail=True)
-    def set_default(self, request, *args, **kwargs):
-        with transaction.atomic():
-            instance = self.get_object()
-            self.get_queryset().filter(customer=self.request.customer, default=True).update(default=False)
-            instance.default = True
-            instance.save()
-            tenant_log(instance.customer.user, BizLog.INSERT, u'客户设置默认收货地址,id=%d' % instance.id)
-        return response_ok()
+
+class MaintReserveOptionsView(APIView):
+    def get(self, request):
+        data = {
+            'maint_types': Option.objects.filter(type=Option.MAINT_TYPE, delete=False, enable=True).values('id', 'name'), #品牌
+            'vehicles': CustomerVehicle.objects.filter(customer=request.customer, delete=False).values('id', 'number') #车辆
+        }
+        return response_ok(data)

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


+ 7 - 10
apps/wechat/product/serializers.py

@@ -9,23 +9,23 @@ from apps.foundation.models import Option
 
 class ProductSerializer(serializers.ModelSerializer):
     cover_url = serializers.SerializerMethodField()
-    price = serializers.SerializerMethodField()
+    price_f = serializers.SerializerMethodField()
 
     def get_cover_url(self, obj):
         if obj.cover:
             return {'width': obj.cover.width, 'height': obj.cover.height, 'url': obj.cover.get_path()}
         return ''
 
-    def get_price(self, obj):
+    def get_price_f(self, obj):
         return Formater.formatPriceShow(obj.price)
 
     class Meta:
         model = Product
-        fields = ('id', 'cover_url', 'name', 'notes', 'price')
+        fields = '__all__'
 
 
 class ProductDetailSerializer(serializers.ModelSerializer):
-    price = serializers.SerializerMethodField()
+    price_f = serializers.SerializerMethodField()
     Product_images = serializers.SerializerMethodField()
     has_cover = serializers.SerializerMethodField()
     cover = serializers.SerializerMethodField()
@@ -48,15 +48,12 @@ class ProductDetailSerializer(serializers.ModelSerializer):
             result.append(url)
         return result
 
-    def get_price(self, obj):
-        return Formater.formatAmountShow(obj.discount_price)
+    def get_price_f(self, obj):
+        return Formater.formatAmountShow(obj.price)
 
     class Meta:
         model = Product
-        fields = (
-            'id', 'name', 'Product_images', 'describe',
-            'notes', 'has_cover', 'give_count', 'cover'
-        )
+        fields = '__all__'
 
 
 class ProductTypeSerializer(serializers.ModelSerializer):

+ 10 - 2
apps/wechat/store/serializers.py

@@ -1,20 +1,28 @@
 # coding=utf-8
 
 from rest_framework import serializers
-from apps.store.models import Shop
+from apps.store.models import Shop, StoreBrand
 
 
 class ShopSerializer(serializers.ModelSerializer):
     img = serializers.SerializerMethodField()
+    brand_text = serializers.SerializerMethodField()
 
     def get_img(self, obj):
         if obj.img:
             return {'width': obj.img.width, 'height': obj.img.height, 'url': obj.img.get_path()}
         return ''
 
+    def get_brand_text(self, obj):
+        brand_rows = StoreBrand.objects.filter(store=obj)
+        data = []
+        for brand_row in brand_rows:
+            data.append(brand_row.brand.name)
+        return ','.join(data)
+
     class Meta:
         model = Shop
-        fields = ('id', 'name', 'addr', 'img', )
+        fields = '__all__'
 
 
 class ShopDetailSerializer(serializers.ModelSerializer):

+ 1 - 7
apps/wechat/usedvehicle/serializers.py

@@ -55,10 +55,4 @@ class UsedVehicleDetailSerializer(serializers.ModelSerializer):
 
     class Meta:
         model = UsedVehicle
-        fields = '__all__'
-
-class UsedVehicleOptionSerializer(serializers.ModelSerializer):
-
-    class Meta:
-        model = Option
-        fields = ('id', 'name')
+        fields = '__all__'

+ 8 - 7
apps/wechat/usedvehicle/views.py

@@ -11,7 +11,7 @@ from apps.usedvehicle.filters import UsedVehicleFilter
 from apps.foundation.models import Option
 from apps.usedvehicle.models import UsedVehicle
 
-from .serializers import UsedVehicleSerializer, UsedVehicleDetailSerializer, UsedVehicleOptionSerializer
+from .serializers import UsedVehicleSerializer, UsedVehicleDetailSerializer
 
 
 class UsedVehicleListView(generics.ListAPIView):
@@ -34,12 +34,13 @@ class OptionTypesView(APIView):
     def get(self, request):
         rows = Option.objects.filter(delete=False, enable=True).order_by('type')
         data = {
-            'gearboxs': rows.filter(type=Option.VEHICLE_GEARBOX).values('id', 'name'),
-            'colors': rows.filter(type=Option.VEHICLE_COLOR).values('id', 'name'),
-            'displacements': rows.filter(type=Option.VEHICLE_DISPLACEMENT).values('id', 'name'),
-            'emissions': rows.filter(type=Option.VEHICLE_EMISSION).values('id', 'name'),
-            'seat_counts': rows.filter(type=Option.VEHICLE_SEAT_COUNT).values('id', 'name'),
-            'oil_types': rows.filter(type=Option.VEHICLE_OIL).values('id', 'name'),
+            'brands': rows.filter(type=Option.USED_VEHICLE_BRAND).values('id', 'name'), #品牌
+            'gearboxs': rows.filter(type=Option.VEHICLE_GEARBOX).values('id', 'name'), #汽车变速箱
+            'colors': rows.filter(type=Option.VEHICLE_COLOR).values('id', 'name'),#颜色
+            'displacements': rows.filter(type=Option.VEHICLE_DISPLACEMENT).values('id', 'name'), #排量
+            'emissions': rows.filter(type=Option.VEHICLE_EMISSION).values('id', 'name'),#排放标准
+            'seat_counts': rows.filter(type=Option.VEHICLE_SEAT_COUNT).values('id', 'name'),#座位数
+            'oil_types': rows.filter(type=Option.VEHICLE_OIL).values('id', 'name'),#燃油类型
         }
         return response_ok(data)
 

+ 3 - 21
apps/wechat/vehicle/serializers.py

@@ -21,27 +21,9 @@ class SeriesSerializer(serializers.ModelSerializer):
 
 
 class ModelSerializer(serializers.ModelSerializer):
-    series_name = serializers.CharField(source='series.name', read_only=True)
-    brand_name = serializers.CharField(source='series.brand.name', read_only=True)
-    img_url = serializers.SerializerMethodField()
-    images = serializers.SerializerMethodField()
     price = PriceShowCharField()
     sale_price = PriceShowCharField()
 
-    def get_img_url(self, obj):
-        if obj.thumbnail:
-            return {'width': obj.thumbnail.width, 'height': obj.thumbnail.height, 'url': obj.thumbnail.get_path()}
-        return ''
-
-    def get_images(self, obj):
-        result = []
-        rows = VehicleImg.objects.filter(vehicle_model=obj).values('img__picture', 'img__width', 'img__height')
-        for row in rows:
-            url = {'width': row['img__width'], 'height': row['img__height'],
-                   'url': '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, row['img__picture'])}
-            result.append(url)
-        return result
-
     class Meta:
         model = Model
         fields = '__all__'
@@ -72,9 +54,9 @@ class ModelDetailSerializer(serializers.ModelSerializer):
 
     def get_stores(self, obj):
         result = []
-        store_rows = StoreBrand.objects.filter(brand_id=obj.series.brand_id).values('shop_id')
-        shop_ids = [store_row['shop_id'] for store_row in store_rows]
-        rows = Shop.objects.filter(id__in=shop_ids, delete=False, enabled=False)
+        store_rows = StoreBrand.objects.filter(brand_id=obj.series.brand_id).values('store_id')
+        shop_ids = [store_row['store_id'] for store_row in store_rows]
+        rows = Shop.objects.filter(id__in=shop_ids, delete=False, enabled=True)
         for row in rows:
             item = {'name': row.name, 'addr': row.addr, 'tel': row.tel, 'img': ''}
             if row.img:

+ 1 - 1
apps/wechat/vehicle/views.py

@@ -37,7 +37,7 @@ class ModelListViewSet(generics.ListAPIView):
         return response_ok(serializer.data)
 
 
-class ModelDetailViewSet(generics.ListAPIView):
+class ModelDetailViewSet(generics.RetrieveAPIView):
     queryset = Model.objects.filter(enabled=True, delete=False)
     serializer_class = ModelDetailSerializer
 

+ 2 - 2
uis/views/index.html

@@ -83,9 +83,9 @@
                 <cite>二手车作业</cite>
               </a>
               <dl class="layui-nav-child">
-                <dd data-name="button">
+                <!--<dd data-name="button">
                   <a lay-href="vehicle_order/usedvehicle_inquiry.html">询价管理</a>
-                </dd>
+                </dd>-->
                 <dd data-name="button">
                   <a lay-href="vehicle_order/usedvehicle_estimate.html">置换预估</a>
                 </dd>

+ 1 - 2
uis/views/miant_order/reserve.html

@@ -104,8 +104,7 @@
         {field:'shop_name', title:'门店',width: 100}
        ,{field:'status_text', title:'状态',width: 100}
        ,{field:'customer_name', title:'客户',width: 100}
-       ,{field:'brand_name', title:'品牌',width: 100}
-       ,{field:'series_name', title:'车系',width: 100}
+       ,{field:'model_name', title:'车型',width: 100}
        ,{field:'name', title:'预约人',width: 100}
        ,{field:'tel', title:'电话',width: 120}
        ,{field:'date', title:'预约日期',width: 150}

+ 2 - 2
uis/views/vehicle_model/index.html

@@ -83,8 +83,8 @@
         {field:'brand_name', title:'品牌',width: 100}
         ,{field:'series_name', title:'车系',width: 150}
        ,{field:'name', title:'车型',width: 150}
-       ,{field:'price', align:'right', title:'指导价',width: 80}
-       ,{field:'sale_price', align:'right', title:'售价',width: 80}
+       ,{field:'price', align:'right', title:'指导价',width: 120}
+       ,{field:'sale_price', align:'right', title:'售价',width: 120}
        ,{field:'engine', title:'发动机',width: 100}
        ,{field:'car_body', title:'车身结构',width: 150}
        ,{field:'transmission', title:'变速箱',width: 200}

+ 1 - 2
uis/views/vehicle_order/drive_reserve.html

@@ -60,7 +60,6 @@
 
             <script type="text/html" id="datagrid-operate-bar">
                 <div class="layui-btn-group">
-                    <a class="layui-btn layui-btn-xs" lay-event="images">驾证</a>
                     <a class="layui-btn layui-btn-xs" lay-event="finish">完成</a>
                     <a class="layui-btn layui-btn-danger layui-btn-xs" lay-event="revoke">取消</a>
                 </div>
@@ -113,7 +112,7 @@
        ,{field:'date', title:'预约日期',width: 150}
        ,{field:'create_time', title:'创建时间',width: 150}
        ,{field:'notes', title:'备注',width: 150}
-        ,{width:150, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
+        ,{width:120, align:'center', fixed: 'right', toolbar: '#datagrid-operate-bar'}
       ]]
       ,page: true
       ,height: 'full-108'

+ 5 - 4
uis/views/vehicle_order/usedvehicle_estimate.html

@@ -99,12 +99,13 @@
       elem: '#datagrid'
       ,url: '/vehicle_order/usedvehicle_estimate/'
       ,cols: [[
-        {field:'brand_name', title:'品牌',width: 100},
-            {field:'model', title:'车型',width: 100}
+        {field:'shop_name', title:'门店',width: 100}
+       ,{field:'brand_name', title:'品牌',width: 100}
+       ,{field:'model', title:'车型',width: 100}
        ,{field:'status_text', title:'状态',width: 100}
        ,{field:'customer_name', title:'客户',width: 100}
-        ,{field:'customer_tel', title:'电话',width: 120}
-        ,{field:'plate_date', title:'上牌日期',width: 120}
+       ,{field:'customer_tel', title:'电话',width: 120}
+       ,{field:'plate_date', title:'上牌日期',width: 120}
        ,{field:'area', title:'地区',width: 150}
        ,{field:'mileage', title:'里程',width: 150}
        ,{field:'create_time', title:'创建时间',width: 150}