class Workarea::Avatax::TaxRequest::OrderLines

Attributes

order[R]
shippings[R]

Public Class Methods

new(order, shippings) click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 6
def initialize(order, shippings)
  @order = order
  @shippings = shippings
end

Public Instance Methods

lines() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 24
def lines
  (order_line_items + shipping_line_items).map.with_index(1) do |line_item, index|
    line_item.tap { |li| li.line_number = index }
  end
end
order_line_items() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 11
def order_line_items
  @order_line_items ||=
    if shippings.any?(&:partial?)
      split_shipping_lines
    else
      single_shipping_lines
    end.map.with_index(1) { |line, index| line.tap { |li| li.line_number = index } }
end
shipping_line_items() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 20
def shipping_line_items
  @shipping_line_item ||= shippings.map { |shipping| TaxRequest::ShippingLineItem.new(shipping: shipping) }
end

Private Instance Methods

grouped_order_price_adjustments() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 36
def grouped_order_price_adjustments
  order_price_adjustments.grouped_by_parent
end
order_price_adjustments() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 32
def order_price_adjustments
  order.price_adjustments
end
single_shipping_lines() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 40
def single_shipping_lines
  grouped_order_price_adjustments.flat_map do |item, set|
    set.map do |adjustment|
      next unless adjustment.data["tax_code"].present?

      TaxRequest::OrderLineItem.new(order_item: item, adjustment: adjustment, adjustment_set: set)
    end
  end.compact
end
split_shipping_lines() click to toggle source
# File lib/workarea/avatax/tax_request/order_lines.rb, line 50
def split_shipping_lines
  shippings.flat_map do |shipping|
    shipping.quantities.flat_map do |order_item_id, quantity|
      item = order.items.detect { |oi| oi.id.to_s == order_item_id }
      adjustment_set = grouped_order_price_adjustments[item]

      adjustment_set.map do |adjustment|
        TaxRequest::OrderLineItem.new(
          order_item: item,
          adjustment: adjustment,
          adjustment_set: adjustment_set,
          quantity: quantity,
          shipping: shipping
        )
      end
    end
  end
end