views.py 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156
  1. # coding=utf-8
  2. from utils.custom_modelviewset import CustomModelViewSet
  3. from django.db.models import Q
  4. from django.utils import timezone
  5. from rest_framework.decorators import action
  6. from rest_framework.views import APIView
  7. from django.conf import settings
  8. from django.db import transaction
  9. from utils import response_ok, response_error
  10. from utils.exceptions import CustomError
  11. from apps.log.models import BizLog
  12. from .models import GeneralAgent, Agent, Store
  13. from .serializers import GeneralAgentSerializer, AgentSerializer, StoreSerializer
  14. from .filters import GeneralAgentFilter, AgentFilter, StoreFilter
  15. from utils.permission import isLogin, check_permission, permission_required
  16. from apps.agent.serializers import AgentComboboxSerializer, StoreComboboxSerializer, GeneralAgentComboboxSerializer
  17. class GeneralAgentViewSet(CustomModelViewSet):
  18. permission_classes = [isLogin, ]
  19. queryset = GeneralAgent.objects.filter()
  20. serializer_class = GeneralAgentSerializer
  21. @permission_required('agent.view_agent')
  22. def filter_queryset(self, queryset):
  23. queryset = queryset.filter()
  24. if self.request.user.general_agent:
  25. queryset = queryset.filter(id=self.request.user.general_agent.id)
  26. f = GeneralAgentFilter(self.request.GET, queryset=queryset)
  27. return f.qs
  28. @permission_required('agent.add_general_agent')
  29. def perform_create(self, serializer):
  30. super(GeneralAgentViewSet, self).perform_create(serializer)
  31. instance = serializer.instance
  32. validated_data = serializer.validated_data
  33. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  34. u'添加总代理[%s],id=%d' % (instance.name, instance.id), validated_data)
  35. @permission_required('agent.delete_general_agent')
  36. def destroy(self, request, *args, **kwargs):
  37. instance = self.get_object()
  38. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  39. u'删除总代理[%s],id=%d' % (instance.name, instance.id))
  40. super(GeneralAgentViewSet, self).perform_destroy(instance)
  41. return response_ok()
  42. class AgentViewSet(CustomModelViewSet):
  43. permission_classes = [isLogin, ]
  44. queryset = Agent.objects.filter()
  45. serializer_class = AgentSerializer
  46. @permission_required('agent.view_agent')
  47. def filter_queryset(self, queryset):
  48. queryset = queryset.filter(Q(general_agent__create_user=self.request.user)
  49. | Q(create_user=self.request.user))
  50. f = AgentFilter(self.request.GET, queryset=queryset)
  51. return f.qs
  52. @permission_required('agent.add_agent')
  53. def perform_create(self, serializer):
  54. super(AgentViewSet, self).perform_create(serializer)
  55. instance = serializer.instance
  56. validated_data = serializer.validated_data
  57. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  58. u'添加代理商[%s],id=%d' % (instance.name, instance.id), validated_data)
  59. @permission_required('agent.delete_agent')
  60. def destroy(self, request, *args, **kwargs):
  61. instance = self.get_object()
  62. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  63. u'删除代理商[%s],id=%d' % (instance.name, instance.id))
  64. super(AgentViewSet, self).perform_destroy(instance)
  65. return response_ok()
  66. class StoreViewSet(CustomModelViewSet):
  67. permission_classes = [isLogin, ]
  68. queryset = Store.objects.filter()
  69. serializer_class = StoreSerializer
  70. @permission_required('agent.view_store')
  71. def filter_queryset(self, queryset):
  72. queryset = queryset.filter(id__in=self.request.user.get_manager_range())
  73. f = StoreFilter(self.request.GET, queryset=queryset)
  74. return f.qs
  75. @permission_required('agent.add_store')
  76. def perform_create(self, serializer):
  77. super(StoreViewSet, self).perform_create(serializer)
  78. instance = serializer.instance
  79. validated_data = serializer.validated_data
  80. BizLog.objects.addnew(self.request.user, BizLog.INSERT,
  81. u'添加门店[%s],id=%d' % (instance.name, instance.id), validated_data)
  82. @permission_required('agent.delete_store')
  83. def destroy(self, request, *args, **kwargs):
  84. instance = self.get_object()
  85. BizLog.objects.addnew(self.request.user, BizLog.DELETE,
  86. u'删除门店[%s],id=%d' % (instance.name, instance.id))
  87. super(StoreViewSet, self).perform_destroy(instance)
  88. return response_ok()
  89. @action(methods=['post'], detail=True)
  90. def check(self, request, pk):
  91. # 审核
  92. check_permission(request, 'agent.check_store')
  93. status = request.POST.get('status')
  94. try:
  95. with transaction.atomic():
  96. instance = Store.objects.filter(id=pk).first()
  97. if not instance:
  98. raise CustomError('当前门店信息有误!')
  99. if instance.status > settings.DEFAULT:
  100. raise CustomError('当前企业已审核!')
  101. instance.check_user = request.user
  102. instance.status = status
  103. instance.check_time = timezone.now()
  104. instance.save()
  105. BizLog.objects.addnew(request.user, BizLog.INSERT,
  106. u'审核门店[%s]状态为[%s],id=%d' % (instance.name, status, instance.id))
  107. except CustomError as e:
  108. return response_error(e.get_error_msg())
  109. except Exception as e:
  110. return response_error(str(e))
  111. return response_ok('审核完成!')
  112. class AgentDictView(APIView):
  113. permission_classes = [isLogin, ]
  114. def get(self, request):
  115. general_agent_rows = GeneralAgent.objects.filter(
  116. Q(create_user=request.user) | Q(id=request.user.general_agent_id))
  117. general_agents = GeneralAgentComboboxSerializer(general_agent_rows, many=True).data
  118. agents = stores = []
  119. for general_agent_row in general_agent_rows:
  120. rows = Agent.objects.filter(general_agent=general_agent_row,)
  121. if request.user.agent:
  122. rows = rows.filter(id=request.user.agent.id)
  123. agents = AgentComboboxSerializer(rows, many=True).data
  124. stores = []
  125. for row in rows:
  126. store = Store.objects.filter(agent=row, enable=True, check_user__isnull=False, end_date__gte=timezone.now().date())
  127. if request.user.store:
  128. store = store.filter(id=request.user.store.id)
  129. store_serializer = StoreComboboxSerializer(store, many=True).data
  130. stores.extend(store_serializer)
  131. return response_ok({
  132. 'general_agents': general_agents,
  133. 'agents': agents,
  134. 'stores': stores,
  135. })