From eecdbebf3de7b340c328e96db87f96c1bea71c94 Mon Sep 17 00:00:00 2001 From: Jonathan Kolyer Date: Wed, 19 Mar 2014 18:42:28 +0000 Subject: [PATCH] VRFS-1483 integrating admin interface --- admin/app/admin/email_batch.rb | 64 +++++++++++++++---- .../app/views/layouts/batch_mailer.html.erb | 2 +- ruby/lib/jam_ruby/models/email_batch.rb | 11 +--- ruby/lib/jam_ruby/models/user.rb | 1 + 4 files changed, 57 insertions(+), 21 deletions(-) diff --git a/admin/app/admin/email_batch.rb b/admin/app/admin/email_batch.rb index 8aaa0700b..bd934f6da 100644 --- a/admin/app/admin/email_batch.rb +++ b/admin/app/admin/email_batch.rb @@ -23,18 +23,46 @@ ActiveAdmin.register JamRuby::EmailBatch, :as => 'Batch Emails' do default_actions end - # show do - # attributes_table do - # row 'Who?' do |obj| obj.text_short end - # row 'Quote' do |obj| obj.text_long end - # row :image do |obj| - # image_tag(obj.image_url, :size => '50x50') - # end - # row 'State' do |obj| obj.aasm_state end - # row 'Position' do |obj| obj.position end - # row 'Updated' do |obj| obj.updated_at end - # end - # end + action_item :only => :show do + link_to("Run Test Batch (#{resource.test_count})", + "/admin/batch_emails/#{resource.id}/batch_test", + :confirm => "Run test batch with #{resource.test_count} emails?") + end + + action_item :only => :show do + link_to("Run Live Batch (#{User.email_opt_in.count})", + "/admin/batch_emails/#{resource.id}/batch_send", + :confirm => "Run LIVE batch with #{User.email_opt_in.count} emails?") + end + + show :title => 'Batch Email' do |obj| + panel 'Email Contents' do + attributes_table_for obj do + row 'Subject' do |obj| obj.subject end + row 'From' do |obj| obj.from_email end + row 'Test Emails' do |obj| obj.test_emails end + row 'Body' do |obj| obj.body end + row 'State' do |obj| obj.aasm_state end + end + end + columns do + column do + panel 'Sending Parameters' do + attributes_table_for obj do + row 'Opt-in User Count' do |obj| User.email_opt_in.count end + row 'Sent Count' do |obj| obj.sent_count end + row 'Started At' do |obj| obj.started_at end + row 'Completed At' do |obj| obj.completed_at end + row 'Updated' do |obj| obj.updated_at end + end + end + end + column do + panel 'Send Results' do + end + end + end + end controller do @@ -50,4 +78,16 @@ ActiveAdmin.register JamRuby::EmailBatch, :as => 'Batch Emails' do end + member_action :batch_test, :method => :get do + batch = EmailBatch.find(params[:id]) + batch.send_test_batch + redirect_to admin_batch_email_path(batch.id) + end + + member_action :batch_send, :method => :get do + batch = EmailBatch.find(params[:id]) + batch.deliver_batch + redirect_to admin_batch_email_path(batch.id) + end + end diff --git a/ruby/lib/jam_ruby/app/views/layouts/batch_mailer.html.erb b/ruby/lib/jam_ruby/app/views/layouts/batch_mailer.html.erb index 9e1d84fb8..1cf0d1605 100644 --- a/ruby/lib/jam_ruby/app/views/layouts/batch_mailer.html.erb +++ b/ruby/lib/jam_ruby/app/views/layouts/batch_mailer.html.erb @@ -24,7 +24,7 @@

<%= yield(:title) %>

-

<%= @body %>

+

<%= @body.html_safe %>


diff --git a/ruby/lib/jam_ruby/models/email_batch.rb b/ruby/lib/jam_ruby/models/email_batch.rb index 3dc8ef2c7..1910cd7ff 100644 --- a/ruby/lib/jam_ruby/models/email_batch.rb +++ b/ruby/lib/jam_ruby/models/email_batch.rb @@ -44,11 +44,6 @@ module JamRuby # has_many :email_batch_results, :class_name => 'JamRuby::EmailBatchResult' - def self.qualified_users - User.select(:email) - .where(:opt_out_email_batch => false) - end - def self.create_with_params(params) obj = self.new obj.update_with_params(params) @@ -64,9 +59,9 @@ module JamRuby self end - def deliver + def deliver_batch self.perform_event('do_batch_run!') - self.class.qualified_users.pluck(:id).find_in_batches(batch_size: 100) do |user_ids| + User.email_opt_in.pluck(:id).find_in_batches(batch_size: 1000) do |user_ids| BatchMailer.send_batch_email(self.id, user_ids).deliver end end @@ -130,7 +125,7 @@ module JamRuby end def running_batch - self.update_with_conflict_validation({:qualified_count => self.class.qualified_users.count, + self.update_with_conflict_validation({:qualified_count => User.email_opt_in.count, :sent_count => 0, :started_at => Time.now }) diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index 93f73d829..0fa73c0a5 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -132,6 +132,7 @@ module JamRuby scope :fans, where(:musician => false) scope :geocoded_users, where(['lat IS NOT NULL AND lng IS NOT NULL']) scope :musicians_geocoded, musicians.geocoded_users + scope :email_opt_in, where(:opt_out_email_batch => false) def user_progression_fields @user_progression_fields ||= Set.new ["first_downloaded_client_at", "first_ran_client_at", "first_music_session_at", "first_real_music_session_at", "first_good_music_session_at", "first_certified_gear_at", "first_invited_at", "first_friended_at", "first_recording_at", "first_social_promoted_at" ]