Module: Spree::UserMethods

Extended by:
ActiveSupport::Concern
Includes:
Metadata, Metafields, PrefixedId, Publishable, RansackableAttributes, Searchable, UserPaymentSource, UserReporting, UserRoles
Included in:
LegacyUser
Defined in:
app/models/concerns/spree/user_methods.rb

Constant Summary

Constants included from PrefixedId

PrefixedId::SQIDS

Instance Method Summary collapse

Methods included from Publishable

#event_context, #event_payload, #publish_event

Methods included from UserReporting

#amount_spent_in, #average_order_value, #completed_orders_for_store, #display_amount_spent_in, #lifetime_value, #order_count, #report_values_for

Methods included from DisplayMoney

#money_methods

Methods included from Metadata

#metadata, #metadata=, #public_metadata=

Methods included from PrefixedId

#prefixed_id, #to_param

Instance Method Details

#available_store_credits(store) ⇒ Array<Spree::Money>

Returns the available store credits for the current store per currency

Parameters:

Returns:



150
151
152
153
154
155
156
# File 'app/models/concerns/spree/user_methods.rb', line 150

def available_store_credits(store)
  store ||= Store.default

  store_credits.for_store(store).pluck(:currency).uniq.each_with_object([]) do |currency, arr|
    arr << Spree::Money.new(total_available_store_credit(currency, store), currency: currency)
  end
end

#can_be_deleted?Boolean

Returns true if the user can be deleted Customers can be deleted if they have no completed orders

Returns:



171
172
173
# File 'app/models/concerns/spree/user_methods.rb', line 171

def can_be_deleted?
  orders.complete.none?
end

#default_wishlist_for_store(current_store) ⇒ Spree::Wishlist

Returns the default wishlist for the current store if no default wishlist exists, it creates one

Parameters:

Returns:



162
163
164
165
166
# File 'app/models/concerns/spree/user_methods.rb', line 162

def default_wishlist_for_store(current_store)
  wishlists.find_by(is_default: true, store_id: current_store.id) || ActiveRecord::Base.connected_to(role: :writing) do
    wishlists.create!(store: current_store, is_default: true, name: Spree.t(:default_wishlist_name))
  end
end

#event_prefixObject



192
193
194
195
196
197
198
# File 'app/models/concerns/spree/user_methods.rb', line 192

def event_prefix
  if self.class == Spree.admin_user_class && Spree.admin_user_class != Spree.user_class
    'admin'
  else
    'user'
  end
end

#event_serializer_classObject



188
189
190
# File 'app/models/concerns/spree/user_methods.rb', line 188

def event_serializer_class
  'Spree::Api::V3::CustomerSerializer'.safe_constantize
end

#full_nameString

Returns the full name of the user

Returns:

  • (String)


184
185
186
# File 'app/models/concerns/spree/user_methods.rb', line 184

def full_name
  name&.full
end

#last_incomplete_spree_order(store, options = {}) ⇒ Spree::Order

Returns the last incomplete spree order for the current store

Parameters:

Options Hash (options):

  • :includes (Array<Symbol>)

Returns:



130
131
132
133
134
135
# File 'app/models/concerns/spree/user_methods.rb', line 130

def last_incomplete_spree_order(store, options = {})
  orders.where(store: store).incomplete.not_canceled.
    includes(options[:includes]).
    order('created_at DESC').
    first
end

#to_csv(_store = nil) ⇒ Array<String>

Returns the CSV row representation of the user

Parameters:

Returns:

  • (Array<String>)


178
179
180
# File 'app/models/concerns/spree/user_methods.rb', line 178

def to_csv(_store = nil)
  Spree::CSV::CustomerPresenter.new(self).call
end

#total_available_store_credit(currency = nil, store = nil) ⇒ Float

Returns the total available store credit for the current store per currency

Parameters:

  • store (Spree::Store) (defaults to: nil)
  • currency (String) (defaults to: nil)

Returns:

  • (Float)


141
142
143
144
145
# File 'app/models/concerns/spree/user_methods.rb', line 141

def total_available_store_credit(currency = nil, store = nil)
  store ||= Store.default
  currency ||= store.default_currency
  store_credits.without_gift_card.for_store(store).where(currency: currency).reload.to_a.sum(&:amount_remaining)
end