spree_cm_commissioner 2.1.4.pre.pre2 → 2.1.5.pre.pre1
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 +4 -4
- data/Gemfile.lock +1 -1
- data/app/controllers/spree/api/v2/tenant/base_controller.rb +12 -0
- data/app/controllers/spree/api/v2/tenant/cart_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/checkout_controller.rb +1 -1
- data/app/controllers/spree/api/v2/tenant/dynamic_field_options_controller.rb +32 -0
- data/app/controllers/spree/api/v2/tenant/dynamic_fields_controller.rb +38 -0
- data/app/controllers/spree/api/v2/tenant/guests_controller.rb +29 -10
- data/app/controllers/spree/api/v2/tenant/product_dynamic_fields_controller.rb +41 -0
- data/app/interactors/spree_cm_commissioner/guest_dynamic_fields_manager.rb +33 -0
- data/app/interactors/spree_cm_commissioner/sms.rb +2 -3
- data/app/models/spree_cm_commissioner/guest.rb +6 -1
- data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +4 -0
- data/app/models/spree_cm_commissioner/sms_log.rb +2 -0
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +4 -0
- data/app/models/spree_cm_commissioner/trip.rb +1 -0
- data/app/models/spree_cm_commissioner/vehicle.rb +1 -0
- data/app/serializers/spree/v2/tenant/cart_serializer.rb +24 -1
- data/app/serializers/spree/v2/tenant/dynamic_field_option_serializer.rb +9 -0
- data/app/serializers/spree/v2/tenant/dynamic_field_serializer.rb +11 -0
- data/app/serializers/spree/v2/tenant/guest_dynamic_field_serializer.rb +12 -0
- data/app/serializers/spree/v2/tenant/guest_serializer.rb +2 -0
- data/app/serializers/spree/v2/tenant/product_dynamic_field_serializer.rb +11 -0
- data/app/serializers/spree/v2/tenant/product_serializer.rb +3 -0
- data/config/routes.rb +4 -0
- data/db/migrate/20250912084944_add_send_type_to_sms_log.rb +9 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +11 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d85338c01f8051cd2aff1de565907e13f401f0044b766cca7738056f1089a7d1
|
4
|
+
data.tar.gz: 32b15e97d40db31db7749ee684bb02f3b01bfaa44afc32bc79d1a259960fae50
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 3a2d72ee902e1a625713777268aa727d2c92e25cea7a912bd799dd999d4e99f0c7ec5eeb2e5cce49575205d4e01606cf0aa4776e5844074348728ce00eaa4efd
|
7
|
+
data.tar.gz: 5dc5ad4f7c7ff9121503d09fa49e67903b15cc86e21cbd468494fa2119ca758712410c3bb3896a1fa6013bb7e9429b793e6dac1856a676c67caf928950a8b271
|
data/Gemfile.lock
CHANGED
@@ -4,6 +4,8 @@ module Spree
|
|
4
4
|
module Tenant
|
5
5
|
class BaseController < ::Spree::Api::V2::ResourceController
|
6
6
|
include Spree::Api::V2::CollectionOptionsHelpers
|
7
|
+
rescue_from ActiveRecord::RecordInvalid, with: :handle_record_invalid
|
8
|
+
rescue_from ActiveRecord::RecordNotFound, with: :handle_record_not_found
|
7
9
|
|
8
10
|
set_current_tenant_through_filter
|
9
11
|
before_action :require_tenant
|
@@ -24,6 +26,16 @@ module Spree
|
|
24
26
|
def scope
|
25
27
|
raise 'scope should be implemented in a sub-class'
|
26
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def handle_record_invalid(exception)
|
33
|
+
render_error_payload(exception.record.errors, 422)
|
34
|
+
end
|
35
|
+
|
36
|
+
def handle_record_not_found(exception)
|
37
|
+
render_error_payload({ base: [exception.message] }, 404)
|
38
|
+
end
|
27
39
|
end
|
28
40
|
end
|
29
41
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Tenant
|
5
|
+
class DynamicFieldOptionsController < BaseController
|
6
|
+
# override
|
7
|
+
def collection
|
8
|
+
return @collection if defined?(@collection)
|
9
|
+
return SpreeCmCommissioner::DynamicFieldOption.none if params[:dynamic_field_id].blank?
|
10
|
+
|
11
|
+
@collection = SpreeCmCommissioner::DynamicFieldOption
|
12
|
+
.where(dynamic_field_id: params[:dynamic_field_id])
|
13
|
+
.active
|
14
|
+
.order(position: :asc)
|
15
|
+
|
16
|
+
@collection = @collection.where('value LIKE ?', "%#{params[:query]}%") if params[:query].present?
|
17
|
+
@collection
|
18
|
+
end
|
19
|
+
|
20
|
+
# override
|
21
|
+
def collection_serializer
|
22
|
+
Spree::V2::Tenant::DynamicFieldOptionSerializer
|
23
|
+
end
|
24
|
+
|
25
|
+
def model_class
|
26
|
+
SpreeCmCommissioner::DynamicFieldOption
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Tenant
|
5
|
+
class DynamicFieldsController < BaseController
|
6
|
+
before_action :load_product, only: :index
|
7
|
+
|
8
|
+
# override
|
9
|
+
def collection
|
10
|
+
return @collection if defined?(@collection)
|
11
|
+
|
12
|
+
dynamic_fields = @product.dynamic_fields.includes(:dynamic_field_options)
|
13
|
+
if params[:phase].present?
|
14
|
+
requested_phase = params[:phase].to_s
|
15
|
+
if SpreeCmCommissioner::DynamicField.data_fill_stages.key?(requested_phase)
|
16
|
+
dynamic_fields = dynamic_fields.where(data_fill_stage: requested_phase)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
@collection = dynamic_fields.order(:position)
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def load_product
|
26
|
+
return render_error_payload({ error: 'product_id is required' }, 400) if params[:product_id].blank?
|
27
|
+
|
28
|
+
@product ||= Spree::Product.find(params[:product_id])
|
29
|
+
end
|
30
|
+
|
31
|
+
def collection_serializer
|
32
|
+
Spree::V2::Tenant::DynamicFieldSerializer
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -27,23 +27,28 @@ module Spree
|
|
27
27
|
def create
|
28
28
|
spree_authorize! :update, spree_current_order, order_token
|
29
29
|
|
30
|
-
resource = scope.new(guest_params)
|
30
|
+
resource = scope.new(guest_params.except(:guest_dynamic_fields_attributes))
|
31
31
|
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
32
|
+
ActiveRecord::Base.transaction do
|
33
|
+
resource.save!
|
34
|
+
run_dynamic_fields(resource)
|
35
|
+
resource.save_and_move_to_next_stage
|
36
36
|
end
|
37
|
+
|
38
|
+
render_serialized_payload(201) { serialize_resource(resource) }
|
37
39
|
end
|
38
40
|
|
39
41
|
def update
|
40
42
|
spree_authorize! :update, spree_current_order, order_token
|
41
43
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
44
|
+
ActiveRecord::Base.transaction do
|
45
|
+
run_dynamic_fields(resource) if guest_params[:guest_dynamic_fields_attributes]
|
46
|
+
resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
|
47
|
+
resource.save!
|
48
|
+
resource.save_and_move_to_next_stage
|
46
49
|
end
|
50
|
+
|
51
|
+
render_serialized_payload { serialize_resource(resource) }
|
47
52
|
end
|
48
53
|
|
49
54
|
private
|
@@ -78,7 +83,21 @@ module Spree
|
|
78
83
|
:address,
|
79
84
|
:other_organization,
|
80
85
|
:expectation,
|
81
|
-
:upload_later
|
86
|
+
:upload_later,
|
87
|
+
guest_dynamic_fields_attributes: %i[
|
88
|
+
id
|
89
|
+
dynamic_field_id
|
90
|
+
dynamic_field_option_id
|
91
|
+
value
|
92
|
+
_destroy
|
93
|
+
]
|
94
|
+
)
|
95
|
+
end
|
96
|
+
|
97
|
+
def run_dynamic_fields(resource)
|
98
|
+
SpreeCmCommissioner::GuestDynamicFieldsManager.call(
|
99
|
+
resource: resource,
|
100
|
+
dynamic_fields_attributes: guest_params[:guest_dynamic_fields_attributes]
|
82
101
|
)
|
83
102
|
end
|
84
103
|
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module Spree
|
2
|
+
module Api
|
3
|
+
module V2
|
4
|
+
module Tenant
|
5
|
+
class ProductDynamicFieldsController < BaseController
|
6
|
+
before_action :load_product, only: :index
|
7
|
+
|
8
|
+
# override
|
9
|
+
def collection
|
10
|
+
return @collection if defined?(@collection)
|
11
|
+
|
12
|
+
product_dynamic_fields = @product.product_dynamic_fields.includes(dynamic_field: :dynamic_field_options)
|
13
|
+
|
14
|
+
if params[:phase].present?
|
15
|
+
requested_phase = params[:phase].to_s
|
16
|
+
if SpreeCmCommissioner::DynamicField.data_fill_stages.key?(requested_phase)
|
17
|
+
product_dynamic_fields = product_dynamic_fields.joins(:dynamic_field)
|
18
|
+
.where(dynamic_field: { data_fill_stage: requested_phase })
|
19
|
+
.order(:position)
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
@collection = product_dynamic_fields.order(:section)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def load_product
|
29
|
+
return render_error_payload({ error: 'product_id is required' }, 400) if params[:product_id].blank?
|
30
|
+
|
31
|
+
@product ||= Spree::Product.find(params[:product_id])
|
32
|
+
end
|
33
|
+
|
34
|
+
def collection_serializer
|
35
|
+
Spree::V2::Tenant::ProductDynamicFieldSerializer
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module SpreeCmCommissioner
|
2
|
+
class GuestDynamicFieldsManager < BaseInteractor
|
3
|
+
delegate :resource, :dynamic_fields_attributes, to: :context
|
4
|
+
|
5
|
+
def call
|
6
|
+
return if dynamic_fields_attributes.blank?
|
7
|
+
|
8
|
+
dynamic_fields_attributes.each { |attr| upsert_or_destroy_field(attr) }
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
|
13
|
+
def upsert_or_destroy_field(attr)
|
14
|
+
if attr[:_destroy] == '1' && attr[:id].present?
|
15
|
+
resource.guest_dynamic_fields.find_by(id: attr[:id])&.destroy!
|
16
|
+
return
|
17
|
+
end
|
18
|
+
|
19
|
+
return if attr[:dynamic_field_id].blank?
|
20
|
+
|
21
|
+
field = attr[:id].present? ? resource.guest_dynamic_fields.find(attr[:id]) : resource.guest_dynamic_fields.build
|
22
|
+
field.assign_attributes(attr.except(:id, :_destroy))
|
23
|
+
associate_dynamic_field_option(field)
|
24
|
+
field.save!
|
25
|
+
end
|
26
|
+
|
27
|
+
def associate_dynamic_field_option(field)
|
28
|
+
return unless field.value.to_s.match?(/\A\d+\z/)
|
29
|
+
|
30
|
+
field.dynamic_field_option = field.dynamic_field.dynamic_field_options.find_by(id: field.value.to_i)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -8,8 +8,7 @@ module SpreeCmCommissioner
|
|
8
8
|
create_sms_log(sms_options)
|
9
9
|
create_message(sms_options)
|
10
10
|
rescue StandardError => e
|
11
|
-
context.sms_log.error
|
12
|
-
context.sms_log.save
|
11
|
+
context.sms_log.update(error: e.message, status: :failed)
|
13
12
|
context.fail!(message: e.message)
|
14
13
|
|
15
14
|
log_error_to_telegram(e.message)
|
@@ -29,7 +28,7 @@ module SpreeCmCommissioner
|
|
29
28
|
# sms adapter can decide whether to update additional sms log fields
|
30
29
|
def update_sms_log(attributes)
|
31
30
|
attributes = attributes.slice(:external_ref)
|
32
|
-
context.sms_log.update(attributes)
|
31
|
+
context.sms_log.update(attributes.merge(status: :sent))
|
33
32
|
end
|
34
33
|
|
35
34
|
def create_sms_log(sms_options)
|
@@ -40,7 +40,7 @@ module SpreeCmCommissioner
|
|
40
40
|
|
41
41
|
has_many :state_changes, as: :stateful, class_name: 'Spree::StateChange'
|
42
42
|
has_many :guest_dynamic_fields, dependent: :destroy, class_name: 'SpreeCmCommissioner::GuestDynamicField'
|
43
|
-
accepts_nested_attributes_for :guest_dynamic_fields, allow_destroy: true
|
43
|
+
accepts_nested_attributes_for :guest_dynamic_fields, allow_destroy: true, reject_if: :reject_guest_dynamic_field?
|
44
44
|
|
45
45
|
belongs_to :event, class_name: 'Spree::Taxon'
|
46
46
|
|
@@ -397,6 +397,11 @@ module SpreeCmCommissioner
|
|
397
397
|
|
398
398
|
required_fields.reject { |field| filled_ids.include?(field.id) }
|
399
399
|
end
|
400
|
+
|
401
|
+
def reject_guest_dynamic_field?(attributes)
|
402
|
+
# Reject if dynamic_field_id is blank or if _destroy is true
|
403
|
+
attributes[:dynamic_field_id].blank? || ActiveModel::Type::Boolean.new.cast(attributes[:_destroy])
|
404
|
+
end
|
400
405
|
end
|
401
406
|
end
|
402
407
|
# rubocop:enable Metrics/ClassLength
|
@@ -46,6 +46,10 @@ module SpreeCmCommissioner
|
|
46
46
|
return if dynamic_field.blank? || dynamic_field_option.blank?
|
47
47
|
return if dynamic_field_option.dynamic_field_id == dynamic_field_id
|
48
48
|
|
49
|
+
# Only validate if both dynamic_field and dynamic_field_option are persisted
|
50
|
+
# This prevents validation errors during creation when associations might not be fully loaded
|
51
|
+
return if dynamic_field.new_record? || dynamic_field_option.new_record?
|
52
|
+
|
49
53
|
errors.add(:dynamic_field_option, 'must belong to the same dynamic field')
|
50
54
|
end
|
51
55
|
|
@@ -1,7 +1,30 @@
|
|
1
1
|
module Spree
|
2
2
|
module V2
|
3
3
|
module Tenant
|
4
|
-
class CartSerializer <
|
4
|
+
class CartSerializer < BaseSerializer
|
5
|
+
attributes :number, :item_total, :total, :ship_total, :adjustment_total, :created_at,
|
6
|
+
:updated_at, :completed_at, :included_tax_total, :additional_tax_total, :display_additional_tax_total,
|
7
|
+
:display_included_tax_total, :tax_total, :currency, :state, :token, :email,
|
8
|
+
:display_item_total, :display_ship_total, :display_adjustment_total, :display_tax_total,
|
9
|
+
:promo_total, :display_promo_total, :item_count, :special_instructions, :display_total,
|
10
|
+
:pre_tax_item_amount, :display_pre_tax_item_amount, :pre_tax_total, :display_pre_tax_total,
|
11
|
+
:shipment_state, :payment_state, :public_metadata,
|
12
|
+
:phone_number, :intel_phone_number, :country_code, :request_state, :channel
|
13
|
+
|
14
|
+
belongs_to :user, serializer: Spree::V2::Tenant::UserSerializer
|
15
|
+
belongs_to :billing_address,
|
16
|
+
id_method_name: :bill_address_id,
|
17
|
+
serializer: :address,
|
18
|
+
record_type: :address
|
19
|
+
|
20
|
+
has_many :promotions, object_method_name: :valid_promotions, id_method_name: :valid_promotion_ids,
|
21
|
+
serializer: Spree::V2::Storefront::PromotionSerializer
|
22
|
+
|
23
|
+
has_many :variants, serializer: Spree::V2::Tenant::VariantSerializer
|
24
|
+
has_many :products, serializer: Spree::V2::Tenant::ProductSerializer
|
25
|
+
has_many :line_items, serializer: Spree::V2::Tenant::LineItemSerializer
|
26
|
+
has_many :payments, serializer: Spree::V2::Storefront::PaymentSerializer
|
27
|
+
has_many :guests, serializer: Spree::V2::Tenant::GuestSerializer
|
5
28
|
end
|
6
29
|
end
|
7
30
|
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Spree
|
2
|
+
module V2
|
3
|
+
module Tenant
|
4
|
+
class DynamicFieldSerializer < BaseSerializer
|
5
|
+
attributes :id, :label, :data_type, :vendor_id, :multiple_select, :position, :data_fill_stage
|
6
|
+
|
7
|
+
has_many :dynamic_field_options, serializer: Spree::V2::Tenant::DynamicFieldOptionSerializer
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Spree
|
2
|
+
module V2
|
3
|
+
module Tenant
|
4
|
+
class GuestDynamicFieldSerializer < BaseSerializer
|
5
|
+
attributes :id, :value, :guest_id, :dynamic_field_id, :dynamic_field_option_id, :created_at, :updated_at
|
6
|
+
|
7
|
+
belongs_to :dynamic_field, serializer: Spree::V2::Tenant::DynamicFieldSerializer
|
8
|
+
belongs_to :dynamic_field_option, serializer: Spree::V2::Tenant::DynamicFieldOptionSerializer
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -13,7 +13,9 @@ module Spree
|
|
13
13
|
|
14
14
|
belongs_to :occupation, serializer: Spree::V2::Tenant::TaxonSerializer
|
15
15
|
belongs_to :nationality, serializer: Spree::V2::Tenant::TaxonSerializer
|
16
|
+
belongs_to :line_item, serializer: Spree::V2::Tenant::LineItemSerializer
|
16
17
|
has_one :id_card, serializer: Spree::V2::Tenant::IdCardSerializer
|
18
|
+
has_many :guest_dynamic_fields, serializer: Spree::V2::Tenant::GuestDynamicFieldSerializer
|
17
19
|
|
18
20
|
# allowed_checkout updates frequently
|
19
21
|
cache_options store: nil
|
@@ -0,0 +1,11 @@
|
|
1
|
+
module Spree
|
2
|
+
module V2
|
3
|
+
module Tenant
|
4
|
+
class ProductDynamicFieldSerializer < BaseSerializer
|
5
|
+
attributes :id, :product_id, :dynamic_field_id, :section
|
6
|
+
|
7
|
+
belongs_to :dynamic_field, serializer: Spree::V2::Tenant::DynamicFieldSerializer
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
@@ -5,6 +5,9 @@ module Spree
|
|
5
5
|
# This serializer extends the Storefront ProductSerializer
|
6
6
|
# to include any additional attributes or relationships needed
|
7
7
|
# for the Tenant context.
|
8
|
+
|
9
|
+
# Overrided dynamic fields relationship of the parent serializer(Storefront).
|
10
|
+
has_many :dynamic_fields, serializer: Spree::V2::Tenant::DynamicFieldSerializer
|
8
11
|
end
|
9
12
|
end
|
10
13
|
end
|
data/config/routes.rb
CHANGED
@@ -507,6 +507,10 @@ Spree::Core::Engine.add_routes do
|
|
507
507
|
resources :id_cards, only: %i[create update destroy]
|
508
508
|
end
|
509
509
|
|
510
|
+
resources :dynamic_fields, only: :index
|
511
|
+
resources :product_dynamic_fields, only: :index
|
512
|
+
resources :dynamic_field_options, only: :index
|
513
|
+
|
510
514
|
resource :checkout, controller: :checkout, only: %i[update] do
|
511
515
|
patch :next
|
512
516
|
patch :advance
|
@@ -0,0 +1,9 @@
|
|
1
|
+
class AddSendTypeToSmsLog < ActiveRecord::Migration[7.0]
|
2
|
+
def change
|
3
|
+
add_column :cm_sms_logs, :send_type, :integer, default: 0, null: false, if_not_exists: true
|
4
|
+
add_index :cm_sms_logs, :from_number, if_not_exists: true
|
5
|
+
if column_exists?(:cm_sms_logs, :status)
|
6
|
+
change_column_null :cm_sms_logs, :status, false, 0
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
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.1.
|
4
|
+
version: 2.1.5.pre.pre1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- You
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-09-
|
11
|
+
date: 2025-09-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: spree
|
@@ -976,6 +976,8 @@ files:
|
|
976
976
|
- app/controllers/spree/api/v2/tenant/checkout_controller.rb
|
977
977
|
- app/controllers/spree/api/v2/tenant/cms_pages_controller.rb
|
978
978
|
- app/controllers/spree/api/v2/tenant/customer_notifications_controller.rb
|
979
|
+
- app/controllers/spree/api/v2/tenant/dynamic_field_options_controller.rb
|
980
|
+
- app/controllers/spree/api/v2/tenant/dynamic_fields_controller.rb
|
979
981
|
- app/controllers/spree/api/v2/tenant/guests_controller.rb
|
980
982
|
- app/controllers/spree/api/v2/tenant/homepage_sections_controller.rb
|
981
983
|
- app/controllers/spree/api/v2/tenant/id_cards_controller.rb
|
@@ -984,6 +986,7 @@ files:
|
|
984
986
|
- app/controllers/spree/api/v2/tenant/order_histories_controller.rb
|
985
987
|
- app/controllers/spree/api/v2/tenant/pin_code_checkers_controller.rb
|
986
988
|
- app/controllers/spree/api/v2/tenant/pin_code_generators_controller.rb
|
989
|
+
- app/controllers/spree/api/v2/tenant/product_dynamic_fields_controller.rb
|
987
990
|
- app/controllers/spree/api/v2/tenant/products_controller.rb
|
988
991
|
- app/controllers/spree/api/v2/tenant/profile_images_controller.rb
|
989
992
|
- app/controllers/spree/api/v2/tenant/reset_passwords_controller.rb
|
@@ -1142,6 +1145,7 @@ files:
|
|
1142
1145
|
- app/interactors/spree_cm_commissioner/firebase_email_fetcher_cron_executor.rb
|
1143
1146
|
- app/interactors/spree_cm_commissioner/firebase_id_token_provider.rb
|
1144
1147
|
- app/interactors/spree_cm_commissioner/google_places_fetcher.rb
|
1148
|
+
- app/interactors/spree_cm_commissioner/guest_dynamic_fields_manager.rb
|
1145
1149
|
- app/interactors/spree_cm_commissioner/guest_id_card_manager.rb
|
1146
1150
|
- app/interactors/spree_cm_commissioner/guest_seat_updater.rb
|
1147
1151
|
- app/interactors/spree_cm_commissioner/host_matcher.rb
|
@@ -1741,7 +1745,10 @@ files:
|
|
1741
1745
|
- app/serializers/spree/v2/tenant/cart_serializer.rb
|
1742
1746
|
- app/serializers/spree/v2/tenant/customer_notification_serializer.rb
|
1743
1747
|
- app/serializers/spree/v2/tenant/digital_link_serializer.rb
|
1748
|
+
- app/serializers/spree/v2/tenant/dynamic_field_option_serializer.rb
|
1749
|
+
- app/serializers/spree/v2/tenant/dynamic_field_serializer.rb
|
1744
1750
|
- app/serializers/spree/v2/tenant/guest_card_class_serializer.rb
|
1751
|
+
- app/serializers/spree/v2/tenant/guest_dynamic_field_serializer.rb
|
1745
1752
|
- app/serializers/spree/v2/tenant/guest_serializer.rb
|
1746
1753
|
- app/serializers/spree/v2/tenant/homepage_section_relatable_serializer.rb
|
1747
1754
|
- app/serializers/spree/v2/tenant/homepage_section_serializer.rb
|
@@ -1754,6 +1761,7 @@ files:
|
|
1754
1761
|
- app/serializers/spree/v2/tenant/order_serializer.rb
|
1755
1762
|
- app/serializers/spree/v2/tenant/payment_method_group_serializer.rb
|
1756
1763
|
- app/serializers/spree/v2/tenant/payment_method_serializer.rb
|
1764
|
+
- app/serializers/spree/v2/tenant/product_dynamic_field_serializer.rb
|
1757
1765
|
- app/serializers/spree/v2/tenant/product_serializer.rb
|
1758
1766
|
- app/serializers/spree/v2/tenant/reset_password_serializer.rb
|
1759
1767
|
- app/serializers/spree/v2/tenant/role_serializer.rb
|
@@ -2743,6 +2751,7 @@ files:
|
|
2743
2751
|
- db/migrate/20250911100835_add_variant_id_to_cm_blocks.rb
|
2744
2752
|
- db/migrate/20250911174607_add_metadata_columns_to_cm_vehicles.rb
|
2745
2753
|
- db/migrate/20250911174653_add_metadata_columns_to_cm_trips.rb
|
2754
|
+
- db/migrate/20250912084944_add_send_type_to_sms_log.rb
|
2746
2755
|
- docker-compose.yml
|
2747
2756
|
- docs/option_types/attr_types.md
|
2748
2757
|
- docs/private_key.pem
|