show.html 8.4 KB
Newer Older
Enrico Zini's avatar
Enrico Zini committed
1
{% extends "process/nm2-base.html" %}
2
{% load nm %}
3
{% load i18n %}
4
5
6

{% block content %}

7
<h1 class="d-flex">
8
  {% if picture %}
9
  <img class="mr-2 personpic" src="{{picture}}"></img>
10
11
12
  {% endif %}
  {{person.fullname}}
</h1>
13

14
<table class="table table-sm">
Enrico Zini's avatar
Enrico Zini committed
15
16
17
18
  <tr>
    <th>{% trans "Applying for" %}</th>
    <td><b>{{process.applying_for|desc_status}}</b></td>
  </tr>
19
  <tr>
20
    <th>{% trans "Applicant" %}</th>
21
    <td>
Enrico Zini's avatar
Enrico Zini committed
22
23
      <a href="{{person.get_absolute_url}}">{{person.fullname}} &lt;{{person.preferred_email}}&gt;</a>,
      {% blocktrans with status=person|desc_status %}currently <i>{{status}}</i>{% endblocktrans %}
24
25
    </td>
  </tr>
26
  <tr><th>{% trans "OpenPGP fingerprint" %}</th><td>{{person.fpr|fingerprint}}{% if "edit_fpr" in visit_perms %} <a id="edit_fpr_link" class="btn btn-sm btn-primary ml-2" href="{% url 'fprs:person_list' key=person.lookup_key %}"><span class="fa fa-edit"></span> {% trans "Edit" %}</a>{% endif %}</td></tr>
27
  <tr><th>{% trans "Activity timespan" %}</th><td>{{status.log_first.logdate|date:"Y-m-d"}} to {{status.log_last.logdate|date:"Y-m-d"}}</td></tr>
28
  <tr>
29
    <th>{% trans "Status" %}</th>
30
    <td>{{status.summary_html}}</td>
31
32
33
34
  </tr>

  {% if process.closed %}
  <tr>
35
    <th>{% trans "Completed" %}</th>
36
    <td>{{process.closed_time|date:"Y-m-d"}}</td>
37
38
39
  </tr>
  {% endif %}

Enrico Zini's avatar
Enrico Zini committed
40
41
42
43
44
  {% if "advocate" in status.requirements %}
  <tr>
    <th>Advocate{{status.advocates|pluralize}}</th>
    <td>
      {% for a in status.advocates %}
45
      {{a.a_link}}{% if not forloop.last %}, {% endif %}
Enrico Zini's avatar
Enrico Zini committed
46
      {% empty %}
47
      <a href="{{status.requirements.advocate.get_absolute_url}}">{% trans "none yet" %}</a>
Enrico Zini's avatar
Enrico Zini committed
48
49
50
51
52
      {% endfor %}
    </td>
  </tr>
  {% endif %}

Enrico Zini's avatar
Enrico Zini committed
53
54
55
  {% with process.current_am_assignment as am %}
  {% if am %}
  <tr>
56
    <th>{% trans "Application Manager" %}</th>
57
    <td>
58
      {{am.am.person.a_link}} {% trans "assigned by" %} {{am.assigned_by.a_link}} {% trans "on" %} {{am.assigned_time|date:"Y-m-d"}}
Enrico Zini's avatar
Enrico Zini committed
59
      {% if "am_unassign" in visit_perms %}
Enrico Zini's avatar
Enrico Zini committed
60
      <form style="display: inline" class="form-inline" id="am_unassign" action="{% url 'process_unassign_am' pk=process.pk %}" method="POST">{% csrf_token %}
Enrico Zini's avatar
Enrico Zini committed
61
        <button class="btn btn-warning btn-sm ml-2" type="submit"><span class="fa fa-remove"></span> {% trans "Unassign" %}</button>
62
63
64
      </form>
      {% endif %}
    </td>
Enrico Zini's avatar
Enrico Zini committed
65
66
67
68
  </tr>
  {% endif %}
  {% endwith %}

69
  <tr>
70
    <th>{% trans "Debian account name" %}</th>
71
    <td>
72
      {% if "edit_ldap" in visit_perms %}
73
        <a href="{% url 'person:edit_ldap' key=person.lookup_key %}">
Enrico Zini's avatar
Enrico Zini committed
74
75
          {% if person.ldap_fields.uid %}
          {{person.ldap_fields.uid}}
