Class: Shipping::ItemPackagingDiscrepancyCheck

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

Overview

Service object: item packaging discrepancy check.

Instance Attribute Summary

Attributes inherited from BaseService

#options

Instance Method Summary collapse

Methods inherited from BaseService

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

Constructor Details

This class inherits a constructor from BaseService

Instance Method Details

#process(delivery, _options = {}) ⇒ Object



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

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))
      next unless item.boxes.one?

      package_from_item = item.boxes_to_packages.first
      next if 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