Class: Spree::InventoryUnit
- Inherits:
-
Object
- Object
- Spree::InventoryUnit
- Extended by:
- DisplayMoney
- Defined in:
- app/models/spree/inventory_unit.rb
Class Method Summary collapse
-
.backordered_for_stock_item(stock_item) ⇒ Object
This was refactored from a simpler query because the previous implementation led to issues once users tried to modify the objects returned.
- .finalize_units! ⇒ Object
- .split(original_inventory_unit, extract_quantity) ⇒ Object
Instance Method Summary collapse
- #additional_tax_total ⇒ Object
- #charged_amount ⇒ Object
- #current_or_new_return_item ⇒ Object
- #exchanged_unit? ⇒ Boolean
- #extract_singular_inventory! ⇒ Object
- #find_stock_item ⇒ Object
- #included_tax_total ⇒ Object
- #percentage_of_line_item ⇒ Object
- #required_quantity ⇒ Object
-
#split_inventory!(extract_quantity) ⇒ Object
This will fail if extract >= available_quantity.
Methods included from DisplayMoney
Class Method Details
.backordered_for_stock_item(stock_item) ⇒ Object
This was refactored from a simpler query because the previous implementation led to issues once users tried to modify the objects returned. That’s due to ActiveRecord ‘joins(shipment: :stock_location)` only returning readonly objects
Returns an array of backordered inventory units as per a given stock item
57 58 59 60 61 |
# File 'app/models/spree/inventory_unit.rb', line 57 def self.backordered_for_stock_item(stock_item) backordered_per_variant(stock_item).select do |unit| unit.shipment.stock_location == stock_item.stock_location end end |
.finalize_units! ⇒ Object
63 64 65 |
# File 'app/models/spree/inventory_unit.rb', line 63 def self.finalize_units! update_all(pending: false, updated_at: Time.current) end |
.split(original_inventory_unit, extract_quantity) ⇒ Object
71 72 73 74 75 76 |
# File 'app/models/spree/inventory_unit.rb', line 71 def self.split(original_inventory_unit, extract_quantity) split = original_inventory_unit.dup split.quantity = extract_quantity original_inventory_unit.quantity -= extract_quantity split end |
Instance Method Details
#additional_tax_total ⇒ Object
96 97 98 |
# File 'app/models/spree/inventory_unit.rb', line 96 def additional_tax_total line_item.additional_tax_total * percentage_of_line_item end |
#charged_amount ⇒ Object
118 119 120 |
# File 'app/models/spree/inventory_unit.rb', line 118 def charged_amount percentage_of_line_item * line_item.pre_tax_amount end |
#current_or_new_return_item ⇒ Object
92 93 94 |
# File 'app/models/spree/inventory_unit.rb', line 92 def current_or_new_return_item Spree::ReturnItem.from_inventory_unit(self) end |
#exchanged_unit? ⇒ Boolean
114 115 116 |
# File 'app/models/spree/inventory_unit.rb', line 114 def exchanged_unit? original_return_item_id? end |
#extract_singular_inventory! ⇒ Object
88 89 90 |
# File 'app/models/spree/inventory_unit.rb', line 88 def extract_singular_inventory! split_inventory!(1) end |
#find_stock_item ⇒ Object
67 68 69 |
# File 'app/models/spree/inventory_unit.rb', line 67 def find_stock_item shipment.stock_location.stock_item_or_create(variant) end |
#included_tax_total ⇒ Object
100 101 102 |
# File 'app/models/spree/inventory_unit.rb', line 100 def included_tax_total line_item.included_tax_total * percentage_of_line_item end |
#percentage_of_line_item ⇒ Object
122 123 124 |
# File 'app/models/spree/inventory_unit.rb', line 122 def percentage_of_line_item quantity / BigDecimal(line_item.quantity) end |
#required_quantity ⇒ Object
104 105 106 107 108 109 110 111 112 |
# File 'app/models/spree/inventory_unit.rb', line 104 def required_quantity return @required_quantity unless @required_quantity.nil? @required_quantity = if exchanged_unit? original_return_item.return_quantity else line_item.quantity end end |
#split_inventory!(extract_quantity) ⇒ Object
This will fail if extract >= available_quantity
79 80 81 82 83 84 85 86 |
# File 'app/models/spree/inventory_unit.rb', line 79 def split_inventory!(extract_quantity) split = self.class.split(self, extract_quantity) transaction do split.save! save! end split end |