spree_cm_commissioner 2.5.15 → 2.5.16.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e1489014b8629a83035954b981e4b2e7cdfdcb70159c2e871e9152c3916668ae
4
- data.tar.gz: ee0ec5e1f58355695e006f00d7952a09ca379283eab18591bba435d1c535fffb
3
+ metadata.gz: 1108e15325ac66e0b4dd939138b9c8feea61b6d8f5fd26f01161022e96c3de43
4
+ data.tar.gz: 1047db11e7948e2c3bc2e803b1029344ea2d5d5423d75e23316df80e987d399d
5
5
  SHA512:
6
- metadata.gz: 1f3cafbb00e42a98ec6f80ad52266e476cde61f2d4d6215f80cdc95c7af604c5f754aea35139331a8dcf98ccbc25f43378d94c815732cbc0fa8185ae8373e58a
7
- data.tar.gz: 6562e8994dde887a43e598a29239ca6e8295967db6bfc0d8fa506ec56a69097ad293f1f83355c8db6db671ad433d3cc07f7009e67688450418c868e9c9de3814
6
+ metadata.gz: a95118b541b10f0b32b8d1b2b0ac20b6d137a478d50d5b0a66250cacb7aa237f97c4fdbf0b778715d560b764744ab2dce633d0943e6669f8cb78ce9fddeed939
7
+ data.tar.gz: fdd81c70ef7e1c01c58814bedb034ad888a6266d8ef0a349e1f6c7cc18102f247f443d0e030a4eac8c75477b6309ee9164c5ded3db34c3633107c35480eafcba
data/Gemfile.lock CHANGED
@@ -34,7 +34,7 @@ GIT
34
34
  PATH
35
35
  remote: .
36
36
  specs:
37
- spree_cm_commissioner (2.5.15)
37
+ spree_cm_commissioner (2.5.16.pre.pre1)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -3,8 +3,15 @@ module Spree
3
3
  module V2
4
4
  module Storefront
5
5
  class InviteGuestsController < ::Spree::Api::V2::ResourceController
6
- before_action :load_invite_guest_by_token, only: %i[update]
7
- before_action :require_spree_current_user, only: :update
6
+ before_action :require_spree_current_user, only: %i[show update]
7
+ before_action :load_invite_guest_by_token, only: %i[show update]
8
+
9
+ def show
10
+ return if invite_unavailable?
11
+
12
+ order = @invite_guest.order
13
+ render_serialized_payload { serialize_resource(order) }
14
+ end
8
15
 
9
16
  def update
10
17
  return if invite_unavailable?
@@ -42,7 +49,9 @@ module Spree
42
49
  end
43
50
 
44
51
  def load_invite_guest_by_token
45
- @invite_guest = SpreeCmCommissioner::InviteGuest.find_by!(token: params[:id])
52
+ qr_data = params[:id].to_s
53
+ token = qr_data.start_with?('IVG-') ? qr_data.sub(/\AIVG-/, '') : qr_data
54
+ @invite_guest = SpreeCmCommissioner::InviteGuest.find_by!(token: token)
46
55
  rescue ActiveRecord::RecordNotFound
47
56
  render_error_payload(I18n.t('invite.url_not_found'))
48
57
  end
@@ -34,7 +34,6 @@ module Spree
34
34
 
35
35
  ActiveRecord::Base.transaction do
36
36
  resource.save!
37
- recalculate_cart(resource.line_item)
38
37
  run_dynamic_fields(resource)
39
38
  resource.save_and_move_to_next_stage
40
39
  end
@@ -49,7 +48,6 @@ module Spree
49
48
  run_dynamic_fields(resource) if guest_params[:guest_dynamic_fields_attributes]
50
49
  resource.assign_attributes(guest_params.except(:guest_dynamic_fields_attributes))
51
50
  resource.save!
52
- recalculate_cart(resource.line_item)
53
51
  resource.save_and_move_to_next_stage
54
52
  end
55
53
 
@@ -115,10 +113,6 @@ module Spree
115
113
  def handle_record_not_found(exception)
116
114
  render_error_payload({ base: [exception.message] }, 404)
117
115
  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
122
116
  end
123
117
  end
124
118
  end
