Replace individual state change event types with an all-encompassing
ChangeStateGroupEvent - Legacy-Id: 3804
This commit is contained in:
parent
dceedbf53d
commit
2021a0330d
|
@ -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")
|
||||
|
|
|
@ -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: "
|
||||
|
|
|
@ -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:
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue