effective_events 3.3.11 → 3.3.12

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: f848439464597b6f3f8e1f3e95bcabda4865a248b76dda287b0a307b2cc6d4db
4
- data.tar.gz: 9254c63539a47aa89a78365320ac619c1a8f40ca788860fcd11ba1ef14667014
3
+ metadata.gz: 70b3a0308b0533ff17758e4931f2291157f72fbc2307559b1dda03ae2fd6fc44
4
+ data.tar.gz: a5ba8b0bac8ccf9ea36199307c77546efbe86a211d302df0b3c52f2b7b2ba1cc
5
5
  SHA512:
6
- metadata.gz: 194d7bce5aeeee5d785d9987f92780e584fabd2e65ceff1cb85d4a4a0d1025921795886a227cd6e76cd0dc488fbb3ed38c599563cc81293ca138378a64454173
7
- data.tar.gz: f626fe94453f4406668a62a27e02a8fb239f74b6b3748f461243e0f96db1dc586e8f60417ce538e3be3b0c88fac093d78633640ba1930c600cc731fb64a10a5e
6
+ metadata.gz: 75d7da4a3fae8a70206f385e81f8b3e34bfbbe053000f10aaa3c966bc8764498575b2bee8c9cafa318fb010cc1fb491b29f71479fde3142adc66ec94608ea994
7
+ data.tar.gz: c672ac5279abd9ff50bd8bde94c3048a7b543e1fc202c528da9d89659fd9f9b37bc1d68ca491f607e913c5586b48dd43a15068651f9898993d84204bc487dc73
@@ -160,26 +160,14 @@ module EffectiveEventsEventRegistration
160
160
  end
161
161
 
162
162
  # Validate the same registrant user isn't registered for this ticket on another registration
163
+ # Or for this event (any ticket) on another registration, when one ticket per event is enabled
164
+ # The event registrant adds its own error. We add the base error so it's visible at the top of the form.
163
165
  validate(if: -> { current_step == :details }) do
164
166
  present_event_registrants.select { |er| er.user.present? }.each do |er|
165
- existing = Effective::EventRegistrant.unarchived.registered.where(event_ticket: er.event_ticket, user: er.user).where.not(id: er)
167
+ duplicate_of = (validate_one_ticket_per_event? ? { event: er.event } : { event_ticket: er.event_ticket })
168
+ existing = Effective::EventRegistrant.unarchived.registered.where(user: er.user).where(duplicate_of).where.not(id: er)
166
169
 
167
- if existing.present?
168
- errors.add(:base, "Unable to register #{er.user} for #{er.event_ticket}. They've already been registered")
169
- er.errors.add(:user_id, "Unable to register #{er.user} for #{er.event_ticket}. They've already been registered")
170
- end
171
- end
172
- end
173
-
174
- # Validate the same registrant user isn't registered for this event (any ticket) on another registration
175
- validate(if: -> { current_step == :details && validate_one_ticket_per_event? }) do
176
- present_event_registrants.select { |er| er.user.present? }.each do |er|
177
- existing = Effective::EventRegistrant.unarchived.registered.where(event: er.event, user: er.user).where.not(id: er)
178
-
179
- if existing.present?
180
- errors.add(:base, "Unable to register #{er.user} for #{er.event}. They've already been registered")
181
- er.errors.add(:user_id, "Unable to register #{er.user} for #{er.event}. They've already been registered")
182
- end
170
+ errors.add(:base, "Unable to register #{er.user} for #{duplicate_of.values.first}. They've already been registered") if existing.present?
183
171
  end
184
172
  end
185
173
 
@@ -132,6 +132,16 @@ module Effective
132
132
  errors.add(:user_id, "registrant must be a member") unless event_ticket.guest_of_member? || member?
133
133
  end
134
134
 
