spree_cm_commissioner 1.17.0.pre.pre6 → 1.17.0.pre.pre7

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 (26) hide show
  1. checksums.yaml +4 -4
  2. data/.env.example +3 -0
  3. data/Gemfile.lock +1 -1
  4. data/app/controllers/spree/api/v2/storefront/guests_controller.rb +19 -2
  5. data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +5 -1
  6. data/app/models/concerns/spree_cm_commissioner/event_check_in_flowable.rb +30 -0
  7. data/app/models/spree_cm_commissioner/dynamic_field.rb +15 -3
  8. data/app/models/spree_cm_commissioner/dynamic_field_option.rb +5 -1
  9. data/app/models/spree_cm_commissioner/guest_dynamic_field.rb +21 -3
  10. data/app/models/spree_cm_commissioner/invite_team.rb +1 -1
  11. data/app/models/spree_cm_commissioner/taxon_decorator.rb +1 -0
  12. data/app/models/spree_cm_commissioner/vendor_place.rb +1 -1
  13. data/app/overrides/spree/admin/taxons/_form/check_in_flows.html.erb.deface +18 -0
  14. data/app/queries/spree_cm_commissioner/guest_searcher_query.rb +45 -3
  15. data/app/serializers/spree_cm_commissioner/v2/operator/dashboard_crew_event_serializer.rb +4 -1
  16. data/app/serializers/spree_cm_commissioner/v2/storefront/dynamic_field_option_serializer.rb +1 -3
  17. data/app/serializers/spree_cm_commissioner/v2/storefront/dynamic_field_serializer.rb +1 -3
  18. data/app/serializers/spree_cm_commissioner/v2/storefront/guest_dynamic_field_serializer.rb +2 -1
  19. data/config/initializers/spree_permitted_attributes.rb +2 -0
  20. data/config/locales/en.yml +4 -0
  21. data/db/migrate/20250616084219_add_description_to_cm_vendor_place.rb +5 -0
  22. data/db/migrate/20250701093203_add_configurations_to_cm_dynamic_field.rb +6 -0
  23. data/db/migrate/20250702091305_add_dynamic_field_option_to_guest_dynamic_field.rb +5 -0
  24. data/db/migrate/20250702091935_add_status_to_dynamic_field_option.rb +5 -0
  25. data/lib/spree_cm_commissioner/version.rb +1 -1
  26. metadata +8 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 22af33dbb7a3b02cec407695525b7745f8fee24b4b6fd60d5a18b85c5fd3566e
4
- data.tar.gz: 4dc584a0641e4463531a66ef87d2b596b69dd41edd9d11c498fa80569b5aadae
3
+ metadata.gz: 0a00e3ade6665258924af6b63276add5be49a3b887d193942c41b8ba4a1fa573
4
+ data.tar.gz: c30315d4d2f4313a342f94be21cf567cab1dbc4bac07cd754542d61d5de17990
5
5
  SHA512:
6
- metadata.gz: f3486c5f18f49a85918ed8b6f78440955fbff5f86820b66327b36eb028ffb884517428ecf4a822301d73b91c3f0ce729f9285381c91ee58fce424f03efce9e41
7
- data.tar.gz: a1c6454f5da6873e47cd7ffc4cda002a879ad764d72c925cb8d83dc0b645e5f34b3d0a19c80652b7666c8e4c968210f3e59c2b8e9fe458019f115cde5a18caa8
6
+ metadata.gz: 30c14950496e7a3df59fd8a5e3233572a30437f750d0d546d4ec87cc405a8d24850912b161ca74eab4530d1d7cf27e3cb333625b0b4915e63102e3b45f1a3e94
7
+ data.tar.gz: 3062f419e60420e2e9a87c57b8720051292ebdbff63b4308bc739e32309b4aef55498b06c1b2134ee3761b9c4fca5cea8d0ecf912d3bf928701292123a23e11b
data/.env.example CHANGED
@@ -24,3 +24,6 @@ WAITING_ROOM_DISABLED=no
24
24
  # Vattanac Bank
25
25
  VATTANAC_AES_SECRET_KEY= ""
26
26
  VATTANAC_PUBLIC_KEY=""
27
+
28
+ # Organizer URL
29
+ ORGANIZER_URL=http://127.0.0.1:4000/organizer
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (1.17.0.pre.pre6)
37
+ spree_cm_commissioner (1.17.0.pre.pre7)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -38,7 +38,24 @@ module Spree
38
38
  def update
39
39
  spree_authorize! :update, spree_current_order, order_token
40
40
 
41
- if resource.update(guest_params)
41
+ if guest_params[:guest_dynamic_fields_attributes]
42
+ resource.guest_dynamic_fields.destroy_all
43
+
44
+ guest_params[:guest_dynamic_fields_attributes].each do |attr|
45
+ field = resource.guest_dynamic_fields.build(attr.except(:id))
46
+
47
+ if field.dynamic_field.requires_dynamic_field_options?
48
+ option = field.dynamic_field.dynamic_field_options.find_by(id: field.value)
49
+ field.dynamic_field_option = option if option
50
+ end
51
+
52
+ field.save!
53
+ end
54
+ end
55
+
56
+ resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
57
+
58
+ if resource.save
42
59
  render_serialized_payload { serialize_resource(resource) }
43
60
  else
44
61
  render_error_payload(resource, 400)
@@ -76,7 +93,7 @@ module Spree
76
93
  :upload_later,
77
94
  :country_code,
78
95
  :contact,
79
- guest_dynamic_fields_attributes: %i[id dynamic_field_id value _destroy]
96
+ guest_dynamic_fields_attributes: %i[id dynamic_field_id dynamic_field_option_id value _destroy]
80
97
  )
81
98
  end
82
99
  end
@@ -93,6 +93,10 @@ module SpreeCmCommissioner
93
93
  context.fail!(message: "User creation failed: #{context.user.errors.full_messages.join(', ')}")
94
94
  end
95
95
 
96
+ def disable_services
97
+ 'bus,ferry'
98
+ end
99
+
96
100
  def construct_data
97
101
  user = context.user
98
102
 
@@ -101,7 +105,7 @@ module SpreeCmCommissioner
101
105
  name: user.full_name,
102
106
  phone: user.phone_number,
103
107
  email: user.email,
104
- webUrl: "#{Spree::Store.default.formatted_url}/vattanac_bank_web_app?session_id=#{session_id}"
108
+ webUrl: "#{Spree::Store.default.formatted_url}/vattanac_bank_web_app?session_id=#{session_id}&ds=#{CGI.escape(disable_services)}"
105
109
  }
106
110
 
107
111
  json_data = raw_data.to_json
@@ -0,0 +1,30 @@
1
+ module SpreeCmCommissioner
2
+ module EventCheckInFlowable
3
+ extend ActiveSupport::Concern
4
+
5
+ included do
6
+ preference :group_check_in_enabled, :boolean, default: true
7
+ preference :individual_check_in_enabled, :boolean, default: true
8
+
9
+ before_validation :validate_at_least_one_check_in_flow_presence
10
+ end
11
+
12
+ def check_in_flows
13
+ flows = []
14
+ flows << 'group' if group_check_in_enabled?
15
+ flows << 'individual' if individual_check_in_enabled?
16
+ flows
17
+ end
18
+
19
+ def group_check_in_enabled? = preferred_group_check_in_enabled
20
+ def individual_check_in_enabled? = preferred_individual_check_in_enabled
21
+
22
+ private
23
+
24
+ def validate_at_least_one_check_in_flow_presence
25
+ return if check_in_flows.any?
26
+
27
+ errors.add(:check_in_flows, 'must have at least one flow selected')
28
+ end
29
+ end
30
+ end
@@ -6,15 +6,27 @@ module SpreeCmCommissioner
6
6
  has_many :guest_dynamic_fields, class_name: 'SpreeCmCommissioner::GuestDynamicField', dependent: :destroy
7
7
  has_many :product_dynamic_fields, class_name: 'SpreeCmCommissioner::ProductDynamicField', dependent: :destroy
8
8
 
9
- enum data_type: { string: 0, integer: 1, boolean: 2, checkbox: 3, radio: 4 }
9
+ enum data_type: { text: 0, number: 1, boolean: 2, checkbox: 3, radio: 4, selection: 5, textarea: 6 }
10
10
 
11
11
  accepts_nested_attributes_for :dynamic_field_options, allow_destroy: true, reject_if: :all_blank
12
12
 
13
13
  validates :label, presence: true
14
14
  validates :data_type, presence: true
15
+ validates :configurations, presence: true, allow_blank: false
15
16
 
16
- def selection?
17
- checkbox? || radio?
17
+ def requires_dynamic_field_options?
18
+ checkbox? || radio? || selection?
19
+ end
20
+
21
+ def multiple_select
22
+ return nil unless selection?
23
+
24
+ configurations['multiple_select'] == true
25
+ end
26
+
27
+ def multiple_select=(value)
28
+ self.configurations ||= {}
29
+ self.configurations['multiple_select'] = ActiveModel::Type::Boolean.new.cast(value)
18
30
  end
19
31
  end
20
32
  end
@@ -1,8 +1,12 @@
1
1
  module SpreeCmCommissioner
2
2
  class DynamicFieldOption < SpreeCmCommissioner::Base
3
3
  belongs_to :dynamic_field, class_name: 'SpreeCmCommissioner::DynamicField', optional: false
4
+ has_many :guest_dynamic_fields, class_name: 'SpreeCmCommissioner::GuestDynamicField', dependent: :restrict_with_error
5
+
6
+ enum status: { active: 0, draft: 1, archived: 2 }
4
7
 
5
8
  validates :value, presence: true, uniqueness: { scope: :dynamic_field_id }
9
+ validates :status, presence: true
6
10
  validate :parent_field_must_be_selection_type
7
11
 
8
12
  private
@@ -10,7 +14,7 @@ module SpreeCmCommissioner
10
14
  def parent_field_must_be_selection_type
11
15
  return unless dynamic_field
12
16
 
13
- return if dynamic_field.selection?
17
+ return if dynamic_field.requires_dynamic_field_options?
14
18
 
15
19
  errors.add(:dynamic_field, 'must be a selection type field')
16
20
  end
@@ -2,9 +2,11 @@ module SpreeCmCommissioner
2
2
  class GuestDynamicField < SpreeCmCommissioner::Base
3
3
  belongs_to :guest, class_name: 'SpreeCmCommissioner::Guest', optional: false
4
4
  belongs_to :dynamic_field, class_name: 'SpreeCmCommissioner::DynamicField', optional: false
5
+ belongs_to :dynamic_field_option, class_name: 'SpreeCmCommissioner::DynamicFieldOption', optional: true
5
6
 
6
7
  validates :value, presence: true
7
8
  validate :validate_value_format, if: -> { value.present? && dynamic_field.present? }
9
+ validate :validate_option_reference, if: -> { dynamic_field_option.present? }
8
10
 
9
11
  private
10
12
 
@@ -12,14 +14,30 @@ module SpreeCmCommissioner
12
14
  return if dynamic_field.blank?
13
15
 
14
16
  case dynamic_field.data_type.to_s
15
- when 'integer'
17
+ when 'number'
16
18
  errors.add(:value, 'must be a number') unless value.to_s.match?(/\A\d+\z/)
17
19
  when 'boolean'
18
- errors.add(:value, 'must be true or false') unless %w[true false 1 0].include?(value.to_s.downcase)
19
- when 'checkbox', 'radio'
20
+ errors.add(:value, 'must be true or false') unless %w[true false].include?(value.to_s.downcase)
21
+ when 'checkbox', 'radio', 'selection'
22
+ validate_option_value
23
+ end
24
+ end
25
+
26
+ def validate_option_value
27
+ if dynamic_field_option.present?
28
+ self.value ||= dynamic_field_option.value
29
+ else
20
30
  valid_options = dynamic_field.dynamic_field_options.pluck(:id).map(&:to_s)
21
31
  errors.add(:value, 'is not a valid option') unless valid_options.include?(value)
22
32
  end
23
33
  end
34
+
35
+ def validate_option_reference
36
+ return if dynamic_field.blank? || dynamic_field_option.blank?
37
+
38
+ return if dynamic_field_option.dynamic_field_id == dynamic_field_id
39
+
40
+ errors.add(:dynamic_field_option, 'must belong to the same dynamic field')
41
+ end
24
42
  end
25
43
  end
@@ -34,7 +34,7 @@ module SpreeCmCommissioner
34
34
  end
35
35
 
36
36
  def invitation_link
37
- "http://#{ENV.fetch('APP_HOST')}/organizer/invite_teams/#{token}?utm_source=email"
37
+ "#{ENV.fetch('ORGANIZER_URL')}/invite_teams/#{token}?utm_source=email"
38
38
  end
39
39
 
40
40
  def url_valid?
@@ -4,6 +4,7 @@ module SpreeCmCommissioner
4
4
  base.include SpreeCmCommissioner::TaxonKind
5
5
  base.include SpreeCmCommissioner::Transit::TaxonBitwise
6
6
  base.include SpreeCmCommissioner::ParticipationTypeBitwise
7
+ base.include SpreeCmCommissioner::EventCheckInFlowable
7
8
 
8
9
  base.preference :background_color, :string
9
10
  base.preference :foreground_color, :string
@@ -7,7 +7,7 @@ module SpreeCmCommissioner
7
7
  belongs_to :place, class_name: 'SpreeCmCommissioner::Place', optional: false
8
8
 
9
9
  validates :place_type, presence: true
10
- validates :position, presence: true, numericality: { only_integer: true, greater_than: 0 }
10
+ validates :place_id, uniqueness: { scope: %i[vendor_id place_type] }
11
11
 
12
12
  accepts_nested_attributes_for :place, allow_destroy: true
13
13
 
@@ -0,0 +1,18 @@
1
+ <!-- insert_before "erb[loud]:contains('field_container :hide_from_nav')" -->
2
+
3
+ <%# Sections don't use video banner, so we hide the form here to avoid confusing admin. %>
4
+
5
+ <%= f.field_container :preferred_group_check_in_enabled, class: ['custom-control', 'custom-checkbox', 'my-4'] do %>
6
+ <%= f.check_box :preferred_group_check_in_enabled, class: 'custom-control-input' %>
7
+ <%= f.label :preferred_group_check_in_enabled, Spree.t(:enable_group_check_in), class: 'custom-control-label' %>
8
+ <%= f.error_message_on :preferred_group_check_in_enabled %>
9
+ <small class="form-text text-muted">
10
+ Enabled by default for most events where users can purchase multiple tickets or use group scanning. For large events (like PSK, ASK, etc.) or invitation-based events, you should disable this to ensure each ticket or invitation is scanned individually.
11
+ </small>
12
+ <% end if @taxon.event? && @taxon.depth == 1 %> %>
13
+
14
+ <%= f.field_container :preferred_individual_check_in_enabled, class: ['custom-control', 'custom-checkbox', 'my-4'] do %>
15
+ <%= f.check_box :preferred_individual_check_in_enabled, class: 'custom-control-input' %>
16
+ <%= f.label :preferred_individual_check_in_enabled, Spree.t(:enable_individual_check_in), class: 'custom-control-label' %>
17
+ <%= f.error_message_on :preferred_individual_check_in_enabled %>
18
+ <% end if @taxon.event? && @taxon.depth == 1 %> %>
@@ -8,20 +8,36 @@ module SpreeCmCommissioner
8
8
 
9
9
  def event_id = params[:event_id]
10
10
 
11
- def call
11
+ def call # rubocop:disable Metrics/PerceivedComplexity
12
12
  return SpreeCmCommissioner::Guest.none if event_id.blank?
13
13
 
14
- if params[:qr_data].present?
14
+ if params[:qr_data].present? && order_qr_data?
15
+ search_by_order_qr
16
+ elsif params[:qr_data].present? && line_item_qr_data?
17
+ search_by_line_item_qr
18
+ elsif params[:qr_data].present? && guest_qr_data?
15
19
  search_by_guest_qr
16
20
  elsif params[:term].present?
17
21
  search_by_term
22
+ elsif params[:ids].present?
23
+ SpreeCmCommissioner::Guest.complete_or_canceled.where(event_id: event_id, id: params[:ids])
18
24
  else
19
- SpreeCmCommissioner::Guest.none
25
+ SpreeCmCommissioner::Guest.complete_or_canceled.where(event_id: event_id)
20
26
  end
