Class: Item::CopyRelatedItemsFromSiblings

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

Defined Under Namespace

Classes: Result

Instance Method Summary collapse

Methods inherited from BaseService

#initialize, #log_debug, #log_error, #log_info, #log_warning, #logger, #options, #tagged_logger

Constructor Details

This class inherits a constructor from BaseService

Instance Method Details

#process(item:, relation_type: nil) ⇒ Object



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'app/services/item/copy_related_items_from_siblings.rb', line 7

def process(item:, relation_type: nil)
  # get the existing
  target_item_relations = item.target_item_relations.non_kit_components
  target_item_relations = target_item_relations.where(relation_type: relation_type) if relation_type.present?
  new_target_item_relations = []
  # get our relatives
  relatives = item.relatives
  # each relatives gets its target item relation copied unless it is already present
  relatives.each do |relative_item|
    relative_target_item_relations = relative_item.target_item_relations.non_kit_components
    relative_target_item_relations = relative_target_item_relations.where(relation_type: relation_type) if relation_type.present?
    relative_target_item_relations.each do |tir|
      # Skip existing
      next if target_item_relations.detect{|etir| etir.target_item_id == tir.target_item_id }
      new_tir = tir.dup
      item.target_item_relations << new_tir # this saves
      new_target_item_relations << new_tir
    end
  end
  message = "#{new_target_item_relations.size} relations were added to item #{item.sku}"
  Result.new(target_item_relations: new_target_item_relations, message: message)
end