135
+ # Validate this user isn't already registered for this event ticket on another registration
136
+ # Or for this event on any ticket, when one ticket per event is enabled
137
+ validate(if: -> { user.present? && event_ticket.present? && registrant_validations_enabled? }, unless: -> { purchased? }) do
138
+ duplicate_of = (validate_one_ticket_per_event? ? { event: event } : { event_ticket: event_ticket })
139
+
140
+ if Effective::EventRegistrant.unarchived.registered.where(user: user).where(duplicate_of).where.not(id: id).present?
141
+ errors.add(:user_id, "Unable to register #{user} for #{duplicate_of.values.first}. They've already been registered")
142
+ end
143
+ end
144
+
135
145
  validates :price, numericality: { greater_than_or_equal_to: 0 }
136
146
  validates :email, email: true
137
147
 
@@ -280,6 +290,12 @@ module Effective
280
290
  !member? && !guest_of_member?
281
291
  end
282
292
 
293
+ # The event registration can override this to add event specific validation
294
+ def validate_one_ticket_per_event?
295
+ return event_registration.validate_one_ticket_per_event? if event_registration.present?
296
+ EffectiveEvents.validate_one_ticket_per_event?
297
+ end
298
+
283
299
  # We create registrants on the tickets step. But don't enforce validations until the details step.
284
300
  def registrant_validations_enabled?
285
301
  return false if blank_registrant? # They want to come back later
@@ -372,7 +388,7 @@ module Effective
372
388
  end
373
389
 
374
390
  def promote_purchased_event_registration!
375
- # Remove myself from any existing orders.
391
+ # Remove myself from any existing orders.
376
392
  # I must be $0 so we don't need to update any prices.
377
393
  orders.each do |order|
378
394
  order.order_items.find { |oi| oi.purchasable == self }.destroy!
@@ -411,7 +427,7 @@ module Effective
411
427
  end
412
428
 
413
429
  def promote_purchased_order!
414
- # Remove myself from any existing orders.
430
+ # Remove myself from any existing orders.
415
431
  # I must be $0 so we don't need to update any prices.
416
432
  orders.each do |order|
417
433
  order.order_items.find { |oi| oi.purchasable == self }.destroy!
@@ -421,7 +437,7 @@ module Effective
421
437
  update!(promoted: true, purchased_order: nil)
422
438
 
423
439
  # Check if the ticket owner has an unpurchased order for the event or create a new one
424
- order = owner.orders.reject { |order| order.purchased? }.find do |order|
440
+ order = owner.orders.reject { |order| order.purchased? }.find do |order|
425
441
  order.purchasables.any? { |purchasable| purchasable.class.name == "Effective::EventRegistrant" && purchasable.try(:event) == event }
426
442
  end
427
443
  order ||= Effective::Order.new(user: owner)
@@ -441,7 +457,7 @@ module Effective
441
457
  def promote_not_purchased!
442
458
  update!(promoted: true)
443
459
 
444
- orders.reject(&:purchased?).each do |order|
460
+ orders.reject(&:purchased?).each do |order|
445
461
  order.update_purchasable_attributes!
446
462
 
447
463
  if order.pending?
@@ -578,9 +594,9 @@ module Effective
578
594
  elsif EffectiveEvents.create_users
579
595
  # Otherwise create a new user
580
596
  new_user = user_klass.create(
581
- first_name: first_name.strip,
582
- last_name: last_name.strip,
583
- email: email.strip.downcase,
597
+ first_name: first_name.strip,
598
+ last_name: last_name.strip,
599
+ email: email.strip.downcase,
584
600
  password: SecureRandom.base64(12) + '!@#123abcABC-'
585
601
  )
586
602
 
@@ -1,3 +1,3 @@
1
1
  module EffectiveEvents
2
- VERSION = '3.3.11'.freeze
2
+ VERSION = '3.3.12'.freeze
3
3
  end
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.3.11
4
+ version: 3.3.12
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: 2026-07-15 00:00:00.000000000 Z
11
+ date: 2026-07-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails