Class: SpreeCmCommissioner::RedisStock::Base

Inherits:
Object
  • Object
show all
Extended by:
ServiceModuleThrowable
Includes:
Spree::ServiceModule::Base
Defined in:
app/services/spree_cm_commissioner/redis_stock/base.rb

Direct Known Subclasses

Restock, Unstock

Instance Method Summary collapse

Methods included from ServiceModuleThrowable

call!

Instance Method Details

#call(line_item_ids:) ⇒ Object

Raises:

  • (NotImplementedError)


7
8
9
# File 'app/services/spree_cm_commissioner/redis_stock/base.rb', line 7

def call(line_item_ids:)
  raise NotImplementedError, 'Subclasses must implement the call method'
end

#line_itemsObject

only unstock or restock when variants is available, track inventory, not backorderable & not need_confirmation. otherwise, we can ignore them.



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'app/services/spree_cm_commissioner/redis_stock/base.rb', line 13

def line_items
  return @line_items if defined?(@line_items)

  @line_items = Spree::LineItem.where(id: @line_item_ids).includes(:inventory_items, variant: :stock_items)
  @line_items = @line_items.select do |line_item|
    next false unless line_item.variant.available?
    next false unless line_item.variant.should_track_inventory?
    next false if line_item.variant.backorderable?
    next false if line_item.variant.need_confirmation?

    true
  end
end

#schedule_sync_inventory(inventory_id_and_quantities) ⇒ Object



31
32
33
34
35
36
# File 'app/services/spree_cm_commissioner/redis_stock/base.rb', line 31

def schedule_sync_inventory(inventory_id_and_quantities)
  SpreeCmCommissioner::InventoryItems::BulkAdjustQuantitiesJob.perform_later(
    inventory_id_and_quantities: inventory_id_and_quantities,
    line_item_ids: @line_item_ids
  )
end

#warm_redis_keys!(inventory_items) ⇒ Object



27
28
29
# File 'app/services/spree_cm_commissioner/redis_stock/base.rb', line 27

def warm_redis_keys!(inventory_items)
  SpreeCmCommissioner::RedisStock::CachedInventoryItemsBuilder.new(inventory_items).call
end