diff options
-rw-r--r-- | Gemfile.lock | 5 | ||||
-rw-r--r-- | users/app/models/user.rb | 28 | ||||
-rw-r--r-- | users/config/locales/en.yml | 1 | ||||
-rw-r--r-- | users/config/schedule.rb | 24 | ||||
-rw-r--r-- | users/leap_web_users.gemspec | 1 | ||||
-rw-r--r-- | users/lib/leap_web_users/engine.rb | 1 |
6 files changed, 60 insertions, 0 deletions
diff --git a/Gemfile.lock b/Gemfile.lock index 09d3123..b42ac86 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -42,6 +42,7 @@ PATH leap_web_core (= 0.5.0.rc) rails_warden ruby-srp (~> 0.2.1) + whenever GEM remote: https://rubygems.org/ @@ -88,6 +89,7 @@ GEM rack (>= 1.0.0) rack-test (>= 0.5.4) xpath (~> 2.0) + chronic (0.9.1) client_side_validations (3.2.6) client_side_validations-simple_form (2.1.0) client_side_validations (~> 3.2.5) @@ -255,6 +257,9 @@ GEM warden (1.2.3) rack (>= 1.0) websocket-driver (0.3.1) + whenever (0.8.2) + activesupport (>= 2.3.4) + chronic (>= 0.6.3) xpath (2.0.0) nokogiri (~> 1.3) diff --git a/users/app/models/user.rb b/users/app/models/user.rb index fc63ae9..d9b03ec 100644 --- a/users/app/models/user.rb +++ b/users/app/models/user.rb @@ -135,6 +135,34 @@ class User < CouchRest::Model::Base ServiceLevel.new({id: code}) end + def one_month_warning_to_pay + # get all users who are not customers with active subscription and have existed for exactly a month (take account of months having difft amount of days. Maybe just those who signed up 30 days ago?) + #users_to_warn = User.find_by_created_at(Time.now-1.month).all #NO, this will require time to be right + #users_1_month_old = User.by_created_at.startkey(Time.now-1.month-1.day).endkey(Time.now-1.month).al + users_30_days_old = User.by_created_at.startkey(Time.now-31.days).endkey(Time.now-30.days).all + # TODO, above really is quite problematic, in that if the cron job fails to run on 1 day, say, the warning will not get created. + + users_30_days_old.each do |user| + + # create a user message for each user that does not has a braintree customer, or + # has a braintree customer w/out an active subscription. + unless ((customer = Customer.find_by_user(user.id)) && customer.subscriptions) + + if !@message + # create a message for today's date + # only want to create once, and only if it will be used. + @message = Message.new(:text => t(:payment_one_month_warning, :date_in_one_month => (Time.now+1.month).strftime("%Y-%d-%m"))) + @message.save + end + + user_message = UserMessage.new(:message_id => @message.id, :user_id => user.id) + # is following preferred?? + # user_message = UserMessage.new(:message => @message, :user => user) + user_message.save + end + end + end + protected ## diff --git a/users/config/locales/en.yml b/users/config/locales/en.yml index 934fcee..0db63eb 100644 --- a/users/config/locales/en.yml +++ b/users/config/locales/en.yml @@ -38,6 +38,7 @@ en: deactivate_account: "Deactivate the account %{username}" deactivate_description: "This will temporarily deactivate some account functionality." #todo detail exact functionality. can receive email but not send or renew client certificate? + payment_one_month_warning: "We hope you have been enjoying this service this past month. Please sign up to pay within the next month, by %{date_in_one_month}. Directions for payment are available at INSERT_URL" # # overview diff --git a/users/config/schedule.rb b/users/config/schedule.rb new file mode 100644 index 0000000..1b2b171 --- /dev/null +++ b/users/config/schedule.rb @@ -0,0 +1,24 @@ +# Use this file to easily define all of your cron jobs. +# +# It's helpful, but not entirely necessary to understand cron before proceeding. +# http://en.wikipedia.org/wiki/Cron + +# Example: +# +# set :output, "/path/to/my/cron_log.log" +# +# every 2.hours do +# command "/usr/bin/some_great_command" +# runner "MyModel.some_method" +# rake "some:great:rake:task" +# end +# +# every 4.days do +# runner "AnotherModel.prune_old_records" +# end + +# Learn more: http://github.com/javan/whenever + +every 1.day, :at => '1am' do + runner "User.one_month_warning_to_pay" +end diff --git a/users/leap_web_users.gemspec b/users/leap_web_users.gemspec index 7d1f220..06965a7 100644 --- a/users/leap_web_users.gemspec +++ b/users/leap_web_users.gemspec @@ -19,4 +19,5 @@ Gem::Specification.new do |s| s.add_dependency "ruby-srp", "~> 0.2.1" s.add_dependency "rails_warden" + s.add_dependency "whenever" end diff --git a/users/lib/leap_web_users/engine.rb b/users/lib/leap_web_users/engine.rb index f8ed71c..61131ef 100644 --- a/users/lib/leap_web_users/engine.rb +++ b/users/lib/leap_web_users/engine.rb @@ -8,6 +8,7 @@ require "warden/session_serializer" require "warden/strategies/secure_remote_password" require "webfinger" +require "whenever" module LeapWebUsers class Engine < ::Rails::Engine |