Replace individual state change event types with an all-encompassing

ChangeStateGroupEvent
 - Legacy-Id: 3804
This commit is contained in:
Ole Laursen 2012-01-12 18:26:45 +00:00
parent dceedbf53d
commit 2021a0330d
6 changed files with 42 additions and 45 deletions

View file

@ -35,7 +35,7 @@ def nomcom(request):
'regimes' : regimes })
def nomcomREDESIGN(request):
from group.models import Group
from group.models import Group, ChangeStateGroupEvent
from ietf.announcements.models import Message
address_re = re.compile("<.*>")
@ -45,11 +45,11 @@ def nomcomREDESIGN(request):
regimes = []
for n in nomcoms:
e = n.latest_event(type="started")
e = n.latest_event(ChangeStateGroupEvent, type="changed_state", state="active")
n.start_year = e.time.year if e else 0
if n.start_year <= 2003:
continue
e = n.latest_event(type="concluded")
e = n.latest_event(ChangeStateGroupEvent, type="changed_state", state="conclude")
n.end_year = e.time.year if e else ""
chair = n.role_set.select_related().get(name="chair")

View file

@ -2,8 +2,8 @@ from django.conf import settings
import re
from datetime import datetime
from group.models import GroupEvent
from doc.models import Document, DocAlias, DocHistory, RelatedDocument, DocumentAuthor
from redesign.group.models import GroupEvent, ChangeStateGroupEvent
from redesign.doc.models import Document, DocAlias, DocHistory, RelatedDocument, DocumentAuthor, DocEvent
from ietf.utils.history import find_history_active_at
def set_or_create_charter(wg):
@ -81,8 +81,6 @@ def add_wg_comment(request, wg, text, ballot=None):
e.save()
def log_state_changed(request, doc, by, prev_state, note=''):
from doc.models import DocEvent
e = DocEvent(doc=doc, by=by)
e.type = "changed_document"
e.desc = u"State changed to <b>%s</b> from %s" % (
@ -96,16 +94,12 @@ def log_state_changed(request, doc, by, prev_state, note=''):
return e
def log_group_state_changed(request, wg, by, note=''):
from group.models import GroupEvent
e = GroupEvent(group=wg, by=by)
if wg.state_id == "proposed":
e.type = "proposed"
elif wg.state_id == "active":
e.type = "started"
elif wg.state_id == "conclude":
e.type = "concluded"
e.desc = u"%s group" % e.type.capitalize()
e = ChangeStateGroupEvent(group=wg, by=by, type="changed_state")
e.state = wg.state
e.desc = { 'active': "Started group",
'propose': "Proposed group",
'conclude': "Concluded group",
}[wg.state_id]
if note:
e.desc += "<br>%s" % note
@ -114,8 +108,6 @@ def log_group_state_changed(request, wg, by, note=''):
return e
def log_info_changed(request, wg, by, note=''):
from group.models import GroupEvent
e = GroupEvent(group=wg, by=by)
e.type = "info_changed"
e.desc = "WG info changed: "

View file

@ -8,7 +8,7 @@ from django.template import RequestContext
from django import forms
from django.forms.util import ErrorList
from utils import log_state_changed, log_group_state_changed, log_info_changed, update_telechat, add_wg_comment, set_or_create_charter, save_charter_in_history, approved_revision
from utils import *
from mails import email_secretariat
from ietf.ietfauth.decorators import group_required
from ietf.iesg.models import TelechatDate
@ -297,9 +297,10 @@ def edit_info(request, name=None):
state=GroupStateName.objects.get(name="Proposed"))
wg.save()
e = GroupEvent(group=wg, type="proposed")
e = ChangeStateGroupEvent(group=wg, type="changed_state")
e.time = datetime.datetime.now()
e.by = login
e.state_id = "proposed"
e.desc = "Proposed group"
e.save()
if not wg.charter:

View file

