Class: Spree::LineItem

Inherits:
Base
  • Object
show all
Extended by:
DisplayMoney
Defined in:
app/models/spree/line_item.rb

Overview

Variants placed in the Order at a particular price.

`Spree::LineItem` is an ActiveRecord model which records which `Spree::Variant` a customer has chosen to place in their order. It also acts as the permenent record of the customer's order by recording relevant price, taxation, and inventory concerns. Line items can also have adjustments placed on them as part of the promotion system.

Defined Under Namespace

Classes: CurrencyMismatch

Instance Attribute Summary (collapse)

Instance Method Summary (collapse)

Methods included from DisplayMoney

money_methods

Methods inherited from Base

display_includes, #initialize_preference_defaults, page, preference

Methods included from Preferences::Preferable

#default_preferences, #defined_preferences, #get_preference, #has_preference!, #has_preference?, #preference_default, #preference_type, #set_preference

Instance Attribute Details

- (Object) target_shipment

Returns the value of attribute target_shipment



43
44
45
# File 'app/models/spree/line_item.rb', line 43

def target_shipment
  @target_shipment
end

Instance Method Details

- (BigDecimal) amount Also known as: subtotal

Returns the amount of this line item, which is the line item's price multiplied by its quantity.

Returns:

  • (BigDecimal)

    the amount of this line item, which is the line item's price multiplied by its quantity.



50
51
52
# File 'app/models/spree/line_item.rb', line 50

def amount
  price * quantity
end

- (Object) currency=(_currency)



137
138
139
140
141
# File 'app/models/spree/line_item.rb', line 137

def currency=(_currency)
  Spree::Deprecation.warn 'Spree::LineItem#currency= is deprecated ' \
    'and will take no effect.',
    caller
end

- (BigDecimal) discounted_amount

Returns the amount of this line item, taking into consideration line item promotions.

Returns:

  • (BigDecimal)

    the amount of this line item, taking into consideration line item promotions.



57
58
59
# File 'app/models/spree/line_item.rb', line 57

def discounted_amount
  amount + promo_total
end

- (BigDecimal) final_amount Also known as: total

Returns the amount of this line item, taking into consideration all its adjustments.

Returns:

  • (BigDecimal)

    the amount of this line item, taking into consideration all its adjustments.



63
64
65
# File 'app/models/spree/line_item.rb', line 63

def final_amount
  amount + adjustment_total
end

- (Boolean) insufficient_stock?

Returns true when it is not possible to supply the required quantity of stock of this line item's variant

Returns:

  • (Boolean)

    true when it is not possible to supply the required quantity of stock of this line item's variant



110
111
112
# File 'app/models/spree/line_item.rb', line 110

def insufficient_stock?
  !sufficient_stock?
end

- (Object) money_price=(money)

Sets price from a `Spree::Money` object

Parameters:

  • money (Spree::Money)
    • the money object to obtain price from



92
93
94
95
96
97
98
99
100
# File 'app/models/spree/line_item.rb', line 92

def money_price=(money)
  if !money
    self.price = nil
  elsif money.currency.iso_code != currency
    raise CurrencyMismatch, "Line item price currency must match order currency!"
  else
    self.price = money.to_d
  end
end

- (Object) options=(options = {})

Sets options on the line item and updates the price.

The options can be arbitrary attributes on the LineItem.

Parameters:

  • options (Hash) (defaults to: {})

    options for this line item



119
120
121
122
123
124
125
126
127
128
129
130
131
# File 'app/models/spree/line_item.rb', line 119

def options=(options = {})
  return unless options.present?

  assign_attributes options

  # When price is part of the options we are not going to fetch
  # it from the variant. Please note that this always allows to set
  # a price for this line item, even if there is no existing price
  # for the associated line item in the order currency.
  unless options.key?(:price) || options.key?('price')
    self.money_price = variant.price_for(pricing_options)
  end
end

- (BigDecimal) pre_tax_amount

Note:

just like `amount`, this does not include any additional tax

Returns the amount of this line item before included tax

Returns:

  • (BigDecimal)

    the amount of this line item before included tax



70
71
72
# File 'app/models/spree/line_item.rb', line 70

def pre_tax_amount
  discounted_amount - included_tax_total
end

- (Object) pricing_options



133
134
135
# File 'app/models/spree/line_item.rb', line 133

def pricing_options
  Spree::Config.pricing_options_class.from_line_item(self)
end

- (Boolean) sufficient_stock?

Returns true when it is possible to supply the required quantity of stock of this line item's variant

Returns:

  • (Boolean)

    true when it is possible to supply the required quantity of stock of this line item's variant



104
105
106
# File 'app/models/spree/line_item.rb', line 104

def sufficient_stock?
  Stock::Quantifier.new(variant).can_supply? quantity
end