spree_cm_commissioner 1.17.0.pre.pre6 → 1.17.0
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/.env.example +3 -0
- data/Gemfile.lock +1 -1
- data/app/interactors/spree_cm_commissioner/vattanac_bank_initiator.rb +5 -1
- data/app/models/concerns/spree_cm_commissioner/event_check_in_flowable.rb +30 -0
- data/app/models/spree_cm_commissioner/invite_team.rb +1 -1
- data/app/models/spree_cm_commissioner/taxon_decorator.rb +1 -0
- data/app/models/spree_cm_commissioner/vendor_place.rb +1 -1
- data/app/overrides/spree/admin/taxons/_form/check_in_flows.html.erb.deface +18 -0
- data/app/queries/spree_cm_commissioner/guest_searcher_query.rb +45 -3
- data/app/serializers/spree_cm_commissioner/v2/operator/dashboard_crew_event_serializer.rb +4 -1
- data/config/initializers/spree_permitted_attributes.rb +2 -0
- data/config/locales/en.yml +4 -0
- data/db/migrate/20250616084219_add_description_to_cm_vendor_place.rb +5 -0
- data/lib/spree_cm_commissioner/version.rb +1 -1
- metadata +6 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 9270cf6464159655e0c794de5c2cfd928bb6a696707676f4166a5062d80810d1
|
4
|
+
data.tar.gz: e5039d47fd725c87a214187184f9610fd7be488b1d0e5b75925ec382088d0fc0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 22b9ab443f30d5214daa18cb51b487c7bbce4764af5a4c27afe3d65b20102c11536a75122167b58bd9b12030b0e9cd737e89f6b3424a2894a746d07917baa154
|
7
|
+
data.tar.gz: 4bc00907e7fe3afe5d7266fcb0b40cde518d3b9c9f9bd343ef7b0e80caaa958e76f127028d87292a53e7204fc50b7d4e9e56e48a1c81d7500bcd53bc4275e9ab
|
data/.env.example
CHANGED
data/Gemfile.lock
CHANGED
@@ -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
|
@@ -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 :
|
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.
|
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,
|
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
|
data/config/locales/en.yml
CHANGED
@@ -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:
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spree_cm_commissioner
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.17.0
|
4
|
+
version: 1.17.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- You
|
@@ -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,7 @@ 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
|
2517
2520
|
- docker-compose.yml
|
2518
2521
|
- docs/option_types/attr_types.md
|
2519
2522
|
- docs/private_key.pem
|
@@ -2666,9 +2669,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
2666
2669
|
version: '2.7'
|
2667
2670
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
2668
2671
|
requirements:
|
2669
|
-
- - "
|
2672
|
+
- - ">="
|
2670
2673
|
- !ruby/object:Gem::Version
|
2671
|
-
version:
|
2674
|
+
version: '0'
|
2672
2675
|
requirements:
|
2673
2676
|
- none
|
2674
2677
|
rubygems_version: 3.4.1
|