fix display of missed in jam class screen
This commit is contained in:
parent
ea049068e0
commit
0a9078f94e
|
|
@ -116,7 +116,7 @@ module JamRuby
|
|||
end
|
||||
|
||||
def self.analyse_sessions
|
||||
MusicSession.joins(lesson_session: :lesson_booking).where('lesson_sessions.status = ?', LessonSession::STATUS_APPROVED).where("NOW() > scheduled_start + (INTERVAL '1 minutes' * (3 + duration))").where('analysed = false').each do |music_session|
|
||||
MusicSession.joins(lesson_session: :lesson_booking).where('lesson_sessions.status = ?', LessonSession::STATUS_APPROVED).where("NOW() > scheduled_start + (INTERVAL '1 minutes' * (duration))").where('analysed = false').each do |music_session|
|
||||
lession_session = music_session.lesson_session
|
||||
lession_session.analyse
|
||||
end
|
||||
|
|
@ -124,7 +124,7 @@ module JamRuby
|
|||
|
||||
def self.complete_sessions
|
||||
# this will find any paid session (recurring monthly paid, recurring single paid, single paid)
|
||||
MusicSession.joins(lesson_session: [:lesson_booking, :lesson_payment_charge]).where('lesson_sessions.status = ?', LessonSession::STATUS_COMPLETED).where("NOW() > scheduled_start + (INTERVAL '1 minutes' * (3 + duration))").where('analysed = true').where('lesson_sessions.post_processed = false').where('billing_should_retry = true').each do |music_session|
|
||||
MusicSession.joins(lesson_session: [:lesson_booking, :lesson_payment_charge]).where('lesson_sessions.status = ?', LessonSession::STATUS_COMPLETED).where("NOW() > scheduled_start + (INTERVAL '1 minutes' * (duration))").where('analysed = true').where('lesson_sessions.post_processed = false').where('billing_should_retry = true').each do |music_session|
|
||||
lession_session = music_session.lesson_session
|
||||
lession_session.session_completed
|
||||
end
|
||||
|
|
@ -158,6 +158,11 @@ module JamRuby
|
|||
analysis = LessonSessionAnalyser.analyse(self)
|
||||
|
||||
self.analysis = LessonSession.analysis_to_json(analysis)
|
||||
|
||||
if analysis[:reason] == LessonSessionAnalyser::SESSION_ONGOING
|
||||
# extra protection against bad code somewhere
|
||||
return
|
||||
end
|
||||
self.success = analysis[:bill]
|
||||
self.analysed_at = Time.now
|
||||
self.analysed = true
|
||||
|
|
@ -265,11 +270,11 @@ module JamRuby
|
|||
end
|
||||
|
||||
def student_missed
|
||||
analysed && analysis_json["student_analysis"]["missed"]
|
||||
analysed && !success && analysis_json["student_analysis"]["missed"]
|
||||
end
|
||||
|
||||
def teacher_missed
|
||||
analysed && analysis_json["student_analysis"]["missed"]
|
||||
analysed && !success && analysis_json["teacher_analysis"]["missed"]
|
||||
end
|
||||
|
||||
def error_display
|
||||
|
|
|
|||
|
|
@ -177,7 +177,8 @@ describe "TestDrive Lesson Flow" do
|
|||
|
||||
UserMailer.deliveries.clear
|
||||
# background code comes around and analyses the session
|
||||
LessonSession.hourly_check
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
lesson_session.reload
|
||||
lesson_session.analysed.should be_true
|
||||
analysis = JSON.parse(lesson_session.analysis)
|
||||
|
|
@ -196,6 +197,13 @@ describe "TestDrive Lesson Flow" do
|
|||
user.reload
|
||||
user.remaining_test_drives.should eql 1
|
||||
UserMailer.deliveries.length.should eql 2 # one for student, one for teacher
|
||||
found_student_email = false
|
||||
UserMailer.deliveries.each do |d|
|
||||
if d.subject == "You have used 1 of 2 TestDrive lesson credits"
|
||||
found_student_email = true
|
||||
end
|
||||
end
|
||||
found_student_email.should be_true
|
||||
|
||||
teacher_distribution = lesson_session.teacher_distribution
|
||||
teacher_distribution.amount_in_cents.should eql 1000
|
||||
|
|
@ -285,6 +293,22 @@ describe "TestDrive Lesson Flow" do
|
|||
user.remaining_test_drives.should eql 4
|
||||
end
|
||||
|
||||
it "post-lesson emails" do
|
||||
UserMailer.deliveries.clear
|
||||
lesson = testdrive_lesson(user, teacher_user, {accept:true, success: true})
|
||||
|
||||
user.reload
|
||||
user.remaining_test_drives.should eql 3
|
||||
|
||||
found_student_email = false
|
||||
UserMailer.deliveries.each do |d|
|
||||
if d.subject == "You have used 1 of 4 TestDrive lesson credits"
|
||||
found_student_email = true
|
||||
end
|
||||
end
|
||||
found_student_email.should be_true
|
||||
end
|
||||
|
||||
# tests that the correct emails are sent out after test drives are done
|
||||
it "both no show, then student no shows" do
|
||||
UserMailer.deliveries.clear
|
||||
|
|
@ -352,7 +376,5 @@ describe "TestDrive Lesson Flow" do
|
|||
# You successfully completed a lesson with #{@student.name}"
|
||||
completed_test_drive.should be_true
|
||||
paid.should be_true
|
||||
|
||||
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -82,12 +82,28 @@ def book_lesson(user, teacher, options)
|
|||
end
|
||||
|
||||
if options[:miss]
|
||||
# teacher & student get into session
|
||||
|
||||
Timecop.travel(end_time + 1)
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
elsif options[:teacher_miss]
|
||||
uh2 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
# artificially end the session, which is covered by other background jobs
|
||||
lesson.music_session.session_removed_at = end_time
|
||||
lesson.music_session.save!
|
||||
Timecop.travel(end_time + 1)
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
elsif options[:success]
|
||||
uh1 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
uh2 = FactoryGirl.create(:music_session_user_history, user: teacher, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
# artificially end the session, which is covered by other background jobs
|
||||
lesson.music_session.session_removed_at = end_time
|
||||
lesson.music_session.save!
|
||||
Timecop.travel(end_time + 1)
|
||||
|
||||
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
|
||||
elsif options[:finish]
|
||||
# teacher & student get into session
|
||||
uh2 = FactoryGirl.create(:music_session_user_history, user: teacher, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
|
|
|
|||
|
|
@ -243,7 +243,7 @@ LessonTimerActions = context.LessonTimerActions
|
|||
|
||||
|
||||
cancelLesson: (lesson) ->
|
||||
if lesson.isRequested
|
||||
if lesson.isRequested && @viewerTeacher()
|
||||
confirmTitle = 'Confirm Decline'
|
||||
verbLower = 'decline'
|
||||
else
|
||||
|
|
|
|||
|
|
@ -580,16 +580,13 @@ UserStore = context.UserStore
|
|||
completedHeader: () ->
|
||||
if @isNow()
|
||||
header = 'the lesson is scheduled for right now!'
|
||||
else if @isPast()
|
||||
else
|
||||
if @isMissed()
|
||||
header = "this lesson was #{this.displayableLesson().displayStatus.toLowerCase()}"
|
||||
else if @isSuspended()
|
||||
header = 'this lesson was suspended due to billing issues'
|
||||
else
|
||||
header = 'this lesson is over'
|
||||
else
|
||||
header = 'this lesson is over'
|
||||
header
|
||||
|
||||
approvedHeader: () ->
|
||||
if @isCompleted()
|
||||
|
|
@ -735,7 +732,7 @@ UserStore = context.UserStore
|
|||
whatNow = null
|
||||
summary = `<div className="row">
|
||||
{this.userHeader(this.displayableLesson().missedUser)}
|
||||
<p>This lesson was missed by the {this.displayableLesson().missedRole}.</p>
|
||||
<p>This lesson was missed by {this.displayableLesson().missedRole}.</p>
|
||||
</div>`
|
||||
else if @isSuspended()
|
||||
whatNow = `<div className="row">
|
||||
|
|
@ -836,7 +833,7 @@ UserStore = context.UserStore
|
|||
whatNow = null
|
||||
summary = `<div className="row">
|
||||
{this.userHeader(this.displayableLesson().missedUser)}
|
||||
<p>This lesson was missed by the {this.displayableLesson().missedRole}.</p>
|
||||
<p>This lesson was missed by {this.displayableLesson().missedRole}.</p>
|
||||
</div>`
|
||||
else if @isSuspended()
|
||||
whatNow = `<div className="row">
|
||||
|
|
|
|||
|
|
@ -46,26 +46,26 @@ teacherActions = window.JK.Actions.Teacher
|
|||
lesson.displayStatus = 'Suspended'
|
||||
else
|
||||
lesson.missed = true
|
||||
lesson.missedRole = 'teacher'
|
||||
lesson.missedRole = 'the teacher'
|
||||
lesson.missedUser = lesson.teacher
|
||||
|
||||
if lesson.analysis?.teacher_analysis?.missed && lesson.analysis?.student_analysis?.missed
|
||||
lesson.missedRole = 'both'
|
||||
lesson.missedUser = lesson.teacher
|
||||
lesson.displayStatus = 'Missed (Both)'
|
||||
else if lesson.analysis?.teacher_analysis?.missed
|
||||
lesson.missedRole = 'teacher'
|
||||
lesson.missedUser = lesson.teacher
|
||||
lesson.displayStatus = 'Missed (Teacher)'
|
||||
else if lesson.analysis?.student_analysis?.missed
|
||||
lesson.missedRole = 'student'
|
||||
lesson.missedUser = lesson.student
|
||||
lesson.displayStatus = 'Missed (Student)'
|
||||
if lesson.success
|
||||
lesson.missed = false
|
||||
lesson.missedRole = null
|
||||
lesson.displayStatus = 'Completed'
|
||||
else
|
||||
if lesson.success
|
||||
lesson.missed = false
|
||||
lesson.missedRole = null
|
||||
lesson.displayStatus = 'Completed'
|
||||
if lesson.analysis?.teacher_analysis?.missed && lesson.analysis?.student_analysis?.missed
|
||||
lesson.missedRole = 'both student and teacher'
|
||||
lesson.missedUser = lesson.teacher
|
||||
lesson.displayStatus = 'Missed (Both)'
|
||||
else if lesson.analysis?.teacher_analysis?.missed
|
||||
lesson.missedRole = 'the teacher'
|
||||
lesson.missedUser = lesson.teacher
|
||||
lesson.displayStatus = 'Missed (Teacher)'
|
||||
else if lesson.analysis?.student_analysis?.missed
|
||||
lesson.missedRole = 'the student'
|
||||
lesson.missedUser = lesson.student
|
||||
lesson.displayStatus = 'Missed (Student)'
|
||||
else
|
||||
lesson.displayStatus = 'Missed'
|
||||
|
||||
|
|
|
|||
|
|
@ -25,7 +25,7 @@ describe "JamClassScreen", :js => true, :type => :feature, :capybara_feature =>
|
|||
|
||||
fast_signin(user, "/client#/jamclass")
|
||||
|
||||
find('#jam-class-student-screen td.displayStatusColumn', text: 'Missed (Student)')
|
||||
find('#jam-class-student-screen td.displayStatusColumn', text: 'Completed')
|
||||
end
|
||||
|
||||
it "shows Missed (Teacher)" do
|
||||
|
|
@ -61,7 +61,12 @@ describe "JamClassScreen", :js => true, :type => :feature, :capybara_feature =>
|
|||
|
||||
# open up hover
|
||||
find('tr[data-lesson-session-id="' + lesson.id + '"] .lesson-session-actions-btn').trigger(:click)
|
||||
find('li[data-lesson-option="cancel"] a', visible: false, text: 'Decline Request')
|
||||
find('li[data-lesson-option="cancel"] a', visible: false, text: 'Decline Request').trigger(:click)
|
||||
# confirm cancelation -
|
||||
find('#banner h1', text: 'Confirm Decline')
|
||||
find('#banner .dialog-inner', text:"Are you sure you want to decline this lesson?" )
|
||||
# don't cancel yet
|
||||
find('#banner .no-btn', text: 'CANCEL').trigger(:click)
|
||||
|
||||
lesson.teacher_unread_messages.should be_true
|
||||
# also check that clicking messages icon shows view status screen (instead of chat dialog) # VRFS-4089
|
||||
|
|
@ -81,6 +86,9 @@ describe "JamClassScreen", :js => true, :type => :feature, :capybara_feature =>
|
|||
find('li[data-lesson-option="cancel"] a', visible: false, text: 'Cancel Request').trigger(:click)
|
||||
|
||||
# confirm cancelation -
|
||||
find('#banner h1', text: 'Confirm Cancelation')
|
||||
find('#banner .dialog-inner', text:"Are you sure you want to cancel this lesson?" )
|
||||
|
||||
find('#banner .yes-btn', text: 'YES').trigger(:click)
|
||||
|
||||
find('#jam-class-student-screen td.displayStatusColumn', text: 'Canceled (Student)')
|
||||
|
|
|
|||
|
|
@ -87,9 +87,15 @@ describe "Lesson Booking Status page", :js => true, :type => :feature, :capybara
|
|||
it "missed" do
|
||||
lesson = testdrive_lesson(user, teacher, {accept:true, finish:false, miss: true})
|
||||
|
||||
lesson.reload
|
||||
lesson.status.should eql LessonSession::STATUS_COMPLETED
|
||||
lesson.success.should be_false
|
||||
lesson.student_missed.should be_true
|
||||
lesson.teacher_missed.should be_true
|
||||
|
||||
fast_signin(user, "/client#/jamclass/lesson-booking/" + lesson.id)
|
||||
|
||||
find('h2', text: "this lesson was missed (teacher)")
|
||||
find('h2', text: "this lesson was missed (both)")
|
||||
|
||||
screenshot
|
||||
end
|
||||
|
|
@ -161,7 +167,7 @@ describe "Lesson Booking Status page", :js => true, :type => :feature, :capybara
|
|||
|
||||
fast_signin(teacher, "/client#/jamclass/lesson-booking/" + lesson.id)
|
||||
|
||||
find('h2', text: "this lesson was missed (teacher)")
|
||||
find('h2', text: "this lesson was missed (both)")
|
||||
|
||||
screenshot
|
||||
end
|
||||
|
|
|
|||
|
|
@ -162,12 +162,28 @@ def book_lesson(user, teacher, options)
|
|||
end
|
||||
|
||||
if options[:miss]
|
||||
# teacher & student get into session
|
||||
|
||||
Timecop.travel(end_time + 1)
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
elsif options[:teacher_miss]
|
||||
uh2 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
# artificially end the session, which is covered by other background jobs
|
||||
lesson.music_session.session_removed_at = end_time
|
||||
lesson.music_session.save!
|
||||
Timecop.travel(end_time + 1)
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
elsif options[:success]
|
||||
uh1 = FactoryGirl.create(:music_session_user_history, user: user, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
uh2 = FactoryGirl.create(:music_session_user_history, user: teacher, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
# artificially end the session, which is covered by other background jobs
|
||||
lesson.music_session.session_removed_at = end_time
|
||||
lesson.music_session.save!
|
||||
Timecop.travel(end_time + 1)
|
||||
|
||||
|
||||
lesson.analyse
|
||||
lesson.session_completed
|
||||
|
||||
elsif options[:finish]
|
||||
# teacher & student get into session
|
||||
uh2 = FactoryGirl.create(:music_session_user_history, user: teacher, history: lesson.music_session, created_at: start, session_removed_at: end_time)
|
||||
|
|
|
|||
|
|
@ -1469,7 +1469,7 @@ module JamWebsockets
|
|||
user = User.find_by_id(user_id) unless user_id.nil?
|
||||
if music_session
|
||||
|
||||
msuh = MusicSessionUserHistory.where(client_id: cid).order('updated_at DESC').first
|
||||
msuh = MusicSessionUserHistory.where(client_id: cid).order('created_at DESC').first
|
||||
if msuh
|
||||
msuh.session_removed_at = Time.now if msuh.session_removed_at.nil?
|
||||
msuh.save(validate:false)
|
||||
|
|
|
|||
Loading…
Reference in New Issue