Files
com2care_website/apps/core/people.py
T
2026-10-29 04:11:36 +08:00

26 lines
974 B
Python

from collections import OrderedDict
ROLE_PRIORITY = {"lead": 0, "leader": 0, "organizer": 1, "collaborator": 2}
ROLE_LABEL_FIELDS = {0: "lead_group_label", 1: "organizer_group_label", 2: "collaborator_group_label"}
def person_sort_key(person):
role = (person.role or "").strip().casefold()
return (ROLE_PRIORITY.get(role, 3), role if role not in ROLE_PRIORITY else "", person.order, person.pk or 0)
def group_people(people, branding):
groups = OrderedDict()
for person in sorted(people, key=person_sort_key):
role = (person.role or "").strip()
priority = ROLE_PRIORITY.get(role.casefold(), 3)
key = priority if priority < 3 else role.casefold()
if key not in groups:
groups[key] = {
"title": getattr(branding, ROLE_LABEL_FIELDS[priority], "") if priority < 3 else role,
"people": [],
}
groups[key]["people"].append(person)
return list(groups.values())