spree_cm_commissioner 2.5.13.pre.pre8 → 2.5.13.pre.pre9

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 (24) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +1 -1
  3. data/app/controllers/spree/api/v2/tenant/guests_controller.rb +8 -0
  4. data/app/models/concerns/spree_cm_commissioner/line_item_transitable.rb +8 -1
  5. data/app/models/spree_cm_commissioner/exports/operator_guest_json_gzip.rb +37 -122
  6. data/app/models/spree_cm_commissioner/route.rb +2 -0
  7. data/app/models/spree_cm_commissioner/trip.rb +4 -3
  8. data/app/models/spree_cm_commissioner/vendor_decorator.rb +1 -0
  9. data/app/overrides/spree/admin/vendors/_form/service_origin.html.erb.deface +6 -0
  10. data/app/serializers/spree/api/v2/platform/create_guest_adjustment_serializer.rb +10 -0
  11. data/app/serializers/spree/api/v2/platform/create_line_item_adjustment_serializer.rb +10 -0
  12. data/app/serializers/spree/api/v2/platform/create_route_adjustment_serializer.rb +10 -0
  13. data/app/serializers/spree/v2/tenant/guest_serializer.rb +1 -1
  14. data/app/serializers/spree_cm_commissioner/v2/storefront/pricing_action_serializer.rb +13 -0
  15. data/app/serializers/spree_cm_commissioner/v2/storefront/transit_line_item_serializer.rb +2 -1
  16. data/app/services/spree_cm_commissioner/intercity_taxi_order/create.rb +6 -3
  17. data/app/services/spree_cm_commissioner/routes/create.rb +1 -0
  18. data/app/services/spree_cm_commissioner/transit_order/create.rb +4 -3
  19. data/config/initializers/spree_permitted_attributes.rb +1 -0
  20. data/db/migrate/20260204100000_add_service_origin_to_spree_vendors.rb +5 -0
  21. data/db/migrate/20260204100001_add_service_origin_to_cm_routes.rb +5 -0
  22. data/db/migrate/20260204100002_add_service_origin_to_cm_trips.rb +5 -0
  23. data/lib/spree_cm_commissioner/version.rb +1 -1
  24. metadata +10 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b8d9079ec3d330f24660ad868a1dc11b8234320b5d24bf969fc9277e749aa27b
4
- data.tar.gz: 8fc10da5985171cd7ef4fe7169fa31fbed0165d4127d692b044d47b61c79dd78
3
+ metadata.gz: ba2140773bad618354a2555600dc2dc6c1e76be537bc3004d4f798c9612bd32f
4
+ data.tar.gz: da771f3419c7ebc869e9e30137ff680bf84068686cdbc2369db2d1bd5413a81d
5
5
  SHA512:
6
- metadata.gz: 341bd234e2f1241c6d187071305ed0860cb92e4de638b5763d85e0fea26fb1181176c08ecdb5f949d7ed2e867a98cf7378ffd3519fe7d2c5e742e172e4f5c859
7
- data.tar.gz: c53bd07867650c771c942b6447c89acda5f05f3e9c582aba12c7c7e51df5d534d0f8983c9a61a05b598eaad35179086e90c189bb8faa55b213a429a76c38ef9f
6
+ metadata.gz: 315c8495b3bf43182dc4ff33e80d08ffdf6b86f54bb02ca8e99420967ad0cb02a6afd25cda7702462aebec63a8ccb684c60f0d22f6649eeb91ef831068ef068b
7
+ data.tar.gz: 7a602eac8abded453c0c1faee97a595ca8632036cf5c32017da2b5f78b118f2fa26575e0186883f14af7237d9391b9d1d9693860276ff8f3d776636904321732
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.5.13.pre.pre8)
37
+ spree_cm_commissioner (2.5.13.pre.pre9)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -34,6 +34,7 @@ module Spree
34
34
 
35
35
  ActiveRecord::Base.transaction do
36
36
  resource.save!
37
+ recalculate_cart(resource.line_item)
37
38
  run_dynamic_fields(resource)
38
39
  resource.save_and_move_to_next_stage
39
40
  end
@@ -48,6 +49,7 @@ module Spree
48
49
  run_dynamic_fields(resource) if guest_params[:guest_dynamic_fields_attributes]
49
50
  resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
50
51
  resource.save!
52
+ recalculate_cart(resource.line_item)
51
53
  resource.save_and_move_to_next_stage
52
54
  end
53
55
 
@@ -87,6 +89,8 @@ module Spree
87
89
  :other_organization,
88
90
  :expectation,
89
91
  :upload_later,
92
+ :age_group,
93
+ :nationality_group,
90
94
  guest_dynamic_fields_attributes: %i[
91
95
  id
92
96
  dynamic_field_id
@@ -111,6 +115,10 @@ module Spree
111
115
  def handle_record_not_found(exception)
112
116
  render_error_payload({ base: [exception.message] }, 404)
113
117
  end
118
+
119
+ def recalculate_cart(line_item)
120
+ ::Spree::Dependencies.cart_recalculate_service.constantize.call(line_item: line_item, order: spree_current_order)
121
+ end
114
122
  end
115
123
  end
116
124
  end
@@ -5,7 +5,8 @@
5
5
  # 'direction': 'outbound' or 'inbound',
6
6
  # 'trip_id': 123,
7
7
  # 'boarding_trip_stop_id': 456,
8
- # 'drop_off_trip_stop_id': 789
8
+ # 'drop_off_trip_stop_id': 789,
9
+ # 'service_origin_id': 101
9
10
  # }
10
11
  #
11
12
  # Direction:
@@ -26,6 +27,7 @@ module SpreeCmCommissioner
26
27
  validates :trip_id, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
27
28
  validates :boarding_trip_stop_id, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
28
29
  validates :drop_off_trip_stop_id, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
30
+ validates :service_origin_id, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
29
31
 
30
32
  validates :passenger_count, numericality: { only_integer: true, greater_than: 0 }, allow_nil: true
31
33
 
@@ -56,6 +58,7 @@ module SpreeCmCommissioner
56
58
  def connected_trip_id = private_metadata['connected_trip_id']
57
59
  def boarding_trip_stop_id = private_metadata['boarding_trip_stop_id']&.to_i
58
60
  def drop_off_trip_stop_id = private_metadata['drop_off_trip_stop_id']&.to_i
61
+ def service_origin_id = private_metadata['service_origin_id']&.to_i
59
62
 
60
63
  def passenger_count = public_metadata['passenger_count']&.to_i
61
64
 
@@ -112,6 +115,10 @@ module SpreeCmCommissioner
112
115
  set_private_metadata_value('drop_off_trip_stop_id', value)
113
116
  end
114
117
 
118
+ def service_origin_id=(value)
119
+ set_private_metadata_value('service_origin_id', value)
120
+ end
121
+
115
122
  def passenger_count=(value)
116
123
  set_public_metadata_value('passenger_count', value)
117
124
  end
@@ -1,148 +1,63 @@
1
1
  module SpreeCmCommissioner
2
2
  module Exports
3
3
  class OperatorGuestJsonGzip < ::SpreeCmCommissioner::Export
4
- BATCH_INCLUDES = [
5
- :occupation, :user,
6
- { check_ins: %i[check_in_by check_in_session], line_item: [:variant, { order: :bill_address }] }
7
- ].freeze
8
-
9
4
  # eg. ['check_ins', 'check_ins.check_in_by', 'line_item', 'line_item.order']
10
- store_public_metadata :resource_includes, :array, default: []
11
- store_public_metadata :guests_count, :integer, default: 0
12
- store_public_metadata :track_processed_messages, :array, default: []
5
+ store_public_metadata :resource_includes, :array
6
+ store_public_metadata :guests_count, :integer
13
7
 
14
8
  # override
15
- def export
16
- self.track_messages = []
9
+ def export # rubocop:disable Metrics/AbcSize
10
+ track_messages = []
17
11
  track_messages << "Export started at #{Time.current.iso8601}"
18
12
  update(status: :progress, track_messages: track_messages)
19
13
 
20
- guests_query = SpreeCmCommissioner::GuestSearcherQuery.new(event_id: exportable_id).call
21
- self.guests_count = guests_query.count(:id)
22
-
23
- track_messages << "Processing #{guests_count} guests in batches"
24
- update(track_messages: track_messages, guests_count: guests_count)
25
-
26
- # We use 2 temp files to avoid loading everything into memory:
27
- # - File 1: guest1,guest2,guest3... (just the data array content)
28
- # - File 2: user1,order1,user2... (just the included array content)
29
- # Then we merge them into: {"data":[File1],"included":[File2]}
30
- guests_file = Tempfile.new(['guests', '.json'])
31
- included_file = Tempfile.new(['included', '.json'])
32
- output_gz_file = Tempfile.new(['export', '.json.gz'])
33
-
34
- begin
35
- stream_export_data_and_includes_to_separate_files(guests_query, guests_file, included_file)
36
- stream_export_merge_and_compress_data_and_includes_to_a_single_file(guests_file, included_file, output_gz_file)
37
- attach_file_to_record(output_gz_file)
38
- ensure
39
- cleanup_temp_files(guests_file, included_file, output_gz_file)
40
- end
41
- rescue StandardError => e
42
- CmAppLogger.error(label: "#{self.class.name}#export", data: { export_id: id, error: e.message, backtrace: e.backtrace })
43
-
44
- track_errors = []
45
- track_errors << "Error: #{e.message} at #{Time.current.iso8601}"
46
- track_errors << e.backtrace.take(5).join("\n") if e.backtrace.present?
47
-
48
- update(status: :failed, track_errors: track_errors)
49
- end
50
-
51
- private
52
-
53
- def stream_export_data_and_includes_to_separate_files(guests_query, guests_file, included_file)
54
- # Track "user:123", "order:456" to avoid duplicates includes. For current event scale, Set growth
55
- # (~20-25 MB for 100K guests × 5 relationships) is manageable.
56
- #
57
- # In future, if needed: we can use solution such as integer-based keys, split exports into chunks,
58
- # or delegate deduplication to a database table.
59
- included_keys = Set.new
60
- total_processed_guests = 0
61
-
62
- # Track processed messages in a separate array to avoid bloating track_messages
63
- # For processing with 10k+ guests, this message can grow very large, so we only keep the last 50 messages.
64
- self.track_processed_messages = []
65
-
66
- guests_query.in_batches(of: batch_size) do |batch|
67
- # Load batch with associations
68
- guests = batch.includes(BATCH_INCLUDES)
69
-
70
- # Serialize to JSON:API format
71
- # Note: This loads entire batch hash into memory (~10-50MB per batch depending on associations)
72
- data = SpreeCmCommissioner::V2::Operator::GuestSerializer.new(
73
- guests, { include: resource_includes }
74
- ).serializable_hash
14
+ guests = SpreeCmCommissioner::GuestSearcherQuery.new(event_id: exportable_id).call
75
15
 
76
- # Write each guest to guests_file: guest1,guest2,guest3
77
- data[:data].each_with_index do |guest, idx|
78
- guests_file.write(',') if total_processed_guests.positive? || idx.positive?
79
- guests_file.write(JSON.generate(guest))
80
- end
16
+ track_messages << "Eager loaded started at #{Time.current.iso8601}"
17
+ update(track_messages: track_messages)
81
18
 
82
- # Write new included resources to included_file: user1,order1,user2
83
- data[:included]&.each do |resource|
84
- key = "#{resource[:type]}:#{resource[:id]}"
85
- next if included_keys.include?(key)
86
-
87
- included_file.write(',') unless included_keys.empty?
88
- included_file.write(JSON.generate(resource))
89
- included_keys.add(key)
90
- end
91
-
92
- total_processed_guests += data[:data].size
93
- track_processed_messages << "Processed #{total_processed_guests}/#{guests_count} guests"
94
-
95
- # Write to DB less frequently to avoid performance hit, but often enough to provide progress visibility.
96
- if (total_processed_guests % 1000).zero? || total_processed_guests == guests_count
97
- update(track_processed_messages: track_processed_messages.last(50))
98
- end
99
- end
100
- end
101
-
102
- def stream_export_merge_and_compress_data_and_includes_to_a_single_file(guests_file, included_file, output_gz_file)
103
- Zlib::GzipWriter.open(output_gz_file.path) do |gzip|
104
- gzip.write('{"data":[') # open data array
105
- guests_file.rewind
106
- IO.copy_stream(guests_file, gzip) # stream guests_file content
19
+ guests = guests.includes(
20
+ :occupation,
21
+ :user,
22
+ check_ins: %i[check_in_by check_in_session],
23
+ line_item: [:variant, { order: :bill_address }]
24
+ )
107
25
 
108
- gzip.write('],"included":[') # close data, open included array
109
- included_file.rewind
110
- IO.copy_stream(included_file, gzip) # stream included_file content
26
+ track_messages << "Eager loaded ended at #{Time.current.iso8601}"
27
+ update(track_messages: track_messages)
111
28
 
112
- gzip.write(']}') # close JSON
113
- end
114
- end
29
+ hash = SpreeCmCommissioner::V2::Operator::GuestSerializer.new(
30
+ guests,
31
+ { include: resource_includes }
32
+ ).serializable_hash
115
33
 
116
- def batch_size
117
- ENV.fetch('EXPORT_OPERATOR_GUESTS_BATCH_SIZE', '250').to_i
118
- end
34
+ track_messages << "Serialization completed at #{Time.current.iso8601}"
35
+ update(track_messages: track_messages)
119
36
 
120
- def attach_file_to_record(output_gz_file)
121
- # Rewind BEFORE attaching
122
- # After Zlib::GzipWriter closes, file pointer is at EOF
123
- # Must reset to beginning so the attachment reads the entire file
124
- output_gz_file.rewind
125
- file_size_bytes = output_gz_file.size
37
+ file_name = "exports_operator_guest_#{id}.json.gz"
38
+ json_gzip = ActiveSupport::Gzip.compress(JSON.generate(hash))
126
39
 
127
40
  exported_file.attach(
128
- io: output_gz_file,
129
- filename: "exports_operator_guest_#{id}.json.gz",
41
+ io: StringIO.new(json_gzip),
42
+ filename: file_name,
130
43
  content_type: 'application/gzip'
131
44
  )
132
45
 
133
46
  track_messages << "Completed at #{Time.current.iso8601}"
134
- update(status: :done, file_size_bytes: file_size_bytes, track_messages: track_messages)
135
- end
136
-
137
- def cleanup_temp_files(guests_file, included_file, output_gz_file)
138
- guests_file&.close
139
- guests_file&.unlink
47
+ update(
48
+ file_size_bytes: json_gzip.bytesize,
49
+ guests_count: guests.size,
50
+ status: :done,
51
+ track_messages: track_messages
52
+ )
53
+ rescue StandardError => e
54
+ CmAppLogger.error(label: "#{self.class.name}#export", data: { export_id: id, error: e.message, backtrace: e.backtrace })
140
55
 
141
- included_file&.close
142
- included_file&.unlink
56
+ track_errors = []
57
+ track_errors << "Error: #{e.message} at #{Time.current.iso8601}"
58
+ track_errors << e.backtrace.take(5).join("\n")
143
59
 
144
- output_gz_file&.close
145
- output_gz_file&.unlink
60
+ update(status: :failed, track_errors: track_errors)
146
61
  end
147
62
  end
148
63
  end
@@ -5,6 +5,8 @@ module SpreeCmCommissioner
5
5
  belongs_to :vendor, class_name: 'Spree::Vendor', optional: false
6
6
  belongs_to :tenant, class_name: 'SpreeCmCommissioner::Tenant', optional: true
7
7
 
8
+ belongs_to :service_origin, class_name: 'Spree::Taxon', optional: true
9
+
8
10
  belongs_to :origin_place, class_name: 'SpreeCmCommissioner::Place', optional: false
9
11
  belongs_to :destination_place, class_name: 'SpreeCmCommissioner::Place', optional: false
10
12
 
@@ -14,13 +14,14 @@ module SpreeCmCommissioner
14
14
 
15
15
  # before create, duplicate seat layout from vehicle_type if present
16
16
  before_validation :duplicate_seat_layout_from_vehicle, if: -> { seat_layout.nil? && vehicle_type&.seat_layout.present? }
17
-
18
17
  after_create :increment_route_metric_trip_count
19
18
  before_destroy :decrement_route_metric_trip_count
20
19
 
21
20
  belongs_to :vendor, class_name: 'Spree::Vendor', inverse_of: :trips, optional: false
22
21
  belongs_to :product, class_name: 'Spree::Product', inverse_of: :trip, optional: false
23
22
 
23
+ belongs_to :service_origin, class_name: 'Spree::Taxon', optional: true
24
+
24
25
  belongs_to :vehicle_type, class_name: 'SpreeCmCommissioner::VehicleType', optional: false
25
26
  belongs_to :vehicle, class_name: 'SpreeCmCommissioner::Vehicle', optional: true
26
27
  has_one :seat_layout, as: :layoutable, class_name: 'SpreeCmCommissioner::SeatLayout', dependent: :destroy
@@ -91,12 +92,12 @@ module SpreeCmCommissioner
91
92
  section.attributes.except('id', 'created_at', 'updated_at', 'seat_layout_id')
92
93
  .merge(
93
94
  blocks_attributes: section.blocks.map do |block|
94
- block.attributes.except('id', 'created_at', 'updated_at', 'seat_layout_id', 'seat_section_id')
95
+ block.attributes.except('id', 'created_at', 'updated_at', 'seat_layout_id', 'seat_section_id', 'variant_id')
95
96
  end
96
97
  )
97
98
  end,
98
99
  top_level_blocks_attributes: original.top_level_blocks.map do |block|
99
- block.attributes.except('id', 'created_at', 'updated_at', 'seat_layout_id', 'seat_section_id')
100
+ block.attributes.except('id', 'created_at', 'updated_at', 'seat_layout_id', 'seat_section_id', 'variant_id')
100
101
  end
101
102
  )
