101 lines
3.1 KiB
Python
101 lines
3.1 KiB
Python
"""Сериализаторы для отделов (Department)."""
|
|
|
|
from django.contrib.auth import get_user_model
|
|
from drf_spectacular.utils import extend_schema_serializer
|
|
from rest_framework import serializers
|
|
|
|
from employees.models import Department
|
|
|
|
from .employee import EmployeeBriefSerializer
|
|
|
|
Employee = get_user_model()
|
|
|
|
|
|
class DepartmentSerializer(serializers.ModelSerializer):
|
|
head = EmployeeBriefSerializer(read_only=True)
|
|
head_id = serializers.PrimaryKeyRelatedField(
|
|
source="head",
|
|
queryset=Employee.objects.visible_in_ui(),
|
|
write_only=True,
|
|
required=False,
|
|
allow_null=True,
|
|
)
|
|
employees_count = serializers.IntegerField(read_only=True)
|
|
role_only_count = serializers.IntegerField(read_only=True)
|
|
|
|
class Meta:
|
|
model = Department
|
|
fields = (
|
|
"id",
|
|
"name",
|
|
"description",
|
|
"head",
|
|
"head_id",
|
|
"employees_count",
|
|
"role_only_count",
|
|
)
|
|
|
|
|
|
@extend_schema_serializer(component_name="EmployeeDepartmentBrief")
|
|
class DepartmentBriefSerializer(serializers.ModelSerializer):
|
|
class Meta:
|
|
model = Department
|
|
fields = ("id", "name")
|
|
|
|
|
|
class SetHeadInput(serializers.Serializer):
|
|
head_id = serializers.IntegerField(allow_null=True, required=False)
|
|
|
|
|
|
class SetMemberRoleInput(serializers.Serializer):
|
|
employee_id = serializers.IntegerField(required=False)
|
|
role_id = serializers.IntegerField(allow_null=True, required=False)
|
|
employee = serializers.IntegerField(required=False)
|
|
role = serializers.IntegerField(allow_null=True, required=False)
|
|
is_active = serializers.BooleanField(required=False)
|
|
|
|
def validate(self, attrs):
|
|
emp = attrs.get("employee_id") or attrs.get("employee")
|
|
role = attrs.get("role_id") if "role_id" in attrs else attrs.get("role")
|
|
if emp is None:
|
|
raise serializers.ValidationError(
|
|
{"employee_id": "This field is required."}
|
|
)
|
|
attrs["employee_id"] = emp
|
|
attrs["role_id"] = role
|
|
if "is_active" not in attrs:
|
|
attrs["is_active"] = True
|
|
return attrs
|
|
|
|
|
|
class AddMemberInput(serializers.Serializer):
|
|
employee_id = serializers.IntegerField(required=False)
|
|
employee = serializers.IntegerField(required=False)
|
|
|
|
def validate(self, attrs):
|
|
emp = (
|
|
attrs.get("employee_id")
|
|
if "employee_id" in attrs
|
|
else attrs.get("employee")
|
|
)
|
|
if emp is None:
|
|
raise serializers.ValidationError(
|
|
{"employee_id": "This field is required."}
|
|
)
|
|
attrs["employee_id"] = emp
|
|
return attrs
|
|
|
|
|
|
class RemoveMemberInput(serializers.Serializer):
|
|
employee_id = serializers.IntegerField(required=False)
|
|
employee = serializers.IntegerField(required=False)
|
|
|
|
def validate(self, attrs):
|
|
emp = attrs.get("employee_id", attrs.get("employee"))
|
|
if emp is None:
|
|
raise serializers.ValidationError(
|
|
{"employee_id": "This field is required."}
|
|
)
|
|
attrs["employee_id"] = emp
|
|
return attrs
|