views.py 4.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. # coding=utf-8
  2. from django.db import transaction
  3. from rest_framework.views import APIView
  4. from utils import response_ok
  5. from utils.custom_modelviewset import CustomModelViewSet
  6. from utils.exceptions import CustomError
  7. from utils.permission import IsTenantUser, permission_required
  8. from apps.tenant import tenant_log
  9. from apps.log.models import BizLog
  10. from .serializers import AreaSerializer, AreaDepartmentSerializer
  11. from .models import Area, Department
  12. from .filters import AreaFilter, AreaDepartmentFilter
  13. class DictView(APIView):
  14. permission_classes = [IsTenantUser, ]
  15. def get(self, request):
  16. tenant = request.user.employee.tenant
  17. ret = {
  18. 'area': AreaSerializer(Area.objects.filter(delete=False, enable=True, tenant=tenant), many=True).data,
  19. 'department': AreaDepartmentSerializer(Department.objects.filter(delete=False, enable=True, area__tenant=tenant), many=True).data
  20. }
  21. return response_ok(ret)
  22. class AreaViewSet(CustomModelViewSet):
  23. permission_classes = [IsTenantUser, ]
  24. queryset = Area.objects.filter(delete=False)
  25. serializer_class = AreaSerializer
  26. @permission_required('area.browse_area')
  27. def filter_queryset(self, queryset):
  28. queryset = queryset.filter(tenant=self.request.user.employee.tenant)
  29. f = AreaFilter(self.request.GET, queryset=queryset)
  30. return f.qs
  31. @permission_required('area.add_area')
  32. def perform_create(self, serializer):
  33. super(AreaViewSet, self).perform_create(serializer)
  34. instance = serializer.instance
  35. validated_data = serializer.validated_data
  36. tenant_log(self.request.user.employee, BizLog.INSERT, u'添加区域[%s],id=%d' % (instance.name, instance.id),
  37. validated_data)
  38. @permission_required('area.add_area')
  39. def perform_update(self, serializer):
  40. super(AreaViewSet, self).perform_update(serializer)
  41. instance = serializer.instance
  42. validated_data = serializer.validated_data
  43. tenant_log(self.request.user.employee, BizLog.UPDATE, u'修改区域[%s],id=%d' % (instance.name, instance.id),
  44. validated_data)
  45. @permission_required('area.delete_area')
  46. def destroy(self, request, *args, **kwargs):
  47. with transaction.atomic():
  48. instance = self.get_object()
  49. instance.delete = True
  50. instance.save()
  51. tenant_log(self.request.user.employee, BizLog.DELETE, u'删除区域[%s],id=%d' % (instance.name, instance.id))
  52. return response_ok()
  53. class AreaDepartmentViewSet(CustomModelViewSet):
  54. permission_classes = [IsTenantUser, ]
  55. queryset = Department.objects.filter(delete=False,area__delete=False)
  56. serializer_class = AreaDepartmentSerializer
  57. @permission_required('area.browse_area')
  58. def filter_queryset(self, queryset):
  59. queryset = queryset.filter(area__tenant=self.request.user.employee.tenant)
  60. f = AreaDepartmentFilter(self.request.GET, queryset=queryset)
  61. return f.qs
  62. @permission_required('area.add_area')
  63. def perform_create(self, serializer):
  64. super(AreaDepartmentViewSet, self).perform_create(serializer)
  65. instance = serializer.instance
  66. validated_data = serializer.validated_data
  67. tenant_log(self.request.user.employee, BizLog.INSERT, u'添加区域部门[%s],id=%d' % (instance.name, instance.id),
  68. validated_data)
  69. @permission_required('area.add_area')
  70. def perform_update(self, serializer):
  71. super(AreaDepartmentViewSet, self).perform_update(serializer)
  72. instance = serializer.instance
  73. validated_data = serializer.validated_data
  74. tenant_log(self.request.user.employee, BizLog.UPDATE, u'修改区域部门[%s],id=%d' % (instance.name, instance.id),
  75. validated_data)
  76. @permission_required('area.delete_area')
  77. def destroy(self, request, *args, **kwargs):
  78. with transaction.atomic():
  79. instance = self.get_object()
  80. instance.delete = True
  81. instance.save()
  82. tenant_log(self.request.user.employee, BizLog.DELETE, u'删除区域[%s]部门[%s],id=%d' % (instance.area.name,instance.name, instance.id))
  83. return response_ok()