Class: Spree::OrderContents
- Inherits:
-
Object
- Object
- Spree::OrderContents
- Defined in:
- app/models/spree/order_contents.rb
Instance Attribute Summary collapse
-
#order ⇒ Object
Returns the value of attribute order.
Instance Method Summary collapse
-
#add(variant, quantity = 1, options = {}) ⇒ Spree::LineItem
Add a line items to the order if there is inventory to do so and populate Promotions.
- #advance ⇒ Object
- #approve(user: nil, name: nil) ⇒ Object
-
#initialize(order) ⇒ OrderContents
constructor
A new instance of OrderContents.
- #remove(variant, quantity = 1, options = {}) ⇒ Object
- #remove_line_item(line_item, options = {}) ⇒ Object
- #update_cart(params) ⇒ Object
Constructor Details
#initialize(order) ⇒ OrderContents
Returns a new instance of OrderContents.
5 6 7 |
# File 'app/models/spree/order_contents.rb', line 5 def initialize(order) @order = order end |
Instance Attribute Details
#order ⇒ Object
Returns the value of attribute order.
3 4 5 |
# File 'app/models/spree/order_contents.rb', line 3 def order @order end |
Instance Method Details
#add(variant, quantity = 1, options = {}) ⇒ Spree::LineItem
Add a line items to the order if there is inventory to do so and populate Promotions
22 23 24 25 |
# File 'app/models/spree/order_contents.rb', line 22 def add(variant, quantity = 1, = {}) line_item = add_to_line_item(variant, quantity, ) after_add_or_remove(line_item, ) end |
#advance ⇒ Object
69 70 71 |
# File 'app/models/spree/order_contents.rb', line 69 def advance while @order.next; end end |
#approve(user: nil, name: nil) ⇒ Object
73 74 75 76 77 78 79 80 81 82 83 |
# File 'app/models/spree/order_contents.rb', line 73 def approve(user: nil, name: nil) if user.blank? && name.blank? raise ArgumentError, 'user or name must be specified' end order.update_attributes!( approver: user, approver_name: name, approved_at: Time.current ) end |
#remove(variant, quantity = 1, options = {}) ⇒ Object
27 28 29 30 |
# File 'app/models/spree/order_contents.rb', line 27 def remove(variant, quantity = 1, = {}) line_item = remove_from_line_item(variant, quantity, ) after_add_or_remove(line_item, ) end |
#remove_line_item(line_item, options = {}) ⇒ Object
32 33 34 35 |
# File 'app/models/spree/order_contents.rb', line 32 def remove_line_item(line_item, = {}) order.line_items.destroy(line_item) after_add_or_remove(line_item, ) end |
#update_cart(params) ⇒ Object
37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# File 'app/models/spree/order_contents.rb', line 37 def update_cart(params) # We need old_tax_address / new_tax_address because we can't rely on methods # offered by ActiveRecord::Dirty to determine if tax_address was updated # because if we update the address, a new record will be created # by the Address.factory instead of the old record being updated old_tax_address = order.tax_address if order.update_attributes(params) new_tax_address = order.tax_address if should_recalculate_taxes?(old_tax_address, new_tax_address) order.create_tax_charge! end unless order.completed? order.line_items = order.line_items.select { |li| li.quantity > 0 } # Update totals, then check if the order is eligible for any cart promotions. # If we do not update first, then the item total will be wrong and ItemTotal # promotion rules would not be triggered. reload_totals PromotionHandler::Cart.new(order).activate order.ensure_updated_shipments end reload_totals true else false end end |