From 5c246dc182a8a1de180925bab821f83ef35e4565 Mon Sep 17 00:00:00 2001 From: Seth Call Date: Tue, 26 Apr 2016 12:36:06 -0500 Subject: [PATCH] Update background image for JamClass VRFS-4018 --- ruby/lib/jam_ruby/models/lesson_booking.rb | 20 ++++- .../jam_ruby/models/lesson_booking_slot.rb | 21 ++++- .../models/lesson_package_purchase.rb | 6 +- .../models/lesson_session_monthly_price.rb | 17 +++- .../jam_ruby/models/teacher_distribution.rb | 2 +- .../images/content/bkg_home_jamclass.jpg | Bin 0 -> 4063 bytes .../images/content/bkg_home_jamclass_x.jpg | Bin 0 -> 4421 bytes .../assets/stylesheets/client/home.css.scss | 13 +-- .../book_monthly_recurring_lesson_spec.rb | 77 ++++++++++++++---- 9 files changed, 129 insertions(+), 27 deletions(-) create mode 100644 web/app/assets/images/content/bkg_home_jamclass.jpg create mode 100644 web/app/assets/images/content/bkg_home_jamclass_x.jpg diff --git a/ruby/lib/jam_ruby/models/lesson_booking.rb b/ruby/lib/jam_ruby/models/lesson_booking.rb index 562c5c401..713882015 100644 --- a/ruby/lib/jam_ruby/models/lesson_booking.rb +++ b/ruby/lib/jam_ruby/models/lesson_booking.rb @@ -264,6 +264,7 @@ module JamRuby start_day = first_day if last_session + puts "last session causing a scoot" start_day = last_session.scheduled_start.to_date + 1 end @@ -276,7 +277,7 @@ module JamRuby times << time end end - times + { times: times, session: sessions.first } end def determine_needed_sessions(sessions) @@ -457,13 +458,26 @@ module JamRuby end end - def distribution_price_in_cents + def distribution_price_in_cents(target) if is_single_free? 0 elsif is_test_drive? 10 * 100 elsif is_normal? - booked_price * 100 + if is_monthly_payment? + raise "not a LessonPackagePurchase: #{target.inspect}" if !target.is_a?(LessonPackagePurchase) + + today = Date.today + + start_date = Date.new(target.year, target.month, 1) + if today.year == target.year && today.month == target.month + # we are in the month being billed. we should set the start date based on today + start_date = today + end + LessonSessionMonthlyPrice.price(self, start_date) * 100 + else + booked_price * 100 + end end end diff --git a/ruby/lib/jam_ruby/models/lesson_booking_slot.rb b/ruby/lib/jam_ruby/models/lesson_booking_slot.rb index 758bbc319..e0c8e9efa 100644 --- a/ruby/lib/jam_ruby/models/lesson_booking_slot.rb +++ b/ruby/lib/jam_ruby/models/lesson_booking_slot.rb @@ -73,25 +73,44 @@ module JamRuby def scheduled_times(needed_sessions, minimum_start_time) + #puts "NEEDED SESSIONS #{needed_sessions} #{minimum_start_time}" times = [] week_offset = 0 needed_sessions.times do |i| candidate = scheduled_time(i + week_offset) + #puts "#{i}: candidate #{candidate} week_offset:#{week_offset}" if day_of_week && candidate <= minimum_start_time # move it up a week week_offset += 1 candidate = scheduled_time(i + week_offset) + #puts "retry #1 #{candidate}" # sanity check if candidate <= minimum_start_time week_offset += 1 candidate = scheduled_time(i + week_offset) + #puts "retry #2 #{candidate}" if candidate <= minimum_start_time - raise "candidate time less than minimum start time even after scoot: #{lesson_booking.id} #{self.id}" + + week_offset += 1 + candidate = scheduled_time(i + week_offset) + + #puts "retry #3 #{candidate}" + if candidate <= minimum_start_time + + week_offset += 1 + candidate = scheduled_time(i + week_offset) + + #puts "retry #4 #{candidate}" + if candidate <= minimum_start_time + raise "candidate time less than minimum start time even after scoot: #{lesson_booking.id} #{self.id}" + end + end end + end end times << candidate diff --git a/ruby/lib/jam_ruby/models/lesson_package_purchase.rb b/ruby/lib/jam_ruby/models/lesson_package_purchase.rb index 7d0e98e4d..7662a2632 100644 --- a/ruby/lib/jam_ruby/models/lesson_package_purchase.rb +++ b/ruby/lib/jam_ruby/models/lesson_package_purchase.rb @@ -71,6 +71,8 @@ module JamRuby if lesson_booking && lesson_booking.requires_teacher_distribution?(purchase) purchase.teacher_distribution = TeacherDistribution.create_for_lesson_package_purchase(purchase) + # price should always match the teacher_distribution, if there is one + purchase.price = purchase.teacher_distribution.amount_in_cents / 100 end else purchase.recurring = false @@ -78,10 +80,10 @@ module JamRuby if lesson_booking purchase.lesson_package_type = lesson_booking.lesson_package_type - purchase.price = lesson_booking.booked_price # lesson_package_type.booked_price(lesson_booking) + purchase.price = lesson_booking.booked_price if purchase.price.nil? else purchase.lesson_package_type = lesson_package_type - purchase.price = lesson_package_type.price + purchase.price = lesson_package_type.price if purchase.price.nil? end purchase.save diff --git a/ruby/lib/jam_ruby/models/lesson_session_monthly_price.rb b/ruby/lib/jam_ruby/models/lesson_session_monthly_price.rb index 068721a2b..f1f667549 100644 --- a/ruby/lib/jam_ruby/models/lesson_session_monthly_price.rb +++ b/ruby/lib/jam_ruby/models/lesson_session_monthly_price.rb @@ -6,7 +6,22 @@ module JamRuby raise "lesson_booking is not monthly paid #{lesson_booking.admin_url}" if !lesson_booking.is_monthly_payment? - times = lesson_booking.predicted_times_for_month(start_day.year, start_day.month) + data = lesson_booking.predicted_times_for_month(start_day.year, start_day.month) + + times = data[:times] + session = data[:session] + + true_start = start_day + if session + # if there is already a session for the month, that is the real star + true_start = session.scheduled_start.to_date + end + + puts "filter out anything before start #{true_start}" + # filter out anything before the start day + times.select! { |time| time.to_date >= true_start } + + puts "times #{times.length}" result = nil if times.length == 0 diff --git a/ruby/lib/jam_ruby/models/teacher_distribution.rb b/ruby/lib/jam_ruby/models/teacher_distribution.rb index b124ed586..597cd3107 100644 --- a/ruby/lib/jam_ruby/models/teacher_distribution.rb +++ b/ruby/lib/jam_ruby/models/teacher_distribution.rb @@ -48,7 +48,7 @@ module JamRuby distribution.teacher = target.teacher distribution.ready = false distribution.distributed = false - distribution.amount_in_cents = target.lesson_booking.distribution_price_in_cents + distribution.amount_in_cents = target.lesson_booking.distribution_price_in_cents(target) distribution end def amount diff --git a/web/app/assets/images/content/bkg_home_jamclass.jpg b/web/app/assets/images/content/bkg_home_jamclass.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2d01fec7469aac58ff958df6a9505bfcc7f7f93f GIT binary patch literal 4063 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 literal 0 HcmV?d00001 diff --git a/web/app/assets/images/content/bkg_home_jamclass_x.jpg b/web/app/assets/images/content/bkg_home_jamclass_x.jpg new file mode 100644 index 0000000000000000000000000000000000000000..1c78c7233f9693f496d096e9d40a1738f576aed1 GIT binary patch literal 4421 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 RnDpUdkS+hQs^LeY{{xcN1#|!a literal 0 HcmV?d00001 diff --git a/web/app/assets/stylesheets/client/home.css.scss b/web/app/assets/stylesheets/client/home.css.scss index c4e7c07f7..f14bb75a4 100644 --- a/web/app/assets/stylesheets/client/home.css.scss +++ b/web/app/assets/stylesheets/client/home.css.scss @@ -13,8 +13,11 @@ opacity:0.6; } } +.homecard.jamclass { + background-image: url(/assets/content/bkg_home_jamclass.jpg); +} .homecard.createsession { - background-image: url(/assets/content/bkg_home_create.jpg); + background-image: url(/assets/content/bkg_home_feed.jpg); } .homecard.createsession-disabled { cursor:default; @@ -80,7 +83,7 @@ background-color: #b32712; } .homecard.createsession.hover { - background-image: url(/assets/content/bkg_home_create_x.jpg); + background-image: url(/assets/content/bkg_home_feed_x.jpg); } .homecard.findsession.hover { background-image: url(/assets/content/bkg_home_find_x.jpg); @@ -103,6 +106,6 @@ .homecard.jamtrack.hover { background-image: url(/assets/content/bkg_home_jamtracks_x.jpg); } - - - +.homecard.jamclass.hover { + background-image: url(/assets/content/bkg_home_jamclass_x.jpg); +} diff --git a/web/spec/features/book_monthly_recurring_lesson_spec.rb b/web/spec/features/book_monthly_recurring_lesson_spec.rb index 5e58a208f..99fd7a5f5 100644 --- a/web/spec/features/book_monthly_recurring_lesson_spec.rb +++ b/web/spec/features/book_monthly_recurring_lesson_spec.rb @@ -1,6 +1,6 @@ require 'spec_helper' -describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do +describe "Book Single Recurring Lesson", :js => true, :type => :feature, :capybara_feature => true do subject { page } @@ -8,8 +8,14 @@ describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capyb let(:teacher_user) {FactoryGirl.create(:teacher_user, first_name: "Teacher1", ready_for_session_at: Time.now)} let(:teacher_user2) {FactoryGirl.create(:teacher_user, ready_for_session_at: Time.now)} + after(:each) do + Timecop.return + end + before(:each) do + + LessonBooking.destroy_all Recording.delete_all Diagnostic.delete_all @@ -22,22 +28,14 @@ describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capyb teacher_user.teacher.ready_for_session_at = Time.now teacher_user.teacher.save! - + teacher_user.password.should eql 'foobar' teacher_user.teacher.price_per_lesson_60_cents.should eql 3000 Teacher.index(user, {})[:query].count.should eql 1 - - - end - - def finish_lesson_successfully - end describe "register via showing interesting in teacher 1st" do - after(:each) do - Timecop.return - end + it "succeeds" do visit "/client#/teachers/search" @@ -70,6 +68,7 @@ describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capyb lesson_booking.card_presumed_ok.should be_false lesson_booking.recurring.should be true lesson_booking.is_monthly_payment?.should be true + fill_in 'card-number', with: '4111111111111111' fill_in 'expiration', with: '11/2016' fill_in 'cvv', with: '111' @@ -144,11 +143,11 @@ describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capyb # dismiss banner find('a.button-orange', text:'CLOSE').trigger(:click) + lesson_booking = LessonBooking.where(teacher_id: teacher_user2).first lesson_booking.should_not be_nil lesson_booking.recurring.should be false - lesson_session = LessonSession.where(teacher_id: teacher_user2).first - lesson_session.teacher.should eql teacher_user2 + LessonSession.where(teacher_id: teacher_user2).count.should eql 1 lesson_package_purchase = LessonPackagePurchase.where(user_id: user.id).first lesson_package_purchase.should be_nil @@ -156,7 +155,57 @@ describe "Book Monthly Recurring Lesson", :js => true, :type => :feature, :capyb user.remaining_test_drives.should eql 0 user.sales.count.should eql 0 - finish_lesson_successfully + + # approve by teacher: + lesson_session1 = LessonSession.where(teacher_id: teacher_user).first + teacher_approve(lesson_session1) + + lesson_booking1 = LessonBooking.where(teacher_id: teacher_user).first + lesson_booking1.lesson_sessions.count.should eql 2 + lesson_session2 = LessonSession.where(teacher_id: teacher_user).last + + successful_lesson(lesson_session1) + + LessonSession.hourly_check + lesson_session1.reload + lesson_session1.analysed.should be_true + analysis = JSON.parse(lesson_session1.analysis) + analysis["reason"].should eql LessonSessionAnalyser::SUCCESS + lesson_session1.billing_attempts.should be_true + lesson_session1.billed.should eql false + lesson_session1.success.should be_true + + user.lesson_purchases.count.should eql 0 + + LessonBooking.hourly_check + + user.reload + lesson_package_purchase = user.lesson_purchases.count.should eql 1 + lesson_package_purchase = user.lesson_purchases.first + teacher_distribution = lesson_package_purchase.teacher_distribution + teacher_distribution.amount_in_cents.should eql 3000 / 2 + teacher_distribution.ready.should be_true + teacher_distribution.ready.should be_true + + lesson_session1.reload + lesson_session1.teacher_distribution.should be_nil + + Timecop.travel(Date.new(2016, 05, 01)) + + LessonSession.hourly_check + LessonBooking.hourly_check + + user.reload + user.lesson_purchases.count.should eql 2 + lesson_package_purchase = user.lesson_purchases.last + teacher_distribution = lesson_package_purchase.teacher_distribution + teacher_distribution.amount_in_cents.should eql 3000 + + + + + + end end end