@@ -7,6 +7,13 @@ module SpreeCmCommissioner
7
7
  base.include SpreeCmCommissioner::OrderConcern
8
8
  end
9
9
 
10
+ # override
11
+ def show
12
+ spree_authorize! :show, spree_current_order, order_token
13
+ response.headers['Cache-Control'] = 'no-store'
14
+ render_serialized_payload { serialized_current_order }
15
+ end
16
+
10
17
  # Restart the checkout flow to bring the order back to the cart view
11
18
  def restart_checkout_flow
12
19
  spree_authorize! :update, spree_current_order, order_token
@@ -33,14 +33,18 @@ module SpreeCmCommissioner
33
33
  end
34
34
 
35
35
  def assign_event
36
- # Find the event taxon using the event_id from the parameters.
37
- # It looks for a taxon with a slug like "events-{event_id}" and picks its first child.
38
- @event = Spree::Taxon.find_by(slug: "events-#{params[:event_id]}")&.children&.first
39
- if @event
40
- @ticket.taxons << @event
41
- else
42
- context.fail!(message: 'Event not found.')
43
- end
36
+ event = Spree::Taxon.find_event(params[:event_id])
37
+ context.fail!(message: 'Event not found.') unless event
38
+
39
+ @section =
40
+ if params[:section_id].present?
41
+ event.children.find_by(id: params[:section_id])
42
+ else
43
+ event.children.first
44
+ end
45
+ context.fail!(message: 'Section not found.') unless @section
46
+
47
+ @ticket.taxons << @section
44
48
  end
45
49
 
46
50
  def set_option_value
