From cb458b16898c35e91797119f71f1d4f08d1e4924 Mon Sep 17 00:00:00 2001
From: Robert Sparks <rjsparks@nostrum.com>
Date: Wed, 30 Apr 2014 22:17:01 +0000
Subject: [PATCH] Protect against cases where add_state_change_event can return
 None. Fixes bug # 1383. Commit ready for merge.  - Legacy-Id: 7677

---
 ietf/doc/lastcall.py            |  2 +-
 ietf/doc/views_ballot.py        | 10 +++++-----
 ietf/doc/views_charter.py       |  2 +-
 ietf/doc/views_status_change.py |  6 +++---
 ietf/secr/telechat/views.py     |  2 +-
 5 files changed, 11 insertions(+), 11 deletions(-)

diff --git a/ietf/doc/lastcall.py b/ietf/doc/lastcall.py
index 22e1376a5..6310de4a4 100644
--- a/ietf/doc/lastcall.py
+++ b/ietf/doc/lastcall.py
@@ -61,7 +61,7 @@ def expire_last_call(doc):
     system = Person.objects.get(name="(System)")
     e = add_state_change_event(doc, system, prev_state, new_state, prev_tags=prev_tags, new_tags=[])
                     
-    doc.time = e.time
+    doc.time = (e and e.time) or datetime.datetime.now()
     doc.save()
 
     email_last_call_expired(doc)
diff --git a/ietf/doc/views_ballot.py b/ietf/doc/views_ballot.py
index 2c7143ba4..c347aedce 100644
--- a/ietf/doc/views_ballot.py
+++ b/ietf/doc/views_ballot.py
@@ -64,7 +64,7 @@ def do_undefer_ballot(request, doc):
 
     e = add_state_change_event(doc, login, prev_state, new_state, prev_tags=prev_tags, new_tags=new_tags)
     
-    doc.time = e.time
+    doc.time = (e and e.time) or datetime.datetime.now()
     doc.save()
 
     update_telechat(request, doc, login, telechat_date)
@@ -360,7 +360,7 @@ def defer_ballot(request, name):
 
         e = add_state_change_event(doc, login, prev_state, new_state, prev_tags=prev_tags, new_tags=new_tags)
         
-        doc.time = e.time
+        doc.time = (e and e.time) or datetime.datetime.now()
         doc.save()
 
         email_state_changed(request, doc, e.desc)
@@ -450,7 +450,7 @@ def lastcalltext(request, name):
 
                     e = add_state_change_event(doc, login, prev_state, new_state, prev_tags=prev_tags, new_tags=[])
 
-                    doc.time = e.time
+                    doc.time = (e and e.time) or datetime.datetime.now()
                     doc.save()
 
                     email_state_changed(request, doc, e.desc)
@@ -694,7 +694,7 @@ def approve_ballot(request, name):
         
         e = add_state_change_event(doc, login, prev_state, new_state, prev_tags=prev_tags, new_tags=[])
 
-        doc.time = e.time
+        doc.time = (e and e.time) or datetime.datetime.now()
         doc.save()
 
         email_state_changed(request, doc, change_description)
@@ -773,7 +773,7 @@ def make_last_call(request, name):
 
             e = add_state_change_event(doc, login, prev_state, new_state, prev_tags=prev_tags, new_tags=new_tags)
 
-            doc.time = e.time
+            doc.time = (e and e.time) or datetime.datetime.now()
             doc.save()
 
             change_description = "Last call has been made for %s and state has been changed to %s" % (doc.name, new_state.name)
diff --git a/ietf/doc/views_charter.py b/ietf/doc/views_charter.py
index cfd883605..a3247eee2 100644
--- a/ietf/doc/views_charter.py
+++ b/ietf/doc/views_charter.py
@@ -616,7 +616,7 @@ def approve(request, name):
 
             change_description += " and %s state has been changed to %s" % (group.type.name, new_state.name)
 
-        e = add_state_change_event(charter, login, prev_charter_state, new_charter_state)
+        add_state_change_event(charter, login, prev_charter_state, new_charter_state)
 
         # according to spec, 00-02 becomes 01, so copy file and record new revision
         try:
diff --git a/ietf/doc/views_status_change.py b/ietf/doc/views_status_change.py
index da9730bd2..7c3244d32 100644
--- a/ietf/doc/views_status_change.py
+++ b/ietf/doc/views_status_change.py
@@ -53,9 +53,9 @@ def change_state(request, name, option=None):
                 save_document_in_history(status_change)
 
                 status_change.set_state(new_state)
-                add_state_change_event(status_change, login, prev_state, new_state)
+                e = add_state_change_event(status_change, login, prev_state, new_state)
 
-                status_change.time = datetime.datetime.now()
+                status_change.time = e.time
                 status_change.save()
 
                 if new_state.slug == "iesgeval":
@@ -737,7 +737,7 @@ def last_call(request, name):
                     status_change.set_state(new_state)
                     e = add_state_change_event(status_change, login, prev_state, new_state)
 
-                    status_change.time = e.time
+                    status_change.time = (e and e.time) or datetime.datetime.now()
                     status_change.save()
 
                     request_last_call(request, status_change)
diff --git a/ietf/secr/telechat/views.py b/ietf/secr/telechat/views.py
index f2dfec9e6..84ca8b8cb 100644
--- a/ietf/secr/telechat/views.py
+++ b/ietf/secr/telechat/views.py
@@ -254,7 +254,7 @@ def doc_detail(request, date, name):
 
                     e = add_state_change_event(doc, login, prev_state, new_state,
                                                prev_tags=prev_tags, new_tags=new_tags)
-                    doc.time = e.time
+                    doc.time = (e and e.time) or datetime.datetime.now()
                     doc.save()
 
                     email_state_changed(request, doc, e.desc)