102
103
  end
@@ -63,6 +63,7 @@ module SpreeCmCommissioner
63
63
  base.has_one :stock_location, -> { where(active: true) }, class_name: 'Spree::StockLocation', dependent: :destroy
64
64
 
65
65
  base.belongs_to :default_state, class_name: 'Spree::State', inverse_of: :vendors
66
+ base.belongs_to :service_origin, class_name: 'Spree::Taxon', optional: true
66
67
  base.multi_tenant :tenant, class_name: 'SpreeCmCommissioner::Tenant'
67
68
 
68
69
  base.delegate :lat, :lon, to: :stock_location, allow_nil: true
@@ -0,0 +1,6 @@
1
+ <!-- insert_before "erb[loud]:contains('field_container :state')" -->
2
+
3
+ <%= f.field_container :service_origin_id do %>
4
+ <%= f.label :service_origin_id %>
5
+ <%= f.collection_select :service_origin_id, Spree::Taxon.where(kind: Spree::Taxon.kinds[:nationality]).order(:name), :id, :name, { include_blank: true }, { class: 'fullwidth select2' } %>
6
+ <% end %>
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class CreateGuestAdjustmentSerializer < PricingActionSerializer
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class CreateLineItemAdjustmentSerializer < PricingActionSerializer
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,10 @@
1
+ module Spree
2
+ module Api
3
+ module V2
4
+ module Platform
5
+ class CreateRouteAdjustmentSerializer < PricingActionSerializer
6
+ end
7
+ end
8
+ end
9
+ end
10
+ end
@@ -5,7 +5,7 @@ module Spree
5
5
  attributes :first_name, :last_name, :dob, :gender, :kyc_fields, :other_occupation, :created_at, :updated_at,