@ -38,11 +38,14 @@ class Group(GroupInfo):
charter = models.OneToOneField('doc.Document', related_name='chartered_group', blank=True, null=True)
def latest_event(self, *args, **filter_args):
"""Get latest group event with filter arguments, e.g.
d.latest_event(type="xyz")."""
e = GroupEvent.objects.filter(group=self).filter(**filter_args).order_by('-time', '-id')[:1]
"""Get latest event of optional Python type and with filter
arguments, e.g. g.latest_event(type="xyz") returns a GroupEvent
while g.latest_event(ChangeStateGroupEvent, type="xyz") returns a
ChangeStateGroupEvent event."""
model = args[0] if args else GroupEvent
e = model.objects.filter(group=self).filter(**filter_args).order_by('-time', '-id')[:1]
return e[0] if e else None
class GroupHistory(GroupInfo):
group = models.ForeignKey(Group, related_name='history_set')
acronym = models.CharField(max_length=40)
@ -75,12 +78,7 @@ class GroupStateTransitions(models.Model):
next_states = models.ManyToManyField('doc.State', related_name='previous_groupstatetransitions_states')
GROUP_EVENT_CHOICES = [
# core events
("proposed", "Proposed group"),
("started", "Started group"),
("concluded", "Concluded group"),
# misc group events
("changed_state", "Changed state"),
("added_comment", "Added comment"),
("info_changed", "Changed metadata"),
]
@ -99,6 +97,9 @@ class GroupEvent(models.Model):
class Meta:
ordering = ['-time', 'id']
class ChangeStateGroupEvent(GroupEvent):
state = models.ForeignKey(GroupStateName)
class Role(models.Model):
name = models.ForeignKey(RoleName)
group = models.ForeignKey(Group)

View file

@ -105,7 +105,7 @@ class IETFWG(Group):
group_type=lambda v: ("type", { 1: "wg" }[int(v)]),
status=lambda v: ("state", { 1: "active" }[int(v)]),
areagroup__area__status=lambda v: ("parent__state", { 1: "active" }[v]),
start_date__isnull=lambda v: None if v else ("groupevent__type", "started")
start_date__isnull=lambda v: None if v else ("groupevent__changestategroupevent__state__slug__in", ("proposed", "active"))
),
always_filter=dict(type__in=("wg", "individ")))
@ -125,7 +125,7 @@ class IETFWG(Group):
#start_date = models.DateField(null=True, blank=True)
@property
def start_date(self):
e = self.latest_event(type="started")
e = self.latest_event(ChangeStateGroupEvent, type="changed_state", state="active")
return e.time.date() if e else None
#dormant_date = models.DateField(null=True, blank=True)

View file

@ -161,16 +161,18 @@ for o in ChairsHistory.objects.filter(chair_type=Role.NOMCOM_CHAIR).order_by("st
# we need start/end year so fudge events
group.groupevent_set.all().delete()
e = GroupEvent(group=group, type="started")
e = ChangeStateGroupEvent(group=group, type="changed_state")
e.time = datetime.datetime(o.start_year, 5, 1, 12, 0, 0)
e.by = system
e.desc = e.get_type_display()
e.desc = "Started group"
e.state = state_names["active"]
e.save()
e = GroupEvent(group=group, type="concluded")
e = ChangeStateGroupEvent(group=group, type="changed_state")
e.time = datetime.datetime(o.end_year, 5, 1, 12, 0, 0)
e.by = system
e.desc = e.get_type_display()
e.desc = "Concluded group"
e.state = state_names["conclude"]
e.save()
# IRTF
@ -208,13 +210,14 @@ for o in SDOs.objects.all().order_by("pk"):
group.acronym = slugify(group.name)
group.save()
def import_date_event(group, name, type_name):
def import_date_event(group, name, state_id, desc):
d = getattr(o, "%s_date" % name)
if d:
e = GroupEvent(group=group, type=type_name)
e = ChangeStateGroupEvent(group=group, type="changed_state")
e.time = datetime.datetime.combine(d, datetime.time(12, 0, 0))
e.by = system
e.desc = e.get_type_display()
e.state = state_names[state_id]
e.desc = desc
e.save()
# Area
@ -254,8 +257,8 @@ for o in Area.objects.all():
# import events
group.groupevent_set.all().delete()
import_date_event(group, "start", "started")
import_date_event(group, "concluded", "concluded")
import_date_event(group, "start", "active", "Started group")
import_date_event(group, "concluded", "conclude", "Concluded group")
# FIXME: missing fields from old: extra_email_addresses
@ -391,9 +394,9 @@ for o in IETFWG.objects.all().order_by("pk"):
# import events
group.groupevent_set.all().delete()
import_date_event(group, "proposed", "proposed")
import_date_event(group, "start", "started")
import_date_event(group, "concluded", "concluded")
import_date_event(group, "proposed", "proposed", "Proposed group")
import_date_event(group, "start", "active", "Started group")
import_date_event(group, "concluded", "conclude", "Concluded group")
# dormant_date is empty on all so don't bother with that
# FIXME: missing fields from old: meeting_scheduled, email_keyword, meeting_scheduled_old