@@ -0,0 +1,18 @@
1
+ module SpreeCmCommissioner
2
+ module InviteGuests
3
+ class BulkCreateJob < ApplicationJob
4
+ def perform(options = {})
5
+ SpreeCmCommissioner::InviteGuests::BulkCreate.call(
6
+ invite_guest_group_id: options[:invite_guest_group_id] || options[:id],
7
+ quantity: options[:quantity],
8
+ invite_guest_attributes: options[:invite_guest_attributes] || options[:invite_guest_params],
9
+ invite_context: {
10
+ variant_id: options[:variant_id],
11
+ event_id: options[:event_id],
12
+ user_id: options[:user_id]
13
+ }
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,84 @@
1
+ module SpreeCmCommissioner
2
+ module Exports
3
+ class InviteGuestGroupCsv < ::SpreeCmCommissioner::Export
4
+ store_public_metadata :invite_guests_count, :integer, default: 0
5
+
6
+ def export
7
+ setup_tracking
8
+ group = exportable
9
+ assign_group_metadata(group)
10
+
11
+ file = Tempfile.new(['invite-guest-group', '.csv'])
12
+ export_csv(file, group)
13
+ attach_export(file, group)
14
+ finalize_export(file.size)
15
+ rescue StandardError => e
16
+ handle_export_error(e)
17
+ ensure
18
+ cleanup_tempfile(file)
19
+ end
20
+
21
+ private
22
+
23
+ def setup_tracking
24
+ self.track_messages = []
25
+ track_messages << "Export started at #{Time.current.iso8601}"
26
+ update(status: :progress, track_messages: track_messages)
27
+ end
28
+
29
+ def assign_group_metadata(group)
30
+ self.invite_guests_count = group.invite_guests.active.count
31
+ end
32
+
33
+ def export_csv(file, group)
34
+ CSV.open(file.path, 'w') do |csv|
35
+ csv << ['Invite Guest QR Data']
36
+ group.invite_guests.active.find_each do |invite_guest|
37
+ csv << [invite_guest.qr_data]
38
+ end
39
+ end
40
+ end
41
+
42
+ def attach_export(file, group)
43
+ file.rewind
44
+ exported_file.attach(
45
+ io: file,
46
+ filename: exported_filename(group),
47
+ content_type: 'text/csv'
48
+ )
49
+ end
50
+
51
+ def finalize_export(file_size_bytes)
52
+ track_messages << "Completed at #{Time.current.iso8601}"
53
+ update(
54
+ status: :done,
55
+ file_size_bytes: file_size_bytes,
56
+ track_messages: track_messages,
57
+ public_metadata: public_metadata
58
+ )
59
+ end
60
+
61
+ def handle_export_error(error)
62
+ CmAppLogger.error(
63
+ label: "#{self.class.name}#export",
64
+ data: { export_id: id, error: error.message, backtrace: error.backtrace }
65
+ )
66
+ track_errors = []
67
+ track_errors << "Error: #{error.message} at #{Time.current.iso8601}"
68
+ track_errors << error.backtrace.take(5).join("\n") if error.backtrace.present?
69
+ update(status: :failed, track_errors: track_errors)
70
+ end
71
+
72
+ def cleanup_tempfile(file)
73
+ return if file.nil?
74
+
75
+ file.close
76
+ file.unlink
77
+ end
78
+
79
+ def exported_filename(group)
80
+ "invite_guest_group_#{group.id}_#{Time.current.strftime('%Y-%m-%d_%H-%M')}.csv"
81
+ end
82
+ end
83
+ end
84
+ end
@@ -24,5 +24,9 @@ module SpreeCmCommissioner
24
24
  # Build URL string directly since route is defined in cm-market-server
25
25
  "/invite_guests/#{token}/guest_invitations/#{guest_token}"
26
26
  end
27
+
28
+ def qr_data
29
+ "IVG-#{token}"
30
+ end
27
31
  end
28
32
  end
@@ -0,0 +1,15 @@
1
+ module SpreeCmCommissioner
2
+ class InviteGuestGroup < SpreeCmCommissioner::Base
3
+ belongs_to :event, class_name: 'Spree::Taxon', optional: true
4
+
5
+ has_many :invite_guests, class_name: 'SpreeCmCommissioner::InviteGuest', dependent: :destroy
6
+
7
+ self.whitelisted_ransackable_attributes = %w[quantity]
8
+
9
+ validates :quantity, presence: true, numericality: { only_integer: true, greater_than: 0 }
10
+
11
+ def expired?
12
+ expiration_date.present? && expiration_date < Time.current
13
+ end
14
+ end
15
+ end
@@ -35,8 +35,8 @@ module SpreeCmCommissioner
35
35
  private
36
36
 
37
37
  def resolve_guest_age_group(guest)
38
- return guest.age_group if guest.age_group.present?
39
38
  return guest.saved_guest.age_group if guest.saved_guest&.age_group.present?
39
+ return guest.age_group if guest.age_group.present?
40
40
 
41
41
  nil
42
42
  end
@@ -62,6 +62,7 @@ module SpreeCmCommissioner
62
62
  base.has_many :crew_invite_links, class_name: 'SpreeCmCommissioner::CrewInviteLink', dependent: :destroy
63
63
 
64
64
  base.has_many :invite_guests, class_name: 'SpreeCmCommissioner::InviteGuest', foreign_key: :event_id
65
+ base.has_many :invite_guest_groups, class_name: 'SpreeCmCommissioner::InviteGuestGroup', foreign_key: :event_id
65
66
 
66
67
  base.has_many :line_items, through: :products
67
68
  base.has_many :event_line_items, class_name: 'Spree::LineItem', foreign_key: :event_id
@@ -26,9 +26,7 @@ module SpreeCmCommissioner
26
26
  end
27
27
  # SPREE: Original Spree::Cart::Recalculate code ends here
28
28
 
29
- # CUSTOM: Apply pricing models at order level (groups connected trips together)
30
-
31
- SpreeCmCommissioner::PricingModelHandler::Order.new(order).activate
29
+ # to ensure they're called at the right business logic points.
32
30
 
33
31
  # SPREE: Original Spree::Cart::Recalculate code continues here
34
32
  ::Spree::PromotionHandler::Cart.new(order, line_item).activate
@@ -17,9 +17,14 @@ module SpreeCmCommissioner
17
17
  # order.state = 'address' if (ship_changed || bill_changed) && order.has_checkout_step?('address')
18
18
  # order.state = 'delivery' if selected_shipping_rate_present?(params) && order.has_checkout_step?('delivery')
19
19
 
20
- return success(order) if order.update_from_params(params, permitted_attributes, request_env)
21
-
22
- failure(order)
20
+ if order.update_from_params(params, permitted_attributes, request_env)
21
+ # Apply pricing model after successful update
22
+ SpreeCmCommissioner::PricingModelHandler::Order.new(order).activate
23
+ order.update_with_updater!
24
+ success(order)
25
+ else
26
+ failure(order)
27
+ end
23
28
  end
24
29
  end
25
30
  end
@@ -0,0 +1,50 @@
1
+ module SpreeCmCommissioner
2
+ module InviteGuestGroups
3
+ class Create
4
+ prepend ::Spree::ServiceModule::Base
5
+
6
+ # This service will create the group and enqueue a background job to create sub invite guests.
7
+ def call(invite_guest_group_attributes:, invite_guest_attributes:, variant_id:, event_id:, user_id: nil)
8
+ @variant_id = variant_id
9
+ @event_id = event_id
10
+ @invite_guest_params = invite_guest_attributes.to_h
11
+ @user_id = user_id
12
+
13
+ begin
14
+ @invite_guest_group = create_invite_guest_group!(invite_guest_group_attributes)
15
+ # Enqueue background job to create sub invite guests and orders
16
+ # Pass the group's quantity so the background job can call the BulkCreate service
17
+ SpreeCmCommissioner::InviteGuests::BulkCreateJob.perform_later(
18
+ invite_guest_group_id: @invite_guest_group.id,
19
+ quantity: @invite_guest_group.quantity,
20
+ variant_id: @variant_id,
21
+ event_id: @event_id,
22
+ invite_guest_params: @invite_guest_params,
23
+ user_id: @user_id
24
+ )
25
+
26
+ success(invite_guest_group: @invite_guest_group)
27
+ rescue StandardError => e
28
+ failure(nil, e.message)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ def create_invite_guest_group!(invite_guest_group_attributes)
35
+ attrs = invite_guest_group_attributes.to_h
36
+
37
+ create_attrs = {
38
+ quantity: attrs[:quantity] || attrs['quantity'],
39
+ expiration_date: attrs[:expiration_date] || attrs['expiration_date'],
40
+ event_id: attrs[:event_id] || attrs['event_id'] || @event_id,
41
+ mobile_claim_only: attrs[:mobile_claim_only] || attrs['mobile_claim_only'] ||
42
+ @invite_guest_params[:mobile_claim_only] || @invite_guest_params['mobile_claim_only'],
43
+ processing_status: attrs[:processing_status] || attrs['processing_status']
44
+ }
45
+
46
+ SpreeCmCommissioner::InviteGuestGroup.create!(create_attrs)
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,101 @@
1
+ module SpreeCmCommissioner
2
+ module InviteGuests
3
+ class BulkCreate
4
+ prepend ::Spree::ServiceModule::Base
5
+
6
+ def call(invite_guest_group_id:, quantity:, invite_guest_attributes:, invite_context:)
7
+ invite_guest_group = SpreeCmCommissioner::InviteGuestGroup.find_by(id: invite_guest_group_id)
8
+ return failure(nil, 'Invite guest group not found') unless invite_guest_group
9
+ return failure(nil, 'Quantity must be greater than 0') if quantity.to_i <= 0
10
+
11
+ context = invite_context.respond_to?(:to_h) ? invite_context.to_h : {}
12
+ variant_id = context[:variant_id] || context['variant_id']
13
+ event_id = context[:event_id] || context['event_id']
14
+
15
+ invite_guest_group.update!(processing_status: :processing)
16
+
17
+ invite_guest_params = invite_guest_attributes.respond_to?(:to_h) ? invite_guest_attributes.to_h : {}
18
+ created_invite_guests = create_invite_guests_in_transaction(
19
+ invite_guest_group_id: invite_guest_group.id,
20
+ quantity: quantity,
21
+ invite_guest_params: invite_guest_params,
22
+ invite_context: context
23
+ )
24
+
25
+ mark_group_completed(invite_guest_group, created_invite_guests, quantity, variant_id, event_id)
26
+ success(invite_guests: created_invite_guests)
27
+ rescue StandardError => e
28
+ mark_group_failed(invite_guest_group, e, quantity, variant_id, event_id)
29
+ failure(nil, e.message)
30
+ end
31
+
32
+ private
33
+
34
+ def create_invite_guests_in_transaction(invite_guest_group_id:, quantity:, invite_guest_params:, invite_context:)
35
+ created_list = []
36
+ context = invite_context.respond_to?(:to_h) ? invite_context.to_h : {}
37
+ variant_id = context[:variant_id] || context['variant_id']
38
+ event_id = context[:event_id] || context['event_id']
39
+ user_id = context[:user_id] || context['user_id']
40
+
41
+ ActiveRecord::Base.transaction do
42
+ quantity.to_i.times do
43
+ service_result = SpreeCmCommissioner::InviteGuests::Create.call(
44
+ invite_guest_group_id: invite_guest_group_id,
45
+ variant_id: variant_id,
46
+ event_id: event_id,
47
+ invite_guest_params: invite_guest_params,
48
+ user_id: user_id
49
+ )
50
+
51
+ raise StandardError, "Failed to create invite guest: #{service_result.error}" unless service_result.success?
52
+
53
+ created_list << service_result.value[:invite_guest]
54
+ end
55
+ end
56
+
57
+ created_list
58
+ end
59
+
60
+ def mark_group_completed(invite_guest_group, created_invite_guests, quantity, variant_id, event_id)
61
+ attrs = { processing_status: :completed, completed_at: Time.current }
62
+ if invite_guest_group.has_attribute?(:private_metadata)
63
+ metadata = invite_guest_group.private_metadata
64
+ metadata = JSON.parse(metadata.presence || '{}') if metadata.is_a?(String)
65
+
66
+ attrs[:private_metadata] = metadata.merge(
67
+ requested_quantity: quantity.to_i,
68
+ created_count: created_invite_guests.size,
69
+ variant_id: variant_id,
70
+ event_id: event_id
71
+ )
72
+ end
73
+
74
+ invite_guest_group.update!(attrs)
75
+ end
76
+
77
+ def mark_group_failed(invite_guest_group, error, quantity, variant_id, event_id)
78
+ return unless invite_guest_group
79
+
80
+ attrs = { processing_status: :failed, completed_at: Time.current }
81
+ if invite_guest_group.has_attribute?(:private_metadata)
82
+ metadata = invite_guest_group.private_metadata
83
+ metadata = JSON.parse(metadata.presence || '{}') if metadata.is_a?(String)
84
+
85
+ attrs[:private_metadata] = metadata.merge(
86
+ requested_quantity: quantity.to_i,
87
+ created_count: 0,
88
+ variant_id: variant_id,
89
+ event_id: event_id,
90
+ error_class: error.class.name,
91
+ error_message: error.message
92
+ )
93
+ end
94
+
95
+ invite_guest_group.update!(attrs)
96
+ rescue ActiveRecord::ActiveRecordError
97
+ false
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,73 @@
1
+ module SpreeCmCommissioner
2
+ module InviteGuests
3
+ class Create
4
+ prepend ::Spree::ServiceModule::Base
5
+
6
+ def call(invite_guest_group_id:, variant_id:, event_id: nil, invite_guest_params: {}, user_id: nil)
7
+ @invite_guest_group_id = invite_guest_group_id
8
+ @variant_id = variant_id
9
+ @event_id = event_id
10
+ @invite_guest_params = invite_guest_params.to_h
11
+ @user_id = user_id
12
+
13
+ begin
14
+ order_context = ensure_order!
15
+ invite_guest = build_invite_guest(order_context.order.id)
16
+ persist_invite_guest(invite_guest)
17
+ rescue StandardError => e
18
+ failure(nil, e.message)
19
+ end
20
+ end
21
+
22
+ private
23
+
24
+ def user
25
+ @user ||= Spree.user_class.find_by(id: @user_id) if @user_id
26
+ end
27
+
28
+ def create_order
29
+ SpreeCmCommissioner::OrderImporter::MultiGuest.call(
30
+ guest_token: SecureRandom.uuid,
31
+ quantity: 1,
32
+ params: {
33
+ order_email: user&.email || @invite_guest_params[:email] || @invite_guest_params['email'],
34
+ order_phone_number: user&.phone_number,
35
+ variant_id: @variant_id
36
+ }
37
+ )
38
+ end
39
+
40
+ def build_invite_guest(order_id)
41
+ params = @invite_guest_params
42
+ SpreeCmCommissioner::InviteGuest.new(
43
+ token: SecureRandom.hex(16),
44
+ expiration_date: params[:expiration_date] || params['expiration_date'] || 3.days.from_now,
45
+ order_id: order_id,
46
+ quantity: 1,
47
+ variant_id: @variant_id,
48
+ event_id: @event_id,
49
+ invite_guest_group_id: @invite_guest_group_id,
50
+ email: params[:email] || params['email'],
51
+ issued_to: params[:issued_to] || params['issued_to'],
52
+ remark: params[:remark] || params['remark'],
53
+ mobile_claim_only: params[:mobile_claim_only] || params['mobile_claim_only']
54
+ )
55
+ end
56
+
57
+ def persist_invite_guest(invite_guest)
58
+ if invite_guest.save
59
+ success(invite_guest: invite_guest)
60
+ else
61
+ failure(nil, invite_guest.errors.full_messages.to_sentence)
62
+ end
63
+ end
64
+
65
+ def ensure_order!
66
+ order_context = create_order
67
+ raise StandardError, (order_context[:message] || 'Failed to create order') unless order_context&.order && order_context.order.persisted?
68
+
69
+ order_context
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,5 @@
1
+ class AddMobileClaimOnlyToCmInviteGuests < ActiveRecord::Migration[7.0]
2
+ def change
3
+ add_column :cm_invite_guests, :mobile_claim_only, :boolean, default: false, null: false
4
+ end
5
+ end
@@ -0,0 +1,24 @@
1
+ class CreateCmInviteGuestGroups < ActiveRecord::Migration[7.0]
2
+ def change
3
+ create_table :cm_invite_guest_groups, if_not_exists: true do |t|
4
+ t.integer :quantity, default: 1
5
+ t.datetime :expiration_date
6
+ t.bigint :event_id
7
+ t.boolean :mobile_claim_only, default: false
8
+ t.string :processing_status, default: 'pending'
9
+ t.jsonb :public_metadata, default: '{}'
10
+ t.jsonb :private_metadata, default: '{}'
11
+ t.datetime :completed_at
12
+ t.timestamps
13
+ end
14
+ add_index :cm_invite_guest_groups, :event_id, if_not_exists: true
15
+ add_foreign_key :cm_invite_guest_groups, :spree_taxons, column: :event_id
16
+
17
+ # Add foreign key to InviteGuest pointing to InviteGuestGroup
18
+ unless column_exists?(:cm_invite_guests, :invite_guest_group_id)
19
+ add_column :cm_invite_guests, :invite_guest_group_id, :bigint
20
+ add_index :cm_invite_guests, :invite_guest_group_id, if_not_exists: true
21
+ add_foreign_key :cm_invite_guests, :cm_invite_guest_groups, column: :invite_guest_group_id
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '2.5.15'.freeze
2
+ VERSION = '2.5.16-pre1'.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.15
4
+ version: 2.5.16.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: 2026-02-24 00:00:00.000000000 Z
11
+ date: 2026-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -1329,6 +1329,7 @@ files:
1329
1329
  - app/jobs/spree_cm_commissioner/integrations/polling_scheduler_job.rb
1330
1330
  - app/jobs/spree_cm_commissioner/invalidate_cache_request_job.rb
1331
1331
  - app/jobs/spree_cm_commissioner/inventory_item_syncer_job.rb
1332
+ - app/jobs/spree_cm_commissioner/invite_guests/bulk_create_job.rb
1332
1333
  - app/jobs/spree_cm_commissioner/line_items/sync_event_date_job.rb
1333
1334
  - app/jobs/spree_cm_commissioner/maintenance_tasks/orchestrate_job.rb
1334
1335
  - app/jobs/spree_cm_commissioner/maintenance_tasks/process_job.rb
@@ -1449,6 +1450,7 @@ files:
1449
1450
  - app/models/spree_cm_commissioner/dynamic_field_option.rb
1450
1451
  - app/models/spree_cm_commissioner/event_ticket_google_wallet.rb
1451
1452
  - app/models/spree_cm_commissioner/export.rb
1453
+ - app/models/spree_cm_commissioner/exports/invite_guest_group_csv.rb
1452
1454
  - app/models/spree_cm_commissioner/exports/operator_guest_json_gzip.rb
1453
1455
  - app/models/spree_cm_commissioner/feature_image.rb
1454
1456
  - app/models/spree_cm_commissioner/front_image.rb
@@ -1487,6 +1489,7 @@ files:
1487
1489
  - app/models/spree_cm_commissioner/inventory_item.rb
1488
1490
  - app/models/spree_cm_commissioner/invite.rb
1489
1491
  - app/models/spree_cm_commissioner/invite_guest.rb
1492
+ - app/models/spree_cm_commissioner/invite_guest_group.rb
1490
1493
  - app/models/spree_cm_commissioner/invite_team.rb
1491
1494
  - app/models/spree_cm_commissioner/invite_user_event.rb
1492
1495
  - app/models/spree_cm_commissioner/invite_user_taxon.rb
@@ -1835,7 +1838,6 @@ files:
1835
1838
  - app/serializers/spree/v2/organizer/base_serializer.rb
1836
1839
  - app/serializers/spree/v2/organizer/image_serializer.rb
1837
1840
  - app/serializers/spree/v2/organizer/invite_crews_serializer.rb
1838
- - app/serializers/spree/v2/organizer/invite_guest_serializer.rb
1839
1841
  - app/serializers/spree/v2/organizer/invite_serializer.rb
1840
1842
  - app/serializers/spree/v2/organizer/s3_signed_url_serializer.rb
1841
1843
  - app/serializers/spree/v2/organizer/taxon_serializer.rb
@@ -2065,6 +2067,9 @@ files:
2065
2067
  - app/services/spree_cm_commissioner/intercity_taxi_order/calculate_distance.rb
2066
2068
  - app/services/spree_cm_commissioner/intercity_taxi_order/create.rb
2067
2069
  - app/services/spree_cm_commissioner/intercity_taxi_order/update.rb
2070
+ - app/services/spree_cm_commissioner/invite_guest_groups/create.rb
2071
+ - app/services/spree_cm_commissioner/invite_guests/bulk_create.rb
2072
+ - app/services/spree_cm_commissioner/invite_guests/create.rb
2068
2073
  - app/services/spree_cm_commissioner/line_items/sync_event_date.rb
2069
2074
  - app/services/spree_cm_commissioner/metafields/product_metadata_service.rb
2070
2075
  - app/services/spree_cm_commissioner/operator_guest_json_gzips/create.rb
@@ -3036,6 +3041,8 @@ files:
3036
3041
  - db/migrate/20260106093359_add_contact_phone_to_cm_vendor_places.rb
3037
3042
  - db/migrate/20260108101406_add_allow_booking_to_cm_trips.rb
3038
3043
  - db/migrate/20260110073000_create_cm_pricing_model_routes.rb
3044
+ - db/migrate/20260115032932_add_mobile_claim_only_to_cm_invite_guests.rb
3045
+ - db/migrate/20260117131017_create_cm_invite_guest_groups.rb
3039
3046
  - db/migrate/20260121024645_add_nationality_group_to_cm_guests.rb
3040
3047
  - db/migrate/20260126110528_seed_user_initial_usernames.rb
3041
3048
  - db/migrate/20260128043540_add_counter_cache_to_spree_users.rb
@@ -3240,9 +3247,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
3240
3247
  version: '2.7'
3241
3248
  required_rubygems_version: !ruby/object:Gem::Requirement
3242
3249
  requirements:
3243
- - - ">="
3250
+ - - ">"
3244
3251
  - !ruby/object:Gem::Version
3245
- version: '0'
3252
+ version: 1.3.1
3246
3253
  requirements:
3247
3254
  - none
3248
3255
  rubygems_version: 3.4.1
@@ -1,13 +0,0 @@
1
- module Spree
2
- module V2
3
- module Organizer
4
- class InviteGuestSerializer < BaseSerializer
5
- attributes :email, :quantity, :token, :invite_type, :claimed_status, :issued_to, :expiration_date,
6
- :email_send_at, :created_at, :updated_at, :remark
7
- belongs_to :variant, serializer: SpreeCmCommissioner::V2::Storefront::EventVariantSerializer
8
- belongs_to :order, serializer: Spree::V2::Storefront::OrderSerializer
9
- belongs_to :event, serializer: Spree::V2::Storefront::TaxonSerializer
10
- end
11
- end
12
- end
13
- end