spree_cm_commissioner 2.5.0.pre.pre13 → 2.5.0.pre.pre15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +4 -0
  3. data/Gemfile.lock +1 -1
  4. data/app/assets/images/mailer/call.png +0 -0
  5. data/app/assets/images/mailer/email.png +0 -0
  6. data/app/assets/images/mailer/user-tenant.png +0 -0
  7. data/app/controllers/spree/admin/base_controller_decorator.rb +7 -33
  8. data/app/controllers/spree/api/chatrace/guests_controller.rb +19 -2
  9. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +7 -51
  10. data/app/controllers/spree/api/v2/storefront/intercity_taxi/distance_calculator_controller.rb +47 -0
  11. data/app/controllers/spree/api/v2/storefront/intercity_taxi/draft_orders_controller.rb +7 -5
  12. data/app/controllers/spree/api/v2/storefront/trip_search_controller.rb +2 -2
  13. data/app/controllers/spree/api/v2/tenant/intercity_taxi/distance_calculator_controller.rb +47 -0
  14. data/app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb +7 -5
  15. data/app/controllers/spree/api/v2/tenant/trip_search_controller.rb +2 -2
  16. data/app/controllers/spree_cm_commissioner/admin/orders_controller_decorator.rb +9 -1
  17. data/app/interactors/spree_cm_commissioner/google_routes_distance_calculator.rb +0 -13
  18. data/app/interactors/spree_cm_commissioner/invalidate_cache_request.rb +3 -3
  19. data/app/interactors/spree_cm_commissioner/vehicle_type_updater.rb +41 -0
  20. data/app/jobs/spree_cm_commissioner/invalidate_cache_request_job.rb +1 -1
  21. data/app/mailers/spree/order_mailer_decorator.rb +22 -1
  22. data/app/models/concerns/spree_cm_commissioner/line_item_seat_selection.rb +40 -0
  23. data/app/models/concerns/spree_cm_commissioner/line_item_transitable.rb +1 -1
  24. data/app/models/concerns/spree_cm_commissioner/vehicle_kind.rb +21 -0
  25. data/app/models/spree_cm_commissioner/adjustable/adjuster/pricing_action.rb +25 -0
  26. data/app/models/spree_cm_commissioner/guest.rb +1 -1
  27. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +3 -0
  28. data/app/models/spree_cm_commissioner/homepage_background_app_image.rb +1 -1
  29. data/app/models/spree_cm_commissioner/invite_guest.rb +2 -5
  30. data/app/models/spree_cm_commissioner/line_item_decorator.rb +2 -2
  31. data/app/models/spree_cm_commissioner/option_type_decorator.rb +4 -1
  32. data/app/models/spree_cm_commissioner/option_value_decorator.rb +4 -1
  33. data/app/models/spree_cm_commissioner/{option_value_vehicle.rb → option_value_vehicle_type.rb} +2 -2
  34. data/app/models/spree_cm_commissioner/order_decorator.rb +14 -1
  35. data/app/models/spree_cm_commissioner/saved_guest.rb +2 -0
  36. data/app/models/spree_cm_commissioner/trip.rb +8 -7
  37. data/app/models/spree_cm_commissioner/vehicle.rb +8 -20
  38. data/app/models/spree_cm_commissioner/vehicle_type.rb +34 -0
  39. data/app/models/spree_cm_commissioner/vehicle_type_option_type.rb +6 -0
  40. data/app/models/spree_cm_commissioner/vendor_decorator.rb +1 -0
  41. data/app/overrides/spree/admin/orders/_order_actions/actions.html.erb.deface +36 -1
  42. data/app/overrides/spree/admin/products/edit/clear_cache_button.html.erb.deface +1 -1
  43. data/app/overrides/spree/admin/taxons/edit/clear_cache_button.html.erb.deface +3 -2
  44. data/app/queries/spree_cm_commissioner/trip_query.rb +5 -5
  45. data/app/request_schemas/spree_cm_commissioner/intercity_taxi_draft_order_update_schema.rb +2 -0
  46. data/app/serializers/spree/v2/storefront/line_item_serializer_decorator.rb +12 -0
  47. data/app/serializers/spree/v2/tenant/line_item_serializer.rb +14 -1
  48. data/app/serializers/spree_cm_commissioner/v2/storefront/distance_serializer.rb +26 -0
  49. data/app/serializers/spree_cm_commissioner/v2/storefront/intercity_taxi_line_item_serializer.rb +3 -3
  50. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_result_serializer.rb +2 -2
  51. data/app/serializers/spree_cm_commissioner/v2/storefront/trip_serializer.rb +1 -1
  52. data/app/serializers/spree_cm_commissioner/v2/storefront/{trip_vehicle_serializer.rb → trip_vehicle_type_serializer.rb} +2 -4
  53. data/app/services/spree_cm_commissioner/api_caches/invalidate.rb +98 -0
  54. data/app/services/spree_cm_commissioner/calculate_distance.rb +279 -0
  55. data/app/services/spree_cm_commissioner/cart/recalculate_decorator.rb +28 -1
  56. data/app/services/spree_cm_commissioner/guests/claim_invite_guest_service.rb +65 -0
  57. data/app/services/spree_cm_commissioner/intercity_taxi_order/calculate_distance.rb +224 -0
  58. data/app/services/spree_cm_commissioner/intercity_taxi_order/update.rb +30 -3
  59. data/app/services/spree_cm_commissioner/line_items/apply_pricing_models.rb +27 -0
  60. data/app/services/spree_cm_commissioner/pricing_models/apply.rb +4 -12
  61. data/app/services/spree_cm_commissioner/signing/sign_data.rb +42 -0
  62. data/app/services/spree_cm_commissioner/signing/verify_signature.rb +52 -0
  63. data/app/services/spree_cm_commissioner/transit/export_order.rb +146 -0
  64. data/app/services/spree_cm_commissioner/update_guest_service.rb +129 -0
  65. data/app/services/spree_cm_commissioner/vendor_places/create_with_google_map_data.rb +24 -7
  66. data/app/services/spree_cm_commissioner/vendor_places/update.rb +4 -2
  67. data/app/views/spree/admin/homepage_section/edit.html.erb +7 -2
  68. data/app/views/spree/order_mailer/cancel_email.html.erb +17 -0
  69. data/app/views/spree/order_mailer/confirm_email.html.erb +2 -2
  70. data/app/views/spree_cm_commissioner/cancel_order_mailer/_cancel_email.html.erb +13 -0
  71. data/app/views/spree_cm_commissioner/cancel_order_mailer/_footer.html.erb +8 -0
  72. data/app/views/spree_cm_commissioner/cancel_order_mailer/_header.html.erb +3 -0
  73. data/app/views/spree_cm_commissioner/cancel_order_mailer/_mailer_stylesheets.html.erb +88 -0
  74. data/app/views/spree_cm_commissioner/cancel_order_mailer/tenant/_cancel_email.html.erb +13 -0
  75. data/app/views/spree_cm_commissioner/cancel_order_mailer/tenant/_footer.html.erb +8 -0
  76. data/app/views/spree_cm_commissioner/cancel_order_mailer/tenant/_header.html.erb +15 -0
  77. data/app/views/spree_cm_commissioner/layouts/cancel_order_mailer.html.erb +16 -0
  78. data/app/views/spree_cm_commissioner/layouts/order_mailer.html.erb +1 -1
  79. data/app/views/spree_cm_commissioner/order_mailer/_customer_info.html.erb +2 -8
  80. data/app/views/spree_cm_commissioner/order_mailer/_mailer_stylesheets.html.erb +51 -23
  81. data/app/views/spree_cm_commissioner/order_mailer/_support_contact.html.erb +2 -7
  82. data/app/views/spree_cm_commissioner/order_mailer/purchased_items/_items.html.erb +76 -42
  83. data/app/views/spree_cm_commissioner/order_mailer/tenant/_customer_info.html.erb +4 -10
  84. data/app/views/spree_cm_commissioner/order_mailer/tenant/_support_contact.html.erb +3 -8
  85. data/config/locales/en.yml +14 -0
  86. data/config/locales/km.yml +26 -2
  87. data/config/routes.rb +2 -0
  88. data/db/migrate/20251127074809_change_guest_dynamic_fields_value_from_jsonb_to_text.rb +40 -0
  89. data/db/migrate/20251219035243_add_migrations_to_support_vehicle_types.rb +36 -0
  90. data/db/migrate/20260105072146_add_nationality_group_and_age_group_to_cm_saved_guests.rb +6 -0
  91. data/db/migrate/20260106093359_add_contact_phone_to_cm_vendor_places.rb +5 -0
  92. data/lib/spree_cm_commissioner/distance.rb +88 -0
  93. data/lib/spree_cm_commissioner/engine.rb +3 -0
  94. data/lib/spree_cm_commissioner/test_helper/factories/guest_factory.rb +2 -2
  95. data/lib/spree_cm_commissioner/test_helper/factories/line_item_factory.rb +3 -3
  96. data/lib/spree_cm_commissioner/test_helper/factories/pricing_model_variant_factory.rb +6 -0
  97. data/lib/spree_cm_commissioner/test_helper/factories/seat_layout_factory.rb +1 -1
  98. data/lib/spree_cm_commissioner/test_helper/factories/trip_factory.rb +1 -0
  99. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_factory.rb +4 -1
  100. data/lib/spree_cm_commissioner/test_helper/factories/vehicle_type_factory.rb +7 -0
  101. data/lib/spree_cm_commissioner/trip_query_result.rb +1 -1
  102. data/lib/spree_cm_commissioner/trip_result.rb +7 -1
  103. data/lib/spree_cm_commissioner/version.rb +1 -1
  104. data/lib/spree_cm_commissioner.rb +1 -1
  105. metadata +41 -10
  106. data/app/interactors/spree_cm_commissioner/trip_distance_calculator.rb +0 -165
  107. data/app/interactors/spree_cm_commissioner/vehicle_updater.rb +0 -41
  108. data/app/models/concerns/spree_cm_commissioner/vehicle_type.rb +0 -11
  109. data/app/models/spree_cm_commissioner/vehicle_option_type.rb +0 -6
  110. data/lib/spree_cm_commissioner/intercity_taxi/distance.rb +0 -38
  111. data/lib/spree_cm_commissioner/test_helper/factories/vendor_route_factory.rb +0 -7
