diff options
Diffstat (limited to 'app/models/outgoing_message.rb')
-rw-r--r-- | app/models/outgoing_message.rb | 47 |
1 files changed, 28 insertions, 19 deletions
diff --git a/app/models/outgoing_message.rb b/app/models/outgoing_message.rb index cd28d7ae0..a8d9425c5 100644 --- a/app/models/outgoing_message.rb +++ b/app/models/outgoing_message.rb @@ -1,16 +1,17 @@ # == Schema Information -# Schema version: 24 +# Schema version: 25 # # Table name: outgoing_messages # -# id :integer not null, primary key -# info_request_id :integer -# body :text -# status :string(255) -# message_type :string(255) -# created_at :datetime -# updated_at :datetime -# last_sent_at :datetime +# id :integer not null, primary key +# info_request_id :integer +# body :text +# status :string(255) +# message_type :string(255) +# created_at :datetime +# updated_at :datetime +# last_sent_at :datetime +# incoming_message_followup_id :integer # # models/outgoing_message.rb: @@ -20,16 +21,18 @@ # Copyright (c) 2007 UK Citizens Online Democracy. All rights reserved. # Email: francis@mysociety.org; WWW: http://www.mysociety.org/ # -# $Id: outgoing_message.rb,v 1.18 2008-01-04 11:19:18 francis Exp $ +# $Id: outgoing_message.rb,v 1.19 2008-01-10 01:13:28 francis Exp $ class OutgoingMessage < ActiveRecord::Base belongs_to :info_request validates_presence_of :info_request - validates_presence_of :body, :message => "^Please enter your letter requesting information." + validates_presence_of :body, :message => "^Please enter your letter requesting information" + validates_inclusion_of :status, :in => ['ready', 'sent', 'failed'] + validates_inclusion_of :message_type, :in => ['initial_request', 'followup' ] #, 'complaint'] - validates_inclusion_of :message_type, :in => ['initial_request'] #, 'complaint'] + belongs_to :incoming_message_followup, :foreign_key => 'incoming_message_followup_id', :class_name => 'IncomingMessage' # Set default letter def after_initialize @@ -52,20 +55,26 @@ class OutgoingMessage < ActiveRecord::Base # Note: You can test this from script/console with, say: # InfoRequest.find(1).outgoing_messages[0].send_message def send_message(log_event_type = 'sent') - if self.message_type == 'initial_request' - if self.status == 'ready' + if self.status == 'ready' + if self.message_type == 'initial_request' RequestMailer.deliver_initial_request(self.info_request, self) self.last_sent_at = Time.now self.status = 'sent' self.save! self.info_request.log_event(log_event_type, { :email => self.info_request.recipient_email, :outgoing_message_id => self.id }) - elsif self.status == 'sent' - raise "Message id #{self.id} has already been sent" + elsif self.message_type == 'followup' + RequestMailer.deliver_followup(self.info_request, self, self.incoming_message_followup) + self.last_sent_at = Time.now + self.status = 'sent' + self.save! + self.info_request.log_event('followup_' + log_event_type, { :email => self.info_request.recipient_email, :outgoing_message_id => self.id }) else - raise "Message id #{self.id} not in state for send_message" + raise "Message id #{self.id} has type '#{self.message_type}' which send_message can't handle" end + elsif self.status == 'sent' + raise "Message id #{self.id} has already been sent" else - raise "Message id #{self.id} has type '#{self.message_type}' which send_message can't handle" + raise "Message id #{self.id} not in state for send_message" end end @@ -75,7 +84,7 @@ class OutgoingMessage < ActiveRecord::Base self.status = 'ready' send_message('resent') else - raise "Message id #{self.id} has type '#{self.message_type}' status '#{self.status}' " + raise "Message id #{self.id} has type '#{self.message_type}' status '#{self.status}' which resend_message can't handle" end end |