views.py 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # coding=utf-8
  2. import traceback
  3. from utils.custom_modelviewset import CustomModelViewSet
  4. from rest_framework.views import APIView
  5. from utils.exceptions import CustomError
  6. from .serializers import OrderSerializer
  7. from .filters import OrderFilter
  8. from apps.log.models import BizLog
  9. from django.db.models import Q
  10. from utils import response_ok, response_error
  11. from utils.permission import isLogin, check_permission
  12. from apps.customer.models import NewCustomer
  13. from apps.order.models import Order,ProgressDetails
  14. from apps.option.models import Option
  15. from apps.upload.models import Upload
  16. class GetProcessView(APIView):
  17. permission_classes = [isLogin]
  18. def get(self, request):
  19. customer_id = request.query_params.get('customer_id')
  20. dispatch = request.query_params.get('dispatch') # 分配服务人员,
  21. instance = NewCustomer.objects.filter(id=customer_id).first()
  22. if not instance:
  23. raise CustomError('当前客户信息有误,请刷新重试!')
  24. if instance.stage_progress.end_stage:
  25. raise CustomError('当前客户进度已到最后阶段,请勿重复更新!')
  26. order = Order.objects.filter(customer=instance).first()
  27. # 分配服务人员,不做重复更新判断
  28. if order and order.status == Order.WAIT_DISPATCH and not dispatch:
  29. data = {
  30. 'error': True,
  31. 'error_message': u'当前客户订单等待分配中,请勿重复更新!',
  32. }
  33. return response_ok(data)
  34. option = Option.objects.filter(type=instance.stage_progress.type, sort__gt=instance.stage_progress.sort,
  35. enable=True).order_by('sort').first()
  36. if option:
  37. data = {
  38. 'now_process_text':instance.stage_progress.name,
  39. 'next_process_text':option.name,
  40. 'next_process_id':option.id,
  41. }
  42. return response_ok(data)
  43. else:
  44. data = {
  45. 'error': True,
  46. 'error_message': u'未找到下个阶段进度,请联系管理员设置!',
  47. }
  48. return response_ok(data)
  49. class OrderViewSet(CustomModelViewSet):
  50. permission_classes = [isLogin]
  51. queryset = Order.objects.filter()
  52. serializer_class = OrderSerializer
  53. def filter_queryset(self, queryset):
  54. queryset = queryset.filter(
  55. Q(store_id__in=self.request.user.get_manager_range()) |
  56. Q(service_user=self.request.user) |
  57. Q(customer__create_user=self.request.user)
  58. )
  59. f = OrderFilter(self.request.GET, queryset=queryset)
  60. return f.qs
  61. def paginate_queryset(self, queryset):
  62. if self.paginator is None or self.request.GET.get('export'):
  63. return None
  64. return self.paginator.paginate_queryset(queryset, self.request, view=self)
  65. class GetDetailsView(APIView):
  66. permission_classes = [isLogin]
  67. def get(self, request):
  68. order_id = request.GET.get('order_id')
  69. details = ProgressDetails.objects.filter(order_id=order_id).order_by('-operation_time')
  70. data = []
  71. for detail in details:
  72. dict = detail.get_details()
  73. data.append(dict)
  74. return response_ok(data)
  75. class GetFilesView(APIView):
  76. permission_classes = [isLogin]
  77. def get(self, request):
  78. progress_details_id = request.GET.get('progress_details_id')
  79. images = Upload.objects.filter(progress_details_id=progress_details_id)
  80. img_data = []
  81. for img in images:
  82. img_data.append(
  83. {
  84. 'url': img.picture,
  85. 'create_time': img.create_time,
  86. 'file_size': img.file_size,
  87. 'user': img.user.name,
  88. }
  89. )
  90. return response_ok(img_data)