@@ -1,41 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VehicleUpdater < BaseInteractor
3
- def call
4
- vehicle = context.vehicle
5
- data = context.data
6
-
7
- option_value_ids = data[:option_value_ids] || []
8
- option_type_ids = data[:option_type_ids] || []
9
-
10
- ActiveRecord::Base.transaction do
11
- update_vehicle!(vehicle, data[:vehicle_attributes])
12
- update_amenities!(vehicle, option_value_ids, option_type_ids)
13
- end
14
-
15
- context.message = I18n.t('views.transit.vehicles.update_success')
16
- rescue StandardError => e
17
- context.fail!(message: "Failed to update vehicle: #{e.message}")
18
- end
19
-
20
- private
21
-
22
- def update_vehicle!(vehicle, attributes)
23
- return if vehicle.update(attributes.slice(:code, :license_plate, :allow_seat_selection, :vehicle_type, :number_of_seats))
24
-
25
- raise vehicle.errors.full_messages.to_sentence
26
- end
27
-
28
- def update_amenities!(vehicle, option_value_ids, option_type_ids)
29
- vehicle.option_value_vehicles.where.not(option_value_id: option_value_ids).destroy_all
30
- vehicle.vehicle_option_types.where.not(option_type_id: option_type_ids).destroy_all
31
-
32
- option_value_ids.each do |option_value_id|
33
- vehicle.option_value_vehicles.find_or_create_by(option_value_id: option_value_id)
34
- end
35
-
36
- option_type_ids.each do |option_type_id|
37
- vehicle.vehicle_option_types.find_or_create_by(option_type_id: option_type_id)
38
- end
39
- end
40
- end
41
- end
@@ -1,11 +0,0 @@
1
- module SpreeCmCommissioner
2
- module VehicleType
3
- extend ActiveSupport::Concern
4
-
5
- VEHICLE_TYPES = %i[suv sedan minivan van sleeping_bus luxury_van air_bus bus ferry].freeze
6
-
7
- included do
8
- enum vehicle_type: VEHICLE_TYPES if table_exists? && column_names.include?('vehicle_type')
9
- end
10
- end
11
- end
@@ -1,6 +0,0 @@
1
- module SpreeCmCommissioner
2
- class VehicleOptionType < ApplicationRecord
3
- belongs_to :vehicle, class_name: 'SpreeCmCommissioner::Vehicle'
4
- belongs_to :option_type, class_name: 'Spree::OptionType'
5
- end
6
- end
@@ -1,38 +0,0 @@
1
- module SpreeCmCommissioner
2
- module IntercityTaxi
3
- class Distance
4
- attr_accessor :distance_km, :ordered_points, :estimated_time_minutes, :base_km,
5
- :detour_pickup_km, :detour_dropoff_km, :extra_pickup_km, :extra_dropoff_km
6
-
7
- def initialize(options = {})
8
- options = options.stringify_keys if options.is_a?(Hash)
9
-
10
- @distance_km = options['distance_km']&.to_f
11
- @ordered_points = options['ordered_points']
12
- @estimated_time_minutes = options['estimated_time_minutes']&.to_i
13
- @base_km = options['base_km']&.to_f
14
- @detour_pickup_km = options['detour_pickup_km']&.to_f
15
- @detour_dropoff_km = options['detour_dropoff_km']&.to_f
16
- @extra_pickup_km = options['extra_pickup_km']&.to_f
17
- @extra_dropoff_km = options['extra_dropoff_km']&.to_f
18
- end
19
-
20
- def self.from_hash(hash)
21
- new(hash || {})
22
- end
23
-
24
- def to_h
25
- {
26
- 'distance_km' => @distance_km,
27
- 'ordered_points' => @ordered_points,
28
- 'estimated_time_minutes' => @estimated_time_minutes,
29
- 'base_km' => @base_km,
30
- 'detour_pickup_km' => @detour_pickup_km,
31
- 'detour_dropoff_km' => @detour_dropoff_km,
32
- 'extra_pickup_km' => @extra_pickup_km,
33
- 'extra_dropoff_km' => @extra_dropoff_km
34
- }.compact
35
- end
36
- end
37
- end
38
- end
@@ -1,7 +0,0 @@
1
- FactoryBot.define do
2
- factory :cm_vendor_route, class: 'SpreeCmCommissioner::VendorRoute' do
3
- association :route, factory: :cm_route
4
- association :vendor
5
- trip_count { 0 }
6
- end
7
- end