{% import "macros/user_cell.html" as user_cell %}
{% if is_not_enrolled %}

Access Restricted

You are not enrolled as a Gate Pass Issuer or Security Staff member. Site administrators manage enrollment under Gate Pass admin; ask an admin to add you to the correct role.

{% elif is_security %} {% set tz = settings.timezone %} {% set dt_fmt = '%d %b %Y, %H:%M' %}

Security Gate Control

Scan a pass code to check in or out. Guest codes and staff codes (e.g. GS-…) open the same validation screen.

Pending Doorstep Acknowledgments (Violations)

{{ violations | length }} Active
{% for pass in violations %} {% else %} {% endfor %}
Guest Name Vehicle / Access Check-In Time Intended Host Duration Action
{{ pass.guest_name }} {% if pass.additional_guests > 0 %} (+{{ pass.additional_guests }}){% endif %} {{ pass.vehicle_number }} {{ pass.check_in_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ user_cell::render(name=pass.owner_name, email=pass.owner_email, avatar=pass.owner_avatar) }} {{ pass.duration_hours }} hours

No active acknowledgment violations. All hosts confirmed arrival on time.

Guests Currently Inside

{{ inside_guests | length }} Guests
{% for pass in inside_guests %} {% else %} {% endfor %}
Guest Name Vehicle / Access Check-In Time Arrival Acknowledged Intended Host Action
{{ pass.guest_name }} {% if pass.additional_guests > 0 %} (+{{ pass.additional_guests }}){% endif %} {{ pass.vehicle_number }} {{ pass.check_in_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {% if pass.acknowledged_at %} Confirmed {% else %} Awaiting Receipt {% endif %} {{ user_cell::render(name=pass.owner_name, email=pass.owner_email, avatar=pass.owner_avatar) }} Entry / exit

No guests currently checked in.

Staff Currently Inside

{{ inside_staff | length }} Staff
{% for pass in inside_staff %} {% else %} {% endfor %}
Name Vehicle / ID Check-in Host Entry / exit
{{ pass.guest_name }} {{ pass.vehicle_number }} {{ pass.check_in_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ user_cell::render(name=pass.owner_name, email=pass.owner_email, avatar=pass.owner_avatar) }} Record exit

No staff checked in. Scan a GS-… code to check someone in.

Staff Entry / Exit Log

{% for pass in staff_recent %} {% else %} {% endfor %}
Name Code Check-in Exit Host Status
{{ pass.guest_name }} {{ pass.pass_code }} {{ pass.check_in_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ pass.checkout_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ user_cell::render(name=pass.owner_name, email=pass.owner_email, avatar=pass.owner_avatar) }} {% if pass.computed_state == "checked_in" %} Inside {% else %} Exited {% endif %}

No staff visits logged yet.

Recent Guest Entries & Exits

{% for pass in recent_activity %} {% else %} {% endfor %}
Guest Name Vehicle / Access Check-In Time Checkout Time Host Pass Status
{{ pass.guest_name }} {% if pass.additional_guests > 0 %} (+{{ pass.additional_guests }}){% endif %} {{ pass.vehicle_number }} {{ pass.check_in_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ pass.checkout_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ user_cell::render(name=pass.owner_name, email=pass.owner_email, avatar=pass.owner_avatar) }} {% if pass.computed_state == "checked_out" or pass.computed_state == "completed" %} Checked Out {% elif pass.computed_state == "violation" %} Violation {% elif pass.computed_state == "expired" %} Expired {% else %} Inside {% endif %}

No activity logged for today.

{% else %} {% set tz = settings.timezone %} {% set dt_fmt = '%d %b %Y, %H:%M' %}

Guest Gate Passes

Generate entry passes and confirm your guest's arrival/departure.

Total Issued {{ stats.total }}
Active / Valid {{ stats.active }}
Checked In {{ stats.checked_in }}
Pending Receipt {{ stats.violations }}
{% if authorizations | length > 0 %}

Staff Authorizations

{% for auth in authorizations %} {% endfor %}
Name Valid period Status Actions
{{ auth.display_name }} {{ auth.valid_from | date_in_tz(timezone=tz, format=dt_fmt) }} – {{ auth.valid_to | date_in_tz(timezone=tz, format=dt_fmt) }} {% if auth.computed_state == "valid" %} Active {% elif auth.computed_state == "checked_in" %} Checked in {% elif auth.computed_state == "outside_schedule" %} Outside hours {% elif auth.computed_state == "expired" %} Expired {% elif auth.computed_state == "too_early" %} Not started {% else %} {{ auth.computed_state }} {% endif %} QR
{% endif %} {% if staff_visits | length > 0 %}

Staff Visit Log

{% for pass in staff_visits %} {% endfor %}
Name Check-in Exit Status
{{ pass.guest_name }} {{ pass.check_in_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ pass.checkout_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {% if pass.computed_state == "checked_in" %} On premises {% else %} Completed {% endif %}
{% endif %}

Guest Passes

{% for pass in passes %} {% else %} {% endfor %}
Guest Name Vehicle / Access Appointment Time Duration Status Actions
{{ pass.guest_name }} {% if pass.additional_guests > 0 %} (+{{ pass.additional_guests }}){% endif %} {{ pass.vehicle_number }} {{ pass.appointment_time | date_in_tz(timezone=tz, format=dt_fmt) | default(value="—") }} {{ pass.duration_hours }} hours {% if pass.computed_state == "valid" %} Active {% elif pass.computed_state == "checked_in" %} At Gate / Inside {% elif pass.computed_state == "violation" %} Acknowledge Timeout! {% elif pass.computed_state == "acknowledged" %} Arrival Acknowledged {% elif pass.computed_state == "checked_out" %} Checked Out {% elif pass.computed_state == "completed" %} Completed / Left {% elif pass.computed_state == "expired" %} Expired {% elif pass.computed_state == "too_early" %} Scheduled {% else %} Cancelled {% endif %} {% if pass.computed_state == "checked_in" or pass.computed_state == "violation" %} {% elif pass.computed_state == "acknowledged" %} {% endif %} {% if pass.computed_state == "valid" or pass.computed_state == "too_early" %} View QR {% else %} View Pass {% endif %}

No Gate Passes

You haven't generated any gate passes yet. Create one to welcome your guests!

Create First Pass
{% endif %}