effective_events 3.0.8 → 3.1.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 11d4268ae530144b096986609342443d7380e789be6e5078dcdc8fa5f27373a5
4
- data.tar.gz: bcfc0c7f2480a3a8f5522dddacb6ea42ff3992db5195fcc6aeafa0c0a3138fd6
3
+ metadata.gz: 4e37bb52cbe39fa76dbb40c45b4364abbab706a4a872125e11de75a1432c7b62
4
+ data.tar.gz: 484e50eafc049ea811ba446638a600ca8d49e17004da1e7a88d4635afe73f30e
5
5
  SHA512:
6
- metadata.gz: b15cca4bc102f1d5af216333e9a3186068817db7088f97eb51ad5acbcef90a5d82f2b05e998cbe2b58b9fe8734f444a6b2d1327f4965a1170d884691eba7066d
7
- data.tar.gz: 71b409cdc710bbaabd2bcb6b3ced3e3b8faa054cd335024a25e8a8ce1a91b8a0492d42a0fcc0d93db5ff653b984f8c96b0088dd3c6934c973230b1c112eba3fc
6
+ metadata.gz: 84b97ecbbad1998e51a2ccbe93a2d5bd015e9a6dfa9f5e267db7a9f2aaf8a1668aaa1822c4ba6482f8cc539ae76846a4b2a0128e7654d0923040b662bc1590a6
7
+ data.tar.gz: f8ca6e7b250819032b81a8b8459cf7179e9ff0b8ba782902755fae7d3f1c1a9c247edb0bc12b4ea0f45d883828b8b82bc05cc4fb0160a27271966f1fe179480d
@@ -80,6 +80,10 @@ module Admin
80
80
  col :question2, visible: false
81
81
  col :question3, visible: false
82
82
 
83
+ col :question1_required, visible: false
84
+ col :question2_required, visible: false
85
+ col :question3_required, visible: false
86
+
83
87
  actions_col
84
88
  end
85
89
 
@@ -146,7 +146,7 @@ module EffectiveEventsEventRegistration
146
146
  end
147
147
  end
148
148
 
149
- # Validate the same registrant user isn't registered on another registration
149
+ # Validate the same registrant user isn't registered for this ticket on another registration
150
150
  validate(if: -> { current_step == :details }) do
151
151
  present_event_registrants.select { |er| er.user.present? }.each do |er|
152
152
  existing = Effective::EventRegistrant.unarchived.registered.where(event_ticket: er.event_ticket, user: er.user).where.not(id: er)
@@ -158,6 +158,18 @@ module EffectiveEventsEventRegistration
158
158
  end
159
159
  end
160
160
 
161
+ # Validate the same registrant user isn't registered for this event (any ticket) on another registration
162
+ validate(if: -> { current_step == :details && validate_one_ticket_per_event? }) do
163
+ present_event_registrants.select { |er| er.user.present? }.each do |er|
164
+ existing = Effective::EventRegistrant.unarchived.registered.where(event: er.event, user: er.user).where.not(id: er)
165
+
166
+ if existing.present?
167
+ errors.add(:base, "Unable to register #{er.user} for #{er.event}. They've already been registered")
168
+ er.errors.add(:user_id, "Unable to register #{er.user} for #{er.event}. They've already been registered")
169
+ end
170
+ end
171
+ end
172
+
161
173
  # Validate all products are available for registration
162
174
  validate(if: -> { current_step == :addons }) do
163
175
  unavailable_event_products.each do |event_product|
@@ -525,6 +537,13 @@ module EffectiveEventsEventRegistration
525
537
  false
526
538
  end
527
539
 
540
+ # We always validate that the user cannot register for the same event ticket more than once
541
+ # This is an additional validation where they cannot register for the same event more than once
542
+ # Can be overridden in the model if you need event specific validation.
543
+ def validate_one_ticket_per_event?
544
+ EffectiveEvents.validate_one_ticket_per_event?
545
+ end
546
+
528
547
  def wizard_step_title(step)
529
548
  return EffectiveEvents.code_of_conduct_page_title if step == :code_of_conduct
530
549
  default_wizard_step_title(step)
@@ -135,11 +135,16 @@ module Effective
135
135
  validates :last_name, presence: true, if: -> { registrant_validations_enabled? }
136
136
  validates :email, presence: true, if: -> { registrant_validations_enabled? }
137
137
 
138
- # User, company and organization conditionall required
138
+ # User, company and organization conditionally required
139
139
  validates :user, presence: true, if: -> { registrant_validations_enabled? && EffectiveEvents.create_users }
140
140
  validates :company, presence: true, if: -> { registrant_validations_enabled? && EffectiveEvents.company_or_organization_required }
141
141
  validates :organization, presence: true, if: -> { registrant_validations_enabled? && EffectiveEvents.company_or_organization_required && EffectiveEvents.organization_enabled? }
142
142
 
