Skip to content

Commit 80ca4e9

Browse files
committed
Allow to take care of a liaison with deadline. Fixes ietf-tools#385
- Legacy-Id: 2545
1 parent 4b96b2b commit 80ca4e9

4 files changed

Lines changed: 75 additions & 4 deletions

File tree

ietf/liaisons/management/commands/check_liaison_deadlines.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,6 @@ def send_reminder(self, liaison, days_to_go):
4141
{'liaison': liaison,
4242
'days_msg': days_msg,
4343
})
44-
print body
4544
mail = IETFEmailMessage(subject=subject,
4645
to=to_email,
4746
from_email=from_email,

ietf/liaisons/views.py

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,20 @@
11
# Copyright The IETF Trust 2007, All Rights Reserved
22
import datetime
3+
from email.utils import parseaddr
34

45
from django.conf import settings
56
from django.core.urlresolvers import reverse
67
from django.db.models import Q
8+
from django.forms.fields import email_re
79
from django.http import HttpResponse, HttpResponseRedirect
810
from django.shortcuts import render_to_response, get_object_or_404
911
from django.template import RequestContext
1012
from django.utils import simplejson
1113
from django.views.generic.list_detail import object_list, object_detail
1214

1315
from ietf.liaisons.accounts import (get_person_for_user, can_add_outgoing_liaison,
14-
can_add_incoming_liaison, LIAISON_EDIT_GROUPS)
16+
can_add_incoming_liaison, LIAISON_EDIT_GROUPS,
17+
is_ietfchair, is_iabchair, is_iab_executive_director)
1518
from ietf.liaisons.decorators import can_submit_liaison
1619
from ietf.liaisons.forms import liaison_form_factory
1720
from ietf.liaisons.models import LiaisonDetail, OutgoingLiaisonApproval
@@ -168,16 +171,55 @@ def liaison_approval_detail(request, object_id):
168171
)
169172

170173

174+
def _can_take_care(liaison, user):
175+
if not liaison.deadline_date or liaison.taken_care:
176+
return False
177+
178+
if user.is_authenticated():
179+
if user.groups.filter(name__in=LIAISON_EDIT_GROUPS):
180+
return True
181+
else:
182+
return _can_take_care(liaison, get_person_for_user(user))
183+
return False
184+
185+
186+
def _find_person_in_emails(liaison, person):
187+
if not person:
188+
return False
189+
emails = ','.join([liaison.cc1, liaison.cc2, liaison.to_email,
190+
liaison.to_poc, liaison.submitter_email,
191+
liaison.replyto, liaison.response_contact,
192+
technical_contact])
193+
for email in emails.split(','):
194+
name, addr = parseaddr(email)
195+
if email_re.search(addr) and person.emailaddress_set.filter(address=addr):
196+
return True
197+
elif addr in ('chair@ietf.org', 'iesg@ietf.org') and is_ietfchair(person):
198+
return True
199+
elif addr in ('iab@iab.org', 'iab-chair@iab.org') and is_iabchair(person):
200+
return True
201+
elif addr in ('execd@iab.org', ) and is_iab_executive_director(person):
202+
return True
203+
return False
204+
205+
171206
def liaison_detail(request, object_id):
172207
public_liaisons = LiaisonDetail.objects.filter(Q(approval__isnull=True)|Q(approval__approved=True)).order_by("-submitted_date")
208+
liaison = get_object_or_404(public_liaisons, pk=object_id)
173209
can_edit = False
174210
user = request.user
211+
can_take_care = _can_take_care(liaison, user)
175212
if user.is_authenticated() and user.groups.filter(name__in=LIAISON_EDIT_GROUPS):
176213
can_edit = True
214+
if request.method == 'POST' and request.POST.get('do_taken_care', None) and can_take_care:
215+
liaison.taken_care = True
216+
liaison.save()
217+
can_take_care = False
177218
return object_detail(request,
178219
public_liaisons,
179220
object_id=object_id,
180-
extra_context = {'can_edit': can_edit}
221+
extra_context = {'can_edit': can_edit,
222+
'can_take_care': can_take_care}
181223
)
182224

183225
def liaison_edit(request, object_id):

ietf/templates/liaisons/liaisondetail_detail.html

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
{% block title %}Liaison Statement: {% include 'liaisons/liaison_title.html' %}{% endblock %}
55

66
{% block pagehead %}
7+
<link rel="stylesheet" type="text/css" href="/css/liaisons.css"></link>
8+
79
<meta name="description" content="Liaison Statement from {{ object.from_body }}{% if not object.by_secretariat %} to {{object.to_body}}{% endif %} ({{ object.submitted_date|date:"Y" }})" />
810
{% endblock %}
911

@@ -47,8 +49,23 @@ <h1>Liaison Statement: {% include 'liaisons/liaison_title.html' %}</h1>
4749
</tr>
4850
<tr>
4951
<td>Purpose:</td><td>{% if object.purpose_text %}{{ object.purpose_text }}{% else %}{{ object.purpose }}{% endif %}</td></tr>
52+
{% if object.deadline_date %}
5053
<tr>
51-
<td>Deadline:</td><td>{{ object.deadline_date }}</td></tr>
54+
<td>Deadline:</td>
55+
{% if can_take_care %}
56+
<td><form method="post" action="">
57+
{{ object.deadline_date }}
58+
{% if object.taken_care %}<span class="takedCare">Already taken care</span>{% else %}<span class="noTakedCare">No actions taked</span>{% endif %}
59+
<input type="submit" value="Take care of" name='do_taken_care' />
60+
</form></td>
61+
{% else %}
62+
<td>{{ object.deadline_date }}
63+
{% if object.taken_care %}<span class="takedCare">Already taken care</span>{% else %}<span class="noTakedCare">No actions taked</span>{% endif %}
64+
</td>
65+
{% endif %}
66+
</tr>
67+
{% endif %}
68+
5269
{% endif %}
5370

5471
{% if object.related_to %}
@@ -80,4 +97,5 @@ <h1>Liaison Statement: {% include 'liaisons/liaison_title.html' %}</h1>
8097
<input type="submit" value="Edit" />
8198
</form>
8299
{% endif %}
100+
83101
{% endblock %}

static/css/liaisons.css

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -109,3 +109,15 @@ th.orderFieldActive a {
109109
background: #2647A0 url(/images/arrow-up.gif) no-repeat left center;
110110
padding-left: 20px;
111111
}
112+
113+
.noTakedCare,
114+
.takedCare {
115+
border: 1px solid green;
116+
padding: 2px 5px;
117+
background-color: #ccffbb;
118+
}
119+
120+
.noTakedCare {
121+
border: 1px solid red;
122+
background-color: #ffccbb;
123+
}

0 commit comments

Comments
 (0)