Class: Spree::ReturnItem

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

Defined Under Namespace

Modules: ExchangeVariantEligibility

Constant Summary collapse

COMPLETED_RECEPTION_STATUSES =
%w(received given_to_customer)

Class Method Summary collapse

Instance Method Summary collapse

Methods included from DisplayMoney

money_methods

Class Method Details

.from_inventory_unit(inventory_unit) ⇒ Object



136
137
138
139
# File 'app/models/spree/return_item.rb', line 136

def self.from_inventory_unit(inventory_unit)
  not_cancelled.find_by(inventory_unit: inventory_unit) ||
    new(inventory_unit: inventory_unit).tap(&:set_default_pre_tax_amount)
end

Instance Method Details

#build_default_exchange_inventory_unitObject



161
162
163
164
165
166
167
168
169
170
171
# File 'app/models/spree/return_item.rb', line 161

def build_default_exchange_inventory_unit
  # The inventory unit needs to have the new variant
  # but it also needs to know the original line item
  # for pricing information for if the inventory unit is
  # ever returned. This means that the inventory unit's line_item
  # will have a different variant than the inventory unit itself
  return unless exchange_required?

  exchange_inventory_units.build(variant: exchange_variant, line_item: inventory_unit.line_item,
                                 order: inventory_unit.order, quantity: return_quantity)
end

#currencyObject



181
182
183
# File 'app/models/spree/return_item.rb', line 181

def currency
  return_authorization.try(:currency) || Spree::Store.default.default_currency
end

#eligible_exchange_variantsObject



157
158
159
# File 'app/models/spree/return_item.rb', line 157

def eligible_exchange_variants
  exchange_variant_engine.eligible_variants(variant)
end

#exchange_processed?Boolean

Returns:

  • (Boolean)


145
146
147
# File 'app/models/spree/return_item.rb', line 145

def exchange_processed?
  exchange_inventory_units.present?
end

#exchange_requested?Boolean

Returns:

  • (Boolean)


141
142
143
# File 'app/models/spree/return_item.rb', line 141

def exchange_requested?
  exchange_variant.present?
end

#exchange_required?Boolean

Returns:

  • (Boolean)


149
150
151
# File 'app/models/spree/return_item.rb', line 149

def exchange_required?
  exchange_requested? && !exchange_processed?
end

#exchange_shipmentsObject



173
174
175
# File 'app/models/spree/return_item.rb', line 173

def exchange_shipments
  exchange_inventory_units.map(&:shipment).uniq
end

#pre_tax_amount=(amount) ⇒ Object



14
15
16
# File 'app/models/spree/return_item.rb', line 14

def pre_tax_amount=(amount)
  self[:pre_tax_amount] = Spree::LocalizedNumber.parse(amount)
end

#reception_completed?Boolean

Returns:

  • (Boolean)


106
107
108
# File 'app/models/spree/return_item.rb', line 106

def reception_completed?
  COMPLETED_RECEPTION_STATUSES.include?(reception_status)
end

#return_quantityObject



18
19
20
# File 'app/models/spree/return_item.rb', line 18

def return_quantity
  @_return_quantity.nil? ? inventory_unit.quantity : @_return_quantity
end

#return_quantity=(value) ⇒ Object



10
11
12
# File 'app/models/spree/return_item.rb', line 10

def return_quantity=(value)
  @_return_quantity = value.to_i
end

#set_default_pre_tax_amountObject



177
178
179
# File 'app/models/spree/return_item.rb', line 177

def set_default_pre_tax_amount
  self.pre_tax_amount = refund_amount_calculator.new.compute(self)
end

#totalObject



153
154
155
# File 'app/models/spree/return_item.rb', line 153

def total
  pre_tax_amount + included_tax_total + additional_tax_total
end