Skip to content

Commit 1837b38

Browse files
committed
Rename 'LiaisonDetail.taken_care' field to 'action_taken'. Miscellaneous associated fixes. Enhanced liaison-related admin pages.
- Legacy-Id: 2798
1 parent b9b25da commit 1837b38

File tree

6 files changed

+85
-33
lines changed

6 files changed

+85
-33
lines changed

ietf/liaisons/admin.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,12 @@ class FromBodiesAdmin(admin.ModelAdmin):
2020

2121

2222
class LiaisonDetailAdmin(admin.ModelAdmin):
23+
list_display = ['detail_id', 'title', 'legacy_from_body', 'to_body', 'submitted_date', 'purpose', 'related_to']
2324
ordering = ('title', )
24-
fields = ('title', 'body','submitted_date', 'last_modified_date', 'to_email', 'cc1', 'cc2', 'to_poc',
25-
'response_contact', 'technical_contact', 'purpose', 'purpose_text', 'deadline_date', 'taken_care',
26-
'related_to')
27-
raw_id_fields=['related_to']
25+
# fields = ('title', 'body','submitted_date', 'last_modified_date', 'to_email', 'cc1', 'cc2', 'to_poc',
26+
# 'response_contact', 'technical_contact', 'purpose', 'purpose_text', 'deadline_date', 'action_taken',
27+
# 'related_to')
28+
raw_id_fields=['person', 'related_to']
2829

2930
class LiaisonPurposeAdmin(admin.ModelAdmin):
3031
ordering = ('purpose_text', )
@@ -41,16 +42,19 @@ class SDOAuthorizedIndividualInline(admin.TabularInline):
4142

4243

4344
class LiaisonManagersAdmin(admin.ModelAdmin):
45+
list_display = ['id', '__unicode__', 'person_link', 'user_name', 'groups', 'sdo_link', ]
4446
ordering = ('person__first_name', 'person__last_name' )
45-
fields = ('person', 'sdo')
47+
# fields = ('person', 'sdo')
4648
raw_id_fields=['person']
4749

4850

4951
class SDOAuthorizedIndividualAdmin(admin.ModelAdmin):
52+
list_display = ['id', 'person_link', 'user_name', 'groups', 'sdo_link']
5053
raw_id_fields=['person']
5154

5255

5356
class SDOsAdmin(admin.ModelAdmin):
57+
list_display = ['sdo_id', 'sdo_name', 'liaisonmanager_link', 'sdo_contact_link']
5458
inlines = [LiaisonManagersInline, SDOAuthorizedIndividualInline]
5559

5660
def get_urls(self):

ietf/liaisons/management/commands/check_liaison_deadlines.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,7 @@ def send_reminder(self, liaison, days_to_go):
5555

5656
def handle(self, *args, **options):
5757
today = datetime.date.today()
58-
query = LiaisonDetail.objects.filter(deadline_date__isnull=False, taken_care=False, deadline_date__gte=today - datetime.timedelta(14))
58+
query = LiaisonDetail.objects.filter(deadline_date__isnull=False, action_taken=False, deadline_date__gte=today - datetime.timedelta(14))
5959
for liaison in query:
6060
delta = liaison.deadline_date - today
6161
if delta.days < 0 or delta.days in PREVIOUS_DAYS.keys():

ietf/liaisons/models.py

Lines changed: 66 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,11 @@
44
from django.core.exceptions import ObjectDoesNotExist
55
from django.db import models
66
from django.template.loader import render_to_string
7-
from ietf.idtracker.models import Acronym,PersonOrOrgInfo, Area
7+
from django.contrib.auth.models import User
8+
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, Area, IESGLogin
89
from ietf.liaisons.mail import IETFEmailMessage
10+
from ietf.ietfauth.models import LegacyLiaisonUser
11+
from ietf.utils.admin import admin_link
912

