Implement status_of_items and last_call.
(Oddly, this status_of_items shows more than the cgi one; I can't explain why. Also, the cgi one showed the wrong intended status for RFCs, and the wrong area for several documents.) - Legacy-Id: 186
This commit is contained in:
parent
7d52fffdcd
commit
5f4d99a36a
|
@ -111,7 +111,7 @@ class IDIntendedStatus(models.Model):
|
||||||
|
|
||||||
class InternetDraft(models.Model):
|
class InternetDraft(models.Model):
|
||||||
id_document_tag = models.AutoField(primary_key=True)
|
id_document_tag = models.AutoField(primary_key=True)
|
||||||
id_document_name = models.CharField(maxlength=255)
|
title = models.CharField(maxlength=255, db_column='id_document_name')
|
||||||
id_document_key = models.CharField(maxlength=255, editable=False)
|
id_document_key = models.CharField(maxlength=255, editable=False)
|
||||||
group = models.ForeignKey(Acronym, db_column='group_acronym_id')
|
group = models.ForeignKey(Acronym, db_column='group_acronym_id')
|
||||||
filename = models.CharField(maxlength=255, unique=True)
|
filename = models.CharField(maxlength=255, unique=True)
|
||||||
|
@ -143,7 +143,7 @@ class InternetDraft(models.Model):
|
||||||
expired_tombstone = models.BooleanField()
|
expired_tombstone = models.BooleanField()
|
||||||
idinternal = FKAsOneToOne('idinternal', reverse=True, query=models.Q(rfc_flag = 0))
|
idinternal = FKAsOneToOne('idinternal', reverse=True, query=models.Q(rfc_flag = 0))
|
||||||
def save(self):
|
def save(self):
|
||||||
self.id_document_key = self.id_document_name.upper()
|
self.id_document_key = self.title.upper()
|
||||||
super(InternetDraft, self).save()
|
super(InternetDraft, self).save()
|
||||||
def displayname(self):
|
def displayname(self):
|
||||||
return "%s-%s.txt" % ( self.filename, self.revision )
|
return "%s-%s.txt" % ( self.filename, self.revision )
|
||||||
|
@ -304,7 +304,7 @@ class RfcStatus(models.Model):
|
||||||
|
|
||||||
class Rfc(models.Model):
|
class Rfc(models.Model):
|
||||||
rfc_number = models.IntegerField(primary_key=True)
|
rfc_number = models.IntegerField(primary_key=True)
|
||||||
rfc_name = models.CharField(maxlength=200)
|
title = models.CharField(maxlength=200, db_column='rfc_name')
|
||||||
rfc_name_key = models.CharField(maxlength=200, editable=False)
|
rfc_name_key = models.CharField(maxlength=200, editable=False)
|
||||||
group_acronym = models.CharField(blank=True, maxlength=8)
|
group_acronym = models.CharField(blank=True, maxlength=8)
|
||||||
area_acronym = models.CharField(blank=True, maxlength=8)
|
area_acronym = models.CharField(blank=True, maxlength=8)
|
||||||
|
@ -328,7 +328,7 @@ class Rfc(models.Model):
|
||||||
def __str__(self):
|
def __str__(self):
|
||||||
return "RFC%04d" % ( self.rfc_number )
|
return "RFC%04d" % ( self.rfc_number )
|
||||||
def save(self):
|
def save(self):
|
||||||
self.rfc_name_key = self.rfc_name.upper()
|
self.rfc_name_key = self.title.upper()
|
||||||
super(Rfc, self).save()
|
super(Rfc, self).save()
|
||||||
def displayname(self):
|
def displayname(self):
|
||||||
return "rfc%d.txt" % ( self.rfc_number )
|
return "rfc%d.txt" % ( self.rfc_number )
|
||||||
|
@ -339,8 +339,8 @@ class Rfc(models.Model):
|
||||||
verbose_name = 'RFC'
|
verbose_name = 'RFC'
|
||||||
verbose_name_plural = 'RFCs'
|
verbose_name_plural = 'RFCs'
|
||||||
class Admin:
|
class Admin:
|
||||||
search_fields = ['rfc_name', 'group', 'area']
|
search_fields = ['title', 'group', 'area']
|
||||||
list_display = ['rfc_number', 'rfc_name']
|
list_display = ['rfc_number', 'title']
|
||||||
pass
|
pass
|
||||||
|
|
||||||
class RfcAuthor(models.Model):
|
class RfcAuthor(models.Model):
|
||||||
|
@ -408,9 +408,8 @@ class IDInternal(models.Model):
|
||||||
"""
|
"""
|
||||||
draft = models.ForeignKey(InternetDraft, primary_key=True, unique=True, db_column='id_document_tag')
|
draft = models.ForeignKey(InternetDraft, primary_key=True, unique=True, db_column='id_document_tag')
|
||||||
rfc_flag = models.IntegerField(null=True)
|
rfc_flag = models.IntegerField(null=True)
|
||||||
#ballot_id = models.IntegerField()
|
|
||||||
ballot = models.ForeignKey(BallotInfo, related_name='drafts', db_column="ballot_id")
|
ballot = models.ForeignKey(BallotInfo, related_name='drafts', db_column="ballot_id")
|
||||||
primary_flag = models.IntegerField()
|
primary_flag = models.IntegerField(blank=True, null=True)
|
||||||
group_flag = models.IntegerField(blank=True)
|
group_flag = models.IntegerField(blank=True)
|
||||||
token_name = models.CharField(blank=True, maxlength=25)
|
token_name = models.CharField(blank=True, maxlength=25)
|
||||||
token_email = models.CharField(blank=True, maxlength=255)
|
token_email = models.CharField(blank=True, maxlength=255)
|
||||||
|
@ -457,7 +456,9 @@ class IDInternal(models.Model):
|
||||||
def comments(self):
|
def comments(self):
|
||||||
return self.documentcomment_set.all().filter(rfc_flag=self.rfc_flag).order_by('-comment_date','-comment_time')
|
return self.documentcomment_set.all().filter(rfc_flag=self.rfc_flag).order_by('-comment_date','-comment_time')
|
||||||
def ballot_set(self):
|
def ballot_set(self):
|
||||||
return IDInternal.objects.filter(ballot=self.ballot)
|
return IDInternal.objects.filter(ballot=self.ballot_id)
|
||||||
|
def ballot_others(self):
|
||||||
|
return IDInternal.objects.filter(models.Q(primary_flag=0)|models.Q(primary_flag__isnull=True), ballot=self.ballot_id)
|
||||||
class Meta:
|
class Meta:
|
||||||
db_table = 'id_internal'
|
db_table = 'id_internal'
|
||||||
verbose_name = 'IDTracker Draft'
|
verbose_name = 'IDTracker Draft'
|
||||||
|
|
|
@ -23,6 +23,8 @@ urlpatterns = patterns('django.views.generic.simple',
|
||||||
)
|
)
|
||||||
urlpatterns += patterns('',
|
urlpatterns += patterns('',
|
||||||
(r'^send_email/$', views.send_email),
|
(r'^send_email/$', views.send_email),
|
||||||
|
(r'^status/$', views.status),
|
||||||
|
(r'^last_call/$', views.last_call),
|
||||||
)
|
)
|
||||||
urlpatterns += patterns('django.views.generic.list_detail',
|
urlpatterns += patterns('django.views.generic.list_detail',
|
||||||
(r'^rfc(?P<object_id>\d+)/$', 'object_detail', rfc_dict),
|
(r'^rfc(?P<object_id>\d+)/$', 'object_detail', rfc_dict),
|
||||||
|
|
|
@ -4,7 +4,7 @@ from django import newforms as forms
|
||||||
from django.template import RequestContext, Context, loader
|
from django.template import RequestContext, Context, loader
|
||||||
from django.shortcuts import get_object_or_404, render_to_response
|
from django.shortcuts import get_object_or_404, render_to_response
|
||||||
from django.db.models import Q
|
from django.db.models import Q
|
||||||
from django.views.generic.list_detail import object_detail
|
from django.views.generic.list_detail import object_detail, object_list
|
||||||
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState
|
from ietf.idtracker.models import InternetDraft, IDInternal, IDState, IDSubState
|
||||||
from ietf.idtracker.forms import EmailFeedback
|
from ietf.idtracker.forms import EmailFeedback
|
||||||
from ietf.utils.mail import send_mail_text
|
from ietf.utils.mail import send_mail_text
|
||||||
|
@ -135,3 +135,10 @@ def send_email(request):
|
||||||
return render_to_response('idtracker/email_form.html', {'category': cat, 'form': form},
|
return render_to_response('idtracker/email_form.html', {'category': cat, 'form': form},
|
||||||
context_instance=RequestContext(request))
|
context_instance=RequestContext(request))
|
||||||
|
|
||||||
|
def status(request):
|
||||||
|
queryset = IDInternal.objects.filter(primary_flag=1).exclude(cur_state__state__in=('AD is watching', 'Dead')).order_by('cur_state', 'status_date', 'ballot_id')
|
||||||
|
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'IESG Status of Items'})
|
||||||
|
|
||||||
|
def last_call(request):
|
||||||
|
queryset = IDInternal.objects.filter(primary_flag=1).filter(cur_state__state__in=('In Last Call', 'Waiting for Writeup', 'Waiting for AD Go-Ahead')).order_by('cur_state', 'status_date', 'ballot_id')
|
||||||
|
return object_list(request, template_name="idtracker/status_of_items.html", queryset=queryset, extra_context={'title': 'Documents in Last Call'})
|
||||||
|
|
24
ietf/templates/idtracker/document_entry.html
Normal file
24
ietf/templates/idtracker/document_entry.html
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
{% load ietf_filters %}
|
||||||
|
<tr>{% if doc.primary_flag %}
|
||||||
|
<td>{{ doc.area_acronym.area_acronym.acronym.upper }}</td>
|
||||||
|
<td nowrap>
|
||||||
|
{% ifequal doc.cur_state.state "In Last Call" %}
|
||||||
|
{% if doc.document.lc_expiration_date %}
|
||||||
|
{{ doc.document.lc_expiration_date }}
|
||||||
|
{% endif %}
|
||||||
|
{% else %}
|
||||||
|
{% if doc.status_date %}
|
||||||
|
{{ doc.status_date|date:"M j" }}
|
||||||
|
{% endif %}
|
||||||
|
{% endifequal %}</td>
|
||||||
|
{% else %}
|
||||||
|
<td></td><td></td>
|
||||||
|
{% endif %}
|
||||||
|
<td>{{ doc.document.title }} ({{ doc.document.intended_status }})</td></tr>
|
||||||
|
<tr><td></td><td></td><td><a href="{{ doc.document.doclink }}">{{ doc.document.displayname }}</a></td></tr>
|
||||||
|
{% if doc.primary_flag %}
|
||||||
|
<tr><td></td><td>Token:</td><td><a href="mailto:{{ doc.token_email|urlencode }}">{{ doc.token_name }}</a></td></tr>
|
||||||
|
{% if doc.note %}
|
||||||
|
<tr><td></td><td>Note:</td><td>{{ doc.note|urlize }}</td></tr>
|
||||||
|
{% endif %}
|
||||||
|
{% endif %}
|
39
ietf/templates/idtracker/status_of_items.html
Normal file
39
ietf/templates/idtracker/status_of_items.html
Normal file
|
@ -0,0 +1,39 @@
|
||||||
|
{% extends "base.html" %}
|
||||||
|
|
||||||
|
{% block title %}{{ title }}{% endblock %}
|
||||||
|
|
||||||
|
{% block content %}
|
||||||
|
<center><h1>{{ title }}</h1></center>
|
||||||
|
<i>Generated {% now "M j, Y" %}<br>
|
||||||
|
{# no hit counter #}
|
||||||
|
</i>
|
||||||
|
|
||||||
|
{% regroup object_list by cur_state_id as grouped %}
|
||||||
|
{% for state in grouped %}
|
||||||
|
<a name="grp{{ state.list.0.cur_state }}"><h2>{{ state.list.0.cur_state }}</h2></a>
|
||||||
|
<table>
|
||||||
|
<tr><th>Area</th><th>{% ifequal state.list.0.cur_state.state "In Last Call" %}Expires at{% else %}Date{% endifequal %}</th></tr>
|
||||||
|
{% for doc in state.list %}
|
||||||
|
{% include "idtracker/document_entry.html" %}
|
||||||
|
{% if doc.ballot_others %}
|
||||||
|
{% for doc in doc.ballot_others %}
|
||||||
|
{% include "idtracker/document_entry.html" %}
|
||||||
|
{% endfor %}
|
||||||
|
{% endif %}
|
||||||
|
{% endfor %}
|
||||||
|
</table>
|
||||||
|
{% endfor %}
|
||||||
|
|
||||||
|
<HR>
|
||||||
|
<b><A href="http://www.rfc-editor.org/queue.html">RFC Editor Queue</a></b>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
|
||||||
|
<!-- begin new footer -->
|
||||||
|
<HR>
|
||||||
|
|
||||||
|
<i>This page produced by the <A HREF="mailto:iesg-secretary@ietf.org">IETF Secretariat</a>
|
||||||
|
for the <A HREF="mailto:iesg@ietf.org">IESG</A></i>
|
||||||
|
<p>
|
||||||
|
|
||||||
|
{% endblock %}
|
Loading…
Reference in a new issue