88 lines
2.8 KiB
Ruby
88 lines
2.8 KiB
Ruby
module JamRuby
|
|
class LessonSessionMonthlyPrice
|
|
|
|
# calculate the price for a given month
|
|
def self.price(lesson_booking, start_day)
|
|
|
|
raise "lesson_booking is not monthly paid #{lesson_booking.admin_url}" if !lesson_booking.is_monthly_payment?
|
|
|
|
|
|
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
|
|
|
|
# filter out anything before the start day
|
|
times.select! { |time| time.to_date >= true_start }
|
|
|
|
result = nil
|
|
if times.length == 0
|
|
result = 0
|
|
elsif times.length == 1
|
|
result = (lesson_booking.booked_price * 0.25).round(2)
|
|
elsif times.length == 2
|
|
result = (lesson_booking.booked_price * 0.50).round(2)
|
|
elsif times.length == 3
|
|
result = (lesson_booking.booked_price * 0.75).round(2)
|
|
else
|
|
result = lesson_booking.booked_price
|
|
end
|
|
|
|
[result, times.length]
|
|
end
|
|
|
|
def self.adjust_for_missed_lessons(lesson_booking, price_in_cents, split)
|
|
|
|
if !split
|
|
split = 1.0
|
|
end
|
|
|
|
adjusted_price_in_cents = price_in_cents
|
|
|
|
lesson_package_purchases = LessonPackagePurchase.where(lesson_booking: lesson_booking).where('remaining_roll_forward_amount_in_cents > 0').order(:created_at)
|
|
remaining_roll_forward = 0
|
|
skip_crediting = false
|
|
reduced_amount = 0
|
|
|
|
lesson_package_purchases.each do |lesson_package_purchase|
|
|
|
|
if !skip_crediting
|
|
|
|
take_off = (lesson_package_purchase.remaining_roll_forward_amount_in_cents * split).round
|
|
|
|
amount_remaining_after_adjustment = price_in_cents - take_off
|
|
|
|
if amount_remaining_after_adjustment <= 0
|
|
# there isn't enough 'price_in_cents' to eat up the needed credit, so we say this teacher_distribution has no due price, and break out of the loo
|
|
adjusted_price_in_cents = 0
|
|
reduced_amount += price_in_cents
|
|
lesson_package_purchase.remaining_roll_forward_amount_in_cents -= price_in_cents
|
|
skip_crediting = true
|
|
else
|
|
adjusted_price_in_cents = amount_remaining_after_adjustment
|
|
reduced_amount += take_off
|
|
# this lesson_package_purchase is now cleared out - totally credited!
|
|
lesson_package_purchase.remaining_roll_forward_amount_in_cents = 0
|
|
end
|
|
end
|
|
|
|
remaining_roll_forward = remaining_roll_forward + lesson_package_purchase.remaining_roll_forward_amount_in_cents
|
|
|
|
lesson_package_purchase.save!
|
|
end
|
|
|
|
lesson_booking.remaining_roll_forward_amount_in_cents = remaining_roll_forward
|
|
lesson_booking.save!
|
|
|
|
adjusted_price_in_cents
|
|
end
|
|
end
|
|
end
|
|
|