Class: HhPackage::ReservationPackages::VoucherCalculator
- Inherits:
-
Object
- Object
- HhPackage::ReservationPackages::VoucherCalculator
- Defined in:
- app/my_lib/hh_package/reservation_packages/voucher_calculator.rb
Overview
VoucherCalculator - Calculates voucher deductions from prices
This calculator works entirely in cents internally for precision. Amounts are only converted to displayable format (amount) at the final output.
Example usage:
calc = HhPackage::ReservationPackages::VoucherCalculator.new([voucher], distance, user_id: user.id)
calc.set_package_price_cents(100000) # 1000 THB in cents
calc.set_delivery_price_cents(5000) # 50 THB in cents
final_price_cents = calc.final_total_price_cents # get final price in cents
final_delivery_fee_cents = calc.final_delivery_fee_cents # get final delivery fee in cents
voucher_amount_cents = calc.voucher_amount_cents_by_hungryhub + calc.voucher_amount_cents_by_restaurant
Constant Summary collapse
- PERCENTAGE_DIVISOR =
Constant for percentage to decimal conversion (100% = 1.0)
100
Instance Attribute Summary collapse
-
#arr_data ⇒ Object
Returns the value of attribute arr_data.
-
#delivery_distance ⇒ Object
Returns the value of attribute delivery_distance.
-
#delivery_fee_cents ⇒ Object
Returns the value of attribute delivery_fee_cents.
-
#package_price_cents ⇒ Object
Returns the value of attribute package_price_cents.
-
#used_vouchers ⇒ Object
Returns the value of attribute used_vouchers.
-
#voucher_amount_cents_by_hungryhub ⇒ Object
readonly
Returns the value of attribute voucher_amount_cents_by_hungryhub.
-
#voucher_amount_cents_by_restaurant ⇒ Object
readonly
Returns the value of attribute voucher_amount_cents_by_restaurant.
-
#voucher_deductibles ⇒ Object
Returns the value of attribute voucher_deductibles.
-
#vouchers ⇒ Object
Returns the value of attribute vouchers.
Instance Method Summary collapse
- #final_delivery_fee_cents ⇒ Object
- #final_total_price_cents ⇒ Object
-
#initialize(vouchers = [], delivery_distance = 0, user_id: nil) ⇒ VoucherCalculator
constructor
A new instance of VoucherCalculator.
- #set_delivery_price_cents(delivery_fee_cents) ⇒ Object
- #set_package_price_cents(package_price_cents) ⇒ Object
- #used_voucher_include_package? ⇒ Boolean
Constructor Details
#initialize(vouchers = [], delivery_distance = 0, user_id: nil) ⇒ VoucherCalculator
Returns a new instance of VoucherCalculator.
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 28 def initialize(vouchers = [], delivery_distance = 0, user_id: nil) @vouchers = vouchers @delivery_distance = delivery_distance @voucher_amount_cents_by_hungryhub = 0 @voucher_amount_cents_by_restaurant = 0 @arr_data = {} @user_id = user_id @deductible_remain_amount = [] @voucher_deductibles = [] @used_vouchers = [] build_package_vouchers build_delivery_fee_package_vouchers build_delivery_fee_vouchers end |
Instance Attribute Details
#arr_data ⇒ Object
Returns the value of attribute arr_data.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def arr_data @arr_data end |
#delivery_distance ⇒ Object
Returns the value of attribute delivery_distance.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def delivery_distance @delivery_distance end |
#delivery_fee_cents ⇒ Object
Returns the value of attribute delivery_fee_cents.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def delivery_fee_cents @delivery_fee_cents end |
#package_price_cents ⇒ Object
Returns the value of attribute package_price_cents.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def package_price_cents @package_price_cents end |
#used_vouchers ⇒ Object
Returns the value of attribute used_vouchers.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def used_vouchers @used_vouchers end |
#voucher_amount_cents_by_hungryhub ⇒ Object (readonly)
Returns the value of attribute voucher_amount_cents_by_hungryhub.
26 27 28 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 26 def voucher_amount_cents_by_hungryhub @voucher_amount_cents_by_hungryhub end |
#voucher_amount_cents_by_restaurant ⇒ Object (readonly)
Returns the value of attribute voucher_amount_cents_by_restaurant.
26 27 28 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 26 def voucher_amount_cents_by_restaurant @voucher_amount_cents_by_restaurant end |
#voucher_deductibles ⇒ Object
Returns the value of attribute voucher_deductibles.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def voucher_deductibles @voucher_deductibles end |
#vouchers ⇒ Object
Returns the value of attribute vouchers.
23 24 25 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 23 def vouchers @vouchers end |
Instance Method Details
#final_delivery_fee_cents ⇒ Object
65 66 67 68 69 70 71 72 73 74 75 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 65 def final_delivery_fee_cents raise ArgumentError, 'Invalid total delivery fee' if delivery_fee_cents.blank? return delivery_fee_cents if vouchers.blank? @delivery_fee_cents = decrease_with_vouchers(:delivery_fee_vouchers, delivery_fee_cents, 'hungryhub') @delivery_fee_cents = decrease_with_vouchers(:delivery_fee_package_vouchers, delivery_fee_cents, 'hungryhub') @delivery_fee_cents = decrease_with_vouchers(:delivery_fee_vouchers, delivery_fee_cents, 'restaurant') @delivery_fee_cents = decrease_with_vouchers(:delivery_fee_package_vouchers, delivery_fee_cents, 'restaurant') @delivery_fee_cents end |
#final_total_price_cents ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 52 def final_total_price_cents raise ArgumentError, 'Invalid total price' if package_price_cents.blank? return package_price_cents if vouchers.blank? @package_price_cents = decrease_with_vouchers(:package_vouchers, package_price_cents, 'hungryhub') @package_price_cents = decrease_with_vouchers(:delivery_fee_package_vouchers, package_price_cents, 'hungryhub') @package_price_cents = decrease_with_vouchers(:package_vouchers, package_price_cents, 'restaurant') @package_price_cents = decrease_with_vouchers(:delivery_fee_package_vouchers, package_price_cents, 'restaurant') @package_price_cents end |
#set_delivery_price_cents(delivery_fee_cents) ⇒ Object
48 49 50 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 48 def set_delivery_price_cents(delivery_fee_cents) @delivery_fee_cents = delivery_fee_cents end |
#set_package_price_cents(package_price_cents) ⇒ Object
44 45 46 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 44 def set_package_price_cents(package_price_cents) @package_price_cents = package_price_cents end |
#used_voucher_include_package? ⇒ Boolean
77 78 79 80 81 |
# File 'app/my_lib/hh_package/reservation_packages/voucher_calculator.rb', line 77 def used_voucher_include_package? raise ArgumentError, 'Invalid package price' if package_price_cents.blank? used_vouchers.select { |v| v[:for_package] }.present? end |