objectchange.html 7.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165
  1. {% extends 'generic/object.html' %}
  2. {% load helpers %}
  3. {% load i18n %}
  4. {% block title %}{{ object }}{% endblock %}
  5. {% block breadcrumbs %}
  6. <li class="breadcrumb-item"><a href="{% url 'extras:objectchange_list' %}">{% trans "Change Log" %}</a></li>
  7. {% if object.related_object and object.related_object.get_absolute_url %}
  8. <li class="breadcrumb-item"><a href="{{ object.related_object.get_absolute_url }}changelog/">{{ object.related_object }}</a></li>
  9. {% elif object.changed_object and object.changed_object.get_absolute_url %}
  10. <li class="breadcrumb-item"><a href="{{ object.changed_object.get_absolute_url }}changelog/">{{ object.changed_object }}</a></li>
  11. {% elif object.changed_object and object.changed_object.get_display %}
  12. <li class="breadcrumb-item">{{ object.changed_object }}</li>
  13. {% else %}
  14. <li class="breadcrumb-item">{{ object.object_repr }}</li>
  15. {% endif %}
  16. {% endblock %}
  17. {# ObjectChange does not support the default add/edit/delete controls #}
  18. {% block controls %}{% endblock %}
  19. {% block subtitle %}{% endblock %}
  20. {% block content %}
  21. <div class="row mb-3">
  22. <div class="col col-md-5">
  23. <div class="card">
  24. <h5 class="card-header">
  25. {% trans "Change" %}
  26. </h5>
  27. <div class="card-body">
  28. <table class="table table-hover attr-table">
  29. <tr>
  30. <th scope="row">{% trans "Time" %}</th>
  31. <td>
  32. {{ object.time|annotated_date }}
  33. </td>
  34. </tr>
  35. <tr>
  36. <th scope="row">{% trans "User" %}</th>
  37. <td>
  38. {% if object.user.get_full_name %}
  39. {{ object.user.get_full_name }} ({{ object.user_name }})
  40. {% else %}
  41. {{ object.user_name }}
  42. {% endif %}
  43. </td>
  44. </tr>
  45. <tr>
  46. <th scope="row">{% trans "Action" %}</th>
  47. <td>
  48. {{ object.get_action_display }}
  49. </td>
  50. </tr>
  51. <tr>
  52. <th scope="row">{% trans "Object Type" %}</th>
  53. <td>
  54. {{ object.changed_object_type }}
  55. </td>
  56. </tr>
  57. <tr>
  58. <th scope="row">{% trans "Object" %}</th>
  59. <td>
  60. {% if object.changed_object and object.changed_object.get_absolute_url %}
  61. {{ object.changed_object|linkify }}
  62. {% else %}
  63. {{ object.object_repr }}
  64. {% endif %}
  65. </td>
  66. </tr>
  67. <tr>
  68. <th scope="row">{% trans "Request ID" %}</th>
  69. <td>
  70. {{ object.request_id }}
  71. </td>
  72. </tr>
  73. </table>
  74. </div>
  75. </div>
  76. </div>
  77. <div class="col col-md-7">
  78. <div class="card">
  79. <div class="card-header">
  80. <h5 class="d-inline">{% trans "Difference" %}</h5>
  81. <div class="btn-group btn-group-sm float-end noprint">
  82. <a {% if prev_change %}href="{% url 'extras:objectchange' pk=prev_change.pk %}"{% else %}disabled{% endif %} class="btn btn-outline-secondary">
  83. <i class="mdi mdi-chevron-left" aria-hidden="true"></i> {% trans "Previous" %}
  84. </a>
  85. <a {% if next_change %}href="{% url 'extras:objectchange' pk=next_change.pk %}"{% else %}disabled{% endif %} class="btn btn-outline-secondary">
  86. {% trans "Next" %} <i class="mdi mdi-chevron-right" aria-hidden="true"></i>
  87. </a>
  88. </div>
  89. </div>
  90. <div class="card-body">
  91. {% if diff_added == diff_removed %}
  92. <span class="text-muted" style="margin-left: 10px;">
  93. {% if object.action == 'create' %}
  94. {% trans "Object Created" %}
  95. {% elif object.action == 'delete' %}
  96. {% trans "Object Deleted" %}
  97. {% else %}
  98. {% trans "No Changes" %}
  99. {% endif %}
  100. </span>
  101. {% else %}
  102. <pre class="change-diff change-removed">{{ diff_removed|json }}</pre>
  103. <pre class="change-diff change-added">{{ diff_added|json }}</pre>
  104. {% endif %}
  105. </div>
  106. </div>
  107. </div>
  108. </div>
  109. <div class="row mb-3">
  110. <div class="col col-md-6">
  111. <div class="card">
  112. <h5 class="card-header">
  113. {% trans "Pre-Change Data" %}
  114. </h5>
  115. <div class="card-body">
  116. {% if object.prechange_data %}
  117. <pre class="change-data">{% for k, v in object.prechange_data.items %}{% spaceless %}
  118. <span{% if k in diff_removed %} class="removed"{% endif %}>{{ k }}: {{ v|json }}</span>
  119. {% endspaceless %}{% endfor %}
  120. </pre>
  121. {% elif non_atomic_change %}
  122. {% trans "Warning: Comparing non-atomic change to previous change record" %} (<a href="{% url 'extras:objectchange' pk=prev_change.pk %}">{{ prev_change.pk }}</a>)
  123. {% else %}
  124. <span class="text-muted">{% trans "None" %}</span>
  125. {% endif %}
  126. </div>
  127. </div>
  128. </div>
  129. <div class="col col-md-6">
  130. <div class="card">
  131. <h5 class="card-header">
  132. {% trans "Post-Change Data" %}
  133. </h5>
  134. <div class="card-body">
  135. {% if object.postchange_data %}
  136. <pre class="change-data">{% for k, v in object.postchange_data.items %}{% spaceless %}
  137. <span{% if k in diff_added %} class="added"{% endif %}>{{ k }}: {{ v|json }}</span>
  138. {% endspaceless %}{% endfor %}
  139. </pre>
  140. {% else %}
  141. <span class="text-muted">{% trans "None" %}</span>
  142. {% endif %}
  143. </div>
  144. </div>
  145. </div>
  146. </div>
  147. <div class="row mb-3">
  148. <div class="col col-md-12">
  149. {% include 'inc/panel_table.html' with table=related_changes_table heading='Related Changes' panel_class='default' %}
  150. {% if related_changes_count > related_changes_table.rows|length %}
  151. <div class="float-end">
  152. <a href="{% url 'extras:objectchange_list' %}?request_id={{ object.request_id }}" class="btn btn-primary">
  153. {% blocktrans trimmed with count=related_changes_count|add:"1" %}
  154. See All {{ count }} Changes
  155. {% endblocktrans %}
  156. </a>
  157. </div>
  158. {% endif %}
  159. </div>
  160. </div>
  161. {% endblock %}