spree_cm_commissioner 2.5.12 → 2.5.13.pre.pre2

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 +9 -0
  4. data/app/models/concerns/spree_cm_commissioner/line_item_transitable.rb +8 -1
  5. data/app/models/spree_cm_commissioner/pricing_actions/create_guest_adjustments.rb +27 -11
  6. data/app/models/spree_cm_commissioner/pricing_model_handler/order.rb +1 -0
  7. data/app/models/spree_cm_commissioner/pricing_rules/nationality.rb +33 -28
  8. data/app/models/spree_cm_commissioner/route.rb +2 -0
  9. data/app/models/spree_cm_commissioner/trip.rb +4 -3
  10. data/app/models/spree_cm_commissioner/vendor_decorator.rb +1 -0
  11. data/app/overrides/spree/admin/vendors/_form/service_origin.html.erb.deface +6 -0
  12. data/app/serializers/spree_cm_commissioner/v2/storefront/transit_line_item_serializer.rb +2 -1
  13. data/app/services/spree_cm_commissioner/cart/recalculate_decorator.rb +5 -0
  14. data/app/services/spree_cm_commissioner/intercity_taxi_order/create.rb +6 -3
  15. data/app/services/spree_cm_commissioner/routes/create.rb +1 -0
  16. data/app/services/spree_cm_commissioner/transit_order/create.rb +4 -3
  17. data/app/services/spree_cm_commissioner/trips/create_single_leg.rb +19 -2
  18. data/config/initializers/spree_permitted_attributes.rb +1 -0
  19. data/db/migrate/20260204100000_add_service_origin_to_spree_vendors.rb +5 -0
  20. data/db/migrate/20260204100001_add_service_origin_to_cm_routes.rb +5 -0
  21. data/db/migrate/20260204100002_add_service_origin_to_cm_trips.rb +5 -0
  22. data/lib/spree_cm_commissioner/test_helper/factories/pricing_rule_factory.rb +1 -1
  23. data/lib/spree_cm_commissioner/version.rb +1 -1
  24. metadata +8 -4
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 551e9b905e46e5892f9030e6946c1dee64cef1903f0d67755bfe86d41d6216f4
4
- data.tar.gz: '08459daa2ed21ad41dacd58bed6dce8783cf780827eaa4fdd2e8f7a86190041b'
3
+ metadata.gz: 04eebbcbb9d83ad9530360d3a22e480a61ccb4b29f4c7a4e189e8b5ae90fa3ce
4
+ data.tar.gz: ed548b05a0f06e308bcdb09c7afe8d1c48c7eb5ed30cf8096f721681f75f2122
5
5
  SHA512:
6
- metadata.gz: 37eff54bfa59d1f91ed29a7e8a93fce2c6f760fa3e125fe00c0a253a617b2604e482a2cd75747d6927870d89ceb5eaf2074e410b472ee2a35cf565cfdc861f65
7
- data.tar.gz: b14e8a9eba71eefec8ff7cc7e2a333f2fad8cdadaeaacc709b7f0211ac36777859e238eb996a642323d7818d7e94407e5778456873aa3bd855135c2d7be6c413
6
+ metadata.gz: 4c2583b7b967f27e1d5d71b979936ef27e0da0f516f16368899d9b8bd38954ff7db95ab901d1f1d0497af7726d906a618f90ada65901954d6e3f7be86209fe53
7
+ data.tar.gz: f4c154d199890f8550df41a68105ff71b266ad8e56148b371ea7049fb4a28e2f10e42bd2ead83052ee5e8d2001d509e4782df01b3ad0b9e0c5fff21a0243b73c
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.5.12)
37
+ spree_cm_commissioner (2.5.13.pre.pre2)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -36,6 +36,7 @@ module Spree
36
36
  resource.save!
37
37
  run_dynamic_fields(resource)
38
38
  resource.save_and_move_to_next_stage
39
+ recalculate_cart(resource.line_item)
39
40
  end
40
41
 
41
42
  render_serialized_payload(201) { serialize_resource(resource) }
@@ -49,6 +50,7 @@ module Spree
49
50
  resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
50
51
  resource.save!
51
52
  resource.save_and_move_to_next_stage
53
+ recalculate_cart(resource.line_item)
52
54
  end
53
55
 
54
56
  render_serialized_payload { serialize_resource(resource) }
@@ -111,6 +113,13 @@ module Spree
111
113
  def handle_record_not_found(exception)
112
114
  render_error_payload({ base: [exception.message] }, 404)
113
115
  end
116
+
117
+ def recalculate_cart(line_item)
118
+ ::Spree::Dependencies.cart_recalculate_service.constantize.call(
119
+ line_item: line_item,
120
+ order: spree_current_order
121
+ )
122
+ end
114
123
  end
115
124
  end
116
125
  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,24 +1,25 @@
1
1
  module SpreeCmCommissioner
2
2
  module PricingActions
3
3
  class CreateGuestAdjustments < SpreeCmCommissioner::PricingAction
4
- def perform(line_item)
5
- return if pricing_rule_group.pricing_rules.blank?
6
- return if line_item.guests.blank?
4
+ def perform(options = {})
5
+ line_items = extract_line_items(options)
7
6
 
8
- eligible_guests = find_eligible_guests(line_item)
9
- return if eligible_guests.empty?
7
+ return if pricing_rule_group.pricing_rules.blank?
8
+ return if line_items.blank?
10
9
 
11
- total_amount = eligible_guests.sum do |guest|
12
- compute_guest_amount(line_item, guest)
10
+ line_items.each do |line_item|
11
+ perform_for_line_item(line_item)
13
12
  end
14
-
15
- return if total_amount.zero?
16
-
17
- create_adjustment(line_item, total_amount)
18
13
  end
19
14
 
20
15
  private
21
16
 
17
+ def extract_line_items(options)
18
+ return [options] if options.respond_to?(:guests)
19
+
20
+ Array(options[:line_items])
21
+ end
22
+
22
23
  def find_eligible_guests(line_item)
23
24
  line_item.guests.select do |guest|
24
25
  guest_eligible_for_all_rules?(guest)
@@ -47,6 +48,21 @@ module SpreeCmCommissioner
47
48
  mandatory: true
48
49
  )
49
50
  end
51
+
52
+ def perform_for_line_item(line_item)
53
+ return if line_item.guests.blank?
54
+
55
+ eligible_guests = find_eligible_guests(line_item)
56
+ return if eligible_guests.empty?
57
+
58
+ total_amount = eligible_guests.sum do |guest|
59
+ compute_guest_amount(line_item, guest)
60
+ end
61
+
62
+ return if total_amount.zero?
63
+
64
+ create_adjustment(line_item, total_amount)
65
+ end
50
66
  end
51
67
  end
52
68
  end
@@ -12,6 +12,7 @@ module SpreeCmCommissioner
12
12
  return unless order&.persisted?
13
13
 
14
14
  order.adjustments.pricing_action.delete_all
15
+ order.line_items.each { |li| li.adjustments.pricing_action.delete_all }
15
16
 
16
17
  order.connected_line_item_ids.each do |group_ids|
17
18
  line_items_in_group = order.line_items.where(id: group_ids)
@@ -5,49 +5,54 @@ module SpreeCmCommissioner
5
5
 
6
6
  store_accessor :private_metadata, :rule_type, :nationalities
7
7
 
8
- def eligible?(line_item) # rubocop:disable Metrics/CyclomaticComplexity,Metrics/PerceivedComplexity
8
+ def eligible?(line_item)
9
9
  return false if nationalities.blank? || line_item.guests.blank?
10
10
 
11
- targets = Array.wrap(nationalities).map(&:downcase)
12
- guest_nationalities = line_item.guests.map { |g| guest_nationality(g) }.compact
13
-
14
- return false if guest_nationalities.empty?
11
+ guests = line_item.guests
15
12
 
16
13
  case rule_type
17
-
18
- when 'all'
19
- guest_nationalities.all? { |n| targets.include?(n) }
20
- when 'any'
21
- guest_nationalities.any? { |n| targets.include?(n) }
22
- when 'none'
23
- guest_nationalities.any? { |n| targets.exclude?(n) }
24
- else
25
- false
14
+ when 'all' then guests.all? { |g| match?(g) }
15
+ when 'any' then guests.any? { |g| match?(g) }
16
+ when 'none' then guests.any? { |g| !match?(g) }
17
+ else false
26
18
  end
27
19
  end
28
20
 
29
21
  def guest_eligible?(guest)
30
22
  return false if nationalities.blank?
31
23
 
32
- targets = Array.wrap(nationalities).map(&:downcase)
33
- guest_nat = guest_nationality(guest)
24
+ matched = match?(guest)
25
+ rule_type == 'none' ? !matched : matched
26
+ end
27
+
28
+ private
34
29
 
35
- return false if guest_nat.blank?
30
+ def match?(guest)
31
+ id = guest_nationality_id(guest)
32
+ return target_ids.include?(id) if id.present?
36
33
 
37
- case rule_type
38
- when 'all', 'any'
39
- targets.include?(guest_nat)
40
- when 'none'
41
- targets.exclude?(guest_nat)
42
- else
43
- false
44
- end
34
+ group = guest_nationality_group(guest)
35
+
36
+ group.present? && group.to_sym == expected_group(guest)
45
37
  end
46
38
 
47
- private
39
+ def target_ids
40
+ @target_ids ||= Array(nationalities).map(&:to_i)
41
+ end
42
+
43
+ def guest_nationality_id(guest)
44
+ guest.saved_guest&.nationality&.id || guest.nationality&.id
45
+ end
46
+
47
+ def guest_nationality_group(guest)
48
+ guest.saved_guest&.nationality_group || guest.nationality_group
49
+ end
50
+
51
+ def expected_group(guest)
52
+ service_origin_id = guest.line_item&.service_origin_id
53
+ return :foreigner if service_origin_id.blank?
48
54
 
49
- def guest_nationality(guest)
50
- (guest.nationality&.name || guest.saved_guest&.nationality&.name).to_s.downcase
55
+ target_ids.include?(service_origin_id) ? :local : :foreigner
51
56
  end
52
57
  end
53
58
  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 %>
@@ -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
@@ -24,6 +24,11 @@ module SpreeCmCommissioner
24
24
  else
25
25
  order.ensure_updated_shipments
26
26
  end
27
+ # SPREE: Original Spree::Cart::Recalculate code ends here
28
+
29
+ # CUSTOM: Apply pricing models at order level (groups connected trips together)
30
+
31
+ SpreeCmCommissioner::PricingModelHandler::Order.new(order).activate
27
32
 
28
33
  # SPREE: Original Spree::Cart::Recalculate code continues here
29
34
  ::Spree::PromotionHandler::Cart.new(order, line_item).activate
@@ -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,
@@ -15,6 +15,7 @@ module SpreeCmCommissioner
15
15
  ApplicationRecord.transaction do
16
16
  variant = create_variant!(vendor, trip_form)
17
17
  trip = create_trip!(vendor, trip_form, variant)
18
+ assign_blocks_to_variant!(trip, variant)
18
19
  calendar = setup_calendar!(variant.product, trip_form.service_calendar)
19
20
  generate_inventory!(variant)
20
21
 
@@ -56,10 +57,13 @@ module SpreeCmCommissioner
56
57
 
57
58
  # Creates the main trip record with details extracted from the trip form.
58
59
  # Associates the trip with vendor, product, vehicle, route, and time.
60
+
59
61
  def create_trip!(vendor, trip_form, variant)
60
62
  first_stop = trip_form.trip_stops.first
61
63
  last_stop = trip_form.trip_stops.last
62
64
 
65
+ route = vendor.routes.find(trip_form.route_id)
66
+
63
67
  locations = vendor.locations.where(id: trip_form.trip_stops.map(&:location_id)).index_by(&:id)
64
68
 
65
69
  # vendor_places are either stops or branches
@@ -73,12 +77,13 @@ module SpreeCmCommissioner
73
77
  vehicle: SpreeCmCommissioner::Vehicle.find_by(id: first_stop.vehicle_id),
