spree_cm_commissioner 1.17.0.pre.pre1 → 1.17.0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3bfd7c55dbc9cdd4a8350cf03314306aa656b233423084e4e5cd6e85977270d6
4
- data.tar.gz: a243e2ec33cd9ddf4980fd14d31d47c4a39c663e04609a1de6e92aafa1584441
3
+ metadata.gz: bd0a9d4b3819bd12ab5e38ffd050cf46ca5b8a937965a25ae911f9208b26586a
4
+ data.tar.gz: a17a1eea391cdf4c4c2c17d300ee275ab70b67dbc87b4448cbc4a2a6cae1c533
5
5
  SHA512:
6
- metadata.gz: 85ce5b60b28ab3c4daaf710134d89f81b5b77db09b67fb12ce633c2c50c6fbca66d5ea397fed87b17e44c44252e076d9af68b3e0f841aa41379652713f54937a
7
- data.tar.gz: 5e0d6775a3ac52c9fadbf1842a589730f0b4551c5ee770b38ff39398cf994396f3cb62a4fa7b4bc3ecbbb480f6863d090f6c41187aa6ffcad0dab59338e4eb7a
6
+ metadata.gz: 45451b1d44bf6820463098e3c2a37cfd113753206b1ccbc13247a7f3db577be706fff5b1dd54e528036e6120dacfb4d9472672f3f196d8866dbdfff7557bbdde
7
+ data.tar.gz: d52c8b30b4e67599eac1eba6f75025c6ee01c6967caaebd7874e22fa71ca7202a1927facd4d8c3ad0e8da256ece71e3977b83a3ea56292e0a740c0b56bc05566
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.pre1)
37
+ spree_cm_commissioner (1.17.0.pre.pre2)
38
38
  activerecord-multi-tenant
39
39
  activerecord_json_validator (~> 2.1, >= 2.1.3)
40
40
  aws-sdk-cloudfront
@@ -1,8 +1,6 @@
1
1
  module Spree
2
2
  module Admin
3
3
  class TenantsController < Spree::Admin::ResourceController
4
- before_action :load_vector_icons, only: %i[new edit]
5
-
6
4
  # override
7
5
  def collection
8
6
  params[:q] = {} if params[:q].blank?
@@ -33,12 +31,6 @@ module Spree
33
31
  def collection_url(options = {})
34
32
  admin_tenants_url(options)
35
33
  end
36
-
37
- private
38
-
39
- def load_vector_icons
40
- @vector_icons = SpreeCmCommissioner::VectorIcon.all
41
- end
42
34
  end
43
35
  end
44
36
  end
@@ -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
@@ -5,10 +5,6 @@ module SpreeCmCommissioner
5
5
  included do
6
6
  preference :assetlinks, :string, default: ''
7
7
  preference :apple_app_site_association, :string, default: ''
8
- preference :payment_checkout_image, :string, default: ''
9
- preference :payment_failed_image, :string, default: ''
10
- preference :payment_success_image, :string, default: ''
11
- preference :payment_loader, :string, default: ''
12
8
  end
13
9
  end
14
10
  end
@@ -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
@@ -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
@@ -92,256 +92,3 @@
92
92
  <% end %>
93
93
  </div>
94
94
  </div>
95
- <div data-hook="admin_tenant_form_fields" class="row">
96
-
97
- <!-- payment icon fields improved UI -->
98
- <div class="col-3">
99
- <div class="card mb-3">
100
- <div class="card-body text-center">
101
- <%= f.field_container :preferred_payment_checkout_image do %>
102
- <%= f.label :payment_checkout_image, raw(Spree.t(:payment_checkout_image)), class: 'font-weight-bold' %>
103
- <div class="mb-2 position-relative">
104
- <img id="preview_preferred_payment_checkout_image"
105
- src="<%= (f.object.preferred_payment_checkout_image.present? ? asset_path(f.object.preferred_payment_checkout_image) : asset_path('cm-hangmeas-checkout_image.svg')) %>"
106
- alt="Icon Preview"
107
- class="img-thumbnail bg-light border payment-icon-preview"
108
- data-toggle="tooltip" title="Click to select icon"
109
- onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_checkout_image'); setCurrentSelectedIcon(document.getElementById('preferred_payment_checkout_image').value);">
110
- <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_checkout_image').value=''; document.getElementById('preview_preferred_payment_checkout_image').src='<%= asset_path('cm-hangmeas-checkout_image.svg') %>'; document.getElementById('preview_preferred_payment_checkout_image').style.display='inline'; return false;">
111
- <i class="fa fa-times"></i>
112
- </button>
113
- </div>
114
- <div class="input-group">
115
- <%= f.text_field :preferred_payment_checkout_image, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_checkout_image', 'aria-label': 'Payment Checkout Image' %>
116
- <div class="input-group-append">
117
- <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_checkout_image" data-vector-icon="<%= f.object.preferred_payment_checkout_image %>" title="Select icon">
118
- <i class="fa fa-image"></i>
119
- </button>
120
- </div>
121
- </div>
122
- <%= f.error_message_on :preferred_payment_checkout_image %>
123
- <% end %>
124
- </div>
125
- </div>
126
- </div>
127
-
128
- <div class="col-3">
129
- <div class="card mb-3">
130
- <div class="card-body text-center">
131
- <%= f.field_container :preferred_payment_failed_image do %>
132
- <%= f.label :payment_failed_image, raw(Spree.t(:payment_failed_image)), class: 'font-weight-bold' %>
133
- <div class="mb-2 position-relative">
134
- <img id="preview_preferred_payment_failed_image"
135
- src="<%= (f.object.preferred_payment_failed_image.present? ? asset_path(f.object.preferred_payment_failed_image) : asset_path('cm-hangmeas-failed.svg')) %>"
136
- alt="Icon Preview"
137
- class="img-thumbnail bg-light border payment-icon-preview"
138
- data-toggle="tooltip" title="Click to select icon"
139
- onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_failed_image'); setCurrentSelectedIcon(document.getElementById('preferred_payment_failed_image').value);">
140
- <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_failed_image').value=''; document.getElementById('preview_preferred_payment_failed_image').src='<%= asset_path('cm-hangmeas-failed.svg') %>'; document.getElementById('preview_preferred_payment_failed_image').style.display='inline'; return false;">
141
- <i class="fa fa-times"></i>
142
- </button>
143
- </div>
144
- <div class="input-group">
145
- <%= f.text_field :preferred_payment_failed_image, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_failed_image', 'aria-label': 'Payment Failed Image' %>
146
- <div class="input-group-append">
147
- <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_failed_image" data-vector-icon="<%= f.object.preferred_payment_failed_image %>" title="Select icon">
148
- <i class="fa fa-image"></i>
149
- </button>
150
- </div>
151
- </div>
152
- <%= f.error_message_on :preferred_payment_failed_image %>
153
- <% end %>
154
- </div>
155
- </div>
156
- </div>
157
-
158
- <div class="col-3">
159
- <div class="card mb-3">
160
- <div class="card-body text-center">
161
- <%= f.field_container :preferred_payment_success_image do %>
162
- <%= f.label :payment_success_image, raw(Spree.t(:payment_success_image)), class: 'font-weight-bold' %>
163
- <div class="mb-2 position-relative">
164
- <img id="preview_preferred_payment_success_image"
165
- src="<%= (f.object.preferred_payment_success_image.present? ? asset_path(f.object.preferred_payment_success_image) : asset_path('cm-hangmeas-success.svg')) %>"
166
- alt="Icon Preview"
167
- class="img-thumbnail bg-light border payment-icon-preview"
168
- data-toggle="tooltip" title="Click to select icon"
169
- onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_success_image'); setCurrentSelectedIcon(document.getElementById('preferred_payment_success_image').value);">
170
- <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_success_image').value=''; document.getElementById('preview_preferred_payment_success_image').src='<%= asset_path('cm-hangmeas-success.svg') %>'; document.getElementById('preview_preferred_payment_success_image').style.display='inline'; return false;">
171
- <i class="fa fa-times"></i>
172
- </button>
173
- </div>
174
- <div class="input-group">
175
- <%= f.text_field :preferred_payment_success_image, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_success_image', 'aria-label': 'Payment Success Image' %>
176
- <div class="input-group-append">
177
- <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_success_image" data-vector-icon="<%= f.object.preferred_payment_success_image %>" title="Select icon">
178
- <i class="fa fa-image"></i>
179
- </button>
180
- </div>
181
- </div>
182
- <%= f.error_message_on :preferred_payment_success_image %>
183
- <% end %>
184
- </div>
185
- </div>
186
- </div>
187
-
188
- <div class="col-3">
189
- <div class="card mb-3">
190
- <div class="card-body text-center">
191
- <%= f.field_container :preferred_payment_loader do %>
192
- <%= f.label :payment_loader, raw(Spree.t(:payment_loader)), class: 'font-weight-bold' %>
193
- <div class="mb-2 position-relative">
194
- <img id="preview_preferred_payment_loader"
195
- src="<%= (f.object.preferred_payment_loader.present? ? asset_path(f.object.preferred_payment_loader) : asset_path('cm-hangmeas-loader.svg')) %>"
196
- alt="Icon Preview"
197
- class="img-thumbnail bg-light border payment-icon-preview"
198
- data-toggle="tooltip" title="Click to select icon"
199
- onclick="$('#vector-icons-modal').modal('show'); setOptionValueId('preferred_payment_loader'); setCurrentSelectedIcon(document.getElementById('preferred_payment_loader').value);">
200
- <button type="button" class="btn btn-sm btn-outline-danger position-absolute" style="top:5px; right:5px;" title="Remove icon" onclick="document.getElementById('preferred_payment_loader').value=''; document.getElementById('preview_preferred_payment_loader').src='<%= asset_path('cm-hangmeas-loader.svg') %>'; document.getElementById('preview_preferred_payment_loader').style.display='inline'; return false;">
201
- <i class="fa fa-times"></i>
202
- </button>
203
- </div>
204
- <div class="input-group">
205
- <%= f.text_field :preferred_payment_loader, class: 'form-control', placeholder: 'eg. https://example.com/icon.png', id: 'preferred_payment_loader', 'aria-label': 'Payment Loader Image' %>
206
- <div class="input-group-append">
207
- <button type="button" class="btn btn-outline-secondary option-value-toggler" data-toggle="modal" data-target="#vector-icons-modal" data-id="preferred_payment_loader" data-vector-icon="<%= f.object.preferred_payment_loader %>" title="Select icon">
208
- <i class="fa fa-image"></i>
209
- </button>
210
- </div>
211
- </div>
212
- <%= f.error_message_on :preferred_payment_loader %>
213
- <% end %>
214
- </div>
215
- </div>
216
- </div>
217
-
218
- </div>
219
-
220
-
221
- <!-- Vector Icon Selector Modal -->
222
- <div class="modal fade" id="vector-icons-modal" tabindex="-1" role="dialog" aria-hidden="true">
223
- <div class="modal-dialog modal-dialog-centered" role="document">
224
- <div class="modal-content">
225
- <div class="modal-header">
226
- <h5 class="modal-title">Icons</h5>
227
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
228
- <span aria-hidden="true">&times;</span>
229
- </button>
230
- </div>
231
- <div class="modal-body" data-hook="admin_product_form_vector_icons">
232
- <div class="form-group">
233
- <label for="vector_icon_select">Select Icon</label>
234
- <select id="vector_icon_select" class="form-control select2">
235
- <option value="">None</option>
236
- <% @vector_icons&.each do |icon| %>
237
- <option value="<%= icon.path %>"><%= icon.path %></option>
238
- <% end %>
239
- </select>
240
- </div>
241
- </div>
242
- <div class="modal-footer">
243
- <input type="hidden" id="modal-option-value-id" value="" />
244
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
245
- <button type="button" class="btn btn-primary" id="select-vector-icon-btn">Select</button>
246
- </div>
247
- </div>
248
- </div>
249
- </div>
250
-
251
- <script>
252
- function setCurrentSelectedIcon(selectVectorIcon) {
253
- var optionsContainer = document.getElementById("vector_icon_select");
254
- if (!optionsContainer) return;
255
- var options = Array.from(optionsContainer.options).map((e) => e.value || e.innerHTML);
256
- var index = Math.max(options.indexOf(selectVectorIcon), 0);
257
- optionsContainer.selectedIndex = index;
258
- }
259
-
260
- function setOptionValueId(id) {
261
- document.getElementById("modal-option-value-id").value = id;
262
- }
263
-
264
- document.body.addEventListener('click', function(e){
265
- var target = e.target;
266
- if (target.classList.contains('option-value-toggler')) {
267
- setOptionValueId(target.dataset.id);
268
- setCurrentSelectedIcon(target.dataset.vectorIcon);
269
- }
270
- });
271
-
272
- function getAssetUrl(path) {
273
- if (!path) return '';
274
- if (path.startsWith('http://') || path.startsWith('https://') || path.startsWith('/assets/')) return path;
275
- return '/assets/' + path;
276
- }
277
-
278
- document.getElementById('select-vector-icon-btn').addEventListener('click', function() {
279
- var fieldId = document.getElementById("modal-option-value-id").value;
280
- var selectedIcon = document.getElementById("vector_icon_select").value;
281
-
282
- if (fieldId) {
283
- document.getElementById(fieldId).value = selectedIcon;
284
-
285
- var previewImg = document.getElementById('preview_' + fieldId);
286
- if (previewImg) {
287
- if (selectedIcon) {
288
- previewImg.src = getAssetUrl(selectedIcon);
289
- previewImg.style.display = 'inline';
290
- } else {
291
- previewImg.src = '';
292
- previewImg.style.display = 'none';
293
- }
294
- }
295
- }
296
-
297
- // close select2 if open
298
- $('#vector_icon_select').select2('close');
299
-
300
- // hide modal
301
- $('#vector-icons-modal').modal('hide');
302
- });
303
-
304
- $(document).ready(function() {
305
- $('#vector_icon_select').select2({
306
- dropdownParent: $('#vector-icons-modal')
307
- });
308
-
309
- // Auto-close modal & save immediately when selecting an option
310
- $('#vector_icon_select').on('select2:select', function (e) {
311
- $('#select-vector-icon-btn').trigger('click');
312
- });
313
- });
314
-
315
- // Live preview when typing URLs manually
316
- [
317
- 'preferred_payment_checkout_image',
318
- 'preferred_payment_failed_image',
319
- 'preferred_payment_success_image',
320
- 'preferred_payment_loader'
321
- ].forEach(function(fieldId) {
322
- var input = document.getElementById(fieldId);
323
- if (input) {
324
- input.addEventListener('input', function() {
325
- var previewImg = document.getElementById('preview_' + fieldId);
326
- if (previewImg) {
327
- if (input.value) {
328
- previewImg.src = getAssetUrl(input.value);
329
- previewImg.style.display = 'inline';
330
- } else {
331
- previewImg.src = '';
332
- previewImg.style.display = 'none';
333
- }
334
- }
335
- });
336
- }
337
- });
338
- </script>
339
-
340
- <style>
341
- .payment-icon-preview {
342
- max-height: 60px;
343
- max-width: 120px;
344
- cursor: pointer;
345
- }
346
- </style>
347
-
@@ -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
@@ -1,5 +1,5 @@
1
1
  module SpreeCmCommissioner
2
- VERSION = '1.17.0-pre1'.freeze
2
+ VERSION = '1.17.0-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: 1.17.0.pre.pre1
4
+ version: 1.17.0.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: 2025-06-30 00:00:00.000000000 Z
11
+ date: 2025-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: spree
@@ -600,10 +600,6 @@ files:
600
600
  - app/assets/images/cm-fitness-room-icon.svg
601
601
  - app/assets/images/cm-front-desk-icon.svg
602
602
  - app/assets/images/cm-hair-dryer-icon.svg
603
- - app/assets/images/cm-hangmeas-checkout_image.svg
604
- - app/assets/images/cm-hangmeas-failed.svg
605
- - app/assets/images/cm-hangmeas-loader.svg
606
- - app/assets/images/cm-hangmeas-success.svg
607
603
  - app/assets/images/cm-hiking-icon.svg
608
604
  - app/assets/images/cm-iron-icon.svg
609
605
  - app/assets/images/cm-lcd-tv-icon.svg
@@ -1183,6 +1179,7 @@ files:
1183
1179
  - app/mailers/spree_cm_commissioner/pin_code_mailer.rb
1184
1180
  - app/mailers/spree_cm_commissioner/team_invite_mailer.rb
1185
1181
  - app/models/.gitkeep
1182
+ - app/models/concerns/spree_cm_commissioner/event_check_in_flowable.rb
1186
1183
  - app/models/concerns/spree_cm_commissioner/homepage_section_bitwise.rb
