Rename 'LiaisonDetail.taken_care' field to 'action_taken'. Miscellaneous associated fixes. Enhanced liaison-related admin pages.
- Legacy-Id: 2798
This commit is contained in:
parent
b9b25dae37
commit
1837b38bc8
|
@ -20,11 +20,12 @@ class FromBodiesAdmin(admin.ModelAdmin):
|
|||
|
||||
|
||||
class LiaisonDetailAdmin(admin.ModelAdmin):
|
||||
list_display = ['detail_id', 'title', 'legacy_from_body', 'to_body', 'submitted_date', 'purpose', 'related_to']
|
||||
ordering = ('title', )
|
||||
fields = ('title', 'body','submitted_date', 'last_modified_date', 'to_email', 'cc1', 'cc2', 'to_poc',
|
||||
'response_contact', 'technical_contact', 'purpose', 'purpose_text', 'deadline_date', 'taken_care',
|
||||
'related_to')
|
||||
raw_id_fields=['related_to']
|
||||
# fields = ('title', 'body','submitted_date', 'last_modified_date', 'to_email', 'cc1', 'cc2', 'to_poc',
|
||||
# 'response_contact', 'technical_contact', 'purpose', 'purpose_text', 'deadline_date', 'action_taken',
|
||||
# 'related_to')
|
||||
raw_id_fields=['person', 'related_to']
|
||||
|
||||
class LiaisonPurposeAdmin(admin.ModelAdmin):
|
||||
ordering = ('purpose_text', )
|
||||
|
@ -41,16 +42,19 @@ class SDOAuthorizedIndividualInline(admin.TabularInline):
|
|||
|
||||
|
||||
class LiaisonManagersAdmin(admin.ModelAdmin):
|
||||
list_display = ['id', '__unicode__', 'person_link', 'user_name', 'groups', 'sdo_link', ]
|
||||
ordering = ('person__first_name', 'person__last_name' )
|
||||
fields = ('person', 'sdo')
|
||||
# fields = ('person', 'sdo')
|
||||
raw_id_fields=['person']
|
||||
|
||||
|
||||
class SDOAuthorizedIndividualAdmin(admin.ModelAdmin):
|
||||
list_display = ['id', 'person_link', 'user_name', 'groups', 'sdo_link']
|
||||
raw_id_fields=['person']
|
||||
|
||||
|
||||
class SDOsAdmin(admin.ModelAdmin):
|
||||
list_display = ['sdo_id', 'sdo_name', 'liaisonmanager_link', 'sdo_contact_link']
|
||||
inlines = [LiaisonManagersInline, SDOAuthorizedIndividualInline]
|
||||
|
||||
def get_urls(self):
|
||||
|
|
|
@ -55,7 +55,7 @@ class Command(BaseCommand):
|
|||
|
||||
def handle(self, *args, **options):
|
||||
today = datetime.date.today()
|
||||
query = LiaisonDetail.objects.filter(deadline_date__isnull=False, taken_care=False, deadline_date__gte=today - datetime.timedelta(14))
|
||||
query = LiaisonDetail.objects.filter(deadline_date__isnull=False, action_taken=False, deadline_date__gte=today - datetime.timedelta(14))
|
||||
for liaison in query:
|
||||
delta = liaison.deadline_date - today
|
||||
if delta.days < 0 or delta.days in PREVIOUS_DAYS.keys():
|
||||
|
|
|
@ -4,8 +4,11 @@ from django.conf import settings
|
|||
from django.core.exceptions import ObjectDoesNotExist
|
||||
from django.db import models
|
||||
from django.template.loader import render_to_string
|
||||
from ietf.idtracker.models import Acronym,PersonOrOrgInfo, Area
|
||||
from django.contrib.auth.models import User
|
||||
from ietf.idtracker.models import Acronym, PersonOrOrgInfo, Area, IESGLogin
|
||||
from ietf.liaisons.mail import IETFEmailMessage
|
||||
from ietf.ietfauth.models import LegacyLiaisonUser
|
||||
from ietf.utils.admin import admin_link
|
||||
|
||||
class LiaisonPurpose(models.Model):
|
||||
purpose_id = models.AutoField(primary_key=True)
|
||||
|
@ -62,7 +65,7 @@ class LiaisonDetail(models.Model):
|
|||
from_raw_body = models.CharField(blank=True, null=True, max_length=255)
|
||||
from_raw_code = models.CharField(blank=True, null=True, max_length=255)
|
||||
approval = models.ForeignKey(OutgoingLiaisonApproval, blank=True, null=True)
|
||||
taken_care = models.BooleanField(default=False)
|
||||
action_taken = models.BooleanField(default=False, db_column='taken_care')
|
||||
related_to = models.ForeignKey('LiaisonDetail', blank=True, null=True)
|
||||
def __str__(self):
|
||||
return self.title or "<no title>"
|
||||
|
@ -76,7 +79,13 @@ class LiaisonDetail(models.Model):
|
|||
if not self.from_raw_body:
|
||||
return self.legacy_from_body()
|
||||
return self.from_raw_body
|
||||
|
||||
def from_sdo(self):
|
||||
try:
|
||||
name = FromBodies.objects.get(pk=self.from_id).body_name
|
||||
sdo = SDOs.objects.get(sdo_name=name)
|
||||
return sdo
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
def legacy_from_body(self):
|
||||
"""The from_id field is a foreign key for either
|
||||
FromBodies or Acronyms, depending on whether it's
|
||||
|
@ -101,7 +110,7 @@ class LiaisonDetail(models.Model):
|
|||
return "IETF %s %s" % (acronym.acronym.upper(), kind)
|
||||
except ObjectDoesNotExist:
|
||||
pass
|
||||
return "<unknown body %d>" % self.from_id
|
||||
return "<unknown body %s>" % self.from_id
|
||||
def from_email(self):
|
||||
"""If there is an entry in from_bodies, it has
|
||||
the desired email priority. However, if it's from
|
||||
|
@ -170,8 +179,8 @@ class LiaisonDetail(models.Model):
|
|||
|
||||
|
||||
class SDOs(models.Model):
|
||||
sdo_id = models.AutoField(primary_key=True)
|
||||
sdo_name = models.CharField(blank=True, max_length=255)
|
||||
sdo_id = models.AutoField(primary_key=True, verbose_name='ID')
|
||||
sdo_name = models.CharField(blank=True, max_length=255, verbose_name='SDO Name')
|
||||
def __str__(self):
|
||||
return self.sdo_name
|
||||
def liaisonmanager(self):
|
||||
|
@ -179,36 +188,76 @@ class SDOs(models.Model):
|
|||
return self.liaisonmanagers_set.all()[0]
|
||||
except:
|
||||
return None
|
||||
def sdo_contact(self):
|
||||
try:
|
||||
return self.sdoauthorizedindividual_set.all()[0]
|
||||
except:
|
||||
return None
|
||||
class Meta:
|
||||
verbose_name = 'SDO'
|
||||
verbose_name_plural = 'SDOs'
|
||||
db_table = 'sdos'
|
||||
ordering = ('sdo_name', )
|
||||
liaisonmanager_link = admin_link('liaisonmanager', label='Liaison')
|
||||
sdo_contact_link = admin_link('sdo_contact')
|
||||
|
||||
class LiaisonManagers(models.Model):
|
||||
class LiaisonStatementManager(models.Model):
|
||||
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag')
|
||||
sdo = models.ForeignKey(SDOs, verbose_name='SDO')
|
||||
def __unicode__(self):
|
||||
return '%s (%s)' % (self.person, self.sdo)
|
||||
class Meta:
|
||||
abstract = True
|
||||
# Helper functions, for use in the admin interface
|
||||
def login_name(self):
|
||||
login_name = None
|
||||
try:
|
||||
login_name = IESGLogin.objects.get(person=self.person).login_name
|
||||
if User.objects.filter(username=login_name).count():
|
||||
return login_name
|
||||
except IESGLogin.DoesNotExist:
|
||||
pass
|
||||
try:
|
||||
login_name = LegacyLiaisonUser.objects.get(person=self.person).login_name
|
||||
except LegacyLiaisonUser.DoesNotExist:
|
||||
pass
|
||||
return login_name
|
||||
def user(self):
|
||||
login_name = self.login_name()
|
||||
user = None
|
||||
if login_name:
|
||||
try:
|
||||
return User.objects.get(username=login_name), login_name
|
||||
except User.DoesNotExist:
|
||||
pass
|
||||
return None, login_name
|
||||
def user_name(self):
|
||||
user, login_name = self.user()
|
||||
if user:
|
||||
return u'<a href="/admin/auth/user/%s/">%s</a>' % (user.id, login_name)
|
||||
else:
|
||||
return u'<a href="/admin/auth/user/"><span style="color: red">%s</span></a>' % (login_name)
|
||||
user_name.allow_tags = True
|
||||
def groups(self):
|
||||
user, login_name = self.user()
|
||||
return ", ".join([ group.name for group in user.groups.all()])
|
||||
person_link = admin_link('person')
|
||||
sdo_link = admin_link('sdo', label='SDO')
|
||||
|
||||
class LiaisonManagers(LiaisonStatementManager):
|
||||
email_priority = models.IntegerField(null=True, blank=True)
|
||||
sdo = models.ForeignKey(SDOs)
|
||||
def email(self):
|
||||
try:
|
||||
return self.person.emailaddress_set.get(priority=self.email_priority)
|
||||
except ObjectDoesNotExist:
|
||||
return None
|
||||
def __unicode__(self):
|
||||
return '%s (%s)' % (self.person, self.sdo)
|
||||
class Meta:
|
||||
verbose_name = 'SDO Liaison Manager'
|
||||
verbose_name_plural = 'SDO Liaison Managers'
|
||||
db_table = 'liaison_managers'
|
||||
ordering = ('sdo__sdo_name', )
|
||||
|
||||
class SDOAuthorizedIndividual(models.Model):
|
||||
person = models.ForeignKey(PersonOrOrgInfo, db_column='person_or_org_tag')
|
||||
sdo = models.ForeignKey(SDOs)
|
||||
|
||||
def __unicode__(self):
|
||||
return '%s (%s)' % (self.person, self.sdo)
|
||||
|
||||
class SDOAuthorizedIndividual(LiaisonStatementManager):
|
||||
class Meta:
|
||||
verbose_name = 'SDO Authorized Individual'
|
||||
verbose_name_plural = 'SDO Authorized Individuals'
|
||||
|
|
|
@ -172,7 +172,7 @@ def liaison_approval_detail(request, object_id):
|
|||
|
||||
|
||||
def _can_take_care(liaison, user):
|
||||
if not liaison.deadline_date or liaison.taken_care:
|
||||
if not liaison.deadline_date or liaison.action_taken:
|
||||
return False
|
||||
|
||||
if user.is_authenticated():
|
||||
|
@ -212,8 +212,8 @@ def liaison_detail(request, object_id):
|
|||
can_take_care = _can_take_care(liaison, user)
|
||||
if user.is_authenticated() and user.groups.filter(name__in=LIAISON_EDIT_GROUPS):
|
||||
can_edit = True
|
||||
if request.method == 'POST' and request.POST.get('do_taken_care', None) and can_take_care:
|
||||
liaison.taken_care = True
|
||||
if request.method == 'POST' and request.POST.get('do_action_taken', None) and can_take_care:
|
||||
liaison.action_taken = True
|
||||
liaison.save()
|
||||
can_take_care = False
|
||||
relations = liaison.liaisondetail_set.filter(qfilter)
|
||||
|
|
|
@ -15,7 +15,6 @@
|
|||
|
||||
{% block content %}
|
||||
<h1>Liaison Statement: {% include 'liaisons/liaison_title.html' %}</h1>
|
||||
|
||||
<table class="ietf-liaison-details">
|
||||
<tr>
|
||||
<td style="width:18ex;">Submission Date:</td><td>{{ object.submitted_date }}</td></tr>
|
||||
|
@ -55,12 +54,12 @@
|
|||
{% if can_take_care %}
|
||||
<td><form method="post" action="">
|
||||
{{ object.deadline_date }}
|
||||
{% if object.taken_care %}<span class="takedCare">Action Taken</span>{% else %}<span class="noTakedCare">Action Required</span>{% endif %}
|
||||
<input type="submit" value="Take care of" name='do_taken_care' />
|
||||
{% if object.action_taken %}<span class="actionTaken">Action Taken</span>{% else %}<span class="noActionTaken">Action Required</span>{% endif %}
|
||||
<input type="submit" value="Mark as Action Taken" name='do_action_taken' />
|
||||
</form></td>
|
||||
{% else %}
|
||||
<td>{{ object.deadline_date }}
|
||||
{% if object.taken_care %}<span class="takedCare">Action Taken</span>{% else %}<span class="noTakedCare">Action Needed</span>{% endif %}
|
||||
{% if object.action_taken %}<span class="actionTaken">Action Taken</span>{% else %}<span class="noActionTaken">Action Needed</span>{% endif %}
|
||||
</td>
|
||||
{% endif %}
|
||||
</tr>
|
||||
|
|
|
@ -120,14 +120,14 @@ th.orderFieldActive a {
|
|||
padding-left: 20px;
|
||||
}
|
||||
|
||||
.noTakedCare,
|
||||
.takedCare {
|
||||
.noActionTaken,
|
||||
.actionTaken {
|
||||
border: 1px solid green;
|
||||
padding: 2px 5px;
|
||||
background-color: #ccffbb;
|
||||
}
|
||||
|
||||
.noTakedCare {
|
||||
.noActionTaken {
|
||||
border: 1px solid red;
|
||||
background-color: #ffccbb;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue