Corp/backend/api/v1/serializers.py
Игорь Надеин a42204dda0 0
2025-08-05 15:30:41 +03:00

83 lines
2.8 KiB
Python

from rest_framework import serializers
from employees.models import Employee, Department, EmployeeAction, EmployeePosition, Absence, Skill, Education
class SkillSerializer(serializers.ModelSerializer):
class Meta:
model = Skill
fields = ['id', 'name']
class DepartmentSerializer(serializers.ModelSerializer):
head = serializers.StringRelatedField()
class Meta:
model = Department
fields = ['id', 'name', 'description', 'head', 'created_at']
class EmployeeActionSerializer(serializers.ModelSerializer):
employee = serializers.StringRelatedField(read_only=True)
class Meta:
model = EmployeeAction
fields = ['id', 'employee', 'action', 'date', 'comment', 'extra']
class EmployeePositionSerializer(serializers.ModelSerializer):
department = DepartmentSerializer(read_only=True)
employee = serializers.StringRelatedField(read_only=True)
class Meta:
model = EmployeePosition
fields = ['id', 'employee', 'department',
'title', 'date_from', 'date_to', 'is_active']
class AbsenceSerializer(serializers.ModelSerializer):
employee = serializers.StringRelatedField(read_only=True)
class Meta:
model = Absence
fields = ['id', 'employee', 'type',
'date_from', 'date_to', 'comment', 'status']
class EducationSerializer(serializers.ModelSerializer):
employee = serializers.StringRelatedField(read_only=True)
class Meta:
model = Education
fields = ['id', 'employee', 'institution', 'degree', 'graduation_year']
class EmployeeSerializer(serializers.ModelSerializer):
skills = SkillSerializer(many=True, read_only=True)
positions = EmployeePositionSerializer(many=True, read_only=True)
actions = EmployeeActionSerializer(many=True, read_only=True)
absences = AbsenceSerializer(many=True, read_only=True)
educations = EducationSerializer(many=True, read_only=True)
department = serializers.SerializerMethodField()
avatar = serializers.SerializerMethodField()
class Meta:
model = Employee
fields = [
'id', 'last_name', 'first_name', 'patronymic', 'gender', 'avatar',
'phone_number', 'email', 'telegram', 'whatsapp', 'wechat',
'birth_date', 'skills', 'positions', 'actions', 'absences', 'educations',
'employment_status', 'is_actually_active', 'created_at', 'updated_at', 'department'
]
def get_department(self, obj):
active_position = obj.positions.filter(date_to__isnull=True).first()
if active_position:
return DepartmentSerializer(active_position.department).data
return None
def get_avatar(self, obj):
request = self.context.get('request')
if obj.avatar and request:
return request.build_absolute_uri(obj.avatar.url)
return None