From 3f13f31569ca34c21ac40cdc7c01063f6df40080 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20A=2E=20S=C3=A1nchez=20L=C3=B3pez?= Date: Mon, 7 Feb 2011 09:56:11 +0000 Subject: [PATCH] Allow to change the state of a draft and store the information about that change. Fixes #542 - Legacy-Id: 2815 --- ietf/ietfworkflows/utils.py | 51 ++++++++++++++++++++++++++++++------- 1 file changed, 42 insertions(+), 9 deletions(-) diff --git a/ietf/ietfworkflows/utils.py b/ietf/ietfworkflows/utils.py index 821c53eda..cd5d3c3a9 100644 --- a/ietf/ietfworkflows/utils.py +++ b/ietf/ietfworkflows/utils.py @@ -6,14 +6,15 @@ from django.contrib.contenttypes.models import ContentType from django.core.mail import EmailMessage from django.template.loader import render_to_string -from workflows.models import State +from workflows.models import State, StateObjectRelation from workflows.utils import (get_workflow_for_object, set_workflow_for_object, - get_state) + get_state, set_state) from ietf.ietfworkflows.streams import get_streamed_draft, get_stream_from_draft from ietf.ietfworkflows.models import (WGWorkflow, AnnotationTagObjectRelation, AnnotationTag, ObjectAnnotationTagHistoryEntry, - ObjectHistoryEntry) + ObjectHistoryEntry, StateObjectRelationMetadata, + ObjectWorkflowHistoryEntry) WAITING_WRITEUP = 'WG Consensus: Waiting for Write-Up' @@ -161,6 +162,21 @@ def reset_tag_by_name(obj, tag_name): return False +def set_state_for_draft(draft, state, estimated_date=None): + workflow = get_workflow_for_draft(draft) + if state in workflow.get_states(): + set_state(draft, state) + relation = StateObjectRelation.objects.get( + content_type=ContentType.objects.get_for_model(draft), + content_id=draft.pk) + metadata = StateObjectRelationMetadata.objects.get_or_create(relation=relation)[0] + metadata.from_date = datetime.date.today() + metadata.to_date = estimated_date + metadata.save() + return state + return False + + def notify_entry(entry, template, extra_notify=[]): doc = entry.content wg = doc.group.ietfwg @@ -213,12 +229,29 @@ def update_tags(obj, comment, person, set_tags=[], reset_tags=[], extra_notify=[ notify_tag_entry(entry, extra_notify) +def update_state(obj, comment, person, to_state, estimated_date=None, extra_notify=[]): + ctype = ContentType.objects.get_for_model(obj) + from_state = get_state_for_draft(obj) + to_state = set_state_for_draft(obj, to_state, estimated_date) + if not to_state: + return False + entry = ObjectWorkflowHistoryEntry.objects.create( + content_type=ctype, + content_id=obj.pk, + from_state=from_state.name, + to_state=to_state.name, + date=datetime.datetime.now(), + comment=comment, + person=person) + notify_state_entry(entry, extra_notify) + + def get_full_info_for_draft(draft): return dict( - streamed = get_streamed_draft(draft), - stream = get_stream_from_draft(draft), - workflow = get_workflow_for_draft(draft), - tags = [i.annotation_tag for i in get_annotation_tags_for_draft(draft)], - state = get_state_for_draft(draft), - shepherd = draft.shepherd, + streamed=get_streamed_draft(draft), + stream=get_stream_from_draft(draft), + workflow=get_workflow_for_draft(draft), + tags=[i.annotation_tag for i in get_annotation_tags_for_draft(draft)], + state=get_state_for_draft(draft), + shepherd=draft.shepherd, )