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}
|