views.py 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302
  1. # coding=utf-8
  2. from django.db import transaction
  3. from rest_framework.decorators import action
  4. from rest_framework.views import APIView
  5. from django.db.models import Q
  6. from utils import response_ok
  7. from utils.permission import isLogin
  8. from utils.custom_modelviewset import CustomModelViewSet
  9. from utils.exceptions import CustomError
  10. from apps.images.models import Images
  11. from apps.vehicle.models import Brand, Series, Model, VehicleImg
  12. from apps.vehicle.filters import BrandFilter, SeriesFilter, ModelFilter, VehicleImgFilter
  13. from .serializers import BrandSerializer, SeriesSerializer, ModelSerializer, VehicleImgSerializer
  14. from apps.account import tenant_log
  15. from apps.foundation.models import BizLog
  16. class DictView(APIView):
  17. permission_classes = [isLogin, ]
  18. def get(self, request):
  19. ret = {
  20. 'brand': BrandSerializer(Brand.objects.filter(delete=False, enabled=True, ), many=True).data,
  21. 'series': SeriesSerializer(Series.objects.filter(delete=False, enabled=True, ), many=True).data
  22. }
  23. return response_ok(ret)
  24. class VehicleBrandViewSet(CustomModelViewSet):
  25. permission_classes = [isLogin, ]
  26. queryset = Brand.objects.filter(delete=False)
  27. serializer_class = BrandSerializer
  28. def filter_queryset(self, queryset):
  29. # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  30. f = BrandFilter(self.request.GET, queryset=queryset)
  31. return f.qs
  32. def perform_create(self, serializer):
  33. super(VehicleBrandViewSet, self).perform_create(serializer)
  34. instance = serializer.instance
  35. validated_data = serializer.validated_data
  36. tenant_log(self.request.user, BizLog.INSERT, u'添加整车品牌[%s],id=%d' % (instance.name, instance.id),validated_data)
  37. def perform_update(self, serializer):
  38. super(VehicleBrandViewSet, self).perform_update(serializer)
  39. instance = serializer.instance
  40. validated_data = serializer.validated_data
  41. tenant_log(self.request.user, BizLog.UPDATE, u'修改整车品牌[%s],id=%d' % (instance.name, instance.id), validated_data)
  42. def destroy(self, request, *args, **kwargs):
  43. with transaction.atomic():
  44. instance = self.get_object()
  45. instance.delete = True
  46. instance.save()
  47. tenant_log(self.request.user, BizLog.DELETE, u'删除整车品牌[%s],id=%d' % (instance.name, instance.id))
  48. return response_ok()
  49. class VehicleSeriesViewSet(CustomModelViewSet):
  50. permission_classes = [isLogin, ]
  51. queryset = Series.objects.filter(delete=False, brand__delete=False)
  52. serializer_class = SeriesSerializer
  53. def filter_queryset(self, queryset):
  54. # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  55. f = SeriesFilter(self.request.GET, queryset=queryset)
  56. return f.qs
  57. def perform_create(self, serializer):
  58. super(VehicleSeriesViewSet, self).perform_create(serializer)
  59. instance = serializer.instance
  60. validated_data = serializer.validated_data
  61. tenant_log(self.request.user, BizLog.INSERT, u'添加整车车系[%s],id=%d' % (instance.name, instance.id),validated_data)
  62. def destroy(self, request, *args, **kwargs):
  63. with transaction.atomic():
  64. instance = self.get_object()
  65. instance.delete = True
  66. instance.save()
  67. tenant_log(self.request.user, BizLog.DELETE, u'删除整车车系[%s],id=%d' % (instance.name, instance.id))
  68. return response_ok()
  69. @action(methods=['post'], detail=True)
  70. def update_series(self, request, pk):
  71. file = request.FILES.get('image', None)
  72. user = request.user
  73. instance = self.get_object()
  74. if instance.delete:
  75. raise CustomError(u'该车系已删除,禁止操作!')
  76. with transaction.atomic():
  77. serializer = self.get_serializer(instance, data=request.data)
  78. serializer.is_valid(raise_exception=True)
  79. self.perform_update(serializer)
  80. tenant_log(user, BizLog.UPDATE, u'修改车系[%s], id=%d' % (instance.name, instance.id), request.data)
  81. if file:
  82. old_thumbnail = instance.thumbnail
  83. thumbnail = Images.objects.employee_addnew(user, Images.VEHICLE_SERIES_THUMBNAIL, file)
  84. instance.thumbnail = thumbnail
  85. instance.save()
  86. if old_thumbnail:
  87. old_thumbnail.del_images()
  88. return response_ok()
  89. class VehicleModelViewSet(CustomModelViewSet):
  90. permission_classes = [isLogin, ]
  91. queryset = Model.objects.filter(delete=False, series__delete=False, series__brand__delete=False)
  92. serializer_class = ModelSerializer
  93. def filter_queryset(self, queryset):
  94. # queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  95. f = ModelFilter(self.request.GET, queryset=queryset)
  96. return f.qs
  97. def perform_create(self, serializer):
  98. super(VehicleModelViewSet, self).perform_create(serializer)
  99. instance = serializer.instance
  100. validated_data = serializer.validated_data
  101. tenant_log(self.request.user, BizLog.INSERT, u'添加整车型号[%s],id=%d' % (instance.name, instance.id),validated_data)
  102. def destroy(self, request, *args, **kwargs):
  103. with transaction.atomic():
  104. instance = self.get_object()
  105. instance.delete = True
  106. instance.save()
  107. tenant_log(self.request.user, BizLog.DELETE, u'删除整车型号[%s],id=%d' % (instance.name, instance.id))
  108. return response_ok()
  109. @action(methods=['post'], detail=True)
  110. def update_model(self, request, pk):
  111. instance = self.get_object()
  112. user = request.user
  113. thumbnail = request.FILES.get('image', None)
  114. if instance.delete:
  115. raise CustomError(u'该车型已被删除,禁止操作!')
  116. with transaction.atomic():
  117. serializer = self.get_serializer(instance, data=request.data)
  118. serializer.is_valid(raise_exception=True)
  119. self.perform_update(serializer)
  120. tenant_log(self.request.user, BizLog.UPDATE, u'修改整车型号[%s],id=%d' % (instance.name, instance.id), request.data)
  121. if thumbnail:
  122. old_thumbnail = instance.thumbnail
  123. thumbnail = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_THUMBNAIL, thumbnail)
  124. instance.thumbnail = thumbnail
  125. instance.save()
  126. if old_thumbnail:
  127. old_thumbnail.del_images()
  128. return response_ok()
  129. @action(methods=['post'], detail=True)
  130. def upload_playbill(self, request, pk):
  131. # 整车上传海报
  132. if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
  133. raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  134. playbill = request.FILES.get('image', None)
  135. user = request.user
  136. vehicle_model = self.get_object()
  137. if vehicle_model.delete:
  138. raise CustomError(u'该整车型号已删除,禁止操作!')
  139. if not playbill:
  140. raise CustomError(u'未找到上传文件!')
  141. with transaction.atomic():
  142. tenant_log(user, BizLog.UPDATE, u'车型[%s]上传海报, id=%d' % (vehicle_model.name, vehicle_model.id))
  143. old_playbill = vehicle_model.playbill
  144. playbill = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_PLAYBILL, playbill)
  145. vehicle_model.playbill = playbill
  146. vehicle_model.save()
  147. if old_playbill:
  148. old_playbill.del_images()
  149. return response_ok()
  150. @action(methods=['post'], detail=True)
  151. def set_vehicle_img(self, request, pk):
  152. # 设置整车图片
  153. image = request.FILES.get('images', None)
  154. vehicle_model = self.get_object()
  155. if vehicle_model.delete:
  156. raise CustomError(u'该整车型号已删除,禁止操作!')
  157. if not image:
  158. raise CustomError(u'未找到上传文件!')
  159. with transaction.atomic():
  160. image = Images.objects.employee_addnew(request.user, Images.VEHICLE_MODEL_THUMBNAIL, image)
  161. VehicleImg.objects.create(vehicle_model=vehicle_model, img=image)
  162. tenant_log(request.user, BizLog.DELETE, u'车型[%s]上传整车图片儿,id=%d' % (vehicle_model.name, vehicle_model.id))
  163. return response_ok()
  164. @action(methods=['post'], detail=True)
  165. def set_model_img(self, request, pk):
  166. if not self.request.user.has_perm('vehicle_model.edit_vehicle_model'):
  167. raise CustomError(u"您没有[车型管理-修改]权限,无法执行该操作,请联系管理员分配权限!")
  168. image = request.FILES.get('images', None)
  169. type_id = request.POST.get('type')
  170. user = request.user
  171. vehicle_model = self.get_object()
  172. if vehicle_model.delete:
  173. raise CustomError(u'该整车型号已删除,禁止操作!')
  174. if not image:
  175. raise CustomError(u'未找到上传文件!')
  176. with transaction.atomic():
  177. img = Images.objects.employee_addnew(user, Images.VEHICLE_MODEL_IMAGES, image)
  178. VehicleModelImg.objects.create(vehicle_model=vehicle_model, img=img)
  179. tenant_log(request.user, BizLog.INSERT, u'车型[%s]上传车型分类图片儿,id=%d' % (vehicle_model.name, vehicle_model.id))
  180. return response_ok()
  181. class VehicleImageViewSet(CustomModelViewSet):
  182. permission_classes = [isLogin, ]
  183. queryset = VehicleImg.objects.filter()
  184. serializer_class = VehicleImgSerializer
  185. def filter_queryset(self, queryset):
  186. f = VehicleImgFilter(self.request.GET, queryset=queryset)
  187. return f.qs
  188. def list(self, request, *args, **kwargs):
  189. queryset = self.filter_queryset(self.get_queryset())
  190. serializer = self.get_serializer(queryset, many=True)
  191. return response_ok(serializer.data)
  192. def destroy(self, request, *args, **kwargs):
  193. with transaction.atomic():
  194. instance = self.get_object()
  195. tenant_log(self.request.user, BizLog.DELETE, u'删除车型[%s]整车图片,id=%d' % (instance.vehicle_model.name, instance.vehicle_model.id))
  196. img = instance.img
  197. instance.delete()
  198. img.del_images()
  199. return response_ok()
  200. class VehicleBrandSearch(APIView):
  201. permission_classes = [isLogin, ]
  202. def get(self, request):
  203. keyword = request.GET.get('keyword')
  204. rows = Brand.objects.filter(delete=False, enabled=True)
  205. if keyword:
  206. rows = rows.filter(
  207. Q(name__icontains=keyword) |
  208. Q(brand__name__icontains=keyword)
  209. )
  210. data = []
  211. for row in rows:
  212. item = {
  213. 'value': row.id,
  214. 'id': row.id,
  215. 'name': row.name,
  216. 'notes': row.notes
  217. }
  218. data.append(item)
  219. return response_ok(data)
  220. class VehicleSeriesSearch(APIView):
  221. permission_classes = [isLogin, ]
  222. def get(self, request):
  223. keyword = request.GET.get('keywords')
  224. rows = Series.objects.filter(delete=False, enabled=True, brand__delete=False, brand__enabled=True)
  225. if keyword:
  226. rows = rows.filter(
  227. Q(name__icontains=keyword) |
  228. Q(brand__name__icontains=keyword)
  229. )
  230. serializer = SeriesSerializer(rows, many=True)
  231. return response_ok(serializer.data)
  232. class VehicleModelSearch(APIView):
  233. permission_classes = [isLogin, ]
  234. def get(self, request):
  235. keyword = request.GET.get('keyword')
  236. rows = Model.objects.filter(
  237. delete=False, enabled=True, series__delete=False, series__enabled=True, series__brand__delete=False,
  238. series__brand__enabled=True,
  239. )
  240. if keyword:
  241. rows = rows.filter(
  242. Q(name__icontains=keyword) |
  243. Q(series__brand__name__icontains=keyword)|
  244. Q(series__name__icontains=keyword)
  245. )
  246. serializer = ModelSerializer(rows, many=True)
  247. return response_ok(serializer.data)