spree_cm_commissioner 2.3.1.pre.pre1 → 2.3.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7791d1c6474375315937bc020c5bb5274abecbddc5e9b9f5df5a73e53576d626
4
- data.tar.gz: 03c0f3ccc698d12697c135f4daaab5718b1a72117288de9270069397660d62a5
3
+ metadata.gz: f69009264c3f351003ddd4885f403db68bc0a589a9e28123188a26bdd382b3d6
4
+ data.tar.gz: fea37b83621c4eb39ee2936ae4d72c377ee6d0767fb240be01c2de82e63d4c83
5
5
  SHA512:
6
- metadata.gz: 5cb82c98aac134ebedbdb29c1daf2cc22035ac4e5856c548b22015ffb9a574e6873e897407b8043d899164a9a1ffa941ec04fc25df2263e255e5fd1ad362531c
7
- data.tar.gz: 4ff0e66a420d2e7f589f2c63d55ca18acc0065aa015033b3917a5dbf603440df4f8a56a32834a02135f5e216a2e5f7d82e8e78f5c6d1df571dc7b261ddb90a79
6
+ metadata.gz: 8530a8855d325ffae9223d3ed705be0f445bd5ce01c2479ef809f783804af5d4b90cd716a5c10076cbad561f6d57c03becf4d8ccb2e7e33bd57144c29bd1ff5e
7
+ data.tar.gz: 9d2bada64c5ac4701bb9f18d233e8948e0e8b6b9cf6fd0e923157007bd06cde7ef79b13ffa0476aad2a3ec955a268e66249b3f49097fce93136a61dfa0856f4f
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.3.1.pre.pre1)
37
+ spree_cm_commissioner (2.3.2)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -20,6 +20,7 @@ module Spree
20
20
 
21
21
  def update
22
22
  order = SpreeCmCommissioner::IntercityTaxiOrder::Update.call(
23
+ order_number: params[:id],
23
24
  params: params
24
25
  )
25
26
 
@@ -3,7 +3,6 @@ module SpreeCmCommissioner
3
3
  enum place_type: { venue: 0, branch: 1, stop: 2, location: 3 }
4
4
  acts_as_list scope: :vendor
5
5
 
6
- belongs_to :tenant, class_name: 'SpreeCmCommissioner::Tenant', optional: true
7
6
  belongs_to :vendor, class_name: 'Spree::Vendor', optional: false
8
7
  belongs_to :place, class_name: 'SpreeCmCommissioner::Place', optional: false
9
8
  belongs_to :location, class_name: 'SpreeCmCommissioner::VendorPlace', optional: true
@@ -17,8 +16,6 @@ module SpreeCmCommissioner
17
16
 
18
17
  accepts_nested_attributes_for :place, allow_destroy: true
19
18
 
20
- before_save :set_tenant_id
21
-
22
19
  # include place when using these delegate to avoid N+1
23
20
  def display_name
24
21
  place&.name
@@ -31,11 +28,5 @@ module SpreeCmCommissioner
31
28
  def selected
32
29
  vendor.selected_place_references.include?(place&.reference)
33
30
  end
34
-
35
- private
36
-
37
- def set_tenant_id
38
- self.tenant_id = vendor&.tenant_id
39
- end
40
31
  end
41
32
  end
@@ -1,13 +1,12 @@
1
1
  module SpreeCmCommissioner
2
2
  class TripQuery
3
- attr_reader :origin_id, :destination_id, :date, :vendor_id, :tenant_id, :number_of_guests, :route_type, :params
3
+ attr_reader :origin_id, :destination_id, :date, :vendor_id, :number_of_guests, :route_type, :params
4
4
 
5
- def initialize(origin_id:, destination_id:, date:, route_type: nil, vendor_id: nil, tenant_id: nil, number_of_guests: nil, params: {}) # rubocop:disable Metrics/ParameterLists
5
+ def initialize(origin_id:, destination_id:, date:, route_type: nil, vendor_id: nil, number_of_guests: nil, params: {}) # rubocop:disable Metrics/ParameterLists
6
6
  @origin_id = origin_id
7
7
  @destination_id = destination_id
8
8
  @date = date.to_date == Time.zone.now.to_date ? Time.zone.now : Time.zone.parse(date.to_s)
9
9
  @vendor_id = vendor_id
