71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			Python
		
	
	
	
| from rest_framework import serializers
 | |
| from apps.am.models import Access, Area
 | |
| from apps.hrm.models import Employee
 | |
| from apps.system.models import Post
 | |
| from apps.utils.serializers import CustomModelSerializer
 | |
| from rest_framework.exceptions import ParseError
 | |
| 
 | |
| 
 | |
| class AreaSimpleSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Area
 | |
|         fields = ['id', 'name', 'level', 'cate']
 | |
| 
 | |
| 
 | |
| class AreaSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Area
 | |
|         fields = '__all__'
 | |
| 
 | |
| 
 | |
| class AreaCreateUpdateSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Area
 | |
|         fields = ['name', 'level', 'number', 'visitor_yes', 'remployee_yes', 'employee_yes',
 | |
|                   'belong_dept', 'count_people_min', 'count_people_max', 'count_people', 'cate',
 | |
|                   'stay_minute_min', 'stay_minute_max']
 | |
| 
 | |
| 
 | |
| class AccessCreateSerializer(CustomModelSerializer):
 | |
|     class Meta:
 | |
|         model = Access
 | |
|         fields = ['type', 'area', 'obj_cate', 'post', 'employee', 'dept', 'sort', 'stay_minute_min', 'stay_minute_max']
 | |
| 
 | |
|     def create(self, validated_data):
 | |
|         post = validated_data.get('post', None)
 | |
|         dept = validated_data.get('dept', None)
 | |
|         employee = validated_data.get('employee', None)
 | |
|         if post:
 | |
|             validated_data['obj_cate'] = 'post'
 | |
|             validated_data['employee'] = None
 | |
|             validated_data['dept'] = None
 | |
|         elif dept:
 | |
|             validated_data['obj_cate'] = 'org'
 | |
|             validated_data['post'] = None
 | |
|             validated_data['employee'] = None
 | |
|         elif employee:
 | |
|             validated_data['obj_cate'] = 'people'
 | |
|             validated_data['post'] = None
 | |
|             validated_data['dept'] = None
 | |
|         else:
 | |
|             raise ParseError('请指定岗位或部门或具体人员')
 | |
|         return super().create(validated_data)
 | |
| 
 | |
| 
 | |
| class AccessSerializer(CustomModelSerializer):
 | |
|     obj_ = serializers.SerializerMethodField()
 | |
| 
 | |
|     class Meta:
 | |
|         model = Access
 | |
|         fields = '__all__'
 | |
| 
 | |
|     def get_obj_(self, obj):
 | |
|         if obj.obj_cate == 'employee':
 | |
|             ep = Employee.objects.filter(id=obj.obj).first()
 | |
|             if ep:
 | |
|                 return {'id': ep.id, 'name': ep.name}
 | |
|         elif obj.obj_cate == 'post':
 | |
|             pt = Post.objects.filter(id=obj.obj).first()
 | |
|             if pt:
 | |
|                 return {'id': pt.id, 'name': pt.name}
 |