6
6
  :qr_data, :social_contact_platform, :social_contact, :available_social_contact_platforms,
7
7
  :age, :emergency_contact, :other_organization, :expectation, :upload_later, :address,
8
- :formatted_bib_number, :phone_number, :user_id
8
+ :formatted_bib_number, :phone_number, :user_id, :age_group, :nationality_group
9
9
 
10
10
  attribute :allowed_checkout, &:allowed_checkout?
11
11
  attribute :allowed_upload_later, &:allowed_upload_later?
@@ -0,0 +1,13 @@
1
+ module SpreeCmCommissioner
2
+ module V2
3
+ module Storefront
4
+ class PricingActionSerializer < BaseSerializer
5
+ attribute :type_name do |action|
6
+ action.class.name.underscore
7
+ end
8
+
9
+ has_one :calculator, if: proc { |action| action.respond_to?(:calculator) }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -8,7 +8,8 @@ module SpreeCmCommissioner
8
8
  :trip_id,
9
9
  :direction,
10
10
  :boarding_trip_stop_id,
11
- :drop_off_trip_stop_id
11
+ :drop_off_trip_stop_id,
12
+ :service_origin_id
12
13
 
13
14
  cache_options store: nil
14
15
  end
@@ -15,14 +15,17 @@ module SpreeCmCommissioner
15
15
 