1013
class LiaisonPurpose(models.Model):
1114
purpose_id = models.AutoField(primary_key=True)
@@ -62,7 +65,7 @@ class LiaisonDetail(models.Model):
6265
from_raw_body = models.CharField(blank=True, null=True, max_length=255)
6366
from_raw_code = models.CharField(blank=True, null=True, max_length=255)
6467
approval = models.ForeignKey(OutgoingLiaisonApproval, blank=True, null=True)
65-
taken_care = models.BooleanField(default=False)
68+
action_taken = models.BooleanField(default=False, db_column='taken_care')
6669
related_to = models.ForeignKey('LiaisonDetail', blank=True, null=True)
6770
def __str__(self):
6871
return self.title or "<no title>"
@@ -76,7 +79,13 @@ def from_body(self):
7679
if not self.from_raw_body:
7780
return self.legacy_from_body()
7881
return self.from_raw_body
79-
82+
def from_sdo(self):
83+
try:
84+
name = FromBodies.objects.get(pk=self.from_id).body_name
85+
sdo = SDOs.objects.get(sdo_name=name)
86+
return sdo
87+
except ObjectDoesNotExist:
88+
return None
8089
def legacy_from_body(self):
8190
"""The from_id field is a foreign key for either
8291
FromBodies or Acronyms, depending on whether it's
@@ -101,7 +110,7 @@ def legacy_from_body(self):
101110
return "IETF %s %s" % (acronym.acronym.upper(), kind)
102111
except ObjectDoesNotExist:
103112
pass
104-
return "<unknown body %d>" % self.from_id
113+
return "<unknown body %s>" % self.from_id
105114
def from_email(self):
106115
"""If there is an entry in from_bodies, it has
107116
the desired email priority. However, if it's from
@@ -170,45 +179,85 @@ def is_pending(self):
170179

171180

172181
class SDOs(models.Model):
173-
sdo_id = models.AutoField(primary_key=True)
174-
sdo_name = models.CharField(blank=True, max_length=255)
182+
sdo_id = models.AutoField(primary_key=True, verbose_name='ID')
183+
sdo_name = models.CharField(blank=True, max_length=255, verbose_name='SDO Name')
175184
def __str__(self):
176185
return self.sdo_name
177186
def liaisonmanager(self):
178187
try:
179188
return self.liaisonmanagers_set.all()[0]
180189
except:
181190
return None
191+
def sdo_contact(self):
192+
try:
193+
return self.sdoauthorizedindividual_set.all()[0]
194+
except:
195+
return None
182196
class Meta:
183197
verbose_name = 'SDO'
184198
verbose_name_plural = 'SDOs'
185199
db_table = 'sdos'
186200
ordering = ('sdo_name', )
201+
liaisonmanager_link = admin_link('liaisonmanager', label='Liaison')
202+
sdo_contact_link = admin_link('sdo_contact')
187203

188-
class LiaisonManagers(models.Model):
204+
class LiaisonStatementManager(models.Model):
189205
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag')
206+
sdo = models.ForeignKey(SDOs, verbose_name='SDO')
207+
def __unicode__(self):
208+
return '%s (%s)' % (self.person, self.sdo)
209+
class Meta:
210+
abstract = True
211+
# Helper functions, for use in the admin interface
212+
def login_name(self):
213+
login_name = None
214+
try:
215+
login_name = IESGLogin.objects.get(person=self.person).login_name
216+
if User.objects.filter(username=login_name).count():
217+
return login_name
218+
except IESGLogin.DoesNotExist:
219+
pass
220+
try:
221+
login_name = LegacyLiaisonUser.objects.get(person=self.person).login_name
222+
except LegacyLiaisonUser.DoesNotExist:
223+
pass
224+
return login_name
225+
def user(self):
226+
login_name = self.login_name()
227+
user = None
228+
if login_name:
229+
try:
230+
return User.objects.get(username=login_name), login_name
231+
except User.DoesNotExist:
232+
pass
233+
return None, login_name
234+
def user_name(self):
235+
user, login_name = self.user()
236+
if user:
237+
return u'<a href="/admin/auth/user/%s/">%s</a>' % (user.id, login_name)
238+
else:
239+
return u'<a href="/admin/auth/user/"><span style="color: red">%s</span></a>' % (login_name)
240+
user_name.allow_tags = True
241+
def groups(self):
242+
user, login_name = self.user()
243+
return ", ".join([ group.name for group in user.groups.all()])
244+
person_link = admin_link('person')
245+
sdo_link = admin_link('sdo', label='SDO')
246+
247+
class LiaisonManagers(LiaisonStatementManager):
190248
email_priority = models.IntegerField(null=True, blank=True)
191-
sdo = models.ForeignKey(SDOs)
192249
def email(self):
193250
try:
194251
return self.person.emailaddress_set.get(priority=self.email_priority)
195252
except ObjectDoesNotExist:
196253
return None
197-
def __unicode__(self):
198-
return '%s (%s)' % (self.person, self.sdo)
199254
class Meta:
200255
verbose_name = 'SDO Liaison Manager'
201256
verbose_name_plural = 'SDO Liaison Managers'
202257
db_table = 'liaison_managers'
203258
ordering = ('sdo__sdo_name', )
204259

