views.py 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117
  1. # coding=utf-8
  2. from rest_framework.views import APIView
  3. from django.db.models import Q
  4. from django.utils import timezone
  5. from rest_framework.decorators import action
  6. from utils.permission import isLogin, permission_required, check_permission
  7. from utils.custom_modelviewset import CustomModelViewSet
  8. from utils import response_ok, response_error
  9. from utils.exceptions import CustomError
  10. from apps.log.models import BizLog
  11. from apps.option.models import Option
  12. from apps.option.serializers import OptionComboboxSerializer
  13. from .models import ReportCustomer,NewCustomer
  14. from .serializers import ReportCustomerSerializer,NewCustomerSerializer
  15. from .filters import ReportCustomerFilter,NewCustomerFilter
  16. from django.contrib.auth import get_user_model
  17. User = get_user_model()
  18. class ReportCustomerViewSet(CustomModelViewSet):
  19. permission_classes = [isLogin]
  20. queryset = ReportCustomer.objects.filter()
  21. serializer_class = ReportCustomerSerializer
  22. @permission_required('customer.view_report_customer')
  23. def filter_queryset(self, queryset):
  24. queryset = queryset.filter(
  25. Q(store_id__in=self.request.user.get_manager_range()) |
  26. Q(create_user=self.request.user))
  27. f = ReportCustomerFilter(self.request.GET, queryset=queryset)
  28. return f.qs
  29. @permission_required('customer.add_report_customer')
  30. def perform_create(self, serializer):
  31. super(ReportCustomerViewSet, self).perform_create(serializer)
  32. instance = serializer.instance
  33. validated_data = serializer.validated_data
  34. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  35. u'添加客户报备[%s],id=%d' % (instance.name, instance.id), validated_data)
  36. @permission_required('customer.add_report_customer')
  37. def perform_update(self, serializer):
  38. super(ReportCustomerViewSet, self).perform_update(serializer)
  39. instance = serializer.instance
  40. validated_data = serializer.validated_data
  41. BizLog.objects.addnew(self.request.user, BizLog.UPDATE,
  42. u'修改客户报备[%s],id=%d' % (instance.name, instance.id), validated_data)
  43. @permission_required('customer.delete_report_customer')
  44. def perform_destroy(self, instance):
  45. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  46. u'删除客户报备[%s],id=%d' % (instance.name, instance.id))
  47. super(ReportCustomerViewSet, self).perform_destroy(instance)
  48. @action(methods=['post'], detail=True)
  49. def dispatch_customer(self, request, pk):
  50. check_permission(request, 'customer.check_report_customer')
  51. # 审核
  52. user = request.POST.get('user')
  53. try:
  54. instance = ReportCustomer.objects.filter(id=pk).first()
  55. if not instance:
  56. raise CustomError('当前客户报备信息有误,请刷新重试!')
  57. instance.check_user = self.request.user
  58. instance.report_status = ReportCustomer.CHECKED
  59. instance.check_time = timezone.now()
  60. instance.save()
  61. BizLog.objects.addnew(request.user, BizLog.INSERT,
  62. u'分配客户报备[%s],id=%d' % (instance.name, instance.id))
  63. # 创建潜客跟踪表
  64. potential_level = Option.objects.filter(type=Option.POTENTIAL_LEVEL).order_by('sort').first()
  65. stage_progress = Option.objects.filter(type=Option.STAGE_PROGRESS).order_by('sort').first()
  66. NewCustomer.objects.create(report_customer=instance, potential_level=potential_level,
  67. track_user=user,next_time='',
  68. stage_progress=stage_progress, create_user=instance.create_user,
  69. )
  70. except CustomError as e:
  71. return response_error(e.get_error_msg())
  72. except Exception as e:
  73. return response_error(str(e))
  74. return response_ok()
  75. class ReportCustomerDictView(APIView):
  76. permission_classes = [isLogin]
  77. def get(self, request):
  78. scouce = Option.objects.filter(type=Option.CUSTOMER_SOURCE, enable=True)
  79. project = Option.objects.filter(type=Option.CATEGORY, enable=True)
  80. serializer_scouce = OptionComboboxSerializer(scouce, many=True)
  81. serializer_project = OptionComboboxSerializer(project, many=True)
  82. return response_ok({
  83. 'source': serializer_scouce.data,
  84. 'project': serializer_project.data,
  85. })
  86. class UserDictView(APIView):
  87. permission_classes = [isLogin]
  88. def get(self, request):
  89. store = request.user.store
  90. if not store:
  91. return response_error('当前账号未绑定门店,禁止分配客户!')
  92. users = User.objects.filter(store=store).values('id', 'name')
  93. users = [{'value': user['id'], 'lable': user['name']} for user in users]
  94. return response_ok(users)
  95. class NewCustomerViewSet(CustomModelViewSet):
  96. permission_classes = []
  97. queryset = NewCustomer.objects.filter()
  98. serializer_class = NewCustomerSerializer
  99. def filter_queryset(self, queryset):
  100. queryset = queryset.filter()
  101. f = NewCustomerFilter(self.request.GET, queryset=queryset)
  102. return f.qs