16
16
  order = Spree::Order.new(state: 'cart', use_billing: true, user: user)
17
17
 
18
+ metadata = {
19
+ trip_id: trip.id,
20
+ service_origin_id: trip.service_origin_id.presence&.to_s
21
+ }.compact
22
+
18
23
  line_item = order.line_items.new(
19
24
  variant_id: variant.id,
20
25
  quantity: quantity,
21
26
  from_date: from_date,
22
27
  to_date: to_date,
23
- private_metadata: {
24
- trip_id: trip.id
25
- }
28
+ private_metadata: metadata
26
29
  )
27
30
 
28
31
  build_guests_for!(line_item, quantity)
@@ -27,6 +27,7 @@ module SpreeCmCommissioner
27
27
  attrs = attrs.merge(
28
28
  tenant_id: vendor.tenant_id,
29
29
  route_name: attrs[:route_name] || "#{origin_place.name} -> #{destination_place.name}",
30
+ service_origin_id: vendor.service_origin_id,
30
31
  origin_place_id: origin_place.id,
31
32
  destination_place_id: destination_place.id,
32
33
  route_stops: route_stops
@@ -82,9 +82,10 @@ module SpreeCmCommissioner
82
82
  direction: leg.direction,
83
83
  trip_id: leg.trip_id.to_s,
84
84
  boarding_trip_stop_id: leg.boarding_trip_stop_id.to_s,
85
- drop_off_trip_stop_id: leg.drop_off_trip_stop_id.to_s
86
- }
87
- metadata[:connected_trip_id] = connected_trip_id if connected_trip_id.present?
85
+ drop_off_trip_stop_id: leg.drop_off_trip_stop_id.to_s,
86
+ connected_trip_id: connected_trip_id.presence&.to_s,
87
+ service_origin_id: trip.service_origin_id.presence&.to_s
88
+ }.compact
88
89
 
