Class: SpreeCmCommissioner::IntercityTaxiOrder::CalculateDistance

Inherits:
Object
  • Object
show all
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/intercity_taxi_order/calculate_distance.rb

Overview

Computes trip distance details for intercity taxi orders

Instance Method Summary collapse

Instance Method Details

#call(pickups_attributes: [], dropoffs_attributes: [], pickup_oob_confirmed: false, dropoff_oob_confirmed: false, trip_id: nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'app/services/spree_cm_commissioner/intercity_taxi_order/calculate_distance.rb', line 7

def call(
  pickups_attributes: [],
  dropoffs_attributes: [],
  pickup_oob_confirmed: false,
  dropoff_oob_confirmed: false,
  trip_id: nil
)
  return failure(nil, 'trip_id is required') if trip_id.blank?

  initialize_context(pickup_oob_confirmed, dropoff_oob_confirmed, trip_id)
  setup_waypoints(pickups_attributes, dropoffs_attributes)

  return failure(nil, 'Trip origin location is not configured') if origin.blank?
  return failure(nil, 'Trip destination location is not configured') if configured_destination.blank?

  base_km = calculate_base_route
  return failure(nil, 'Unable to calculate base route') if base_km.nil?
  return build_simple_result(base_km) unless waypoints?

  details_ctx = fetch_full_route_details
  return failure(nil, details_ctx.message || 'Unable to calculate') unless details_ctx.success?

  detour_distances = calculate_detour_distances
  build_result(details_ctx, base_km, detour_distances)
rescue StandardError => e
  failure(nil, e.message)
end