Module: SpreeCmCommissioner::OrderHoldable
- Extended by:
- ActiveSupport::Concern
- Defined in:
- app/models/concerns/spree_cm_commissioner/order_holdable.rb
Instance Method Summary collapse
-
#hold_order_holds ⇒ Object
Called before transitioning to :address state.
-
#lock_order_holds_for_payment ⇒ Object
Called via PaymentDecorator#after_commit when a payment is created.
-
#release_order_holds!(reason: :user_canceled) ⇒ Object
Releases all holds (seats + inventory) for the order.
-
#reserve_order_holds! ⇒ Object
Converts all holds to reserved/complete state on order completion.
- #should_hold_inventory? ⇒ Boolean
- #should_manage_blocks? ⇒ Boolean
Instance Method Details
#hold_order_holds ⇒ Object
Called before transitioning to :address state. Acquires seat holds (if applicable) + inventory holds for the order.
37 38 39 40 41 42 43 |
# File 'app/models/concerns/spree_cm_commissioner/order_holdable.rb', line 37 def hold_order_holds result = SpreeCmCommissioner::OrderHolds::Hold.call(order: self) return true if result.success? errors.add(:holds, result.error.value[:message]) false end |
#lock_order_holds_for_payment ⇒ Object
Called via PaymentDecorator#after_commit when a payment is created. Idempotent: skips if holds are already locked (payment_locked_at is set). On first call, ensures all active holds have at least 5 minutes remaining, transitions the inventory hold to :payment_locked, stamps payment_locked_at on both inventory hold and seat blocks, and resyncs order.hold_expires_at.
50 51 52 53 54 55 56 57 |
# File 'app/models/concerns/spree_cm_commissioner/order_holdable.rb', line 50 def lock_order_holds_for_payment return true unless should_manage_blocks? || should_hold_inventory? result = SpreeCmCommissioner::OrderHolds::LockForPayment.call(order: self) return true if result.success? false end |
#release_order_holds!(reason: :user_canceled) ⇒ Object
Releases all holds (seats + inventory) for the order. Raises on failure so the surrounding transaction rolls back.
61 62 63 |
# File 'app/models/concerns/spree_cm_commissioner/order_holdable.rb', line 61 def release_order_holds!(reason: :user_canceled) SpreeCmCommissioner::OrderHolds::Release.call!(order: self, reason: reason) end |
#reserve_order_holds! ⇒ Object
Converts all holds to reserved/complete state on order completion. Raises on failure so the surrounding transaction rolls back.
67 68 69 |
# File 'app/models/concerns/spree_cm_commissioner/order_holdable.rb', line 67 def reserve_order_holds! SpreeCmCommissioner::OrderHolds::Reserve.call!(order: self) end |
#should_hold_inventory? ⇒ Boolean
29 30 31 32 33 |
# File 'app/models/concerns/spree_cm_commissioner/order_holdable.rb', line 29 def should_hold_inventory? return true if line_items.any?(&:should_hold_inventory?) false end |
#should_manage_blocks? ⇒ Boolean
25 26 27 |
# File 'app/models/concerns/spree_cm_commissioner/order_holdable.rb', line 25 def should_manage_blocks? preload_block_ids.any? end |