21
27
  end
22
28
 
23
29
  private
24
30
 
31
+ def search_by_order_qr
32
+ order = Spree::Order.complete_or_canceled.search_by_qr_data!(params[:qr_data])
33
+ order.guests.where(event_id: event_id)
34
+ end
35
+
36
+ def search_by_line_item_qr
37
+ line_item = Spree::LineItem.complete_or_canceled.search_by_qr_data!(params[:qr_data])
38
+ line_item.guests.where(event_id: event_id)
39
+ end
40
+
25
41
  def search_by_guest_qr
26
42
  SpreeCmCommissioner::Guest.complete_or_canceled.where(
27
43
  token: params[:qr_data],
@@ -29,6 +45,32 @@ module SpreeCmCommissioner
29
45
  )
30
46
  end
31
47
 
48
+ def order_qr_data?
49
+ matches = construct_matches
50
+ matches&.size == 2
51
+ end
52
+
53
+ def line_item_qr_data?
54
+ matches = construct_matches
55
+ matches&.size == 3
56
+ end
57
+
58
+ def guest_qr_data?
59
+ matches = construct_matches
60
+ matches.nil?
61
+ end
62
+
63
+ def construct_matches
64
+ qr_data = params[:qr_data]
65
+ return nil unless qr_data
66
+
67
+ if qr_data =~ /-L\d+$/
68
+ qr_data.match(/(R\d+)-([A-Za-z0-9_\-]+)-(L\d+)/)&.captures
69
+ else
70
+ qr_data.match(/(R\d+)-([A-Za-z0-9_\-]+)/)&.captures
71
+ end
72
+ end
73
+
32
74
  def search_by_term
33
75
  terms = params[:term].split.map { |term| "%#{term.downcase}%" }
34
76
 
@@ -2,7 +2,10 @@ module SpreeCmCommissioner
2
2
  module V2
3
3
  module Operator
4
4
  class DashboardCrewEventSerializer < BaseSerializer
5
- attributes :id, :name, :permalink, :from_date, :to_date, :updated_at
5
+ attributes :id, :name, :permalink,
6
+ :from_date, :to_date,
7
+ :check_in_flows,
8
+ :updated_at
6
9
 
7
10
  has_many :children_classifications, serializer: :classification
8
11
  has_one :category_icon, serializer: SpreeCmCommissioner::V2::Storefront::AssetSerializer
@@ -2,9 +2,7 @@ module SpreeCmCommissioner
2
2
  module V2
3
3
  module Storefront
4
4
  class DynamicFieldOptionSerializer < BaseSerializer
5
- set_type :dynamic_field_option
6
-
7
- attributes :id, :value, :dynamic_field_id, :created_at, :updated_at
5
+ attributes :id, :value, :dynamic_field_id, :status, :created_at, :updated_at
8
6
  end
9
7
  end
10
8
  end
@@ -2,9 +2,7 @@ module SpreeCmCommissioner
2
2
  module V2
3
3
  module Storefront
4
4
  class DynamicFieldSerializer < BaseSerializer
5
- set_type :dynamic_field
6
-
7
- attributes :id, :label, :data_type, :vendor_id, :created_at, :updated_at
5
+ attributes :id, :label, :data_type, :vendor_id, :multiple_select, :created_at, :updated_at
8
6
 
9
7
  has_many :dynamic_field_options, serializer: SpreeCmCommissioner::V2::Storefront::DynamicFieldOptionSerializer
10
8
  end
@@ -4,9 +4,10 @@ module SpreeCmCommissioner
4
4
  class GuestDynamicFieldSerializer < BaseSerializer
5
5
  set_type :guest_dynamic_field
6
6
 
7
- attributes :id, :value, :guest_id, :dynamic_field_id, :created_at, :updated_at
7
+ attributes :id, :value, :guest_id, :dynamic_field_id, :dynamic_field_option_id, :created_at, :updated_at
8
8
 
9
9
  belongs_to :dynamic_field, serializer: SpreeCmCommissioner::V2::Storefront::DynamicFieldSerializer
10
+ belongs_to :dynamic_field_option, serializer: SpreeCmCommissioner::V2::Storefront::DynamicFieldOptionSerializer
10
11
  end
11
12
  end
12
13
  end
@@ -31,6 +31,8 @@ module Spree
31
31
  subtitle
32
32
  preferred_background_color
33
33
  preferred_foreground_color
34
+ preferred_group_check_in_enabled
35
+ preferred_individual_check_in_enabled
34
36
  show_badge_status
35
37
  purchasable_on
36
38
  available_on
@@ -459,6 +459,10 @@ en:
459
459
  businesses_cant_be_blank: "Businesses can't be blank"
460
460
  phone_number_cant_be_blank: "Phone number can't be blank"
461
461
  quantity_cant_be_less_than_or_equal_to_zero: "Quantity can't be less or equal than 0"
462
+ spree_cm_commissioner/vendor_place:
463
+ attributes:
464
+ place_id:
465
+ taken: "has already existed with this place type"
462
466
 
463
467
  mail:
464
468
  order_mailer:
@@ -0,0 +1,5 @@
1
+ class AddDescriptionToCmVendorPlace < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_vendor_places, :description, :string, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ class AddConfigurationsToCmDynamicField < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_dynamic_fields, :configurations, :jsonb, default: {}, null: false, if_not_exists: true
4
+ add_index :cm_dynamic_fields, :configurations, if_not_exists: true
5
+ end
6
+ end
@@ -0,0 +1,5 @@
1
+ class AddDynamicFieldOptionToGuestDynamicField < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_reference :cm_guest_dynamic_fields, :dynamic_field_option, index: true, foreign_key: { to_table: :cm_dynamic_field_options }, if_not_exists: true
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class AddStatusToDynamicFieldOption < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_dynamic_field_options, :status, :integer, default: 0, if_not_exists: true
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.17.0-pre6'.freeze
2
+ VERSION = '1.17.0-pre7'.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: 1.17.0.pre.pre6
4
+ version: 1.17.0.pre.pre7
5
5
  platform: ruby
6
6
  authors:
7
7
  - You
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-07-03 00:00:00.000000000 Z
11
+ date: 2025-07-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1185,6 +1185,7 @@ files:
1185
1185
  - app/mailers/spree_cm_commissioner/pin_code_mailer.rb
1186
1186
  - app/mailers/spree_cm_commissioner/team_invite_mailer.rb
1187
1187
  - app/models/.gitkeep
1188
+ - app/models/concerns/spree_cm_commissioner/event_check_in_flowable.rb
1188
1189
  - app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb
1189
1190
  - app/models/concerns/spree_cm_commissioner/json_preference_validator.rb
1190
1191
  - app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb
@@ -1490,6 +1491,7 @@ files:
1490
1491
  - app/overrides/spree/admin/taxons/_form/assets_form.html.erb.deface
1491
1492
  - app/overrides/spree/admin/taxons/_form/available_on.html.erb.deface
1492
1493
  - app/overrides/spree/admin/taxons/_form/background_color_and_foreground_color.html.erb.deface
1494
+ - app/overrides/spree/admin/taxons/_form/check_in_flows.html.erb.deface
1493
1495
  - app/overrides/spree/admin/taxons/_form/custom_redirect_url.html.erb.deface
1494
1496
  - app/overrides/spree/admin/taxons/_form/hide_video_banner.html.erb.deface
1495
1497
  - app/overrides/spree/admin/taxons/_form/kind_html.erb.deface
@@ -2514,6 +2516,10 @@ files:
2514
2516
  - db/migrate/20250610080108_add_contact_to_cm_guests.rb
2515
2517
  - db/migrate/20250611023548_add_country_code_to_guests.rb
2516
2518
  - db/migrate/20250612035937_add_intel_phone_number_to_guests.rb
2519
+ - db/migrate/20250616084219_add_description_to_cm_vendor_place.rb
2520
+ - db/migrate/20250701093203_add_configurations_to_cm_dynamic_field.rb
2521
+ - db/migrate/20250702091305_add_dynamic_field_option_to_guest_dynamic_field.rb
2522
+ - db/migrate/20250702091935_add_status_to_dynamic_field_option.rb
2517
2523
  - docker-compose.yml
2518
2524
  - docs/option_types/attr_types.md
2519
2525
  - docs/private_key.pem