143
+ # Responses may or may not be required depending on the event ticket
144
+ validates :response1, presence: true, if: -> { registrant_validations_enabled? && event_ticket&.question1_required? }
145
+ validates :response2, presence: true, if: -> { registrant_validations_enabled? && event_ticket&.question2_required? }
146
+ validates :response3, presence: true, if: -> { registrant_validations_enabled? && event_ticket&.question3_required? }
147
+
143
148
  # Copy any user errors from build_user_and_organization() into the registrant
144
149
  after_validation(if: -> { user && user.new_record? && user.errors.present? }) do
145
150
  errors.add(:first_name, user.errors[:first_name].join(', ')) if user.errors[:first_name].present?
@@ -35,6 +35,10 @@ module Effective
35
35
  question2 :text
36
36
  question3 :text
37
37
 
38
+ question1_required :boolean
39
+ question2_required :boolean
40
+ question3_required :boolean
41
+
38
42
  # Pricing
39
43
  early_bird_price :integer
40
44
 
@@ -164,5 +168,17 @@ module Effective
164
168
  category == 'Members'
165
169
  end
166
170
 
171
+ def question1_required?
172
+ question1.present? && question1_required
173
+ end
174
+
175
+ def question2_required?
176
+ question2.present? && question2_required
177
+ end
178
+
179
+ def question3_required?
180
+ question3.present? && question3_required
181
+ end
182
+
167
183
  end
168
184
  end
@@ -49,7 +49,12 @@
49
49
  %small.text-muted Please add up to 3 questions to ask during registration. Each ticket will have their own unique answers. Leave a question blank to skip.
50
50
 
51
51
  = f.text_field :question1, label: 'Question 1'
52
+ = f.check_box :question1_required, label: 'Question 1 Required'
53
+
52
54
  = f.text_field :question2, label: 'Question 2'
55
+ = f.check_box :question2_required, label: 'Question 2 Required'
56
+
53
57
  = f.text_field :question3, label: 'Question 3'
58
+ = f.check_box :question3_required, label: 'Question 3 Required'
54
59
 
55
60
  = effective_submit(f)
@@ -41,11 +41,11 @@
41
41
 
42
42
  - if event_ticket.present?
43
43
  - if event_ticket.question1.present?
44
- = f.text_field :response1, label: event_ticket.question1
44
+ = f.text_field :response1, label: event_ticket.question1, required: event_ticket.question1_required?
45
45
 
46
46
  - if event_ticket.question2.present?
47
- = f.text_field :response2, label: event_ticket.question2
47
+ = f.text_field :response2, label: event_ticket.question2, required: event_ticket.question2_required?
48
48
 
49
49
  - if event_ticket.question3.present?
50
- = f.text_field :response3, label: event_ticket.question3
50
+ = f.text_field :response3, label: event_ticket.question3, required: event_ticket.question3_required?
51
51
 
@@ -23,6 +23,9 @@ EffectiveEvents.setup do |config|
23
23
  # Turn on the validation. You must have a company or organization when filling out Ticket Details screen.
24
24
  config.company_or_organization_required = false
25
25
 
26
+ # Prevent users from purchasing more than one ticket for themselves to an event
27
+ config.validate_one_ticket_per_event = false
28
+
26
29
  # Categories
27
30
  config.categories = ['Events']
28
31
 
@@ -58,6 +58,10 @@ class CreateEffectiveEvents < ActiveRecord::Migration[6.0]
58
58
  t.text :question2
59
59
  t.text :question3
60
60
 
61
+ t.boolean :question1_required, default: false
62
+ t.boolean :question2_required, default: false
63
+ t.boolean :question3_required, default: false
64
+
61
65
  t.string :qb_item_name
62
66
  t.boolean :tax_exempt, default: false
63
67
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveEvents
2
- VERSION = '3.0.8'.freeze
2
+ VERSION = '3.1.0'.freeze
3
3
  end
@@ -10,7 +10,7 @@ module EffectiveEvents
10
10
  :event_registrations_table_name, :event_products_table_name, :event_addons_table_name, :event_notifications_table_name,
11
11
  :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject,
12
12
  :layout, :per_page, :use_effective_roles, :categories, :events_hint_text,
13
- :organization_enabled, :create_users, :company_or_organization_required,
13
+ :organization_enabled, :create_users, :company_or_organization_required, :validate_one_ticket_per_event,
14
14
  :code_of_conduct_enabled, :code_of_conduct_slug,
15
15
  :event_registration_class_name
16
16
  ]
@@ -51,6 +51,10 @@ module EffectiveEvents
51
51
  page
52
52
  end
53
53
 
54
+ def self.validate_one_ticket_per_event?
55
+ validate_one_ticket_per_event == true
56
+ end
57
+
54
58
  # If we can create delayed payment events at all
55
59
  def self.delayed?
56
60
  !!EffectiveOrders.try(:delayed?)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_events
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.8
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-10-06 00:00:00.000000000 Z
11
+ date: 2025-10-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails