views.py 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384
  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. ret = {
  21. 'status': Employee.STATUS_CHOICES, # 职工状态
  22. 'emp_types': Employee.TYPE_CHOICES, # 职工角色
  23. }
  24. return response_ok(ret)
  25. class VisitorView(CustomModelViewSet):
  26. permission_classes = [IsTenantUser]
  27. queryset = Employee.objects.filter()
  28. serializer_class = EmployeeSerializer
  29. def filter_queryset(self, queryset):
  30. queryset = queryset.filter(tenant=self.request.user.employee.tenant, type=Employee.REPAIR)
  31. f = EmployeeFilter(self.request.GET, queryset=queryset)
  32. return f.qs
  33. @action(methods=['post'], detail=True)
  34. def forbid_baoxiu(self, request, pk):
  35. forbid_baoxiu = request.POST.get('forbid_baoxiu')
  36. instance = Employee.objects.filter(id=pk).first()
  37. if instance:
  38. instance.status = 2 if forbid_baoxiu == '1' else 1
  39. instance.save()
  40. else:
  41. return response_error(u'报修人信息有误,请刷新重试。')
  42. return response_ok()
  43. class EmployeeViewSet(CustomModelViewSet):
  44. permission_classes = [IsTenantUser]
  45. queryset = Employee.objects.filter()
  46. serializer_class = EmployeeSerializer
  47. @permission_required('employee.browse_employee')
  48. def filter_queryset(self, queryset):
  49. queryset = queryset.filter(tenant=self.request.user.employee.tenant, type__lt=Employee.REPAIR)
  50. f = EmployeeFilter(self.request.GET, queryset=queryset)
  51. return f.qs
  52. @permission_required('employee.add_employee')
  53. def perform_create(self, serializer):
  54. super(EmployeeViewSet, self).perform_create(serializer)
  55. instance = serializer.instance
  56. validated_data = serializer.validated_data
  57. tenant_log(self.request.user.employee, BizLog.INSERT, u'添加人员[%s],id=%d' % (instance.name, instance.id),
  58. validated_data)
  59. @permission_required('employee.add_employee')
  60. def perform_update(self, serializer):
  61. super(EmployeeViewSet, self).perform_update(serializer)
  62. instance = serializer.instance
  63. validated_data = serializer.validated_data
  64. tenant_log(self.request.user.employee, BizLog.UPDATE, u'修改人员[%s],id=%d' % (instance.name, instance.id),
  65. validated_data)
  66. @permission_required('employee.delete_employee')
  67. def destroy(self, request, *args, **kwargs):
  68. with transaction.atomic():
  69. instance = self.get_object()
  70. if instance.tenant != request.user.employee.tenant:
  71. raise CustomError(u'禁止跨企业操作!')
  72. super(EmployeeViewSet, self).destroy(self, request, *args, **kwargs)
  73. tenant_log(self.request.user.employee, BizLog.DELETE, u'删除人员[%s],id=%d' % (instance.name, instance.id))
  74. return response_ok()