76
          {% else %}
77
          <i>✘ {% trans "missing" %}</i>
78
79
          {% endif %}
        </a>
80
      {% else %}
Enrico Zini's avatar
Enrico Zini committed
81
82
          {% if person.ldap_fields.uid %}
          {{person.ldap_fields.uid}}
83
          {% else %}
84
          <i>✘ {% trans "missing" %}</i>
85
          {% endif %}
86
87
88
89
      {% endif %}
    </td>
  </tr>

Enrico Zini's avatar
Enrico Zini committed
90
91
  {% if "edit_ldap" in visit_perms %}
  <tr>
92
    <th>{% trans "LDAP information" %}</th>
Enrico Zini's avatar
Enrico Zini committed
93
    <td>
Romain Porte's avatar
Romain Porte committed
94
      <code>cn={{person.ldap_fields.cn}}, mn={{person.ldap_fields.mn}}, sn={{person.ldap_fields.sn}}, email={{person.ldap_fields.email}}, uid={{person.ldap_fields.uid}}</code>
95
      <a class="btn btn-sm btn-primary ml-2" href="{% url 'person:edit_ldap' key=person.lookup_key %}"><span class="fa fa-edit"></span> {% trans "Edit" %}</a>
Enrico Zini's avatar
Enrico Zini committed
96
97
98
99
    </td>
  </tr>
  {% endif %}

100
  <tr>
101
    <th>{% trans "Missing requirements" %}</th>
102
103
104
    <td>
      {% if status.requirements_missing %}
        {% for req in status.requirements_missing %}
105
          {% if "req_view" in req|perms:user %}
106
            <a class="btn btn-sm btn-outline-danger" id="req_{{req.type}}_missing" href="{{req.get_absolute_url}}">{{req.type_desc}}</a>
107
          {% else %}
108
            <span class="btn btn-sm btn-outline-danger disabled" title="{% trans 'Contents are private' %}">{{req.type_desc}}</span>
109
          {% endif %}
110
111
        {% endfor %}
      {% else %}
112
        {% trans "none" %}
113
114
115
116
117
      {% endif %}
    </td>
  </tr>

  <tr>
118
    <th>{% trans "Requirements OK" %}</th>
119
120
121
    <td>
      {% if status.requirements_ok %}
        {% for req in status.requirements_ok %}
122
          {% if "req_view" in req|perms:user %}
123
            <a class="btn btn-sm btn-outline-success" id="req_{{req.type}}_ok" href="{{req.get_absolute_url}}">{{req.type_desc}}</a>
124
          {% else %}
125
            <span class="btn btn-sm btn-outline-success disabled" title="{% trans 'Contents are private' %}">{{req.type_desc}}</span>
126
          {% endif %}
127
128
        {% endfor %}
      {% else %}
129
        {% trans "none" %}
130
131
132
133
      {% endif %}
    </td>
  </tr>

134
  {% if "fd_comments" in visit_perms %}
135
136
  {% if person.fd_comment %}<tr id="view_person_fd_comment"><th>{% trans "FD comments" %}</th><td>{{person.fd_comment}}</td></tr>{% endif %}
  {% if process.fd_comment %}<tr id="view_process_fd_comment"><th>{% trans "FD comments" %}</th><td>{{process.fd_comment}}</td></tr>{% endif %}
137
138
  {% endif %}

Enrico Zini's avatar
Enrico Zini committed
139
  {% if "view_mbox" in visit_perms %}
Enrico Zini's avatar
Enrico Zini committed
140
  <tr id="view_mbox">
141
    <th>{% trans "Mail archive" %}</th>
142
    <td>
Romain Porte's avatar
Romain Porte committed
143
        <code><a href="mailto:{{process.archive_email}}">{{process.archive_email}}</a></code>
144
145
        {% with process.current_am_assignment as am %}
        {% if am %}
Enrico Zini's avatar
Enrico Zini committed
146
        <a class="btn btn-sm btn-primary ml-2" href="mailto:{{process.archive_email}},{{person.email}},{{am.am.person.email}}"><span class="fa fa-envelope"></span> {% trans "Email applicant and AM" %}</a>
147
        {% else %}
Enrico Zini's avatar
Enrico Zini committed
148
        <a class="btn btn-sm btn-primary ml-2" href="mailto:{{process.archive_email}},{{person.email}}"><span class="fa fa-envelope"></span> {% trans "Email applicant" %}</a>
149
150
        {% endif %}
        {% endwith %}
151
        {% if process.mailbox_file %}
Enrico Zini's avatar
Enrico Zini committed
152
153
        <a class="btn btn-sm btn-primary" href="{% url 'process_mailbox_download' pk=process.pk %}"><span class="fa fa-download"></span> {% trans "(download mail archive)" %}</a>
        <a class="btn btn-sm btn-primary" href="{% url 'process_mailbox_show' pk=process.pk %}"><span class="fa fa-envelope-open"></span> {% trans "display mail archive" %}</a>
154
        {% else %}
155
        {% trans "(no mail archive yet)" %}
156
157
        {% endif %}
    </td>
158
  </tr>
159
160

  {% comment %} TODO: Requires porting stats backend to new Process
161
  NOTE: blocktrans needs to be adjusted to use syntax {% blocktrans with name=something%} {{name}}...
162
  {% if mbox_stats %}
163
164
165
  <tr><th>{% trans "Mailbox stats" %}</th>
      <td>{% blocktrans %}{{mbox_stats.date_first_py|date:"Y-m-d"}} to {{mbox_stats.date_last_py|date:"Y-m-d"}},
{{mbox_stats.num_mails}} mails,{% endblocktrans %}
166
167
          <br>
          {% if mbox_stats.median_py %}
168
            {% if mbox_stats.median_py.days %}{% blocktrans %}{{mbox_stats.median_py.days}}d {% endif %}{{mbox_stats.median_hours}}h median response time{% endblocktrans %}
169
170
171
172
173
174
          {% endif %}
          <span class="mbox_sparkline" values="{{mbox_stats.response_time|join:","}}"></span>
      </td>
  </tr>
  {% endif %}
  {% endcomment %}
175
176

  {% endif %}
177
178
</table>

Enrico Zini's avatar
Enrico Zini committed
179
<h2 class="mt-3">{% trans "Requirements" %}</h2>
180

Enrico Zini's avatar
Enrico Zini committed
181
<table class="table table-sm">
182
183
  <thead>
    <tr>
184
185
      <th>{% trans "Requirement" %}</th>
      <th>{% trans "Approved by" %}</th>
186
      <th>{% trans "Approved date" context "Date an application was approved" %}</th>
187
      <th>{% trans "Notes" %}</th>
188
189
190
    </tr>
  </thead>
  <tbody>
Enrico Zini's avatar
Enrico Zini committed
191
    {% for req in status.requirements_sorted %}
192
193
194
    <tr>
      {% with req.compute_status as rstatus %}
      <td><a href="{{req.get_absolute_url}}">{{req}}</a></td>
Enrico Zini's avatar
Enrico Zini committed
195
196
      <td>
        {% if req.approved_by %}
197
          {{req.approved_by.a_link}}
Enrico Zini's avatar
Enrico Zini committed
198
199
200
201
202
203
204
205
206
207
208
        {% else %}
          -
        {% endif %}
      </td>
      <td>
        {% if req.approved_time %}
          {{req.approved_time|date:"Y-m-d"}}
        {% else %}
          -
        {% endif %}
      </td>
209
210
211
212
213
214
215
216
217
      <td>
        {% for nclass, ntext in rstatus.notes %}
        <span class="{{nclass}}">{{ntext}}</span>{% if not forloop.last %}<br>{% endif %}
        {% endfor %}
      </td>
      {% endwith %}
    </tr>
    {% endfor %}
  </tbody>
218
219
</table>

220
<a href="{% url 'process_download_statements' pk=process.pk %}" id="download_statements">{% trans "(download all signed statements in a single mailbox file)" %}</a>
221
{% if user.is_superuser and process.frozen_by and not process.approved_by and not process.closed %}
222
<br><a href="{% url 'process_statement_create' pk=process.pk type="approval" %}">{% trans "Approve process and open RT ticket" %}</a>
Enrico Zini's avatar
Enrico Zini committed
223
{% endif %}
224

Enrico Zini's avatar
Enrico Zini committed
225
<h3 class="mt-3">{% trans "Log" %}</h2>
226

227
{% include "process/log_widget.html"  with entries=status.log %}
228

229
{% endblock %}