205-
class SDOAuthorizedIndividual(models.Model):
206-
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag')
207-
sdo = models.ForeignKey(SDOs)
208-
209-
def __unicode__(self):
210-
return '%s (%s)' % (self.person, self.sdo)
211-
260+
class SDOAuthorizedIndividual(LiaisonStatementManager):
212261
class Meta:
213262
verbose_name = 'SDO Authorized Individual'
214263
verbose_name_plural = 'SDO Authorized Individuals'

ietf/liaisons/views.py

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,7 +172,7 @@ def liaison_approval_detail(request, object_id):
172172

173173

174174
def _can_take_care(liaison, user):
175-
if not liaison.deadline_date or liaison.taken_care:
175+
if not liaison.deadline_date or liaison.action_taken:
176176
return False
177177

178178
if user.is_authenticated():
@@ -212,8 +212,8 @@ def liaison_detail(request, object_id):
212212
can_take_care = _can_take_care(liaison, user)
213213
if user.is_authenticated() and user.groups.filter(name__in=LIAISON_EDIT_GROUPS):
214214
can_edit = True
215-
if request.method == 'POST' and request.POST.get('do_taken_care', None) and can_take_care:
216-
liaison.taken_care = True
215+
if request.method == 'POST' and request.POST.get('do_action_taken', None) and can_take_care:
216+
liaison.action_taken = True
217217
liaison.save()
218218
can_take_care = False
219219
relations = liaison.liaisondetail_set.filter(qfilter)

ietf/templates/liaisons/liaisondetail_detail.html

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,6 @@
1515

1616
{% block content %}
1717
<h1>Liaison Statement: {% include 'liaisons/liaison_title.html' %}</h1>
18-
1918
<table class="ietf-liaison-details">
2019
<tr>
2120
<td style="width:18ex;">Submission Date:</td><td>{{ object.submitted_date }}</td></tr>
@@ -55,12 +54,12 @@ <h1>Liaison Statement: {% include 'liaisons/liaison_title.html' %}</h1>
5554
{% if can_take_care %}
5655
<td><form method="post" action="">
5756
{{ object.deadline_date }}
58-
{% if object.taken_care %}<span class="takedCare">Action Taken</span>{% else %}<span class="noTakedCare">Action Required</span>{% endif %}
59-
<input type="submit" value="Take care of" name='do_taken_care' />
57+
{% if object.action_taken %}<span class="actionTaken">Action Taken</span>{% else %}<span class="noActionTaken">Action Required</span>{% endif %}
58+
<input type="submit" value="Mark as Action Taken" name='do_action_taken' />
6059
</form></td>
6160
{% else %}
6261
<td>{{ object.deadline_date }}
63-
{% if object.taken_care %}<span class="takedCare">Action Taken</span>{% else %}<span class="noTakedCare">Action Needed</span>{% endif %}
62+
{% if object.action_taken %}<span class="actionTaken">Action Taken</span>{% else %}<span class="noActionTaken">Action Needed</span>{% endif %}
6463
</td>
6564
{% endif %}
6665
</tr>

static/css/liaisons.css

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -120,14 +120,14 @@ th.orderFieldActive a {
120120
padding-left: 20px;
121121
}
122122

123-
.noTakedCare,
124-
.takedCare {
123+
.noActionTaken,
124+
.actionTaken {
125125
border: 1px solid green;
126126
padding: 2px 5px;
127127
background-color: #ccffbb;
128128
}
129129

130-
.noTakedCare {
130+
.noActionTaken {
131131
border: 1px solid red;
132132
background-color: #ffccbb;
133133
}

0 commit comments

Comments
 (0)