Class: Shipping::ItemPackagingDiscrepancyCheck

Inherits:
BaseService
  • Object
show all
Defined in:
app/services/shipping/item_packaging_discrepancy_check.rb

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(delivery, options = {}) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# File 'app/services/shipping/item_packaging_discrepancy_check.rb', line 3

def process(delivery, options = {})
  packaging_solution = Shipping::DeterminePackaging.new.process(delivery:, is_freight: delivery.ships_ltl_freight?)
  if packaging_solution&.source_type == :from_delivery && (relevant_packages_from_delivery = (packaging_solution&.packages || []).select{|p| p.send(:contents)&.size == 1 && p.send(:contents).first.send(:quantity) == 1}).any?
    relevant_packages_from_delivery.each do |package_from_delivery|
      item = Item.find(package_from_delivery.send(:contents).first.send(:item_id))
      if item.boxes.count == 1
        package_from_item = item.boxes_to_packages.first
        unless package_from_item.close_to?(package_to_compare: package_from_delivery)
          item.update_column(:review_product_packaging_flag, true)
          if packaging_solution.packing_id.present? && (packing = Packing.find_by(id: packaging_solution.packing_id))
            item.update_column(:packaging_discrepancy_packing_id, packing.id) if packing_actionable_for_item?(packing, item)
          end
        end
      end
    end
  end
end