{% 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 %}