serializers.py 4.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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. from apps.tenant.models import Tenant
  8. class EmployeeSerializer(serializers.ModelSerializer):
  9. gender_text = serializers.CharField(source='get_gender_display', read_only=True)
  10. status_text = serializers.CharField(source='get_status_display', read_only=True)
  11. type_text = serializers.CharField(source='get_type_display', read_only=True)
  12. create_time = serializers.DateTimeField(source='user.date_joined', read_only=True)
  13. tenant = serializers.DateTimeField(source='tenant.company_name', read_only=True)
  14. username = serializers.CharField(source='user.username', read_only=True)
  15. class Meta:
  16. model = Employee
  17. fields = '__all__'
  18. def create(self, validated_data):
  19. if int(self.initial_data['type']) == Employee.SUPER and Employee.checkSuper(self.context['request'].user.employee.tenant):
  20. raise CustomError(u'已存在一个平台管理员,禁止操作!')
  21. #标准版 限制检修人人数为2
  22. tenant = self.context['request'].user.employee.tenant
  23. employees = Employee.objects.filter(tenant=tenant, status=Employee.ENABLE,type=Employee.EMPLOYEE).count()
  24. if int(self.initial_data['type']) == Employee.EMPLOYEE and employees >= 2 and tenant.edition == Tenant.EDITION_1:
  25. raise CustomError(u'当前版本,仅能添加2个检修人。如有需要,请升级到更高版本!')
  26. # 判断用户是否已经注册登陆过
  27. password = None
  28. username = self.initial_data['tel']
  29. if self.initial_data['password']:
  30. password = self.initial_data['password']
  31. user = User.objects.filter(username=username).first()
  32. if not user:
  33. # 创建user实例
  34. user = User.objects.create_tenant_user(validated_data['type'], username, password)
  35. validated_data['user'] = user
  36. validated_data['tenant'] = self.context['request'].user.employee.tenant
  37. try:
  38. instance = super(EmployeeSerializer, self).create(validated_data)
  39. return instance
  40. except Exception as e:
  41. if e.args[0] == 1062:
  42. raise CustomError(u'该手机号已被游客或者其他员工使用,请检查!')
  43. # 标准版 限制检修人人数为2
  44. def update(self, instance, validated_data):
  45. if instance.tenant != self.context['request'].user.employee.tenant:
  46. raise CustomError(u'禁止跨企业操作!')
  47. if int(self.initial_data['type']) == Employee.SUPER and Employee.checkSuper(instance.tenant, instance.id):
  48. raise CustomError(u'已存在一个平台管理员,禁止操作!')
  49. # 标准版 限制检修人人数为2
  50. employees = Employee.objects.filter(tenant=instance.tenant, status=Employee.ENABLE,type=Employee.EMPLOYEE).count()
  51. if int(self.initial_data['type']) == Employee.EMPLOYEE and employees >= 2 and instance.tenant.edition == Tenant.EDITION_1:
  52. raise CustomError(u'当前版本,仅能添加2个检修人。如有需要,请升级到更高版本!')
  53. username = self.initial_data['tel']
  54. if username and self.initial_data['password'].strip() != '':
  55. if instance.user:
  56. user = {
  57. 'username': username,
  58. 'password': self.initial_data['password'],
  59. 'is_active': 1 if self.initial_data['status'] == '1' else 0,
  60. 'type': self.initial_data['type'],
  61. }
  62. instance.user.update_item(user)
  63. else:
  64. is_active = 1 if self.initial_data['status'] == '1' else 0
  65. user = User.objects.create_tenant_user(validated_data['type'],
  66. username,
  67. self.initial_data['password'],
  68. is_active=is_active)
  69. validated_data['user'] = user
  70. instance = super(EmployeeSerializer, self).update(instance, validated_data)
  71. return instance