Add "Assigned to area" select box to individually submitted documents

in the AD edit form, change search to define area = doc.group or
doc.group.parent (so don't take AD into account), plus a bunch of
small tweaks to make a document with an area set as group behave like
an individually submitted document, at least for the time being (they
are presented as "Individual in xyz area" on their document page)
 - Legacy-Id: 3968
This commit is contained in:
Ole Laursen 2012-02-25 01:48:33 +00:00
parent 0909534588
commit f05bc8cf1f
9 changed files with 50 additions and 26 deletions

View file

@ -232,7 +232,11 @@ class InternetDraft(Document):
def filename_with_rev(self):
return "%s-%s.txt" % (self.filename, self.revision_display())
def group_acronym(self):
return super(Document, self).group.acronym
g = super(Document, self).group
if g.type_id == "area":
return "none"
else:
return g.acronym
def group_ml_archive(self):
return self.group.list_archive
def idstate(self):
@ -385,15 +389,11 @@ class InternetDraft(Document):
def area_acronym(self):
from ietf.group.proxy import Area
g = super(InternetDraft, self).group # be careful with group which is proxied
if g and g.type_id != "individ":
return Area().from_object(g.parent)
elif self.ad:
# return area for AD
try:
area = Group.objects.get(role__name="ad", role__person=self.ad, state="active")
return Area().from_object(area)
except Group.DoesNotExist:
return None
if g:
if g.type_id == "area":
return Area().from_object(g)
elif g.type_id != "individ":
return Area().from_object(g.parent)
else:
return None

View file

@ -101,7 +101,7 @@ def send_expire_warning_for_idREDESIGN(doc):
to = [e.formatted_email() for e in doc.authors.all() if not e.address.startswith("unknown-email")]
cc = None
if doc.group.type_id != "individ":
if doc.group.type_id in ("wg", "rg"):
cc = [e.formatted_email() for e in Email.objects.filter(role__group=doc.group, role__name="chair") if not e.address.startswith("unknown-email")]
s = doc.get_state("draft-iesg")

View file

@ -158,7 +158,11 @@ class IdWrapper:
if self._draft.group_id == Acronym.INDIVIDUAL_SUBMITTER:
return "Individual"
if settings.USE_DB_REDESIGN_PROXY_CLASSES:
if self._draft.group and self._draft.group.type_id == "area":
return u"Individual in %s area" % self._draft.group.acronym
a = self.group_acronym()
if a:
if settings.USE_DB_REDESIGN_PROXY_CLASSES and self._draft.stream_id == "ietf" and self._draft.get_state_slug("draft-stream-ietf") == "c-adopt":
@ -174,7 +178,7 @@ class IdWrapper:
if self._idinternal and self._idinternal.via_rfc_editor:
return "www.ietf.org/mail-archive/web/"
if self._draft.group_id == Acronym.INDIVIDUAL_SUBMITTER:
if self._draft.group_id == Acronym.INDIVIDUAL_SUBMITTER or (settings.USE_DB_REDESIGN_PROXY_CLASSES and self._draft.group.type_id == "area"):
return "www.ietf.org/mail-archive/web/"
a = self._draft.group_ml_archive()
@ -188,6 +192,8 @@ class IdWrapper:
def group_acronym(self):
if self._draft.group_id != 0 and self._draft.group != None and str(self._draft.group) != "none":
if settings.USE_DB_REDESIGN_PROXY_CLASSES and self._draft.group.type_id == "area":
return None
return str(self._draft.group)
else:
return None

View file

@ -151,7 +151,7 @@ def generate_last_call_announcementREDESIGN(request, doc):
expiration_date = date.today() + timedelta(days=14)
cc = []
if doc.group.type_id == "individ":
if doc.group.type_id in ("individ", "area"):
group = "an individual submitter"
expiration_date += timedelta(days=14)
else:
@ -308,7 +308,7 @@ def generate_approval_mail_approved(request, doc):
# the second check catches some area working groups (like
# Transport Area Working Group)
if doc.group.type_id not in ("area", "individ") and not doc.group.name.endswith("Working Group"):
if doc.group.type_id not in ("area", "individ", "ag") and not doc.group.name.endswith("Working Group"):
doc.group.name_with_wg = doc.group.name + " Working Group"
if doc.group.list_email:
cc.append("%s mailing list <%s>" % (doc.group.acronym, doc.group.list_email))
@ -318,7 +318,7 @@ def generate_approval_mail_approved(request, doc):
doc.filled_title = textwrap.fill(doc.title, width=70, subsequent_indent=" " * 3)
if doc.group.type_id == "individ":
if doc.group.type_id in ("individ", "area"):
made_by = "This document has been reviewed in the IETF but is not the product of an IETF Working Group."
else:
made_by = "This document is the product of the %s." % doc.group.name_with_wg
@ -326,7 +326,7 @@ def generate_approval_mail_approved(request, doc):
director = doc.ad
other_director = Person.objects.filter(role__group__role__person=director, role__group__role__name="ad").exclude(pk=director.pk)
if doc.group.type_id != "individ" and other_director:
if doc.group.type_id not in ("individ", "area") and other_director:
contacts = "The IESG contact persons are %s and %s." % (director.plain_name(), other_director[0].plain_name())
else:
contacts = "The IESG contact person is %s." % director.plain_name()

View file

@ -1385,7 +1385,7 @@ def make_last_callREDESIGN(request, name):
initial = {}
initial["last_call_sent_date"] = date.today()
expire_days = 14
if doc.group.type_id == "individ":
if doc.group.type_id in ("individ", "area"):
expire_days = 28
initial["last_call_expiration_date"] = date.today() + timedelta(days=expire_days)

View file

@ -443,6 +443,7 @@ class EditInfoFormREDESIGN(forms.Form):
intended_std_level = forms.ModelChoiceField(IntendedStdLevelName.objects.all(), empty_label="(None)", required=True, label="Intended RFC status")
via_rfc_editor = forms.BooleanField(required=False, label="Via IRTF or RFC Editor")
stream = forms.ModelChoiceField(StreamName.objects.all(), empty_label="(None)", required=True)
area = forms.ModelChoiceField(Group.objects.filter(type="area", state="active"), empty_label="(None - individual submission)", required=False, label="Assigned to area")
ad = forms.ModelChoiceField(Person.objects.filter(role__name="ad", role__group__state="active").order_by('name'), label="Responsible AD", empty_label="(None)", required=True)
create_in_state = forms.ModelChoiceField(State.objects.filter(type="draft-iesg", slug__in=("pub-req", "watching")), empty_label=None, required=False)
notify = forms.CharField(max_length=255, label="Notice emails", help_text="Separate email addresses with commas", required=False)
@ -478,7 +479,7 @@ class EditInfoFormREDESIGN(forms.Form):
def get_initial_notify(doc):
# set change state notice to something sensible
receivers = []
if doc.group.type_id == "individ":
if doc.group.type_id in ("individ", "area"):
for a in doc.authors.all():
receivers.append(a.address)
else:
@ -546,9 +547,9 @@ def edit_infoREDESIGN(request, name):
changes = []
def desc(attr, new, old):
entry = "%(attr)s has been changed to <b>%(new)s</b> from <b>%(old)s</b>"
entry = "%(attr)s changed to <b>%(new)s</b> from <b>%(old)s</b>"
if new_document:
entry = "%(attr)s has been changed to <b>%(new)s</b>"
entry = "%(attr)s changed to <b>%(new)s</b>"
return entry % dict(attr=attr, new=new, old=old)
@ -576,6 +577,17 @@ def edit_infoREDESIGN(request, name):
doc.note = r['note']
if doc.group.type_id in ("individ", "area"):
if not r["area"]:
r["area"] = Group.objects.get(type="individ")
if r["area"] != doc.group:
if r["area"].type_id == "area":
changes.append(u"Assigned to <b>%s</b>" % r["area"].name)
else:
changes.append(u"No longer assigned to any area")
doc.group = r["area"]
for c in changes:
e = DocEvent(doc=doc, by=login)
e.desc = c
@ -601,6 +613,7 @@ def edit_infoREDESIGN(request, name):
return HttpResponseRedirect(doc.get_absolute_url())
else:
init = dict(intended_std_level=doc.intended_std_level_id,
area=doc.group_id,
ad=doc.ad_id,
stream=doc.stream_id,
notify=doc.notify,
@ -616,7 +629,9 @@ def edit_infoREDESIGN(request, name):
form.standard_fields = [x for x in form.standard_fields if x.name != "create_in_state"]
if not has_role(request.user, 'Secretariat'):
form.standard_fields = [x for x in form.standard_fields if x.name != "via_rfc_editor"]
if doc.group.type_id not in ("individ", "area"):
form.standard_fields = [x for x in form.standard_fields if x.name != "area"]
return render_to_response('idrfc/edit_infoREDESIGN.html',
dict(doc=doc,
form=form,

View file

@ -360,9 +360,7 @@ if settings.USE_DB_REDESIGN_PROXY_CLASSES:
docs = docs.filter(group__acronym=query["group"])
elif by == "area":
docs = docs.filter(Q(group__type="wg", group__parent=query["area"]) |
Q(group__type="individ",
ad__role__name="ad",
ad__role__group=query["area"])).distinct()
Q(group=query["area"])).distinct()
elif by == "ad":
docs = docs.filter(ad=query["ad"])
elif by == "state":

View file

@ -229,6 +229,8 @@ class UploadForm(forms.Form):
if existing_draft:
group = existing_draft[0].group and existing_draft[0].group.ietfwg or None
if group and group.pk != NONE_WG:
if settings.USE_DB_REDESIGN_PROXY_CLASSES and group.type_id == "area":
return None
return group
else:
return None

View file

@ -107,7 +107,10 @@ def perform_postREDESIGN(request, submission):
draft.type_id = "draft"
draft.time = datetime.datetime.now()
draft.title = submission.id_document_name
draft.group_id = group_id
if not (group_id == NONE_WG and draft.group and draft.group.type_id == "area"):
# don't overwrite an assigned area if it's still an individual
# submission
draft.group_id = group_id
draft.rev = submission.revision
draft.pages = submission.txt_page_count
draft.abstract = submission.abstract