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
-
#ensure_blocks_held! ⇒ Object
Makes sure seat blocks are held if not held yet or if the hold has expired.
- #hold_blocks! ⇒ Object
- #reserve_blocks! ⇒ Object
- #should_manage_blocks? ⇒ Boolean
Instance Method Details
#cancel_blocks! ⇒ Object
49 50 51 52 53 54 55 56 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 49 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 42 43 44 45 46 47 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 33 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
58 59 60 61 62 63 64 |
# File 'app/models/concerns/spree_cm_commissioner/order_seatable.rb', line 58 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 |