serializers.py 3.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. # coding=utf-8
  2. import json
  3. from rest_framework import serializers
  4. from apps.tenant.employee.models import Employee
  5. from utils.exceptions import CustomError
  6. from apps.account.models import User
  7. class EmployeeSerializer(serializers.ModelSerializer):
  8. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  9. status_text = serializers.CharField(source='get_status_display', read_only=True)
  10. type_text = serializers.CharField(source='get_type_display', read_only=True)
  11. create_time = serializers.DateTimeField(source='user.date_joined', read_only=True)
  12. tenant = serializers.DateTimeField(source='tenant.company_name', read_only=True)
  13. username = serializers.CharField(source='user.username', read_only=True)
  14. class Meta:
  15. model = Employee
  16. fields = '__all__'
  17. def create(self, validated_data):
  18. username = self.initial_data['tel']
  19. # 判断用户是否已经注册登陆过
  20. password = None
  21. if self.initial_data['password']:
  22. password = self.initial_data['password']
  23. user = User.objects.filter(username=username).first()
  24. if not user:
  25. # 创建user实例
  26. is_active = 1 if self.initial_data['status'] != '4' else 0
  27. user = User.objects.create_tenant_admin(username, password, is_active=is_active)
  28. validated_data['user'] = user
  29. validated_data['create_user'] = self.context['request'].user
  30. validated_data['tenant'] = self.context['request'].user.employee.tenant
  31. validated_data['type'] = Employee.EMPLOYEE
  32. try:
  33. instance = super(EmployeeSerializer, self).create(validated_data)
  34. except Exception as e:
  35. if e.args[0] == 1062:
  36. raise CustomError(u'该手机号已被游客或者其他员工使用,请检查!')
  37. groups = self.context['request'].data.get('groups', None)
  38. if groups:
  39. groups = json.loads(groups)
  40. else:
  41. groups = []
  42. for group in groups:
  43. instance.user.groups.add(group)
  44. return instance
  45. def update(self, instance, validated_data):
  46. instance.user.groups.clear()
  47. groups = self.context['request'].data.get('groups', None)
  48. if groups:
  49. groups = json.loads(groups)
  50. else:
  51. groups = []
  52. for group in groups:
  53. instance.user.groups.add(group)
  54. if instance.tenant != self.context['request'].user.employee.tenant:
  55. raise CustomError(u'禁止跨租户操作!')
  56. username = self.initial_data['tel']
  57. if username and self.initial_data['password'].strip() != '':
  58. if instance.user:
  59. user = {
  60. 'username': username,
  61. 'password': self.initial_data['password'],
  62. 'is_active': 1 if self.initial_data['status'] != '4' else 0,
  63. 'type':2,
  64. }
  65. instance.user.update_item(user)
  66. else:
  67. is_active = 1 if self.initial_data['status'] != '4' else 0
  68. user = User.objects.create_tenant_admin(username,
  69. self.initial_data['password'],
  70. is_active=is_active)
  71. validated_data['user'] = user
  72. instance = super(EmployeeSerializer, self).update(instance, validated_data)
  73. return instance