From 5f4d99a36a52ed1a148d1ecef4b5ab39b1639244 Mon Sep 17 00:00:00 2001 From: Bill Fenner <fenner@fenron.net> Date: Wed, 30 May 2007 21:09:17 +0000 Subject: [PATCH] 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 --- ietf/idtracker/models.py | 19 ++++----- ietf/idtracker/urls.py | 2 + ietf/idtracker/views.py | 9 ++++- ietf/templates/idtracker/document_entry.html | 24 ++++++++++++ ietf/templates/idtracker/status_of_items.html | 39 +++++++++++++++++++ 5 files changed, 83 insertions(+), 10 deletions(-) create mode 100644 ietf/templates/idtracker/document_entry.html create mode 100644 ietf/templates/idtracker/status_of_items.html diff --git a/ietf/idtracker/models.py b/ietf/idtracker/models.py index 3352de23d..4bccac7e0 100644 --- a/ietf/idtracker/models.py +++ b/ietf/idtracker/models.py @@ -111,7 +111,7 @@ class IDIntendedStatus(models.Model): class InternetDraft(models.Model): 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) group = models.ForeignKey(Acronym, db_column='group_acronym_id') filename = models.CharField(maxlength=255, unique=True) @@ -143,7 +143,7 @@ class InternetDraft(models.Model): expired_tombstone = models.BooleanField() idinternal = FKAsOneToOne('idinternal', reverse=True, query=models.Q(rfc_flag = 0)) def save(self): - self.id_document_key = self.id_document_name.upper() + self.id_document_key = self.title.upper() super(InternetDraft, self).save() def displayname(self): return "%s-%s.txt" % ( self.filename, self.revision ) @@ -304,7 +304,7 @@ class RfcStatus(models.Model): class Rfc(models.Model): 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) group_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): return "RFC%04d" % ( self.rfc_number ) def save(self): - self.rfc_name_key = self.rfc_name.upper() + self.rfc_name_key = self.title.upper() super(Rfc, self).save() def displayname(self): return "rfc%d.txt" % ( self.rfc_number ) @@ -339,8 +339,8 @@ class Rfc(models.Model): verbose_name = 'RFC' verbose_name_plural = 'RFCs' class Admin: - search_fields = ['rfc_name', 'group', 'area'] - list_display = ['rfc_number', 'rfc_name'] + search_fields = ['title', 'group', 'area'] + list_display = ['rfc_number', 'title'] pass 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') rfc_flag = models.IntegerField(null=True) - #ballot_id = models.IntegerField() 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) token_name = models.CharField(blank=True, maxlength=25) token_email = models.CharField(blank=True, maxlength=255) @@ -457,7 +456,9 @@ class IDInternal(models.Model): def comments(self): return self.documentcomment_set.all().filter(rfc_flag=self.rfc_flag).order_by('-comment_date','-comment_time') 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: db_table = 'id_internal' verbose_name = 'IDTracker Draft' diff --git a/ietf/idtracker/urls.py b/ietf/idtracker/urls.py index 1836ab11e..e3c15f0f4 100644 --- a/ietf/idtracker/urls.py +++ b/ietf/idtracker/urls.py @@ -23,6 +23,8 @@ urlpatterns = patterns('django.views.generic.simple', ) urlpatterns += patterns('', (r'^send_email/$', views.send_email), + (r'^status/$', views.status), + (r'^last_call/$', views.last_call), ) urlpatterns += patterns('django.views.generic.list_detail', (r'^rfc(?P<object_id>\d+)/$', 'object_detail', rfc_dict), diff --git a/ietf/idtracker/views.py b/ietf/idtracker/views.py index 7d6d6128d..8368172d1 100644 --- a/ietf/idtracker/views.py +++ b/ietf/idtracker/views.py @@ -4,7 +4,7 @@ from django import newforms as forms from django.template import RequestContext, Context, loader from django.shortcuts import get_object_or_404, render_to_response 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.forms import EmailFeedback 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}, 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'}) diff --git a/ietf/templates/idtracker/document_entry.html b/ietf/templates/idtracker/document_entry.html new file mode 100644 index 000000000..73fdb9b3e --- /dev/null +++ b/ietf/templates/idtracker/document_entry.html @@ -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 %} diff --git a/ietf/templates/idtracker/status_of_items.html b/ietf/templates/idtracker/status_of_items.html new file mode 100644 index 000000000..37c6109ff --- /dev/null +++ b/ietf/templates/idtracker/status_of_items.html @@ -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 %}