Module: SpreeCmCommissioner::OrderSeatable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/spree_cm_commissioner/order_seatable.rb
Instance Method Summary collapse
-
#cancel_blocks! ⇒ Object
Cancel blocks for the order.
-
#ensure_blocks_held ⇒ Object
Makes sure seat blocks are held if not held yet or if the hold has expired.
- #hold_blocks ⇒ Object
-
#hold_blocks! ⇒ Object
Hold blocks for the order.
-
#reserve_blocks! ⇒ Object
Reserve blocks for the order.
- #should_manage_blocks? ⇒ Boolean
Instance Method Details
#cancel_blocks! ⇒ Object
Cancel blocks for the order. Called from system (order cancellation/archive). Raises errors to alert the system if something goes wrong.
64 65 66 67 68 69 70 71 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 64 def cancel_blocks! return unless should_manage_blocks? CmAppLogger.log(label: "#{self.class.name}#cancel_blocks!", data: { order_id: id }) do SpreeCmCommissioner::Seats::BlocksCanceler.new(order_id: id, cancel_by: user).cancel_blocks! update!(hold_expires_at: nil) end end |
#ensure_blocks_held ⇒ Object
Makes sure seat blocks are held if not held yet or if the hold has expired. Called before moving to payment state to ensure seats are held properly, even if hold was started from :address state or an old hold expired.
26 27 28 29 30 31 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 26 def ensure_blocks_held return unless should_manage_blocks? return if hold_expires_at.present? && hold_expires_at > Time.zone.now hold_blocks end |
#hold_blocks ⇒ Object
33 34 35 36 37 38 39 40 41 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 33 def hold_blocks hold_blocks! rescue SpreeCmCommissioner::Seats::BlocksAreReservedByOtherGuestError, SpreeCmCommissioner::Seats::BlocksAreOnHoldByOtherGuestError, SpreeCmCommissioner::Seats::BlocksAreReservedBySameGuestError, SpreeCmCommissioner::Seats::UnableToSaveReservedBlockRecordError => e errors.add(:seats, e.) false end |
#hold_blocks! ⇒ Object
Hold blocks for the order. Called during checkout (user-initiated). Catches seat errors and adds them to order.errors to prevent state transition. Returns false if error occurs, true otherwise.
46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 46 def hold_blocks! return unless should_manage_blocks? CmAppLogger.log(label: "#{self.class.name}#hold_blocks!", data: { order_id: id }) do held_blocks = SpreeCmCommissioner::Seats::BlocksHolder.new( line_item_ids: line_item_ids, hold_by: user ).hold_blocks! if held_blocks.any? min_expiration = held_blocks.map(&:expired_at).min update!(hold_expires_at: min_expiration) end end end |
#reserve_blocks! ⇒ Object
Reserve blocks for the order. Called from system (order completion). Raises errors to alert the system if something goes wrong.
75 76 77 78 79 80 81 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 75 def reserve_blocks! return unless should_manage_blocks? CmAppLogger.log(label: "#{self.class.name}#reserve_blocks!", data: { order_id: id }) do SpreeCmCommissioner::Seats::BlocksReserver.new(line_item_ids: line_item_ids, reserve_by: user).reserve_blocks! end end |
#should_manage_blocks? ⇒ Boolean
19 20 21 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 19 def should_manage_blocks? preload_block_ids.any? end |