emails ready to go for amazonv2

This commit is contained in:
Seth Call 2018-05-26 12:19:59 -05:00
parent b0ccb5202e
commit 57764a3aba
17 changed files with 408 additions and 24 deletions

View File

@ -3,7 +3,15 @@
ALTER TABLE users ADD COLUMN first_lesson_booked_at TIMESTAMP WITHOUT TIME ZONE; ALTER TABLE users ADD COLUMN first_lesson_booked_at TIMESTAMP WITHOUT TIME ZONE;
ALTER TABLE users ADD COLUMN remind_take_lesson_times INTEGER NOT NULL DEFAULT 0; ALTER TABLE users ADD COLUMN remind_take_lesson_times INTEGER NOT NULL DEFAULT 0;
ALTER TABLE users ADD COLUMN remind_take_lesson_at TIMESTAMP WITHOUT TIME ZONE; ALTER TABLE users ADD COLUMN remind_take_lesson_at TIMESTAMP WITHOUT TIME ZONE;
ALTER TABLE users ADD COLUMN sent_first_lesson_instr_email_at TIMESTAMP WITHOUT TIME ZONE;
ALTER TABLE lesson_sessions ADD COLUMN sent_early_starting_notice BOOLEAN NOT NULL DEFAULT FALSE;
CREATE INDEX index_remind_take_lesson_times ON users USING btree(remind_take_lesson_times); CREATE INDEX index_remind_take_lesson_times ON users USING btree(remind_take_lesson_times);
CREATE INDEX index_sent_first_lesson_instr_email_at ON users USING btree(sent_first_lesson_instr_email_at);
CREATE INDEX index_sent_early_starting_notice ON lesson_sessions USING btree(sent_early_starting_notice);
CREATE INDEX index_sen_starting_notice ON lesson_sessions USING btree(sent_starting_notice);
-- bootstrap first_lesson_booked_at -- bootstrap first_lesson_booked_at
UPDATE users SET first_lesson_booked_at = (SELECT lesson_sessions.created_at FROM lesson_sessions WHERE users.id = lesson_sessions.user_id ORDER BY lesson_sessions.created_at LIMIT 1); UPDATE users SET first_lesson_booked_at = (SELECT lesson_sessions.created_at FROM lesson_sessions WHERE users.id = lesson_sessions.user_id ORDER BY lesson_sessions.created_at LIMIT 1);

View File

@ -2080,7 +2080,8 @@ module JamRuby
end end
def lesson_starting_soon_teacher(lesson_session) def lesson_starting_soon_teacher(lesson_session, early_notice, time_stmt)
@early_notice = early_notice
@lesson_booking = lesson_booking = lesson_session.lesson_booking @lesson_booking = lesson_booking = lesson_session.lesson_booking
@student = lesson_booking.student @student = lesson_booking.student
@teacher = lesson_booking.teacher @teacher = lesson_booking.teacher
@ -2088,10 +2089,20 @@ module JamRuby
@session_name = @lesson_session.music_session.name @session_name = @lesson_session.music_session.name
@session_description = @lesson_session.music_session.description @session_description = @lesson_session.music_session.description
@session_date = @lesson_session.slot.pretty_scheduled_start(true) @session_date = @lesson_session.slot.pretty_scheduled_start(true)
if @student.anonymous?
@student_name = 'a student'
else
@student_name = @student.name
end
@user = @teacher @user = @teacher
email = @teacher.email email = @teacher.email
@subject = "Your lesson with #{@student.first_name} on JamKazam is starting soon" if early_notice
@subject = "Your JamKazam lesson starts in 2 hours at #{time_stmt}"
else
@subject = "Your JamKazam lesson starts in 30 minutes at #{time_stmt}"
end
unique_args = {:type => "send_starting_notice_teacher"} unique_args = {:type => "send_starting_notice_teacher"}
sendgrid_category "Notification" sendgrid_category "Notification"
@ -2105,7 +2116,8 @@ module JamRuby
end end
end end
def lesson_starting_soon_student(lesson_session) def lesson_starting_soon_student(lesson_session, early_notice, time_stmt)
@early_notice = early_notice
@lesson_booking = lesson_booking = lesson_session.lesson_booking @lesson_booking = lesson_booking = lesson_session.lesson_booking
@student = lesson_booking.student @student = lesson_booking.student
@teacher = lesson_booking.teacher @teacher = lesson_booking.teacher
@ -2115,8 +2127,18 @@ module JamRuby
@session_description = @lesson_session.music_session.description @session_description = @lesson_session.music_session.description
@session_date = @lesson_session.slot.pretty_scheduled_start(true) @session_date = @lesson_session.slot.pretty_scheduled_start(true)
@user = @student @user = @student
if @student.anonymous?
@student_name = 'a student'
else
@student_name = @student.name
end
email = @student.email email = @student.email
@subject = "Your lesson with #{@teacher.first_name} on JamKazam is starting soon" if early_notice
@subject = "Your JamKazam lesson starts in 2 hours at #{time_stmt}"
else
@subject = "Your JamKazam lesson starts in 30 minutes at #{time_stmt}"
end
unique_args = {:type => "send_starting_notice_student"} unique_args = {:type => "send_starting_notice_student"}
sendgrid_category "Notification" sendgrid_category "Notification"
@ -2189,6 +2211,7 @@ module JamRuby
else else
@subject = "Last reminder to schedule your first free lesson!" @subject = "Last reminder to schedule your first free lesson!"
end end
@book_lesson_link = "#{APP_CONFIG.external_root_url}/client#/jamclass/book-lesson/test-drive_#{@teacher.id}"
unique_args = {:type => "amazon_prompt_take_lesson"} unique_args = {:type => "amazon_prompt_take_lesson"}
@ -2202,5 +2225,37 @@ module JamRuby
format.html {render :layout => "raw_mailer"} format.html {render :layout => "raw_mailer"}
end end
end end
def amazon_first_lesson_scheduled(user)
@user = user
@subject = "IMPORTANT - instructions to be ready for your first lesson!"
email = user.email
unique_args = {:type => "amazon_first_lesson_scheduled"}
sendgrid_category "amazon_first_lesson_scheduled"
sendgrid_unique_args :type => unique_args[:type]
sendgrid_recipients([email])
mail(:to => email, :subject => @subject) do |format|
format.text
format.html
end
end
def amazon_first_lesson_instructions(user)
@user = user
@subject = "How to join your first lesson"
email = user.email
unique_args = {:type => "amazon_first_lesson_instructions"}
sendgrid_category "amazon_first_lesson_instructions"
sendgrid_unique_args :type => unique_args[:type]
sendgrid_recipients([email])
mail(:to => email, :subject => @subject) do |format|
format.text
format.html
end
end
end end
end end

View File

@ -0,0 +1,24 @@
<% provide(:title, @subject) %>
<p>
Your first free lesson is just a couple of days away now!
</p>
<p>
Here is a help article that explains how to join the lesson when it's time for it to start: <a href="https://bit.ly/2BzKUMk" style="color:#fc0">https://bit.ly/2BzKUMk</a>
</p>
<p>
And here is a link to a set of help articles for students that may want to review when you have a little free time. These help articles review all of the key features of JamKazam's online music lessons service and can help you get the most our of our platform and your lessons: <a href="https://bit.ly/2iytkQP" style="color:#fc0">https://bit.ly/2iytkQP</a>
</p>
<p>
We hope you have a great lesson!
</p>
<p>
<font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">
Best Regards,<br/>
Team JamKazam
</font>
</p>

View File

@ -0,0 +1,10 @@
Your first free lesson is just a couple of days away now!
Here is a help article that explains how to join the lesson when it's time for it to start: https://bit.ly/2BzKUMk
And here is a link to a set of help articles for students that may want to review when you have a little free time. These help articles review all of the key features of JamKazam's online music lessons service and can help you get the most our of our platform and your lessons: https://bit.ly/2iytkQP
We hope you have a great lesson!
Best Regards,
Team JamKazam

View File

@ -0,0 +1,23 @@
<% provide(:title, @subject) %>
<p>
Now that you've scheduled your first free lesson, you need to make sure you are ready for it. This involves installing the JamKazam application on your computer and running through a quick configuration wizard. You may also need to buy a $9.99 USB guitar cable from Amazon if you have an electric or bass guitar with no amplifier.
</p>
<p>
Please do not put off getting ready until the last minute, or you won't be ready, and you'll waste one of your free lessons! Click on the button below for either Windows or Mac computer instructions. These help articles will make sure you have everything you need, and will give you step-by-step instructions to get set up and ready to go.
</p>
<p>
<font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="https://jamkazam.desk.com/customer/portal/articles/2937908-setup-instructions-for-windows-computers" style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">Instructions for Windows Computers</a></font> &nbsp; &nbsp; <font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="https://jamkazam.desk.com/customer/portal/articles/2937909-setup-instructions-for-mac-computers"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">Instructions for Mac Computers</a></font>
</p>
<p>
If you have any questions or problems, don't hesitate to reach out to us for help at <a href="mailto:support@jamkazam.com" style="color: #ffcc00;">support@jamkazam.com</a>.
</p>
<p>
<font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">
Best Regards,<br/>
Team JamKazam
</font>
</p>

View File

@ -0,0 +1,11 @@
Now that you've scheduled your first free lesson, you need to make sure you are ready for it. This involves installing the JamKazam application on your computer and running through a quick configuration wizard. You may also need to buy a $9.99 USB guitar cable from Amazon if you have an electric or bass guitar with no amplifier.
Please do not put off getting ready until the last minute, or you won't be ready, and you'll waste one of your free lessons! Click on the button below for either Windows or Mac computer instructions. These help articles will make sure you have everything you need, and will give you step-by-step instructions to get set up and ready to go.
Instructions for Windows Computers (https://jamkazam.desk.com/customer/portal/articles/2937908-setup-instructions-for-windows-computers)
Instructions for Mac Computers (https://jamkazam.desk.com/customer/portal/articles/2937909-setup-instructions-for-mac-computers)
If you have any questions or problems, don't hesitate to reach out to us for help at support@jamkazam.com.
Best Regards,
Team JamKazam

View File

@ -18,7 +18,7 @@
</tr> </tr>
</table> </table>
<p style="text-align:center"><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="<%= %>"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">SCHEDULE FIRST FREE LESSON NOW</a></font></p> <p style="text-align:center"><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="<%= @book_lesson_link %>"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">SCHEDULE FIRST FREE LESSON NOW</a></font></p>
<br> <br>
<p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, <a style="color: #ffcc00;" href="<%= User.search_url %>">click here</a> to search our guitar and bass instructors to select a different one.</font></p> <p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, <a style="color: #ffcc00;" href="<%= User.search_url %>">click here</a> to search our guitar and bass instructors to select a different one.</font></p>
<p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">To take online lessons, you'll need:</font></p> <p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">To take online lessons, you'll need:</font></p>
@ -51,7 +51,7 @@
</tr> </tr>
</table> </table>
<p style="text-align:center"><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="<%= %>"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">SCHEDULE FIRST FREE LESSON NOW</a></font></p> <p style="text-align:center"><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="<%= @book_lesson_link %>"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">SCHEDULE FIRST FREE LESSON NOW</a></font></p>
<br> <br>
<p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, <a style="color: #ffcc00;" href="<%= User.search_url %>">click here</a> to search our guitar and bass instructors to select a different one.</font></p> <p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, <a style="color: #ffcc00;" href="<%= User.search_url %>">click here</a> to search our guitar and bass instructors to select a different one.</font></p>
@ -75,7 +75,7 @@
</tr> </tr>
</table> </table>
<p style="text-align:center"><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="<%= %>"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">SCHEDULE FIRST FREE LESSON NOW</a></font></p> <p style="text-align:center"><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif"><a href="<%= @book_lesson_link %>"style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">SCHEDULE FIRST FREE LESSON NOW</a></font></p>
<br> <br>
<p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, <a style="color: #ffcc00;" href="<%= User.search_url %>">click here</a> to search our guitar and bass instructors to select a different one.</font></p> <p><font size="3" color="#AAAAAA" face="Arial, Helvetica, sans-serif">Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, <a style="color: #ffcc00;" href="<%= User.search_url %>">click here</a> to search our guitar and bass instructors to select a different one.</font></p>

View File

@ -0,0 +1,43 @@
<% if @attempt == 0 %>
Welcome to JamKazam, and congratulations on your free private music lessons, courtesy of Amazon! Here is a great instructor we can recommend to you:
Suggested teacher: <%= @teacher.name %>
Teacher bio: <%= @biography %>
SCHEDULE FIRST FREE LESSON NOW! (<%= @book_lesson_link %>)
Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, click here (<%= User.search_url %>) to search our guitar and bass instructors to select a different one.
To take online lessons, you'll need:
* A Windows or Mac computer
* A webcam, a microphone, and a port to connect headphones or earbuds (all three are usually built into your computer)
* Internet service at your home
Schedule your first free lesson now to get started. And if you have any questions, don't hesitate to contact us by email at support@jamkazam.com. We are here to make your musical journey a rewarding one!
<% elsif @attempt == 1 %>
Just a quick reminder - don't forget to schedule your first free lesson! Here is another great instructor we can recommend to you:
Suggested teacher: <%= @teacher.name %>
Teacher bio: <%= @biography %>
SCHEDULE FIRST FREE LESSON NOW! (<%= @book_lesson_link %>)
Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, click here (<%= User.search_url %>) to search our guitar and bass instructors to select a different one.
If you have any questions, don't hesitate to contact us by email at support@jamkazam.com.
<% else %>
We don't want to bother you, so just sending one more reminder. A private instructor is by far the best way to learn a new instrument. Here is another great instructor we can recommend to you:
Suggested teacher: <%= @teacher.name %>
Teacher bio: <%= @biography %>
SCHEDULE FIRST FREE LESSON NOW! (<%= @book_lesson_link %>)
Click the button to schedule your first free lesson with the instructor listed above! Or if you think you'd prefer a different instructor, click here (<%= User.search_url %>) to search our guitar and bass instructors to select a different one.
If you have any questions, don't hesitate to contact us by email at support@jamkazam.com.
<% end %>
Best Regards,
Team JamKazam

View File

@ -3,10 +3,24 @@
<% content_for :note do %> <% content_for :note do %>
<p> <p>
Your lesson with <%= @teacher.name %> is scheduled to begin on JamKazam in less than 30 minutes. <%= @student.greetings %>
<p>
<a href="<%= @lesson_session.home_url %>" style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">JAMCLASS HOME</a>
</p> </p>
<% if @early_notice %>
<p>
You are scheduled to take a lesson on JamKazam from <%= @teacher.name %> very soon. We suggest that you start up the JamKazam application and make sure all your audio gear is set up and ready to go 10 minutes before the lesson's start time - just in case the application needs to update itself or you run into any other unexpected problems.
</p>
<p>
Just in case you don't remember how to join your lesson, here is a link to a help article that explains how to do this: <a href="https://bit.ly/2BzKUMk" style="color:#fc0">https://bit.ly/2BzKUMk</a>.
</p>
<% else %>
<p>
Your lesson with <%= @teacher.name %> is scheduled to begin on JamKazam in less than 30 minutes.
<p>
<a href="<%= @lesson_session.home_url %>" style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">JAMCLASS HOME</a>
</p>
<% end %>
<% end %> <% end %>

View File

@ -1,4 +1,14 @@
<%= @student.greetings %>
<% if @early_notice %>
You are scheduled to take a lesson on JamKazam from <%= @teacher.name %> very soon. We suggest that you start up the JamKazam application and make sure all your audio gear is set up and ready to go 10 minutes before the lesson's start time - just in case the application needs to update itself or you run into any other unexpected problems.
Just in case you don't remember how to join your lesson, here is a link to a help article that explains how to do this: https://bit.ly/2BzKUMk.
<% else %>
Your lesson with <%= @teacher.name %> is scheduled to begin on JamKazam in less than 30 minutes. Your lesson with <%= @teacher.name %> is scheduled to begin on JamKazam in less than 30 minutes.
JAMCLASS HOME (<%= @lesson_session.home_url %> JAMCLASS HOME (<%= @lesson_session.home_url %>
<% end %>

View File

@ -3,10 +3,23 @@
<% content_for :note do %> <% content_for :note do %>
<p> <p>
Your lesson with <%= @student.name %> is scheduled to begin on JamKazam in less than 30 minutes. <%= @teacher.greetings %>
<p>
<a href="<%= @lesson_session.home_url %>" style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">JAMCLASS HOME</a>
</p> </p>
<% if @early_notice %>
<p>
You are scheduled to take a lesson on JamKazam from <%= @student_name %> very soon. We suggest that you start up the JamKazam application and make sure all your audio gear is set up and ready to go 10 minutes before the lesson's start time - just in case the application needs to update itself or you run into any other unexpected problems.
</p>
<p>
Just in case you don't remember how to join your lesson, here is a link to a help article that explains how to do this: <a href="https://bit.ly/2BzKUMk" style="color:#fc0">https://bit.ly/2BzKUMk</a>.
</p>
<% else %>
<p>
Your lesson with <%= @student_name %> is scheduled to begin on JamKazam in less than 30 minutes.
<p>
<a href="<%= @lesson_session.home_url %>" style="margin: 8px 0 0 0;background-color: #ed3618;border: solid 1px #F27861;padding: 3px 10px;font-size: 12px;font-weight: 300;cursor: pointer;color: #FC9;text-decoration: none;line-height: 12px;text-align: center;">JAMCLASS HOME</a>
</p>
<% end %>
<% end %> <% end %>

View File

@ -1,3 +1,15 @@
Your lesson with <%= @student.name %> is scheduled to begin on JamKazam in less than 30 minutes. <%= @teacher.greetings %>
JAMCLASS HOME (<%= @lesson_session.home_url %> <% if @early_notice %>
You are scheduled to teach a lesson on JamKazam for <%= @student_name %> very soon. We suggest that you start up the JamKazam application and make sure all your audio gear is set up and ready to go 10 minutes before the lesson's start time - just in case the application needs to update itself or you run into any other unexpected problems.
Just in case you don't remember how to join your lesson, here is a link to a help article that explains how to do this: https://bit.ly/2BzKUMk.
<% else %>
Your lesson with <%= @student_name %> is scheduled to begin on JamKazam in less than 30 minutes.
JAMCLASS HOME (<%= @lesson_session.home_url %>
<% end %>

View File

@ -136,6 +136,7 @@ module JamRuby
def self.minutely_check def self.minutely_check
upcoming_sessions_reminder upcoming_sessions_reminder
upcoming_sessions_reminder_early
end end
def self.remind_counters def self.remind_counters
@ -255,9 +256,25 @@ module JamRuby
half_hour_from_now = Time.zone.local_to_utc(half_hour_from_now) half_hour_from_now = Time.zone.local_to_utc(half_hour_from_now)
end end
MusicSession.joins(lesson_session: [:lesson_booking]).where('lesson_sessions.status = ?', LessonSession::STATUS_APPROVED).where('sent_starting_notice = false').where('(scheduled_start > ? and scheduled_start < ?)', now, half_hour_from_now).each do |music_session| MusicSession.joins(lesson_session: [:lesson_booking]).where('lesson_sessions.status = ?', LessonSession::STATUS_APPROVED).where('sent_starting_notice = false').where('(scheduled_start > ? and scheduled_start < ?)', now, half_hour_from_now).each do |music_session|
lession_session = music_session.lesson_session lession_session = music_session.lesson_session
lession_session.send_starting_notice lession_session.send_starting_notice(false)
end
end
def self.upcoming_sessions_reminder_early
now = Time.now
two_hours_from_now = 120.minutes.from_now
if Time.zone
now = Time.zone.local_to_utc(now)
two_hours_from_now = Time.zone.local_to_utc(two_hours_from_now)
end
MusicSession.joins(lesson_session: [:lesson_booking]).where('lesson_sessions.status = ?', LessonSession::STATUS_APPROVED).where('sent_starting_notice = false').where('sent_early_starting_notice = false').where('(scheduled_start > ? and scheduled_start < ?)', now, two_hours_from_now).each do |music_session|
lession_session = music_session.lesson_session
lession_session.send_starting_notice(true)
end end
end end
@ -423,11 +440,17 @@ module JamRuby
end end
end end
def send_starting_notice def send_starting_notice(early_notice)
UserMailer.lesson_starting_soon_student(self).deliver_now UserMailer.lesson_starting_soon_student(self, early_notice, student.local_hour_stmt(scheduled_start)).deliver_now
UserMailer.lesson_starting_soon_teacher(self).deliver_now UserMailer.lesson_starting_soon_teacher(self, early_notice, teacher.local_hour_stmt(scheduled_start)).deliver_now
if early_notice
self.sent_early_starting_notice = true
else
self.sent_starting_notice = true
end
self.sent_starting_notice = true
self.save(validate: false) self.save(validate: false)
end end
@ -790,7 +813,11 @@ module JamRuby
lesson_type = 'single paid lesson' lesson_type = 'single paid lesson'
end end
User.where(id: booking.student.id).where('first_lesson_booked_at is NULL').update_all(first_lesson_booked_at: Time.now) updated = User.where(id: booking.student.id).where('first_lesson_booked_at is NULL').update_all(first_lesson_booked_at: Time.now)
if updated == 1
UserMailer.amazon_first_lesson_scheduled(booking.student).deliver_now
end
body = "Student has requested a #{lesson_type}!\n\nUser: #{booking.student.name}, #{booking.student.email}\nUser Admin URL:#{booking.student.admin_url}\n\n" body = "Student has requested a #{lesson_type}!\n\nUser: #{booking.student.name}, #{booking.student.email}\nUser Admin URL:#{booking.student.admin_url}\n\n"
body += "Lesson Session URL: #{lesson_session.admin_url}" body += "Lesson Session URL: #{lesson_session.admin_url}"

View File

@ -378,6 +378,22 @@ module JamRuby
def self.hourly_check def self.hourly_check
send_onboarding_surveys send_onboarding_surveys
send_take_lesson_poke send_take_lesson_poke
first_lesson_instructions
end
def self.first_lesson_instructions
User.came_through_amazon.joins(taken_lessons: [:music_session, :lesson_booking])
.where('lesson_bookings.recurring = FALSE')
.where('lesson_sessions.status = ?', LessonSession::STATUS_APPROVED)
.where("scheduled_start - (INTERVAL '2 days') < ?", Time.now)
.where('sent_first_lesson_instr_email_at is null')
.where('second_onboarding_free_lesson_at is null').each do |user|
UserMailer.amazon_first_lesson_instructions(user).deliver_now
User.where(id: user.id).update_all(sent_first_lesson_instr_email_at: Time.now)
end
end end
def self.send_onboarding_surveys def self.send_onboarding_surveys
@ -425,8 +441,8 @@ module JamRuby
def update_timezone(timezone) def update_timezone(timezone)
if timezone.nil? if timezone.nil?
return return
end end
begin begin
TZInfo::Timezone.get(timezone) TZInfo::Timezone.get(timezone)
User.where(id: self.id).update_all(timezone: timezone) User.where(id: self.id).update_all(timezone: timezone)
@ -434,6 +450,20 @@ module JamRuby
@@log.error("unable to find timezone=#{timezone}, e=#{e}") @@log.error("unable to find timezone=#{timezone}, e=#{e}")
end end
end end
def tz_safe
tz_identifier = 'America/Chicago'
if self.timezone
tz_identifier = self.timezone
end
TZInfo::Timezone.get(tz_identifier)
end
# formats at 6:30 am. input should be UTC
def local_hour_stmt(datetime)
tz = tz_safe
tz.utc_to_local(datetime).strftime("%l:%M %P").strip
end
def has_any_free_jamtracks def has_any_free_jamtracks
has_redeemable_jamtrack || gifted_jamtracks > 0 has_redeemable_jamtrack || gifted_jamtracks > 0
end end
@ -528,6 +558,15 @@ module JamRuby
end end
end end
def greetings
if anonymous?
"Hello -"
else
"Hello #{first_name} -"
end
end
def location(country = false) def location(country = false)
loc = self.city.blank? ? '' : self.city loc = self.city.blank? ? '' : self.city
loc = loc.blank? ? self.state : "#{loc}, #{self.state}" unless self.state.blank? loc = loc.blank? ? self.state : "#{loc}, #{self.state}" unless self.state.blank?

View File

@ -521,6 +521,27 @@ describe LessonSession do
end end
end end
describe "upcoming_sessions_reminder_early" do
it "succeeds" do
lesson = normal_lesson(user, teacher)
UserMailer.deliveries.clear
LessonSession.upcoming_sessions_reminder_early
#UserMailer.deliveries.count.should eql 2
lesson.touch
lesson.sent_early_starting_notice.should be_false
lesson.is_approved?.should be_true
lesson.music_session.scheduled_start = 78.minutes.from_now
lesson.music_session.save!
LessonSession.upcoming_sessions_reminder_early
UserMailer.deliveries.count.should eql 2
UserMailer.deliveries.clear
lesson.reload
lesson.sent_early_starting_notice.should be_true
LessonSession.upcoming_sessions_reminder_early
UserMailer.deliveries.count.should eql 0
end
end
describe "remindable_onboarding_users" do describe "remindable_onboarding_users" do
it "works" do it "works" do
LessonSession.remindable_onboarding_users.count.should eql 0 LessonSession.remindable_onboarding_users.count.should eql 0

View File

@ -1018,6 +1018,56 @@ describe User do
end end
end end
describe "first_lesson_instructions" do
let(:user) {FactoryGirl.create(:user)}
before(:each) {
UserMailer.deliveries.clear
}
after {
Timecop.return
}
it "works" do
User.first_lesson_instructions
UserMailer.deliveries.count.should eql 0
UserMailer.deliveries.clear
posa_card = FactoryGirl.create(:amazon_test_drive_free_2)
posa_card.claim(user)
User.first_lesson_instructions
UserMailer.deliveries.count.should eql 0
UserMailer.deliveries.clear
teacher = FactoryGirl.create(:teacher, ready_for_session_at: Time.now)
lesson = normal_lesson(user, teacher.user)
UserMailer.deliveries.clear
lesson.status.should eql LessonSession::STATUS_APPROVED
lesson.lesson_booking.recurring.should eql false
user.sent_first_lesson_instr_email_at.should be_nil
user.second_onboarding_free_lesson_at.should be_nil
User.first_lesson_instructions
UserMailer.deliveries.count.should eql 0
UserMailer.deliveries.clear
Timecop.freeze(user.taken_lessons[0].scheduled_start - 1.day)
User.first_lesson_instructions
UserMailer.deliveries.count.should eql 1
UserMailer.deliveries.clear
user.reload
user.sent_first_lesson_instr_email_at.should eql Time.now
User.first_lesson_instructions
UserMailer.deliveries.count.should eql 0
UserMailer.deliveries.clear
end
end
describe "send_take_lesson_poke" do describe "send_take_lesson_poke" do
let(:user) {FactoryGirl.create(:user)} let(:user) {FactoryGirl.create(:user)}
before(:each) { before(:each) {

View File

@ -37,6 +37,13 @@ describe "RenderMailers", :slow => true do
it { @filename="updated_email"; UserMailer.updated_email(user).deliver_now } it { @filename="updated_email"; UserMailer.updated_email(user).deliver_now }
it { @filename="updating_email"; UserMailer.updating_email(user).deliver_now } it { @filename="updating_email"; UserMailer.updating_email(user).deliver_now }
describe "amazon_first_lesson_scheduled" do
it {@filename="amazon_first_lesson_scheduled"; UserMailer.amazon_first_lesson_scheduled(user).deliver_now}
end
describe "amazon_first_lesson_instructions" do
it {@filename="amazon_first_lesson_instructions"; UserMailer.amazon_first_lesson_instructions(user).deliver_now}
end
describe "has sending user" do describe "has sending user" do
let(:user2) { FactoryGirl.create(:user) } let(:user2) { FactoryGirl.create(:user) }
@ -156,7 +163,7 @@ describe "RenderMailers", :slow => true do
lesson = testdrive_lesson(user, teacher) lesson = testdrive_lesson(user, teacher)
UserMailer.deliveries.clear UserMailer.deliveries.clear
UserMailer.lesson_starting_soon_teacher(lesson).deliver_now UserMailer.lesson_starting_soon_teacher(lesson, false, '6:36 am').deliver_now
end end
it "lesson_starting_soon_student" do it "lesson_starting_soon_student" do
@ -164,7 +171,24 @@ describe "RenderMailers", :slow => true do
lesson = testdrive_lesson(user, teacher) lesson = testdrive_lesson(user, teacher)
UserMailer.deliveries.clear UserMailer.deliveries.clear
UserMailer.lesson_starting_soon_student(lesson).deliver_now UserMailer.lesson_starting_soon_student(lesson, false, '6:36 am').deliver_now
end
it "lesson_starting_soon_teacher_early" do
@filename = "lesson_starting_soon_teacher_early"
lesson = testdrive_lesson(user, teacher)
UserMailer.deliveries.clear
UserMailer.lesson_starting_soon_teacher(lesson, true, '6:36 am').deliver_now
end
it "lesson_starting_soon_student_early" do
@filename = "lesson_starting_soon_student_early"
lesson = testdrive_lesson(user, teacher)
UserMailer.deliveries.clear
UserMailer.lesson_starting_soon_student(lesson, true, '6:36 am').deliver_now
end end
it "music_notation_attachment" do it "music_notation_attachment" do