Sha256: 0cce0948cc410e68dacaa0bec9791ca0457bd822e2b7c6a5b5a70fedcfc4e548

Contents?: true

Size: 1.91 KB

Versions: 25

Compression:

Stored size: 1.91 KB

Contents

module Spree
  module UserMethods
    extend ActiveSupport::Concern

    include Spree::UserApiAuthentication
    include Spree::UserPaymentSource
    include Spree::UserReporting
    include Spree::RansackableAttributes

    included do
      # we need to have this callback before any dependent: :destroy associations
      # https://github.com/rails/rails/issues/3458
      before_destroy :check_completed_orders

      has_many :role_users, class_name: 'Spree::RoleUser', foreign_key: :user_id, dependent: :destroy
      has_many :spree_roles, through: :role_users, class_name: 'Spree::Role', source: :role

      has_many :promotion_rule_users, class_name: 'Spree::PromotionRuleUser', foreign_key: :user_id, dependent: :destroy
      has_many :promotion_rules, through: :promotion_rule_users, class_name: 'Spree::PromotionRule'

      has_many :orders, foreign_key: :user_id, class_name: "Spree::Order"
      has_many :store_credits, foreign_key: :user_id, class_name: 'Spree::StoreCredit'

      belongs_to :ship_address, class_name: 'Spree::Address'
      belongs_to :bill_address, class_name: 'Spree::Address'

      self.whitelisted_ransackable_associations = %w[bill_address ship_address]
      self.whitelisted_ransackable_attributes = %w[id email]
    end

    # has_spree_role? simply needs to return true or false whether a user has a role or not.
    def has_spree_role?(role_in_question)
      spree_roles.any? { |role| role.name == role_in_question.to_s }
    end

    def last_incomplete_spree_order
      orders.incomplete.
        includes(line_items: [variant: [:images, :option_values, :product]]).
        order('created_at DESC').
        first
    end

    def analytics_id
      id
    end

    def total_available_store_credit
      store_credits.reload.to_a.sum(&:amount_remaining)
    end

    private

    def check_completed_orders
      raise Spree::Core::DestroyWithOrdersError if orders.complete.present?
    end
  end
end

Version data entries

25 entries across 25 versions & 2 rubygems

Version Path
goca-spree-core-3.1.14.rails.5.0 app/models/concerns/spree/user_methods.rb
goca-spree-core-3.1.15.rails.5.0 app/models/concerns/spree/user_methods.rb
goca-spree-core-3.1.15.pre.rails.pre.5.0 app/models/concerns/spree/user_methods.rb
spree_core-3.2.9 app/models/concerns/spree/user_methods.rb
spree_core-3.1.14 app/models/concerns/spree/user_methods.rb
spree_core-3.2.8 app/models/concerns/spree/user_methods.rb
spree_core-3.1.13 app/models/concerns/spree/user_methods.rb
spree_core-3.2.7 app/models/concerns/spree/user_methods.rb
spree_core-3.1.12 app/models/concerns/spree/user_methods.rb
spree_core-3.2.6 app/models/concerns/spree/user_methods.rb
spree_core-3.1.11 app/models/concerns/spree/user_methods.rb
spree_core-3.1.10 app/models/concerns/spree/user_methods.rb
spree_core-3.2.5 app/models/concerns/spree/user_methods.rb
spree_core-3.1.9 app/models/concerns/spree/user_methods.rb
spree_core-3.2.4 app/models/concerns/spree/user_methods.rb
spree_core-3.1.8 app/models/concerns/spree/user_methods.rb
spree_core-3.1.7 app/models/concerns/spree/user_methods.rb
spree_core-3.2.3 app/models/concerns/spree/user_methods.rb
spree_core-3.2.2 app/models/concerns/spree/user_methods.rb
spree_core-3.1.6 app/models/concerns/spree/user_methods.rb