{% extends 'generic/object.html' %} {% load helpers %} {# Suppress default NetBox object tabs (including changelog & journal) by overriding the tab blocks with empty content #} {% block tabs %}{% endblock %} {% block subheader %}{% endblock %} {% block content %}
{# Using single-line if to avoid multiline parsing issues #} {% if perms.netbox_branch_review.approve_changerequest and object.status != "approved" and object.status != "implemented" %}
{% csrf_token %}
{% endif %} {% if perms.netbox_branch_review.peer_review_changerequest and object.status != "approved" and object.status != "implemented" %}
{% csrf_token %}
{% endif %} {% if perms.netbox_branch_review.merge_changerequest and object.status == "approved" and object.branch_id %}
{% csrf_token %}
{% endif %} {# Revoke approvals (undo) - Django template if doesn't support parentheses grouping reliably; use nested blocks #} {% if perms.netbox_branch_review.revoke_changerequest and object.status != "implemented" %} {% if object.approver_1 or object.approver_2 %}
{% csrf_token %}
{% endif %} {% endif %}
Title{{ object.title }}
Status{{ object.get_status_display }}
Requested By{{ object.requested_by|placeholder }}
Planned Window{{ object.planned_start|placeholder }} → {{ object.planned_end|placeholder }}
Risk{{ object.risk|placeholder }}
Impact{{ object.impact|placeholder }}
Target Object{% if object.target %}{{ object.target }}{% else %}None{% endif %}
Branch{% if object.branch %}{{ object.branch }}{% else %}None{% endif %}
Approvals {% if object.approvers_required == 2 %} {% if object.approver_1 %}{{ object.approver_1 }} @ {{ object.approver_1_at }}{% else %}Pending{% endif %}
{% if object.approver_2 %}{{ object.approver_2 }} @ {{ object.approver_2_at }}{% else %}Pending{% endif %} {% else %} {% if object.approver_1 %}{{ object.approver_1 }} @ {{ object.approver_1_at }}{% else %}Pending{% endif %} {% endif %}

Summary

{{ object.summary|placeholder }}

Pending Branch Changes

{% if object.branch %} {% if unmerged_changes_count > 0 %}
    {% for c in unmerged_changes|slice:":20" %}
  • {{ c }}
  • {% endfor %}
{% if unmerged_changes_count > 20 %}
… and {{ unmerged_changes_count|add:-20 }} more
{% endif %} {% else %} No pending changes. {% endif %} {% else %} No branch attached. {% endif %}

Activity

{% for log in object.audit_logs.all|slice:":10" %} {{ log.created|date:"Y-m-d H:i" }} - {{ log.get_action_display }} by {{ log.user }}
{% empty %} No activity yet. {% endfor %}
{% endblock %}