views.py 4.0 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. # coding=utf-8
  2. from rest_framework.views import APIView
  3. from django.db import transaction
  4. from utils import response_ok, response_error
  5. from utils.custom_modelviewset import CustomModelViewSet
  6. from utils.permission import IsTenantUser, permission_required
  7. from apps.tenant.employee.models import Employee
  8. from apps.tenant import tenant_log
  9. from apps.log.models import BizLog
  10. from apps.tenant.employee.filters import EmployeeFilter
  11. from .serializers import EmployeeSerializer
  12. from apps.tenant.option.serializers import OptionSerializer,Option
  13. from apps.tenant.area.models import Area,Department
  14. from apps.tenant.area.serializers import AreaSerializer,AreaDepartmentSerializer
  15. from rest_framework.decorators import action
  16. from utils.exceptions import CustomError
  17. class DictView(APIView):
  18. permission_classes = [IsTenantUser, ]
  19. def get(self, request):
  20. tenant = request.user.employee.tenant
  21. ret = {
  22. 'status': Employee.STATUS_CHOICES, # 职工状态
  23. 'position': OptionSerializer(Option.objects.filter(delete=False,type=Option.JOB_TYPE, enable=True, tenant=tenant), many=True).data,
  24. 'area': AreaSerializer(Area.objects.filter(delete=False, enable=True, tenant=tenant), many=True).data,
  25. 'department': AreaDepartmentSerializer(Department.objects.filter(delete=False, enable=True, area__tenant=tenant), many=True).data,
  26. }
  27. return response_ok(ret)
  28. class VisitorView(CustomModelViewSet):
  29. permission_classes = [IsTenantUser]
  30. queryset = Employee.objects.filter()
  31. serializer_class = EmployeeSerializer
  32. @permission_required('employee.browse_employee')
  33. def filter_queryset(self, queryset):
  34. queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  35. f = EmployeeFilter(self.request.GET, queryset=queryset)
  36. return f.qs
  37. @action(methods=['post'], detail=True)
  38. def forbid_baoxiu(self, request, pk):
  39. forbid_baoxiu = request.POST.get('forbid_baoxiu')
  40. instance = Employee.objects.filter(id=pk).first()
  41. if instance:
  42. instance.forbid_baoxiu = forbid_baoxiu and True or False
  43. instance.save()
  44. else:
  45. return response_error(u'游客信息有误,请刷新重试。')
  46. return response_ok()
  47. class EmployeeViewSet(CustomModelViewSet):
  48. permission_classes = [IsTenantUser]
  49. queryset = Employee.objects.filter()
  50. serializer_class = EmployeeSerializer
  51. @permission_required('employee.browse_employee')
  52. def filter_queryset(self, queryset):
  53. queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  54. f = EmployeeFilter(self.request.GET, queryset=queryset)
  55. return f.qs
  56. @permission_required('employee.add_employee')
  57. def perform_create(self, serializer):
  58. super(EmployeeViewSet, self).perform_create(serializer)
  59. instance = serializer.instance
  60. validated_data = serializer.validated_data
  61. tenant_log(self.request.user.employee, BizLog.INSERT, u'添加人员[%s],id=%d' % (instance.name, instance.id),
  62. validated_data)
  63. @permission_required('employee.add_employee')
  64. def perform_update(self, serializer):
  65. super(EmployeeViewSet, self).perform_update(serializer)
  66. instance = serializer.instance
  67. validated_data = serializer.validated_data
  68. tenant_log(self.request.user.employee, BizLog.UPDATE, u'修改人员[%s],id=%d' % (instance.name, instance.id),
  69. validated_data)
  70. @permission_required('employee.delete_employee')
  71. def destroy(self, request, *args, **kwargs):
  72. with transaction.atomic():
  73. instance = self.get_object()
  74. if instance.tenant != request.user.employee.tenant:
  75. raise CustomError(u'禁止跨租户操作!')
  76. super(EmployeeViewSet, self).destroy(self, request, *args, **kwargs)
  77. tenant_log(self.request.user.employee, BizLog.DELETE, u'删除人员[%s],id=%d' % (instance.name, instance.id))
  78. return response_ok()