89
90
  line_item = order.line_items.new(
90
91
  product_type: :transit,
@@ -4,6 +4,7 @@ module Spree
4
4
  mattr_reader :route_attributes
5
5
 
6
6
  @@vendor_attributes << :logo
7
+ @@vendor_attributes << :service_origin_id
7
8
 
8
9
  # Permitted all guest attributes for now as permitting only some guest attributes is not working by design
9
10
  # of spree add_item service, if we want to only permit some guest attributes,
@@ -0,0 +1,5 @@
1
+ class AddServiceOriginToSpreeVendors < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_reference :spree_vendors, :service_origin, foreign_key: { to_table: :spree_taxons }, index: true, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddServiceOriginToCmRoutes < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_reference :cm_routes, :service_origin, foreign_key: { to_table: :spree_taxons }, index: true, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddServiceOriginToCmTrips < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_reference :cm_trips, :service_origin, foreign_key: { to_table: :spree_taxons }, index: true, if_not_exists: true
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.5.13-pre8'.freeze
2
+ VERSION = '2.5.13-pre9'.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.5.13.pre.pre8
4
+ version: 2.5.13.pre.pre9
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2026-02-10 00:00:00.000000000 Z
11
+ date: 2026-02-11 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1771,6 +1771,7 @@ files:
1771
1771
  - app/overrides/spree/admin/vendors/_form/note.html.erb.deface
1772
1772
  - app/overrides/spree/admin/vendors/_form/option_type.html.erb.deface
1773
1773
  - app/overrides/spree/admin/vendors/_form/product_type.html.erb.deface
1774
+ - app/overrides/spree/admin/vendors/_form/service_origin.html.erb.deface
1774
1775
  - app/overrides/spree/admin/vendors/_form/short_description.html.erb.deface
1775
1776
  - app/overrides/spree/admin/vendors/_form/star_rating.html.erb.deface
1776
1777
  - app/overrides/spree/admin/vendors/_form/vendor_min_max_price.html.erb.deface
@@ -1818,6 +1819,9 @@ files:
1818
1819
  - app/serializers/.gitkeep
1819
1820
  - app/serializers/concerns/spree_cm_commissioner/api/v2/resource_serializer_concern_decorator.rb
1820
1821
  - app/serializers/spree/api/v2/platform/create_date_specific_item_adjustment_serializer.rb
1822
+ - app/serializers/spree/api/v2/platform/create_guest_adjustment_serializer.rb
1823
+ - app/serializers/spree/api/v2/platform/create_line_item_adjustment_serializer.rb
1824
+ - app/serializers/spree/api/v2/platform/create_route_adjustment_serializer.rb
1821
1825
  - app/serializers/spree/v2/organizer/asset_serializer.rb
1822
1826
  - app/serializers/spree/v2/organizer/base_serializer.rb
1823
1827
  - app/serializers/spree/v2/organizer/image_serializer.rb
@@ -1958,6 +1962,7 @@ files:
1958
1962
  - app/serializers/spree_cm_commissioner/v2/storefront/menu_item_serializer_decorator.rb
1959
1963
  - app/serializers/spree_cm_commissioner/v2/storefront/payment_method_group_serializer.rb
1960
1964
  - app/serializers/spree_cm_commissioner/v2/storefront/pin_code_serializer.rb
1965
+ - app/serializers/spree_cm_commissioner/v2/storefront/pricing_action_serializer.rb
1961
1966
  - app/serializers/spree_cm_commissioner/v2/storefront/product_dynamic_field_serializer.rb
1962
1967
  - app/serializers/spree_cm_commissioner/v2/storefront/product_place_serializer.rb
1963
1968
  - app/serializers/spree_cm_commissioner/v2/storefront/promotion_action_serializer.rb
@@ -3017,6 +3022,9 @@ files:
3017
3022
  - db/migrate/20260128093313_add_metadata_to_cm_exports.rb
3018
3023
  - db/migrate/20260129082338_remove_preferences_file_name_columns_from_cm_exports.rb
3019
3024
  - db/migrate/20260204092321_add_type_to_cm_exports.rb
3025
+ - db/migrate/20260204100000_add_service_origin_to_spree_vendors.rb
3026
+ - db/migrate/20260204100001_add_service_origin_to_cm_routes.rb
3027
+ - db/migrate/20260204100002_add_service_origin_to_cm_trips.rb
3020
3028
  - db/migrate/20260204183545_add_term_accepted_at_to_spree_orders.rb
3021
3029
  - db/migrate/20260207040752_clear_cm_exports.rb
3022
3030
  - docker-compose.yml