Class: Shipping::FreightPalletCalculator
- Inherits:
-
Object
- Object
- Shipping::FreightPalletCalculator
- Defined in:
- app/services/shipping/freight_pallet_calculator.rb
Overview
Calculates LTL freight pallet packages from a list of goods line items.
Extracted from Packaging.get_freight_pallet_packages_hash_from so it can be
called directly by Shipping::DeterminePackaging without going through the
legacy Packaging model at runtime.
Returns a hash: { weights: Array, dimensions: Array, container_types: Array }
Each index corresponds to one pallet/crate in the shipment.
== Crate items
Items with Item#ships_via_crate? == true are grouped into crates and
mounted on pallets. Multiple crates are created when stacking would exceed
72" in width.
== Standard pallet items
Remaining items use a density-weighted pallet volume formula.
Pallet footprint is 48×40" (standard) or 72×40" when any item exceeds 50".
Maximum pallet height is 5 ft; orders needing more height get extra pallets
with even weight distribution.
Constant Summary collapse
- CRATE_PADDING =
Pallet/crate physical limits — mirrors Packaging model constants.
Packaging::CRATE_PADDING
- LTL_FREIGHT_WASTED_SPACE_FACTOR =
Packaging::LTL_FREIGHT_WASTED_SPACE_IN_PALLETS_FACTOR
- LTL_FREIGHT_MAX_PALLET_HEIGHT_IN_FT =
Packaging::LTL_FREIGHT_MAX_PALLET_HEIGHT_IN_FT
- LTL_FREIGHT_MIN_PALLET_HEIGHT_IN_INCHES =
Packaging::LTL_FREIGHT_MIN_PALLET_HEIGHT_IN_INCHES
Class Method Summary collapse
-
.call(line_items) ⇒ Hash
{ weights: [], dimensions: [], container_types: [] }.
Instance Method Summary collapse
- #call ⇒ Object
-
#initialize(line_items) ⇒ FreightPalletCalculator
constructor
A new instance of FreightPalletCalculator.
Constructor Details
#initialize(line_items) ⇒ FreightPalletCalculator
Returns a new instance of FreightPalletCalculator.
36 37 38 |
# File 'app/services/shipping/freight_pallet_calculator.rb', line 36 def initialize(line_items) @line_items = line_items end |
Class Method Details
.call(line_items) ⇒ Hash
Returns { weights: [], dimensions: [], container_types: [] }.
32 33 34 |
# File 'app/services/shipping/freight_pallet_calculator.rb', line 32 def self.call(line_items) new(line_items).call end |
Instance Method Details
#call ⇒ Object
40 41 42 43 44 45 46 47 48 49 50 51 52 |
# File 'app/services/shipping/freight_pallet_calculator.rb', line 40 def call weights = [] dimensions = [] container_types = [] crate_line_items = @line_items.select { |li| li.item.ships_via_crate? } pallet_line_items = @line_items - crate_line_items build_crates(crate_line_items, weights, dimensions, container_types) if crate_line_items.any? build_pallets(pallet_line_items, weights, dimensions, container_types) if pallet_line_items.any? { weights: weights, dimensions: dimensions, container_types: container_types } end |