aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/info_request.rb40
-rw-r--r--app/models/info_request_event.rb7
-rw-r--r--app/views/request/_request_listing_via_event.rhtml8
-rw-r--r--db/migrate/047_add_calculated_state.rb9
-rw-r--r--db/schema.rb11
5 files changed, 45 insertions, 30 deletions
diff --git a/app/models/info_request.rb b/app/models/info_request.rb
index d1b96bcc3..59889bea1 100644
--- a/app/models/info_request.rb
+++ b/app/models/info_request.rb
@@ -22,7 +22,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: info_request.rb,v 1.75 2008-03-31 17:49:27 francis Exp $
+# $Id: info_request.rb,v 1.76 2008-03-31 19:14:47 francis Exp $
require 'digest/sha1'
@@ -78,26 +78,10 @@ class InfoRequest < ActiveRecord::Base
info_request = InfoRequest.find(id, :lock =>true)
do_index = (info_request.prominence != 'backpage')
- # Fill in any missing event states for first response before a
- # description was made.
- events = info_request.info_request_events.find(:all, :order => "created_at")
- curr_state = nil
- for event in events.reverse
- if event.described_state.nil?
- if not curr_state.nil? and event.event_type == 'response'
- event.described_state = curr_state
- curr_state = nil
- end
- else
- if event.event_type == 'response'
- curr_state = nil
- else
- curr_state = event.described_state
- end
- end
- end
+ info_request.calculate_event_states
# index all the events
+ events = info_request.info_request_events.find(:all, :order => "created_at")
for event in events
if do_index and event.indexed_by_solr
event.solr_save
@@ -250,6 +234,24 @@ public
return self.described_state
end
+ # Fill in any missing event states for first response before a
+ # description was made.
+ def calculate_event_states
+ events = self.info_request_events.find(:all, :order => "created_at")
+ curr_state = nil
+ for event in events.reverse
+ if not event.described_state.nil?
+ curr_state = event.described_state
+ end
+
+ if not curr_state.nil? and event.event_type == 'response'
+ event.calculated_state = curr_state
+ curr_state = nil
+ event.save!
+ end
+ end
+ end
+
# Calculate date by which response is required by law.
#
# ... "working day” means any day other than a Saturday, a Sunday, Christmas
diff --git a/app/models/info_request_event.rb b/app/models/info_request_event.rb
index 20340e540..636c45f35 100644
--- a/app/models/info_request_event.rb
+++ b/app/models/info_request_event.rb
@@ -16,7 +16,7 @@
# Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved.
# Email: francis@mysociety.org; WWW: http://www.mysociety.org/
#
-# $Id: info_request_event.rb,v 1.26 2008-03-31 17:20:59 francis Exp $
+# $Id: info_request_event.rb,v 1.27 2008-03-31 19:14:47 francis Exp $
class InfoRequestEvent < ActiveRecord::Base
belongs_to :info_request
@@ -58,7 +58,7 @@ class InfoRequestEvent < ActiveRecord::Base
{ :variety => :string }
], :if => "$do_solr_index"
def status # for name in Solr queries
- self.info_request.calculate_status
+ self.calculated_state
end
def requested_by
if self.event_type == 'sent'
@@ -145,8 +145,7 @@ class InfoRequestEvent < ActiveRecord::Base
if incoming_message.nil?
raise "display_status only works for incoming messages right now"
end
- status = self.described_state
- raise status.to_s
+ status = self.calculated_state
if status == 'waiting_response'
"Acknowledgement"
elsif status == 'waiting_clarification'
diff --git a/app/views/request/_request_listing_via_event.rhtml b/app/views/request/_request_listing_via_event.rhtml
index 91af64ccf..c6c4fd115 100644
--- a/app/views/request/_request_listing_via_event.rhtml
+++ b/app/views/request/_request_listing_via_event.rhtml
@@ -28,8 +28,12 @@
<strong>Follow up</strong> sent to <%= public_body_link(info_request.public_body) %>
by <%= user_link(info_request.user) %>
<% elsif event.event_type == 'response' %>
- <% # <strong> XXX <%=event.display_status %> <%= info_request.display_status %> </strong> %>
- <strong>Response</strong> by <%= public_body_link(info_request.public_body) %>
+ <% if event.calculated_state.nil? %>
+ <strong>Response</strong>
+ <% else %>
+ <strong> <%=event.display_status %> </strong>
+ <% end %>
+ by <%= public_body_link(info_request.public_body) %>
to <%= user_link(info_request.user) %>
<% else %>
<% raise "unknown event type indexed " + event.event_type %>
diff --git a/db/migrate/047_add_calculated_state.rb b/db/migrate/047_add_calculated_state.rb
new file mode 100644
index 000000000..5e5b93512
--- /dev/null
+++ b/db/migrate/047_add_calculated_state.rb
@@ -0,0 +1,9 @@
+class AddCalculatedState < ActiveRecord::Migration
+ def self.up
+ add_column :info_request_events, :calculated_state, :string, :default => nil
+ end
+
+ def self.down
+ remove_column :info_request_events, :calculated_state
+ end
+end
diff --git a/db/schema.rb b/db/schema.rb
index dbdc7f4fd..6f4c975ae 100644
--- a/db/schema.rb
+++ b/db/schema.rb
@@ -9,7 +9,7 @@
#
# It's strongly recommended to check this file into your version control system.
-ActiveRecord::Schema.define(:version => 46) do
+ActiveRecord::Schema.define(:version => 47) do
create_table "incoming_messages", :force => true do |t|
t.integer "info_request_id", :null => false
@@ -19,11 +19,12 @@ ActiveRecord::Schema.define(:version => 46) do
end
create_table "info_request_events", :force => true do |t|
- t.integer "info_request_id", :null => false
- t.text "event_type", :null => false
- t.text "params_yaml", :null => false
- t.datetime "created_at", :null => false
+ t.integer "info_request_id", :null => false
+ t.text "event_type", :null => false
+ t.text "params_yaml", :null => false
+ t.datetime "created_at", :null => false
t.string "described_state"
+ t.string "calculated_state"
end
create_table "info_requests", :force => true do |t|