diff options
-rw-r--r-- | app/models/info_request.rb | 40 | ||||
-rw-r--r-- | app/models/info_request_event.rb | 7 | ||||
-rw-r--r-- | app/views/request/_request_listing_via_event.rhtml | 8 | ||||
-rw-r--r-- | db/migrate/047_add_calculated_state.rb | 9 | ||||
-rw-r--r-- | db/schema.rb | 11 |
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| |