{{ project.name }}

{% if project_type %} {{ project_type.name }} {% else %} Project {% endif %}

{% if project.status == 'upcoming' %} Upcoming {% elif project.status == 'active' %} Active {% elif project.status == 'on_hold' %} On Hold {% elif project.status == 'completed' %} Completed {% elif project.status == 'archived' %} Archived {% endif %}
{% if project.description %}

{{ project.description }}

{% endif %}

Locations

{{ locations | length }}

Assigned Units

{{ assigned_units | length }}

Active Sessions

{{ active_sessions | length }}

Completed Sessions

{{ completed_sessions_count }}

{# Separate location lists per module type so vibration points and sound NRLs don't get mixed in one list. Build the section set from the enabled modules. #} {% set loc_sections = [] %} {% if 'vibration_monitoring' in modules %}{% set _ = loc_sections.append(('vibration', 'Vibration Locations', 'Add Location')) %}{% endif %} {% if 'sound_monitoring' in modules %}{% set _ = loc_sections.append(('sound', 'NRLs', 'Add NRL')) %}{% endif %} {% if not loc_sections %}{% set _ = loc_sections.append(('', 'Locations', 'Add Location')) %}{% endif %}
{% for ltype, title, add_label in loc_sections %}

{{ title }}

{% endfor %}
{# Location map — uses the reusable partial that fetches from /api/projects/{p}/locations-json. Same render is reused on the deeper Vibration tab so both surfaces stay in sync. #} {% with project_id=project.id %} {% include 'partials/projects/location_map.html' %} {% endwith %}
{% if upcoming_actions %}
{{ upcoming_actions | length }} upcoming action{{ '' if upcoming_actions | length == 1 else 's' }} →
{% endif %}