1187
1184
  - app/models/concerns/spree_cm_commissioner/json_preference_validator.rb
1188
1185
  - app/models/concerns/spree_cm_commissioner/kyc_bitwise.rb
@@ -1488,6 +1485,7 @@ files:
1488
1485
  - app/overrides/spree/admin/taxons/_form/assets_form.html.erb.deface
1489
1486
  - app/overrides/spree/admin/taxons/_form/available_on.html.erb.deface
1490
1487
  - app/overrides/spree/admin/taxons/_form/background_color_and_foreground_color.html.erb.deface
1488
+ - app/overrides/spree/admin/taxons/_form/check_in_flows.html.erb.deface
1491
1489
  - app/overrides/spree/admin/taxons/_form/custom_redirect_url.html.erb.deface
1492
1490
  - app/overrides/spree/admin/taxons/_form/hide_video_banner.html.erb.deface
1493
1491
  - app/overrides/spree/admin/taxons/_form/kind_html.erb.deface
@@ -1,63 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg id="payment_proccessing" data-name="payment proccessing" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" viewBox="0 0 334 200">
3
- <defs>
4
- <clipPath id="clippath">
5
- <path d="m332.72,16.62v166.75c0,8.27-6.28,15.08-14.33,15.92-.55.05-1.11.08-1.67.08H16c-.48,0-.96-.02-1.43-.06-8.17-.73-14.57-7.59-14.57-15.94V16.62C0,7.78,7.16.62,16,.62h300.72c8.84,0,16,7.16,16,16Z" style="fill: none;"/>
6
- </clipPath>
7
- </defs>
8
- <g style="clip-path: url(#clippath);">
9
- <path d="m332.72,16.62v166.75c0,8.27-6.28,15.08-14.33,15.92-.55.05-1.11.08-1.67.08H16c-.48,0-.96-.02-1.43-.06-8.17-.73-14.57-7.59-14.57-15.94V16.62C0,7.78,7.16.62,16,.62h300.72c8.84,0,16,7.16,16,16Z" style="fill: #130d07;"/>
10
- <path d="m160.11,89.69c1.41-5.81-3.61-9.74-10.21-9.27-6.6.47-26.31,10.68-28.51,12.26-2.2,1.57-29.54,6.6-34.25,3.77-4.71-2.83-12.46-7.49-12.46-7.49,0,0-23.81-23.81-40.47,2.86-16.67,26.66-13.99,61.42-13.99,61.42l-24.1,29.05s-10.95,10,3.81,19.05,22.11,18.14,31.15,21.3c9.04,3.16,14.46-7,14.46-7.68,0-.68,19.43-30.27,19.43-30.27,10.27-.69,20.53-1.41,30.79-2.17,10.81-.8,24.65.44,31.99-9.08,3.2-4.15,1.59-8.37-.02-12.85.06.18,3.68-1,4-1.13,1.81-.72,3.12-1.91,3.94-3.7,1.55-3.36,2.03-8.12.07-11.41-2.91-4.88-3.85-5.31-3.85-5.31.93.42,4.7-2.76,5.32-3.27,2.69-2.21,4.81-5.03,5.27-8.57,1.31-10.16-10.01-17.26-18.56-19.27,5.59,1.31,10.8,2.15,16.21-.39,3.01-1.41,5.69-3.43,8.35-5.44,4.02-3.03,10.38-7.18,11.65-12.41" style="fill: #e89875;"/>
11
- <path d="m138.73,45.68c-1.83-.91-5.84-1.99-7.86-2.27-3.17-.44-12.78-.68-12.78-.68l-1.24,3.76-31.45-1.3c-4.73-.2-8.98,2.88-10.27,7.44l-27.87,101.59c-1.74,6.14,2.5,12.35,8.85,12.97l49.44,1.78c4.98.49,9.59-2.69,10.89-7.53l27.25-101.35c.17-.64.26-1.28.31-1.92,0-.02.01-.05.02-.07,1.59-7.52-1.35-10.47-5.29-12.43Z" style="fill: #302b31;"/>
12
- <path d="m51.51,163.26l49.44,1.78c4.98.49,9.59-2.69,10.89-7.53l27.25-101.35c1.7-6.33-2.91-12.61-9.46-12.88l-48.82-2.02c-4.73-.2-8.98,2.88-10.27,7.44l-27.87,101.59c-1.74,6.14,2.5,12.35,8.85,12.97Z" style="fill: #212028;"/>
13
- <path d="m108.45,126.85c-1.64.07-3.43-.23-5.08-.3-4.13-.18-8.26-.36-12.39-.54l-22.43-.98-.81-.04c-2.87-.41-4.61-1.99-3.7-4.96l.84-3.54c.55-2.49,2.89-4.15,5.42-3.86,13.54.41,27.15.41,40.66,1.23,2,.12,4.17.45,4.34,2.96.15,2.13-1.09,4.94-1.91,6.87-1.02,2.41-2.87,3.07-4.95,3.16Z" style="fill: #f59b1d;"/>
14
- <path d="m117.78,96.1l-48.7-1.94c-2.03-.08-3.25-1.77-2.74-3.76l8.36-32.34c.52-2,2.58-3.55,4.61-3.47l48.7,1.94c2.03.08,3.25,1.77,2.74,3.76l-8.36,32.34c-.52,2-2.58,3.55-4.61,3.47Z" style="fill: #fffaf8;"/>
15
- <path d="m85.83,77.72l-8.87-.35c-.88-.04-1.41-.77-1.19-1.63l1.23-4.78c.22-.87,1.12-1.54,2-1.51l8.87.35c.88.04,1.41.77,1.19,1.63l-1.23,4.78c-.22.87-1.12,1.54-2,1.51Z" style="fill: #d6d6d6;"/>
16
- <path d="m124.55,64.16l-9.8-.39c-.62-.02-1-.54-.84-1.15l.45-1.74c.16-.61.79-1.09,1.41-1.06l9.8.39c.62.02,1,.54.84,1.15l-.45,1.74c-.16.61-.79,1.09-1.41,1.06Z" style="fill: #d6d6d6;"/>
17
- <path d="m84.05,81.98l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
18
- <path d="m99.83,91.71l-27.44-1.09c-.25-.01-.41-.22-.34-.47l.42-1.62c.06-.25.32-.44.57-.43l27.44,1.09c.25.01.41.22.34.47l-.42,1.62c-.06.25-.32.44-.57.43Z" style="fill: #d6d6d6;"/>
19
- <path d="m95.54,82.43l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
20
- <path d="m107.03,82.89l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
21
- <path d="m118.52,83.35l-8.95-.36c-.47-.02-.75-.41-.63-.87l.22-.86c.12-.46.59-.82,1.06-.8l8.95.36c.47.02.75.41.63.87l-.22.86c-.12.46-.59.82-1.06.8Z" style="fill: #d6d6d6;"/>
22
- <path d="m111.65,93.7c-.49.15-.94.45-1.44.61-2.03.64-4.12-.62-4.15-2.53-.02-1.28.45-2.44,1.6-3.42.84-.72,1.78-1.08,2.78-1.14.88-.05,1.65.12,2.24.65.12.11.29.16.44.24-.17.19.02.23.08.32.37.57.57,1.21.45,1.96-.2,1.22-.73,2.32-1.89,3.17-.05.03-.08.09-.11.14Z" style="fill: #d6d6d6;"/>
23
- <path d="m111.65,93.7s.07-.11.11-.14c1.16-.85,1.69-1.95,1.89-3.17.12-.75-.08-1.39-.45-1.96-.06-.09-.25-.14-.08-.32.59-.27,1.16-.59,1.79-.67,2.25-.26,3.6.86,3.66,2.68.06,1.96-1.32,3.73-3.42,4.37-1.29.39-2.36.14-3.23-.58-.09-.07-.18-.15-.26-.22Z" style="fill: #5e5e5e;"/>
24
- <path d="m53.69,110.12s1.51-5.75,5.56,2.51c4.05,8.27,15.38,11.23,20.41,6.86s-.79-23.41-15.54-36.21c-14.75-12.8-30.48,5.41-37.12,19.9-6.65,14.49-6.78,50.07-6.78,50.07l48.9,21.12s8.3-15.25.02-34.98c-4.68-11.15-9.08-16.86-12.8-21.88-3.73-5.02-2.64-7.37-2.64-7.37Z" style="fill: #e89875;"/>
25
- <g>
26
- <rect x="222.73" y="98.72" width="8.27" height="27.35" style="fill: #fbc01a;"/>
27
- <polygon points="231 100.13 222.73 100.13 221.53 95.4 232.39 95.4 231 100.13" style="fill: #fbc01a;"/>
28
- <line x1="223.67" y1="100.13" x2="231" y2="100.13" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
29
- <polygon points="222.73 126.08 231 126.08 232.2 130.8 221.33 130.8 222.73 126.08" style="fill: #fbc01a;"/>
30
- <line x1="231" y1="126.08" x2="222.73" y2="126.08" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
31
- </g>
32
- <g>
33
- <rect x="240.34" y="98.72" width="8.27" height="27.35" style="fill: #f4b200;"/>
34
- <polygon points="248.61 100.13 240.34 100.13 239.15 95.4 250.01 95.4 248.61 100.13" style="fill: #f4b200;"/>
35
- <polygon points="240.35 126.08 248.62 126.08 249.81 130.8 238.95 130.8 240.35 126.08" style="fill: #f4b200;"/>
36
- </g>
37
- <g>
38
- <rect x="257.95" y="98.72" width="8.27" height="27.35" style="fill: #fbc01a;"/>
39
- <polygon points="266.22 100.13 257.95 100.13 256.76 95.4 267.62 95.4 266.22 100.13" style="fill: #fbc01a;"/>
40
- <line x1="258.9" y1="100.13" x2="266.22" y2="100.13" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
41
- <polygon points="257.96 126.08 266.23 126.08 267.42 130.8 256.56 130.8 257.96 126.08" style="fill: #fbc01a;"/>
42
- <line x1="266.22" y1="126.08" x2="257.96" y2="126.08" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
43
- </g>
44
- <g>
45
- <rect x="275.56" y="98.72" width="8.27" height="27.35" style="fill: #fbc01a;"/>
46
- <polygon points="283.84 100.13 275.56 100.13 274.37 95.4 285.23 95.4 283.84 100.13" style="fill: #fbc01a;"/>
47
- <line x1="276.51" y1="100.13" x2="283.84" y2="100.13" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
48
- <polygon points="275.57 126.08 283.84 126.08 285.04 130.8 274.17 130.8 275.57 126.08" style="fill: #fbc01a;"/>
49
- <line x1="283.84" y1="126.08" x2="275.57" y2="126.08" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
50
- </g>
51
- <rect x="218.79" y="91.42" width="69.46" height="3.98" style="fill: #f9b500;"/>
52
- <rect x="218.79" y="130.8" width="69.46" height="3.98" style="fill: #fbc01a;"/>
53
- <rect x="209.25" y="134.79" width="88.53" height="4.09" style="fill: #f4b200;"/>
54
- <path d="m216.67,88.29l34.23-15.08c2.1-.93,4.5-.93,6.6,0l34.23,15.08c1.62.71,1.11,3.13-.66,3.13h-73.75c-1.77,0-2.28-2.42-.66-3.13Z" style="fill: #fbc01a;"/>
55
- <path d="m230.81,86.16l21.33-9.4c1.31-.58,2.8-.58,4.11,0l21.33,9.4c1.01.44.69,1.95-.41,1.95h-45.96c-1.1,0-1.42-1.51-.41-1.95Z" style="fill: #f4b200;"/>
56
- <path d="m256.72,83.21c0-1.39-1.13-2.51-2.51-2.51s-2.51,1.13-2.51,2.51,1.13,2.51,2.51,2.51,2.51-1.13,2.51-2.51Z" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
57
- <line x1="218.8" y1="131.54" x2="288.24" y2="131.54" style="fill: none; stroke: #f9b500; stroke-miterlimit: 10; stroke-width: .5px;"/>
58
- <path d="m143.42,43.43l2.99-1.92c34.81-22.3,81.11-12.16,103.41,22.65h0" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 4px;"/>
59
- <polyline points="242.93 64.16 250.34 64.16 250.34 56.12" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 3px;"/>
60
- <path d="m253.66,141.68l-3.52,4.34c-28.53,29.92-75.91,31.04-105.83,2.5h0" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 4px;"/>
61
- <polyline points="151 146.9 143.8 148.65 145.77 156.76" style="fill: none; stroke: #fff; stroke-miterlimit: 10; stroke-width: 3px;"/>
62
- </g>
63
- </svg>
@@ -1,56 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg
3
- xmlns="http://www.w3.org/2000/svg"
4
- viewBox="0 0 52 52"
5
- width="100"
6
- height="100"
7
- >
8
- <style>
9
- .svg-failed {
10
- stroke: white;
11
- stroke-width: 5;
12
- stroke-miterlimit: 10;
13
- stroke-linecap: round;
14
- stroke-linejoin: round;
15
- fill: none;
16
- animation: svg-failed-scale 0.3s ease-in-out 0.9s both;
17
- }
18
-
19
- .svg-failed-circle {
20
- stroke: none;
21
- fill: #FF5A5F;
22
- }
23
-
24
- .svg-failed-x {
25
- stroke-dasharray: 48;
26
- stroke-dashoffset: 48;
27
- animation: svg-failed-draw 0.5s ease forwards 0.6s;
28
- }
29
-
30
- @keyframes svg-failed-draw {
31
- to {
32
- stroke-dashoffset: 0;
33
- }
34
- }
35
-
36
- @keyframes svg-failed-scale {
37
- 0%, 100% {
38
- transform: scale(1);
39
- }
40
- 50% {
41
- transform: scale(1.1);
42
- }
43
- }
44
- </style>
45
-
46
- <circle class="svg-failed-circle" cx="26" cy="26" r="25" />
47
- <!-- X mark: two lines crossing -->
48
- <path
49
- class="svg-failed svg-failed-x"
50
- d="M16 16 L36 36"
51
- />
52
- <path
53
- class="svg-failed svg-failed-x"
54
- d="M36 16 L16 36"
55
- />
56
- </svg>
@@ -1,50 +0,0 @@
1
- <svg class="pl" width="300" height="300" viewBox="0 0 300 300" fill="none" xmlns="http://www.w3.org/2000/svg">
2
- <style>
3
- .pl__ring { animation: ringA 2s linear infinite; }
4
- .pl__ring--a { stroke: #F79E1B; }
5
- .pl__ring--b { animation-name: ringB; stroke: #F79E1B; }
6
- .pl__ring--c { animation-name: ringC; stroke: #F79E1B; }
7
- .pl__ring--d { animation-name: ringD; stroke: #F79E1B; }
8
-
9
- @keyframes ringA {
10
- from, 4% { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -330; }
11
- 12% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -335; }
12
- 32% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -595; }
13
- 40%, 54% { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -660; }
14
- 62% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -665; }
15
- 82% { stroke-dasharray: 60 600; stroke-width: 30; stroke-dashoffset: -925; }
16
- 90%, to { stroke-dasharray: 0 660; stroke-width: 20; stroke-dashoffset: -990; }
17
- }
18
- @keyframes ringB {
19
- from, 12% { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -110; }
20
- 20% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -115; }
21
- 40% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -195; }
22
- 48%, 62% { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -220; }
23
- 70% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -225; }
24
- 90% { stroke-dasharray: 20 200; stroke-width: 30; stroke-dashoffset: -305; }
25
- 98%, to { stroke-dasharray: 0 220; stroke-width: 20; stroke-dashoffset: -330; }
26
- }
27
- @keyframes ringC {
28
- from { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: 0; }
29
- 8% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -5; }
30
- 28% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -175; }
31
- 36%, 58% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -220; }
32
- 66% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -225; }
33
- 86% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -395; }
34
- 94%, to { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -440; }
35
- }
36
- @keyframes ringD {
37
- from, 8% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: 0; }
38
- 16% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -5; }
39
- 36% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -175; }
40
- 44%, 50% { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -220; }
41
- 58% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -225; }
42
- 78% { stroke-dasharray: 40 400; stroke-width: 30; stroke-dashoffset: -395; }
43
- 86%, to { stroke-dasharray: 0 440; stroke-width: 20; stroke-dashoffset: -440; }
44
- }
45
- </style>
46
- <circle class="pl__ring pl__ring--a" cx="120" cy="120" r="105" fill="none" stroke-width="20" stroke-dasharray="0 660" stroke-dashoffset="-330" stroke-linecap="round"/>
47
- <circle class="pl__ring pl__ring--b" cx="120" cy="120" r="35" fill="none" stroke-width="20" stroke-dasharray="0 220" stroke-dashoffset="-110" stroke-linecap="round"/>
48
- <circle class="pl__ring pl__ring--c" cx="85" cy="120" r="70" fill="none" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/>
49
- <circle class="pl__ring pl__ring--d" cx="155" cy="120" r="70" fill="none" stroke-width="20" stroke-dasharray="0 440" stroke-linecap="round"/>
50
- </svg>
@@ -1,51 +0,0 @@
1
- <?xml version="1.0" encoding="UTF-8"?>
2
- <svg
3
- xmlns="http://www.w3.org/2000/svg"
4
- viewBox="0 0 52 52"
5
- width="100"
6
- height="100"
7
- >
8
- <style>
9
- .svg-checkmark {
10
- stroke: white;
11
- stroke-width: 5;
12
- stroke-miterlimit: 10;
13
- stroke-linecap: round;
14
- stroke-linejoin: round;
15
- fill: none;
16
- animation: svg-success-scale 0.3s ease-in-out 0.9s both;
17
- }
18
-
19
- .svg-checkmark-circle {
20
- stroke: none;
21
- fill: #00D290;
22
- }
23
-
24
- .svg-checkmark-check {
25
- stroke-dasharray: 48;
26
- stroke-dashoffset: 48;
27
- animation: svg-success-draw 0.5s ease forwards 0.6s;
28
- }
29
-
30
- @keyframes svg-success-draw {
31
- to {
32
- stroke-dashoffset: 0;
33
- }
34
- }
35
-
36
- @keyframes svg-success-scale {
37
- 0%, 100% {
38
- transform: scale(1);
39
- }
40
- 50% {
41
- transform: scale(1.1);
42
- }
43
- }
44
- </style>
45
-
46
- <circle class="svg-checkmark-circle" cx="26" cy="26" r="25" />
47
- <path
48
- class="svg-checkmark svg-checkmark-check"
49
- d="M14.1 27.2l7.1 7.2 16.7-16.8"
50
- />
51
- </svg>