Skip to content

Instantly share code, notes, and snippets.

@gabemcmillan
Last active December 21, 2015 20:29
Show Gist options
  • Save gabemcmillan/6361137 to your computer and use it in GitHub Desktop.
Save gabemcmillan/6361137 to your computer and use it in GitHub Desktop.
Code to check a message's created at time/date, see if its within a certain time window, and either send a reminder email or send a cancel email and cancel a Braintree Payments transaction. (gems used: whenever, usermailer, delayed job)
config/scheduler
set :output, "#{path}/log/cron.log"
case @environment
when 'development'
every :reboot do
command "script/delayed_job start"
rake "ts:index"
end
#tasks to execute every 1 hour
every 10.minutes do
rake "ts:index"
rake "send_reminder1"
rake "cancel_messages"
end
end
case @environment
when 'production'
every :reboot do
command "script/delayed_job start"
rake "ts:index"
end
#tasks to execute every 1 hour
every 1.hour do
rake "ts:index"
rake "send_reminder1"
rake "cancel_messages"
end
end
models/message.rb
def self.reminder1
#query for only messages marked "New"
@messages = Message.find(:all, :conditions=>{:status=>"New"})
#for loop to loop through collection
for message in @messages do
#get advisor object from message association
@advisor = Advisor.find(:first, :conditions => { :id => message.advisor_id})
#if message was created more than 48 hours ago, send reminder email
if (message.created_at < 72.hours.ago && message.created_at > 96.hours.ago)
#send reminder email to Advisor to respond to their message before its cancelled. They have 1 day left.
UserMailer.delay(queue: "email_reminder_message").reminder_message_advisor(@advisor, message)
else
puts "False"
end
end
end
def self.cancel
#query for only messages marked "New"
@messages = Message.find(:all, :conditions=>{:status=>"New"})
#for loop to loop through collection
for message in @messages do
#get advisor object from message association
@advisor = Advisor.find(:first, :conditions => { :id => message.advisor_id})
#if message was created more than 72 hours ago, cancel message
if (message.created_at < 120.hours.ago)
#edit message.status to "Cancelled", void Braintree payment by transaction_id, send cancelled
#email to advisor and advisee that its been over the 5 day ( hour) time limit.
#void braintree payment by transaction_id
result = Braintree::Transaction.void(message.transaction_id)
if result.success?
# transaction successfully voided
message.status = "Canceled"
message.save
#send cancelled email to advisor
UserMailer.delay(queue: "email_canceled_message").canceled_message_advisor(@advisor, message)
#send cancelled email to advisee that their payment has been voided
@user = User.find(:first, :conditions => { :id => message.user_id})
UserMailer.delay(queue: "email_canceled_message").canceled_message_advisee(@user, message)
else
p result.errors
end
else
puts "False"
end
end
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment