views.py 3.7 KB

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