Class: Maintenance::Item::DiscontinueUnusedItems

Inherits:
BaseService
  • Object
show all
Defined in:
app/services/maintenance/item/discontinue_unused_items.rb

Instance Method Summary collapse

Instance Method Details

#load_items_to_discontinue(created_before: 6.months.ago) ⇒ Object



25
26
27
28
29
30
# File 'app/services/maintenance/item/discontinue_unused_items.rb', line 25

def load_items_to_discontinue(created_before: 6.months.ago)
  # Find items which have all their catalog_items discontinued.
  # Only item without stock are considered
  # Only item created and older than 6 months are considered
  Item.non_publications.with_all_catalog_items_discontinued.where(is_discontinued: false).where(created_at: ..created_before).order('items.is_kit = false'.sql_safe) # Kits will be first
end

#process(item_scope = nil, report_only: false) ⇒ Object



2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/services/maintenance/item/discontinue_unused_items.rb', line 2

def process(item_scope = nil, report_only: false)
  item_scope ||= load_items_to_discontinue
  logger.info "Discontinuing #{item_scope.count} unused items"
  successes = []
  failures = []
  item_scope.find_each do |item|
    logger.info "Discontinuing unused item #{item.id}"
    begin
      # To be discontinued an item must have no stock
      if item.store_items.where.not(location: %(SCRAP)).sum(:qty_on_hand).zero?
        item.discontinue_self_and_dependents unless report_only
        successes << { id: item.id, sku: item.sku, name: item.name }
      else
        failures << { id: item.id, sku: item.sku, name: item.name, errors: 'Stock present' }
      end
    rescue StandardError => e
      logger.error "Cannot discontinue item #{item.id}, error: #{e}"
      failures << { id: item.id, sku: item.sku, name: item.name, errors: e.to_s }
    end
  end
  { successes:, failures: }
end