Module: Spree::CheckoutHelper

Included in:
CheckoutController
Defined in:
app/helpers/spree/checkout_helper.rb

Instance Method Summary collapse

Instance Method Details

#already_have_an_account?Boolean

Returns:

  • (Boolean)


39
40
41
# File 'app/helpers/spree/checkout_helper.rb', line 39

def already_have_an_account?
  @already_have_an_account ||= @order.email.present? && Spree.user_class.exists?(email: @order.email.downcase)
end

#can_use_store_credit_on_checkout?(order) ⇒ Boolean

Returns:

  • (Boolean)


54
55
56
# File 'app/helpers/spree/checkout_helper.rb', line 54

def can_use_store_credit_on_checkout?(order)
  order.could_use_store_credit? && (!order.respond_to?(:gift_card) || !order.gift_card.present?)
end

#checkout_available_payment_methodsObject



31
32
33
# File 'app/helpers/spree/checkout_helper.rb', line 31

def checkout_available_payment_methods
  @checkout_available_payment_methods ||= @order.collect_frontend_payment_methods.reject(&:store_credit?)
end

#checkout_payment_sources(payment_method = nil) ⇒ Object



43
44
45
46
47
# File 'app/helpers/spree/checkout_helper.rb', line 43

def checkout_payment_sources(payment_method = nil)
  return [] unless try_spree_current_user.respond_to?(:payment_sources)

  payment_method.present? ? try_spree_current_user.payment_sources.where(payment_method: payment_method) : try_spree_current_user.payment_sources
end

#checkout_progress(numbers: false) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
# File 'app/helpers/spree/checkout_helper.rb', line 3

def checkout_progress(numbers: false)
  states = (@order.checkout_steps - ['complete']).unshift('cart')
  states -= ['delivery'] if @order.digital?

  items = states.each_with_index.map do |state, i|
    text = Spree.t("order_state.#{state}").titleize
    text.prepend("#{i.succ}. ") if numbers

    css_classes = ['breadcrumb-item']

    if @order.passed_checkout_step?(state)
      link_content = text
      link_url = if state == 'cart'
                   spree.cart_url(host: current_store.url_or_custom_domain, order_token: @order.token)
                 else
                   spree.checkout_state_path(@order.token, state)
                 end

      text = link_to(link_content, link_url)
      css_classes << 'text-primary'
      ('li', text, class: css_classes.join(' '))
    else
      ('li', text, class: "breadcrumb-item #{state == @order.state ? 'font-bold' : 'text-text'}")
    end
  end
  ('ol', raw(items.join("\n")), class: 'breadcrumb flex items-center py-6 gap-2', id: "checkout-step-#{@order.state}")
end

#checkout_started?Boolean

Returns:

  • (Boolean)


35
36
37
# File 'app/helpers/spree/checkout_helper.rb', line 35

def checkout_started?
  (@order.state == 'address' && @order.state_was == 'cart') || (@order.state == 'cart' && correct_state == 'address')
end

#quick_checkout_enabled?(order) ⇒ Boolean

Returns:

  • (Boolean)


49
50
51
52
# File 'app/helpers/spree/checkout_helper.rb', line 49

def quick_checkout_enabled?(order)
  order.payment_required? && order.shipments.count <= 1 &&
    (order.digital? || !order.some_digital?) # Either fully digital or not digital at all
end