53 lines
2.2 KiB
Python
53 lines
2.2 KiB
Python
|
|
"""Справочник ролей в команде проекта (порт eMemberRole.php)."""
|
|||
|
|
|
|||
|
|
from __future__ import annotations
|
|||
|
|
|
|||
|
|
# id -> (title with hierarchy prefix, archive)
|
|||
|
|
_MEMBER_ROLES: dict[int, tuple[str, bool]] = {
|
|||
|
|
2: ("• ГИП", False),
|
|||
|
|
5: ("•• ГАП", False),
|
|||
|
|
6: ("••• Архитектор", False),
|
|||
|
|
11: ("••• Специалист генплана", False),
|
|||
|
|
3: ("•• ГКП", False),
|
|||
|
|
4: ("••• Инженер-конструктор", False),
|
|||
|
|
12: ("••• Инженер-геотехник", False),
|
|||
|
|
13: ("••• Инженер-обследователь", False),
|
|||
|
|
14: ("•• Ведущий инженер ЭОМ", False),
|
|||
|
|
15: ("••• Инженер ЭОМ", False),
|
|||
|
|
16: ("•• Ведущий инженер ССиАК", False),
|
|||
|
|
17: ("••• Инженер ССиАК", False),
|
|||
|
|
18: ("•• Ведущий инженер ВК", False),
|
|||
|
|
19: ("••• Инженер ВК", False),
|
|||
|
|
20: ("•• Ведущий инженер ОВиК", False),
|
|||
|
|
21: ("••• Инженер ОВиК", False),
|
|||
|
|
7: ("•• Ведущий инженер", True),
|
|||
|
|
8: ("••• Инженер", True),
|
|||
|
|
10: ("• BIM-координатор", False),
|
|||
|
|
22: ("• Сотрудник", False),
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
def member_role_title(role_id: int) -> str | None:
|
|||
|
|
entry = _MEMBER_ROLES.get(int(role_id))
|
|||
|
|
return entry[0] if entry else None
|
|||
|
|
|
|||
|
|
|
|||
|
|
def list_member_roles(include_role: int | None = None) -> list[dict[str, int | str]]:
|
|||
|
|
"""Неархивные роли; include_role добавляет архивную текущую роль при edit."""
|
|||
|
|
out: list[dict[str, int | str]] = []
|
|||
|
|
seen: set[int] = set()
|
|||
|
|
for rid, (title, archive) in sorted(_MEMBER_ROLES.items()):
|
|||
|
|
if archive and rid != include_role:
|
|||
|
|
continue
|
|||
|
|
out.append({"id": rid, "title": title})
|
|||
|
|
seen.add(rid)
|
|||
|
|
if include_role and include_role not in seen and include_role in _MEMBER_ROLES:
|
|||
|
|
title, _ = _MEMBER_ROLES[include_role]
|
|||
|
|
out.append({"id": include_role, "title": title})
|
|||
|
|
out.sort(key=lambda x: int(x["id"]))
|
|||
|
|
return out
|
|||
|
|
|
|||
|
|
|
|||
|
|
def is_valid_member_role(role_id: int) -> bool:
|
|||
|
|
return int(role_id) in _MEMBER_ROLES
|