74
78
  origin_place_id: locations[first_stop.location_id.to_i].place_id,
75
79
  destination_place_id: locations[last_stop.location_id.to_i].place_id,
76
- route: vendor.routes.find(trip_form.route_id),
80
+ service_origin_id: route.service_origin_id || vendor.service_origin_id,
81
+ route: route,
77
82
  departure_time: first_stop.departure_time,
78
83
  duration: trip_form.total_duration_seconds,
79
84
  allow_booking: trip_form.allow_booking,
80
85
  allow_seat_selection: trip_form.allow_seat_selection,
81
- route_type: trip_form.route_type || vendor.routes.find(trip_form.route_id)&.route_type
86
+ route_type: trip_form.route_type || route&.route_type
82
87
  )
83
88
 
84
89
  create_trip_stops(trip, trip_form, locations, vendor_places)
@@ -125,6 +130,18 @@ module SpreeCmCommissioner
125
130
  res.value[:calendar]
126
131
  end
127
132
 
133
+ # Assigns sellable blocks from the trip's seat layout to the variant.
134
+ # Only assigns blocks with nil variant_id to avoid overwriting existing assignments.
135
+ def assign_blocks_to_variant!(trip, variant)
136
+ return if trip.seat_layout.blank?
137
+
138
+ sellable_block_types = SpreeCmCommissioner::Block.block_types.slice('seat', 'sleeping_seat', 'standing').values
139
+
140
+ trip.seat_layout.blocks
141
+ .where(variant_id: nil, block_type: sellable_block_types)
142
+ .update_all(variant_id: variant.id) # rubocop:disable Rails/SkipsModelValidations
143
+ end
144
+
128
145
  # Triggers asynchronous generation of permanent inventory items for the variant.
129
146
  def generate_inventory!(variant)
130
147
  SpreeCmCommissioner::Stock::PermanentInventoryItemsGeneratorJob.perform_later(variant_ids: [variant[:id]])
@@ -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
@@ -2,7 +2,7 @@ FactoryBot.define do
2
2
  factory :pricing_rule_nationality, class: 'SpreeCmCommissioner::PricingRules::Nationality' do
3
3
  association :pricing_rule_group, factory: :pricing_rule_group
4
4
  rule_type { 'any' }
5
- nationalities { ["Cambodian"] }
5
+ nationalities { [create(:taxon, name: 'Cambodian').id] }
6
6
  end
7
7
 
8
8
  factory :pricing_rule_extra_pick_up_distance, class: 'SpreeCmCommissioner::PricingRules::ExtraPickUpDistance' do
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.5.12'.freeze
2
+ VERSION = '2.5.13-pre2'.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.12
4
+ version: 2.5.13.pre.pre2
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-07 00:00:00.000000000 Z
11
+ date: 2026-02-09 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
@@ -3017,6 +3018,9 @@ files:
3017
3018
  - db/migrate/20260128093313_add_metadata_to_cm_exports.rb
3018
3019
  - db/migrate/20260129082338_remove_preferences_file_name_columns_from_cm_exports.rb
3019
3020
  - db/migrate/20260204092321_add_type_to_cm_exports.rb
3021
+ - db/migrate/20260204100000_add_service_origin_to_spree_vendors.rb
3022
+ - db/migrate/20260204100001_add_service_origin_to_cm_routes.rb
3023
+ - db/migrate/20260204100002_add_service_origin_to_cm_trips.rb
3020
3024
  - db/migrate/20260204183545_add_term_accepted_at_to_spree_orders.rb
3021
3025
  - db/migrate/20260207040752_clear_cm_exports.rb
3022
3026
  - docker-compose.yml
@@ -3202,9 +3206,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
3202
3206
  version: '2.7'
3203
3207
  required_rubygems_version: !ruby/object:Gem::Requirement
3204
3208
  requirements:
3205
- - - ">="
3209
+ - - ">"
3206
3210
  - !ruby/object:Gem::Version
3207
- version: '0'
3211
+ version: 1.3.1
3208
3212
  requirements:
3209
3213
  - none
3210
3214
  rubygems_version: 3.4.1