Class: Spree::LineItem
- 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 permanent 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
-
#price_currency ⇒ Object
Returns the value of attribute price_currency.
-
#target_shipment ⇒ Object
Returns the value of attribute target_shipment.
Instance Method Summary collapse
-
#amount ⇒ BigDecimal
(also: #subtotal)
The amount of this line item, which is the line item’s price multiplied by its quantity.
- #currency=(_currency) ⇒ Object
-
#discounted_amount ⇒ BigDecimal
The amount of this line item, taking into consideration line item promotions.
-
#insufficient_stock? ⇒ Boolean
True when it is not possible to supply the required quantity of stock of this line item’s variant.
-
#money_price=(money) ⇒ Object
Sets price from a ‘Spree::Money` object.
-
#options=(options = {}) ⇒ Object
Sets options on the line item and updates the price.
- #pricing_options ⇒ Object
-
#sufficient_stock? ⇒ Boolean
True when it is possible to supply the required quantity of stock of this line item’s variant.
-
#total ⇒ BigDecimal
(also: #final_amount)
The amount of this line item, taking into consideration all its adjustments.
-
#total_before_tax ⇒ BigDecimal
The amount of this item, taking into consideration all non-tax adjustments.
-
#total_excluding_vat ⇒ BigDecimal
(also: #pre_tax_amount)
The amount of this line item before VAT tax.
Methods included from DisplayMoney
Methods inherited from Base
display_includes, page, preference, #preferences
Methods included from Core::Permalinks
#generate_permalink, #save_permalink
Instance Attribute Details
#price_currency ⇒ Object
Returns the value of attribute price_currency.
46 47 48 |
# File 'app/models/spree/line_item.rb', line 46 def price_currency @price_currency end |
#target_shipment ⇒ Object
Returns the value of attribute target_shipment.
46 47 48 |
# File 'app/models/spree/line_item.rb', line 46 def target_shipment @target_shipment end |
Instance Method Details
#amount ⇒ BigDecimal Also known as: subtotal
Returns the amount of this line item, which is the line item’s price multiplied by its quantity.
53 54 55 |
# File 'app/models/spree/line_item.rb', line 53 def amount price * quantity end |
#currency=(_currency) ⇒ Object
159 160 161 162 163 |
# File 'app/models/spree/line_item.rb', line 159 def currency=(_currency) Spree::Deprecation.warn 'Spree::LineItem#currency= is deprecated ' \ 'and will take no effect.', caller end |
#discounted_amount ⇒ BigDecimal
Returns the amount of this line item, taking into consideration line item promotions.
60 61 62 |
# File 'app/models/spree/line_item.rb', line 60 def discounted_amount amount + promo_total end |
#insufficient_stock? ⇒ Boolean
Returns true when it is not possible to supply the required quantity of stock of this line item’s variant.
132 133 134 |
# File 'app/models/spree/line_item.rb', line 132 def insufficient_stock? !sufficient_stock? end |
#money_price=(money) ⇒ Object
Sets price from a ‘Spree::Money` object
112 113 114 115 116 117 118 119 120 121 122 |
# File 'app/models/spree/line_item.rb', line 112 def money_price=(money) if !money self.price = nil elsif money.currency.iso_code != currency && Spree::Config.raise_with_invalid_currency line_item_errors = ActiveModel::Errors.new(self) raise CurrencyMismatch, line_item_errors.(:price, :does_not_match_order_currency, locale: :en) else self.price_currency = money.currency.iso_code self.price = money.to_d end end |
#options=(options = {}) ⇒ Object
Sets options on the line item and updates the price.
The options can be arbitrary attributes on the LineItem.
141 142 143 144 145 146 147 148 149 150 151 152 153 |
# File 'app/models/spree/line_item.rb', line 141 def ( = {}) return unless .present? assign_attributes # 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 .key?(:price) || .key?('price') self.money_price = variant.price_for() end end |
#pricing_options ⇒ Object
155 156 157 |
# File 'app/models/spree/line_item.rb', line 155 def Spree::Config..from_line_item(self) end |
#sufficient_stock? ⇒ Boolean
Returns true when it is possible to supply the required quantity of stock of this line item’s variant.
126 127 128 |
# File 'app/models/spree/line_item.rb', line 126 def sufficient_stock? Stock::Quantifier.new(variant).can_supply? quantity end |
#total ⇒ BigDecimal Also known as: final_amount
Returns the amount of this line item, taking into consideration all its adjustments.
67 68 69 |
# File 'app/models/spree/line_item.rb', line 67 def total amount + adjustment_total end |
#total_before_tax ⇒ BigDecimal
Returns the amount of this item, taking into consideration all non-tax adjustments.
75 76 77 |
# File 'app/models/spree/line_item.rb', line 75 def total_before_tax amount + adjustments.select { |value| !value.tax? && value.eligible? }.sum(&:amount) end |
#total_excluding_vat ⇒ BigDecimal Also known as: pre_tax_amount
just like ‘amount`, this does not include any additional tax
Returns the amount of this line item before VAT tax.
81 82 83 |
# File 'app/models/spree/line_item.rb', line 81 def total_excluding_vat total_before_tax - included_tax_total end |