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:
Bill Fenner 2007-05-30 21:09:17 +00:00
parent 7d52fffdcd
commit 5f4d99a36a
5 changed files with 83 additions and 10 deletions

View file

@ -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'

View file

@ -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),

View file

@ -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'})

View 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 %}

View 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 %}