123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- # coding=utf-8
- import json
- from rest_framework import serializers
- from apps.tenant.employee.models import Employee
- from utils.exceptions import CustomError
- from apps.account.models import User
- class EmployeeSerializer(serializers.ModelSerializer):
- gender_text = serializers.CharField(source='get_gender_display', read_only=True)
- status_text = serializers.CharField(source='get_status_display', read_only=True)
- create_time = serializers.DateTimeField(source='user.date_joined', read_only=True)
- username = serializers.CharField(source='user.username', read_only=True)
- position_text = serializers.CharField(source='position.name', read_only=True)
- area_text = serializers.SerializerMethodField()
- department_text = serializers.CharField(source='department.name', read_only=True)
- area = serializers.SerializerMethodField()
- group_ids = serializers.PrimaryKeyRelatedField(source='user.groups', many=True, read_only=True)
- groups = serializers.SerializerMethodField()
- forbid_baoxiu_text = serializers.SerializerMethodField()
- type_text = serializers.CharField(source='get_type_display', read_only=True)
- def get_area_text(self, obj):
- if obj.department:
- return obj.department.area.name
- return ''
- def get_area(self, obj):
- if obj.department:
- return obj.department.area.id
- return ''
- def get_forbid_baoxiu_text(self, obj):
- if obj.forbid_baoxiu:
- return u'是'
- return u'否'
- def get_groups(self, obj):
- return ','.join(obj.user.groups.values_list('display_name', flat=True))
- class Meta:
- model = Employee
- fields = '__all__'
- def create(self, validated_data):
- username = self.initial_data['tel']
- # 判断用户是否已经注册登陆过
- password = None
- if self.initial_data['password']:
- password = self.initial_data['password']
- user = User.objects.filter(username=username).first()
- if not user:
- # 创建user实例
- is_active = 1 if self.initial_data['status'] != '4' else 0
- user = User.objects.create_tenant(username, password, is_active=is_active)
- validated_data['user'] = user
- validated_data['create_user'] = self.context['request'].user
- validated_data['tenant'] = self.context['request'].user.employee.tenant
- validated_data['type'] = Employee.EMPLOYEE
- try:
- instance = super(EmployeeSerializer, self).create(validated_data)
- except Exception as e:
- if e.args[0] == 1062:
- raise CustomError(u'该手机号已被游客或者其他员工使用,请检查!')
- groups = self.context['request'].data.get('groups', None)
- if groups:
- groups = json.loads(groups)
- else:
- groups = []
- for group in groups:
- instance.user.groups.add(group)
- return instance
- def update(self, instance, validated_data):
- instance.user.groups.clear()
- groups = self.context['request'].data.get('groups', None)
- if groups:
- groups = json.loads(groups)
- else:
- groups = []
- for group in groups:
- instance.user.groups.add(group)
- if instance.tenant != self.context['request'].user.employee.tenant:
- raise CustomError(u'禁止跨租户操作!')
- username = self.initial_data['tel']
- if username and self.initial_data['password'].strip() != '':
- if instance.user:
- user = {
- 'username': username,
- 'password': self.initial_data['password'],
- 'is_active': 1 if self.initial_data['status'] != '4' else 0,
- 'type':2,
- }
- instance.user.update_item(user)
- else:
- is_active = 1 if self.initial_data['status'] != '4' else 0
- user = User.objects.create_tenant(username,
- self.initial_data['password'],
- is_active=is_active)
- validated_data['user'] = user
- instance = super(EmployeeSerializer, self).update(instance, validated_data)
- return instance
|