Module: SpreeCmCommissioner::OrderSeatable

Extended by:
ActiveSupport::Concern
Defined in:
app/models/concerns/spree_cm_commissioner/order_seatable.rb

Instance Method Summary collapse

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

Returns:

  • (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