123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309 |
- # coding=utf-8
- import json
- import ast
- from django.db import transaction
- from rest_framework.decorators import action
- from rest_framework.views import APIView
- from django.db.models import Q
- from utils import response_ok
- from utils.permission import permission_required, isLogin
- from utils.custom_modelviewset import CustomModelViewSet
- from utils.exceptions import CustomError
- from apps.images.models import Images
- from apps.vehicle.models import Brand, Series, Model, VehicleModelImg, VehicleImg
- from apps.vehicle.filters import BrandFilter, SeriesFilter, ModelFilter, VehicleImgFilter, VehicleModelImgFilter
- from .serializers import BrandSerializer, SeriesSerializer, ModelSerializer, VehicleImgSerializer, VehicleModelImgSerializer
- from apps.account import tenant_log
- from apps.foundation.models import BizLog
- class DictView(APIView):
- permission_classes = [isLogin, ]
- def get(self, request):
- ret = {
- 'brand': BrandSerializer(Brand.objects.filter(delete=False, enabled=True, ), many=True).data,
- 'series': SeriesSerializer(Series.objects.filter(delete=False, enabled=True, ), many=True).data
- }
- return response_ok(ret)
- class VehicleBrandViewSet(CustomModelViewSet):
- permission_classes = [isLogin, ]
- queryset = Brand.objects.filter(delete=False)
- serializer_class = BrandSerializer
- def filter_queryset(self, queryset):
- # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
- f = BrandFilter(self.request.GET, queryset=queryset)
- return f.qs
- def perform_create(self, serializer):
- super(VehicleBrandViewSet, self).perform_create(serializer)
- instance = serializer.instance
- validated_data = serializer.validated_data
- tenant_log(self.request.user, BizLog.INSERT, u'添加整车品牌[%s],id=%d' % (instance.name, instance.id),validated_data)
- def perform_update(self, serializer):
- super(VehicleBrandViewSet, self).perform_update(serializer)
- instance = serializer.instance
- validated_data = serializer.validated_data
- tenant_log(self.request.user, BizLog.UPDATE, u'修改整车品牌[%s],id=%d' % (instance.name, instance.id), validated_data)
- def destroy(self, request, *args, **kwargs):
- with transaction.atomic():
- instance = self.get_object()
- instance.delete = True
- instance.save()
- tenant_log(self.request.user, BizLog.DELETE, u'删除整车品牌[%s],id=%d' % (instance.name, instance.id))
- return response_ok()
- class VehicleSeriesViewSet(CustomModelViewSet):
- permission_classes = [isLogin, ]
- queryset = Series.objects.filter(delete=False, brand__delete=False)
- serializer_class = SeriesSerializer
- def filter_queryset(self, queryset):
- # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
- f = SeriesFilter(self.request.GET, queryset=queryset)
- return f.qs
- def perform_create(self, serializer):
- super(VehicleSeriesViewSet, self).perform_create(serializer)
- instance = serializer.instance
- validated_data = serializer.validated_data
- tenant_log(self.request.user, BizLog.INSERT, u'添加整车车系[%s],id=%d' % (instance.name, instance.id),validated_data)
- def destroy(self, request, *args, **kwargs):
- with transaction.atomic():
- instance = self.get_object()
- instance.delete = True
- instance.save()
- tenant_log(self.request.user, BizLog.DELETE, u'删除整车车系[%s],id=%d' % (instance.name, instance.id))
- return response_ok()
- @action(methods=['post'], detail=True)
- def update_series(self, request, pk):
- file = request.FILES.get('image', None)
- user = request.user
- instance = self.get_object()
- if instance.delete:
- raise CustomError(u'该车系已删除,禁止操作!')
- with transaction.atomic():
- serializer = self.get_serializer(instance, data=request.data)
- serializer.is_valid(raise_exception=True)
- self.perform_update(serializer)
- tenant_log(user, BizLog.UPDATE, u'修改车系[%s], id=%d' % (instance.name, instance.id), request.data)
- if file:
- old_thumbnail = instance.thumbnail
- thumbnail = Images.objects.employee_addnew(user, Images.VEHICLE_SERIES_THUMBNAIL, file)
- instance.thumbnail = thumbnail
- instance.save()
- if old_thumbnail:
- old_thumbnail.del_images()
- return response_ok()
- class VehicleModelViewSet(CustomModelViewSet):
- permission_classes = [isLogin, ]
- queryset = Model.objects.filter(delete=False, series__delete=False, series__brand__delete=False)
- serializer_class = ModelSerializer
- def filter_queryset(self, queryset):
- # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
- f = ModelFilter(self.request.GET, queryset=queryset)
- return f.qs
- def perform_create(self, serializer):
- super(VehicleModelViewSet, self).perform_create(serializer)
- instance = serializer.instance
- validated_data = serializer.validated_data
- tenant_log(self.request.user, BizLog.INSERT, u'添加整车型号[%s],id=%d' % (instance.name, instance.id),validated_data)
- def destroy(self, request, *args, **kwargs):
- with transaction.atomic():
- instance = self.get_object()
- instance.delete = True
- instance.save()
- tenant_log(self.request.user, BizLog.DELETE, u'删除整车型号[%s],id=%d' % (instance.name, instance.id))
- return response_ok()
- @action(methods=['post'], detail=True)
- def update_model(self, request, pk):
- if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
- raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
- instance = self.get_object()
- user = request.user
- thumbnail = request.FILES.get('image', None)
- tags = request.POST.get('tags')
- if instance.delete:
- raise CustomError(u'该车型已被删除,禁止操作!')
- with transaction.atomic():
- serializer = self.get_serializer(instance, data=request.data)
- serializer.is_valid(raise_exception=True)
- self.perform_update(serializer)
- tenant_log(self.request.user, BizLog.UPDATE, u'修改整车型号[%s],id=%d' % (instance.name, instance.id), request.data)
- if thumbnail:
- old_thumbnail = instance.thumbnail
- thumbnail = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_THUMBNAIL, thumbnail)
- instance.thumbnail = thumbnail
- instance.save()
- if old_thumbnail:
- old_thumbnail.del_images()
- return response_ok()
- @action(methods=['post'], detail=True)
- def upload_playbill(self, request, pk):
- # 整车上传海报
- if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
- raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
- playbill = request.FILES.get('image', None)
- user = request.user
- vehicle_model = self.get_object()
- if vehicle_model.delete:
- raise CustomError(u'该整车型号已删除,禁止操作!')
- if not playbill:
- raise CustomError(u'未找到上传文件!')
- with transaction.atomic():
- tenant_log(user, BizLog.UPDATE, u'车型[%s]上传海报, id=%d' % (vehicle_model.name, vehicle_model.id))
- old_playbill = vehicle_model.playbill
- playbill = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_PLAYBILL, playbill)
- vehicle_model.playbill = playbill
- vehicle_model.save()
- if old_playbill:
- old_playbill.del_images()
- return response_ok()
- @action(methods=['post'], detail=True)
- def set_vehicle_img(self, request, pk):
- # 设置整车图片
- if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
- raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
- image = request.FILES.get('images', None)
- vehicle_model = self.get_object()
- if vehicle_model.delete:
- raise CustomError(u'该整车型号已删除,禁止操作!')
- if not image:
- raise CustomError(u'未找到上传文件!')
- with transaction.atomic():
- image = Images.objects.employee_addnew(request.user, Images.VEHICLE_IMAGES, image)
- VehicleImg.objects.create(vehicle_model=vehicle_model, img=image)
- tenant_log(request.user, BizLog.DELETE, u'车型[%s]上传整车图片儿,id=%d' % (vehicle_model.name, vehicle_model.id))
- return response_ok()
- @action(methods=['post'], detail=True)
- def set_model_img(self, request, pk):
- if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
- raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
- image = request.FILES.get('images', None)
- type_id = request.POST.get('type')
- user = request.user
- vehicle_model = self.get_object()
- if vehicle_model.delete:
- raise CustomError(u'该整车型号已删除,禁止操作!')
- if not image:
- raise CustomError(u'未找到上传文件!')
- with transaction.atomic():
- img = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_IMAGES, image)
- VehicleModelImg.objects.create(vehicle_model=vehicle_model, img=img)
- tenant_log(request.user, BizLog.INSERT, u'车型[%s]上传车型分类图片儿,id=%d' % (vehicle_model.name, vehicle_model.id))
- return response_ok()
- class VehicleImageViewSet(CustomModelViewSet):
- permission_classes = [isLogin, ]
- queryset = VehicleImg.objects.filter()
- serializer_class = VehicleImgSerializer
- def filter_queryset(self, queryset):
- f = VehicleImgFilter(self.request.GET, queryset=queryset)
- return f.qs
- def list(self, request, *args, **kwargs):
- queryset = self.filter_queryset(self.get_queryset())
- serializer = self.get_serializer(queryset, many=True)
- return response_ok(serializer.data)
- def destroy(self, request, *args, **kwargs):
- with transaction.atomic():
- instance = self.get_object()
- tenant_log(self.request.user, BizLog.DELETE, u'删除车型[%s]整车图片,id=%d' % (instance.vehicle_model.name, instance.vehicle_model.id))
- img = instance.img
- instance.delete()
- img.del_images()
- return response_ok()
- class VehicleModelImageViewSet(CustomModelViewSet):
- permission_classes = [isLogin, ]
- queryset = VehicleModelImg.objects.filter()
- serializer_class = VehicleModelImgSerializer
- def filter_queryset(self, queryset):
- f = VehicleModelImgFilter(self.request.GET, queryset=queryset)
- return f.qs
- def list(self, request, *args, **kwargs):
- queryset = self.filter_queryset(self.get_queryset())
- serializer = self.get_serializer(queryset, many=True)
- return response_ok(serializer.data)
- def destroy(self, request, *args, **kwargs):
- with transaction.atomic():
- instance = self.get_object()
- tenant_log(self.request.user, BizLog.DELETE, u'删除车型[%s]车型图片,id=%d' % (instance.vehicle_model.name, instance.vehicle_model.id))
- img = instance.img
- instance.delete()
- img.del_images()
- return response_ok()
- class VehicleSeriesSearch(APIView):
- permission_classes = [isLogin, ]
- def get(self, request):
- keyword = request.GET.get('keywords')
- rows = Series.objects.filter(delete=False, enabled=True, brand__delete=False, brand__enabled=True)
- if keyword:
- rows = rows.filter(
- Q(name__icontains=keyword) |
- Q(brand__name__icontains=keyword)
- )
- serializer = SeriesSerializer(rows, many=True)
- return response_ok(serializer.data)
- class VehicleModelSearch(APIView):
- permission_classes = [isLogin, ]
- def get(self, request):
- keyword = request.GET.get('keyword')
- rows = Model.objects.filter(
- delete=False, enabled=True, series__delete=False, series__enabled=True, series__brand__delete=False,
- series__brand__enabled=True,
- )
- if keyword:
- rows = rows.filter(
- Q(name__icontains=keyword) |
- Q(series__brand__name__icontains=keyword)|
- Q(series__name__icontains=keyword)
- )
- serializer = ModelSerializer(rows, many=True)
- return response_ok(serializer.data)
|