People

Part of the user manual. Related: PROJECTS · CONTACTS · ROLES · PERMISSIONS · VISIBILITY · ACTIONS · NOTIFICATIONS · COMPANIES.

The People tab on each project shows who's on the project — the list of ProjectPeople rows for that project. It's where you manage project membership: add or remove people, assign disciplines, mark project admins and role leaders, edit underlying contacts.

This is a router page. The People tab surfaces concepts that live in their own docs — membership, disciplines, role flags, permissions, visibility. Use the table below to land in the right detailed doc for what you're trying to do.


TL;DR

  • People = ProjectPeople rows for the active project.
  • Each row links a contact (from the directory) to this project with a set of disciplines (roles), plus two flags: project_admin and role_leader.
  • Adding to the People tab requires the contact to already exist — see CONTACTS for creating contacts.
  • Edit rights = project admin / superuser / row owner.

Tab columns

Column What it shows
Name Contact's first_name last_name. From DirectoryContact.
Mobile Phone (clickable tel: link). From the contact.
Email Contact email (clickable mailto: link). When set, this address overrides the linked User's email for notification delivery — see CONTACTS § The email caveat for the resolution rules.
User The linked login (Contact.site_login.username) — empty if the contact has no login.
Company [CODE] Name of the contact's primary company. See COMPANIES.
Project Admin Yes/No — the ProjectPeople.project_admin flag.
Role Leader Yes/No — the ProjectPeople.role_leader flag.
Disciplines Comma-separated discipline codes (e.g. ARC, MEC). The disciplines that grant workflow event visibility — see ROLES.
Actions Kebab menu. See ACTIONS § Project People kebab.

Default sort: by Company, then Name.


What do you want to do?

Intent Where to go
Understand who can see this project at all VISIBILITY § layer 2 + PROJECTS § Project membership
Add a person to this project Create the contact first (CONTACTS § Create a new contact); then add to project (PROJECTS § Adding / removing project membership).
Remove a person from this project PROJECTS § Remove a contact from a project. Removes the ProjectPeople row only — the contact stays in the directory.
Change someone's disciplines (roles) ROLES § Assign a discipline to a project member
Make someone a project admin ROLES § Promote a member to project admin
Make someone a role leader ROLES § Promote a member to role leader
Understand why someone sees / doesn't see a workflow event VISIBILITY — the pipeline. Almost always layer 4 (ROLES) for "same project, one sees it and one doesn't."
Understand who gets emailed on a workflow transition ROLES § Notifications and roles + NOTIFICATIONS.
Link a person to their login account Edit their contact and set site_login — see CONTACTS § Link an existing contact to a login.
Edit the underlying contact People kebab → Edit the Contact (see ACTIONS). Edits the contact at directory level; affects every project they're on.
See who has admin/leader/discipline X across this project Use the per-column search row on the People table. Type a discipline code into the Disciplines column filter, or tick the Project Admin / Role Leader column filters.

If your question isn't above, the topic almost certainly lives in ROLES or PROJECTS. Start there.


Tab-specific troubleshooting

These are issues you specifically hit on the People tab. For role / permission / visibility issues that aren't People-tab specific, see the troubleshooting tables in the cross-linked docs.

Symptom Likely cause First check
Contact exists in the directory but doesn't appear in this project's People tab They have no ProjectPeople row for this project — being in the directory ≠ being on a project Add via "Add Person"
Adding a person to the project — they show up here but workflow events still don't appear in their workflow view They were added without any disciplines. Membership alone doesn't grant role-based event visibility Edit their relationship → set disciplines. See ROLES
Discipline column blank for a row The ProjectPeople has no disciplines assigned. Pure membership, no role-based visibility Edit the relationship, add disciplines
Email column shows an address but the person says they don't get emails Either (a) contact has no site_login (no User → no email at all), (b) linked user is is_active=False, or (c) the signal path doesn't pass contact=… so it falls back to user.email which may differ CONTACTS § The email caveat
User column blank for a row Contact has no site_login — no login account linked Edit the contact → set site_login. See CONTACTS
Kebab is visually empty (no items) You don't pass the edit_rel gate (not superuser, project admin, or row owner) Confirm your role in this project. See ACTIONS § Project People kebab
Edit Relationship form shows the disciplines I expect but visibility on events still wrong Visibility ≠ membership ≠ roles. The 5-layer pipeline applies VISIBILITY — walk the layers
Just promoted someone to project_admin — they still can't manage People Project admin per-project. They're admin of THIS project; if they're trying to manage People on a DIFFERENT project, they need promotion there too Confirm the project context
Same contact appears twice in the People tab Two ProjectPeople rows for the same contact + project. Data anomaly Admin panel → delete one. Then audit how it happened

For developers

This page is a router. Implementation pointers for the People tab specifically:

  • Frontend table: apps/directory/static/directory/js/app_people.js — peopleTable DataTable config + per-row render functions.
  • Models: apps.projects.models.ProjectPeople is the membership row. See model-level pointers in ROLES § For developers.
  • Endpoint: /apps/projects/people/?project=<pk> — pinned to ?limit=99999 post-Phase-4 BYOP audit (per devdocs/BYOP-PLAN.md). Currently a weak BYOP candidate; not yet chunked.
  • Add-Person form: templates/default/projects/new_project_people.html
  • project_people.html for edit. Form fields come from ProjectPeopleSerializer.

See devdocs/ for codebase-level material.