Module: Api::Vendor::V1::Concerns::ChargeCalculatorHelper

Extended by:
ActiveSupport::Concern
Includes:
ElasticAPM::SpanHelpers
Included in:
Getyourguide::AvailabilitiesController, Getyourguide::BooksController
Defined in:
app/controllers/api/vendor/v1/concerns/charge_calculator_helper.rb

Instance Method Summary collapse

Instance Method Details

#calculate_package_charge(restaurant_package:, reservation: nil, restaurant: nil, adult: nil, kids: nil, date: nil, quantity: 1, booking_channel: nil, support_dynamic_pricing: false) ⇒ Hash

Calculate package price using dynamic pricing calculator

Parameters:

  • reservation (Reservation) (defaults to: nil)

    Optional reservation object (if provided, extracts data from it)

  • restaurant (Restaurant) (defaults to: nil)

    The restaurant object (optional if reservation provided)

  • restaurant_package (HhPackage::RestaurantPackage)

    The restaurant package

  • adult (Integer) (defaults to: nil)

    Number of adults (optional if reservation provided)

  • kids (Integer) (defaults to: nil)

    Number of kids (optional if reservation provided)

  • date (Date) (defaults to: nil)

    Reservation date (optional if reservation provided)

  • quantity (Integer) (defaults to: 1)

    Package quantity (default: 1)

  • booking_channel (Channel) (defaults to: nil)

    Optional booking channel (defaults to vendor's channel)

Returns:

  • (Hash)

    Hash containing :total_price_cents and :selected_packages



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
# File 'app/controllers/api/vendor/v1/concerns/charge_calculator_helper.rb', line 17

def calculate_package_charge(restaurant_package:, reservation: nil, restaurant: nil, adult: nil, kids: nil, date: nil, quantity: 1, booking_channel: nil, support_dynamic_pricing: false)
  # Extract data from reservation if provided
  if reservation.present?
    restaurant ||= reservation.restaurant
    adult ||= reservation.adult
    kids ||= reservation.kids
    date ||= reservation.date
    booking_channel ||= reservation.booking_channel
  end

  package = restaurant_package.package

  package_bought = [{
    package: package,
    restaurant_package_id: restaurant_package.id,
    quantity: quantity,
  }]

  calculator = HhPackage::ReservationPackages::ChargeCalculator.new
  calculator.use_dynamic_pricing = booking_channel&.support_dynamic_pricing
  reservation_date = booking_channel&.support_dynamic_pricing || support_dynamic_pricing ? date : nil
  calculator.calculate(package_bought, adult, kids, 0.0, restaurant, reservation_date)
end