10
- @tenant_id = tenant_id
11
10
  @number_of_guests = number_of_guests || 1
12
11
  @route_type = route_type
13
12
  @params = params
@@ -37,9 +36,8 @@ module SpreeCmCommissioner
37
36
 
38
37
  def direct_trips
39
38
  result = trip_scope
40
- result = result.where({ vendor_id: vendor_id }.compact) if vendor_id.present?
39
+ result = result.where({ vendor_id: vendor_id }.compact)
41
40
  result = result.where(route_type: route_type) if route_type.present?
42
- result = result.where(spree_vendors: { tenant_id: tenant_id }) if tenant_id.present?
43
41
  paginate(result)
44
42
  end
45
43
 
@@ -58,24 +56,20 @@ module SpreeCmCommissioner
58
56
  private
59
57
 
60
58
  def trip_scope
61
- scope = SpreeCmCommissioner::Trip
62
- .select(<<~SQL.squish)
63
- cm_trips.*,
64
- boarding.departure_time AS boarding_departure_time,
65
- boarding.stop_place_id AS boarding_stop_id, boarding.stop_name AS boarding_stop_name,
66
- drop_off.stop_name AS drop_off_stop_name, drop_off.stop_place_id AS drop_off_stop_id,
67
- drop_off.arrival_time AS drop_off_arrival_time,
68
- COALESCE(iv.quantity_available, 0) AS quantity_available,
69
- COALESCE(iv.max_capacity, 0) AS max_capacity,
70
- origin_places.name AS origin_place_name, dest_places.name AS destination_place_name,
71
- prices.amount AS amount, prices.compare_at_amount AS compare_at_amount,
72
- prices.currency AS currency
73
- SQL
74
- .includes(vendor: :logo, vehicle: :option_values)
75
-
76
- scope = scope.joins(:vendor) if tenant_id.present?
77
-
78
- scope
59
+ SpreeCmCommissioner::Trip
60
+ .select(<<~SQL.squish)
61
+ cm_trips.*,
62
+ boarding.departure_time AS boarding_departure_time,
63
+ boarding.stop_place_id AS boarding_stop_id, boarding.stop_name AS boarding_stop_name,
64
+ drop_off.stop_name AS drop_off_stop_name, drop_off.stop_place_id AS drop_off_stop_id,
65
+ drop_off.arrival_time AS drop_off_arrival_time,
66
+ COALESCE(iv.quantity_available, 0) AS quantity_available,
67
+ COALESCE(iv.max_capacity, 0) AS max_capacity,
68
+ origin_places.name AS origin_place_name, dest_places.name AS destination_place_name,
69
+ prices.amount AS amount, prices.compare_at_amount AS compare_at_amount,
70
+ prices.currency AS currency
71
+ SQL
72
+ .includes(vendor: :logo, vehicle: :option_values)
79
73
  .joins(<<~SQL.squish)
80
74
  INNER JOIN cm_trip_stops AS boarding ON boarding.trip_id = cm_trips.id AND boarding.stop_type = 0
81
75
  INNER JOIN cm_trip_stops AS drop_off ON drop_off.trip_id = cm_trips.id AND drop_off.stop_type = 1
@@ -42,7 +42,6 @@ module SpreeCmCommissioner
42
42
  )
43
43
 
44
44
  build_guests_for!(line_item, quantity)
45
- assign_saved_guests_to_line_item(line_item)
46
45
 
47
46
  order.save!
48
47
  order.update_with_updater!
@@ -63,13 +62,6 @@ module SpreeCmCommissioner
63
62
  def build_guests_for!(line_item, qty)
64
63
  Array.new(qty) { line_item.guests.new }
65
64
  end
66
-
67
- def assign_saved_guests_to_line_item(line_item)
68
- line_item.guests.each do |guest|
69
- saved_guest = SpreeCmCommissioner::SavedGuest.new
70
- guest.saved_guest = saved_guest
71
- end
72
- end
73
65
  end
74
66
  end
75
67
  end
@@ -1,20 +1,23 @@
1
1
  module SpreeCmCommissioner
2
2
  module IntercityTaxiOrder
3
3
  class Update
4
- attr_reader :params
4
+ attr_reader :order_number, :params
5
5
 
6
- def self.call(params:)
7
- new(params: params).call
6
+ def self.call(order_number:, params:)
7
+ new(order_number: order_number, params: params).call
8
8
  end
9
9
 
10
- def initialize(params:)
10
+ def initialize(order_number:, params:)
11
+ @order_number = order_number
11
12
  @params = ensure_parameters(params)
12
13
  end
13
14
 
14
15
  def call
15
- order = find_order!
16
+ order = Spree::Order.find_by!(number: order_number)
16
17
  order.update!(order_params)
17
18
 
19
+ create_billing_address_if_missing(order)
20
+
18
21
  order
19
22
  end
20
23
 
@@ -26,41 +29,48 @@ module SpreeCmCommissioner
26
29
  ::ActionController::Parameters.new(params)
27
30
  end
28
31
 
29
- def find_order!
30
- raise(ArgumentError, 'Order token is required') if order_token.blank?
31
-
32
- Spree::Order.find_by!(token: order_token)
33
- end
32
+ def create_billing_address_if_missing(order)
33
+ return if order.bill_address.present?
34
34
 
35
- def order_token
36
- params[:order_token]
35
+ SpreeCmCommissioner::BillingAddressCreator.call(order: order)
37
36
  end
38
37
 
39
38
  def order_params
40
39
  params.require(:order).permit(
41
- line_items_attributes: %i[
42
- id
43
- pickup_place_name
44
- drop_off_place_name
45
- from_date
46
- pickup_lat
47
- pickup_lng
48
- pickup_oob_confirmed
49
- drop_off_lat
50
- drop_off_lng
51
- drop_off_oob_confirmed
52
- distance_km
53
- ordered_points
54
- base_km
55
- detour_pickup_km
56
- detour_dropoff_km
57
- extra_pickup_km
58
- extra_dropoff_km
59
- extra_pickup_charge_usd
60
- extra_dropoff_charge_usd
61
- estimated_time_minutes
62
- remark
63
- passenger_count
40
+ :intel_phone_number,
41
+ :email,
42
+ line_items_attributes: [
43
+ :id,
44
+ :pickup_place_name,
45
+ :drop_off_place_name,
46
+ :from_date,
47
+ :pickup_lat,
48
+ :pickup_lng,
49
+ :pickup_oob_confirmed,
50
+ :drop_off_lat,
51
+ :drop_off_lng,
52
+ :drop_off_oob_confirmed,
53
+ :distance_km,
54
+ :ordered_points,
55
+ :base_km,
56
+ :detour_pickup_km,
57
+ :detour_dropoff_km,
58
+ :extra_pickup_km,
59
+ :extra_dropoff_km,
60
+ :extra_pickup_charge_usd,
61
+ :extra_dropoff_charge_usd,
62
+ :estimated_time_minutes,
63
+ :remark,
64
+ :passenger_count,
65
+ { guests_attributes: %i[
66
+ id
67
+ first_name
68
+ last_name
69
+ gender
70
+ nationality_id
71
+ age
72
+ ]
73
+ }
64
74
  ]
65
75
  )
66
76
  end
data/config/routes.rb CHANGED
@@ -550,18 +550,6 @@ Spree::Core::Engine.add_routes do
550
550
  resources :guest_card_classes
551
551
  resources :tickets, only: :index
552
552
 
553
- resources :trip_places, only: :index
554
- resources :trip_search, only: [:index]
555
- resources :trips, only: %i[show]
556
-
557
- namespace :intercity_taxi do
558
- resources :draft_orders, only: [:create] do
559
- collection do
560
- patch :update
561
- end
562
- end
563
- end
564
-
565
553
  resource :reset_passwords, only: [:update]
566
554
  resource :change_passwords, only: [:update]
567
555
  resource :user_contacts, only: [:update]
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.3.1.pre.pre1'.freeze
2
+ VERSION = '2.3.2'.freeze
3
3
 
4
4
  module_function
5
5
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spree_cm_commissioner
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.3.1.pre.pre1
4
+ version: 2.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-11-25 00:00:00.000000000 Z
11
+ date: 2025-11-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1013,7 +1013,6 @@ files:
1013
1013
  - app/controllers/spree/api/v2/tenant/guests_controller.rb
1014
1014
  - app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb
1015
1015
  - app/controllers/spree/api/v2/tenant/id_cards_controller.rb
1016
- - app/controllers/spree/api/v2/tenant/intercity_taxi/draft_orders_controller.rb
1017
1016
  - app/controllers/spree/api/v2/tenant/line_items_controller.rb
1018
1017
  - app/controllers/spree/api/v2/tenant/notifications_controller.rb
1019
1018
  - app/controllers/spree/api/v2/tenant/order_histories_controller.rb
@@ -1026,9 +1025,6 @@ files:
1026
1025
  - app/controllers/spree/api/v2/tenant/s3_signed_urls_controller.rb
1027
1026
  - app/controllers/spree/api/v2/tenant/taxons_controller.rb
1028
1027
  - app/controllers/spree/api/v2/tenant/tickets_controller.rb
1029
- - app/controllers/spree/api/v2/tenant/trip_places_controller.rb
1030
- - app/controllers/spree/api/v2/tenant/trip_search_controller.rb
1031
- - app/controllers/spree/api/v2/tenant/trips_controller.rb
1032
1028
  - app/controllers/spree/api/v2/tenant/user_account_linkages_controller.rb
1033
1029
  - app/controllers/spree/api/v2/tenant/user_contacts_controller.rb
1034
1030
  - app/controllers/spree/api/v2/tenant/user_device_tokens_controller.rb
@@ -2856,7 +2852,6 @@ files:
2856
2852
  - db/migrate/20251009073040_add_lock_version_to_cm_routes.rb
2857
2853
  - db/migrate/20251009073929_add_lock_version_to_cm_vendor_routes.rb
2858
2854
  - db/migrate/20251113081853_add_index_to_spree_orders_updated_at.rb
2859
- - db/migrate/20251119093000_add_tenant_id_to_cm_vendor_places.rb
2860
2855
  - docker-compose.yml
2861
2856
  - docs/api/scoped-access-token-endpoints.md
2862
2857
  - docs/option_types/attr_types.md
@@ -3021,9 +3016,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
3021
3016
  version: '2.7'
3022
3017
  required_rubygems_version: !ruby/object:Gem::Requirement
3023
3018
  requirements:
3024
- - - ">"
3019
+ - - ">="
3025
3020
  - !ruby/object:Gem::Version
3026
- version: 1.3.1
3021
+ version: '0'
3027
3022
  requirements:
3028
3023
  - none
3029
3024
  rubygems_version: 3.4.1
@@ -1,41 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- module IntercityTaxi
6
- class DraftOrdersController < BaseController
7
- def create
8
- order = SpreeCmCommissioner::IntercityTaxiOrder::Create.call(
9
- trip_id: params[:trip_id],
10
- from_date: params[:from_date],
11
- to_date: params[:to_date],
12
- user_id: params[:user_id],
13
- quantity: params[:quantity]
14
- )
15
-
16
- render_serialized_payload { serialize_resource(order) }
17
- rescue StandardError => e
18
- render_error_payload(e.message)
19
- end
20
-
21
- def update
22
- order = SpreeCmCommissioner::IntercityTaxiOrder::Update.call(
23
- params: params
24
- )
25
-
26
- render_serialized_payload { serialize_resource(order) }
27
- rescue StandardError => e
28
- render_error_payload(e.message)
29
- end
30
-
31
- private
32
-
33
- def resource_serializer
34
- SpreeCmCommissioner::V2::Storefront::IntercityTaxiCartSerializer
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
@@ -1,48 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class TripPlacesController < BaseController
6
- def index
7
- render_serialized_payload do
8
- serialize_collection(paginated_collection)
9
- end
10
- end
11
-
12
- private
13
-
14
- def paginated_collection
15
- collection.page(params[:page]).per(params[:per_page])
16
- end
17
-
18
- def collection
19
- @collection ||= begin
20
- base_scope = scope
21
-
22
- if params[:q].present?
23
- @search = base_scope.ransack(params[:q])
24
- @search.result
25
- else
26
- base_scope
27
- end
28
- end
29
- end
30
-
31
- def scope
32
- model_class.joins(:location_vendor_places)
33
- .where(location_vendor_places: { tenant_id: @tenant.id })
34
- .distinct
35
- end
36
-
37
- def model_class
38
- SpreeCmCommissioner::Place
39
- end
40
-
41
- def collection_serializer
42
- SpreeCmCommissioner::V2::Storefront::TripPlaceSerializer
43
- end
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,103 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class TripSearchController < BaseController
6
- CACHE_EXPIRES_IN = 5.minutes
7
-
8
- def index
9
- render_serialized_payload do
10
- Rails.cache.fetch(collection_cache_key, collection_cache_opts) do
11
- trips = SpreeCmCommissioner::TripQuery.new(
12
- origin_id: params[:origin_id],
13
- destination_id: params[:destination_id],
14
- date: params[:date],
15
- route_type: params[:route_type],
16
- number_of_guests: params[:number_of_guests],
17
- tenant_id: @tenant.id,
18
- params: params
19
- ).call
20
-
21
- serialize_collection(trips)
22
- end
23
- end
24
- end
25
-
26
- private
27
-
28
- # override from ContentCacheable
29
- def max_age
30
- CACHE_EXPIRES_IN.to_i
31
- end
32
-
33
- # override
34
- def collection_cache_key
35
- cache_key_parts = [
36
- 'trip_search',
37
- @tenant.id,
38
- params[:origin_id],
39
- params[:destination_id],
40
- params[:date],
41
- params[:route_type],
42
- params[:number_of_guests],
43
- resource_includes&.sort&.join(','),
44
- sparse_fields&.sort&.join(','),
45
- serializer_params.to_json,
46
- params[:page]&.to_s&.strip,
47
- params[:per_page]&.to_s&.strip
48
- ].compact.join('-')
49
-
50
- Digest::MD5.hexdigest(cache_key_parts)
51
- end
52
-
53
- # override
54
- def collection_cache_opts
55
- {
56
- namespace: Spree::Api::Config[:api_v2_collection_cache_namespace],
57
- expires_in: CACHE_EXPIRES_IN
58
- }
59
- end
60
-
61
- # override
62
- def default_resource_includes
63
- [
64
- 'trips.vendor',
65
- 'trips.vendor.logo',
66
- 'trips.vehicle',
67
- 'trips.vehicle.vehicle_photos',
68
- 'trips.amenities'
69
- ]
70
- end
71
-
72
- def serialize_collection(collection)
73
- serialized_data = SpreeCmCommissioner::V2::Storefront::TripQueryResultSerializer.new(
74
- collection,
75
- include: default_resource_includes,
76
- params: serializer_params
77
- ).serializable_hash
78
- serialized_data[:meta] = {
79
- count: collection.size,
80
- total_count: collection.respond_to?(:total_count) ? collection.total_count : collection.size,
81
- current_page: collection.respond_to?(:current_page) ? collection.current_page : 1,
82
- per_page: collection.respond_to?(:limit_value) ? collection.limit_value : collection.size,
83
- pages: collection.respond_to?(:total_pages) ? collection.total_pages : 1,
84
- next_page: collection.respond_to?(:next_page) ? collection.next_page : nil,
85
- prev_page: collection.respond_to?(:prev_page) ? collection.prev_page : nil
86
- }
87
- serialized_data
88
- end
89
-
90
- # override
91
- def serializer_params
92
- params.permit(:include).to_hash
93
- end
94
-
95
- # override
96
- def required_schema
97
- SpreeCmCommissioner::TripSearchRequestSchema
98
- end
99
- end
100
- end
101
- end
102
- end
103
- end
@@ -1,32 +0,0 @@
1
- module Spree
2
- module Api
3
- module V2
4
- module Tenant
5
- class TripsController < BaseController
6
- def show
7
- resource = scope.find(params[:id])
8
-
9
- render_serialized_payload do
10
- serialize_resource(resource)
11
- end
12
- end
13
-
14
- private
15
-
16
- def scope
17
- model_class.joins(:vendor)
18
- .where(spree_vendors: { tenant_id: @tenant.id })
19
- end
20
-
21
- def model_class
22
- SpreeCmCommissioner::Trip
23
- end
24
-
25
- def resource_serializer
26
- SpreeCmCommissioner::V2::Storefront::TripSerializer
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,7 +0,0 @@
1
- class AddTenantIdToCmVendorPlaces < ActiveRecord::Migration[7.0]
2
- def change
3
- add_column :cm_vendor_places, :tenant_id, :integer, if_not_exists: true
4
- add_index :cm_vendor_places, :tenant_id, if_not_exists: true
5
- add_index :cm_vendor_places, %i[tenant_id vendor_id], if_not_exists: true, name: 'index_cm_vendor_places_on_tenant_and_vendor'
6
- end
7
- end