module EffectiveOrders

Constants

ABANDONED
ACTIVE

Subscription statuses (as per stripe)

CANCELED
CONFIRMED
DECLINED
DEFERRED
PAST_DUE
PENDING

Order states

PURCHASED
STATES
STATUSES
TRIALING
VERSION

Public Class Methods

can_skip_checkout_step1?() click to toggle source
# File lib/effective_orders.rb, line 161
def self.can_skip_checkout_step1?
  return false if require_billing_address
  return false if require_shipping_address
  return false if collect_note
  return false if terms_and_conditions
  true
end
cheque?() click to toggle source
# File lib/effective_orders.rb, line 71
def self.cheque?
  cheque.kind_of?(Hash)
end
config_keys() click to toggle source
# File lib/effective_orders.rb, line 32
def self.config_keys
  [
    :orders_table_name, :order_items_table_name, :carts_table_name, :cart_items_table_name,
    :customers_table_name, :subscriptions_table_name, :products_table_name,
    :layout,
    :orders_collection_scope, :order_tax_rate_method,
    :obfuscate_order_ids, :use_effective_qb_sync, :use_effective_qb_online,
    :billing_address, :shipping_address,
    :collect_note, :collect_note_required, :collect_note_message,
    :terms_and_conditions, :terms_and_conditions_label, :minimum_charge,

    # Mailer
    :mailer, :parent_mailer, :deliver_method, :mailer_layout, :mailer_sender, :mailer_admin, :mailer_subject,

    # Emails
    :send_order_receipt_to_admin, :send_order_receipt_to_buyer, :send_payment_request_to_buyer, :send_pending_order_invoice_to_buyer,
    :send_order_receipts_when_mark_as_paid, :send_order_receipts_when_free,
    :send_subscription_events,
    :send_subscription_trialing, :send_subscription_trial_expired,

    # Features
    :free_enabled, :mark_as_paid_enabled, :pretend_enabled, :pretend_message,

    # Payment processors. false or Hash
    :cheque, :moneris, :moneris_checkout, :paypal, :phone, :refund, :stripe, :subscriptions, :trial
  ]
end
deferred?() click to toggle source
# File lib/effective_orders.rb, line 79
def self.deferred?
  deferred_providers.present?
end
deferred_providers() click to toggle source
# File lib/effective_orders.rb, line 145
def self.deferred_providers
  [('cheque' if cheque?), ('phone' if phone?)].compact
end
free?() click to toggle source
# File lib/effective_orders.rb, line 75
def self.free?
  free_enabled == true
end
gem_path() click to toggle source
# File lib/effective_orders.rb, line 250
def self.gem_path
  __dir__.chomp('/lib')
end
mailer_class() click to toggle source
# File lib/effective_orders.rb, line 157
def self.mailer_class
  mailer&.constantize || Effective::OrdersMailer
end
mark_as_paid?() click to toggle source
# File lib/effective_orders.rb, line 83
def self.mark_as_paid?
  mark_as_paid_enabled == true
end
moneris?() click to toggle source
# File lib/effective_orders.rb, line 87
def self.moneris?
  moneris.kind_of?(Hash)
end
moneris_checkout?() click to toggle source
# File lib/effective_orders.rb, line 91
def self.moneris_checkout?
  moneris_checkout.kind_of?(Hash)
end
moneris_checkout_script_url() click to toggle source
# File lib/effective_orders.rb, line 231
def self.moneris_checkout_script_url
  case EffectiveOrders.moneris_checkout.fetch(:environment)
  when 'prod' then 'https://gateway.moneris.com/chkt/js/chkt_v1.00.js'
  when 'qa' then 'https://gatewayt.moneris.com/chkt/js/chkt_v1.00.js'
  else raise('unexpected EffectiveOrders.moneris_checkout :environment key. Please check your config/initializers/effective_orders.rb file')
  end
end
moneris_request_url() click to toggle source
# File lib/effective_orders.rb, line 239
def self.moneris_request_url
  case EffectiveOrders.moneris_checkout.fetch(:environment)
  when 'prod' then 'https://gateway.moneris.com/chkt/request/request.php'
  when 'qa' then 'https://gatewayt.moneris.com/chkt/request/request.php'
  else raise('unexpected EffectiveOrders.moneris_checkout :environment key. Please check your config/initializers/effective_orders.rb file')
  end
end
payment_providers() click to toggle source

The Effective::Order.payment_provider value must be in this collection

# File lib/effective_orders.rb, line 128
def self.payment_providers
  [
    ('cheque' if cheque?),
    ('credit card' if mark_as_paid?),
    ('free' if free?),
    ('moneris' if moneris?),
    ('moneris_checkout' if moneris_checkout?),
    ('paypal' if paypal?),
    ('phone' if phone?),
    ('pretend' if pretend?),
    ('refund' if refund?),
    ('stripe' if stripe?),
    ('other' if mark_as_paid?),
    'none'
  ].compact
end
paypal?() click to toggle source
# File lib/effective_orders.rb, line 95
def self.paypal?
  paypal.kind_of?(Hash)
end
permitted_params() click to toggle source
# File lib/effective_orders.rb, line 62
def self.permitted_params
  @permitted_params ||= [
    :cc, :note, :terms_and_conditions, :confirmed_checkout,
    billing_address: EffectiveAddresses.permitted_params,
    shipping_address: EffectiveAddresses.permitted_params,
    subscripter: [:stripe_plan_id, :stripe_token]
  ]
end
phone?() click to toggle source
# File lib/effective_orders.rb, line 99
def self.phone?
  phone.kind_of?(Hash)
end
pretend?() click to toggle source
# File lib/effective_orders.rb, line 103
def self.pretend?
  pretend_enabled == true
end
qb_online?() click to toggle source
# File lib/effective_orders.rb, line 153
def self.qb_online?
  use_effective_qb_online && defined?(EffectiveQbOnline)
end
qb_sync?() click to toggle source
# File lib/effective_orders.rb, line 149
def self.qb_sync?
  use_effective_qb_sync && defined?(EffectiveQbSync)
end
refund?() click to toggle source
# File lib/effective_orders.rb, line 107
def self.refund?
  refund.kind_of?(Hash)
end
single_payment_processor?() click to toggle source
# File lib/effective_orders.rb, line 123
def self.single_payment_processor?
  [moneris?, moneris_checkout?, paypal?, stripe?].select { |enabled| enabled }.length == 1
end
stripe?() click to toggle source
# File lib/effective_orders.rb, line 111
def self.stripe?
  stripe.kind_of?(Hash)
end
stripe_plans() click to toggle source
# File lib/effective_orders.rb, line 169
def self.stripe_plans
  return [] unless (stripe? && subscriptions?)

  @stripe_plans ||= (
    Rails.logger.info '[STRIPE] index plans'

    plans = begin
      Stripe::Plan.respond_to?(:all) ? Stripe::Plan.all : Stripe::Plan.list
    rescue => e
      raise e if Rails.env.production?
      Rails.logger.info "[STRIPE ERROR]: #{e.message}"
      Rails.logger.info "[STRIPE ERROR]: effective_orders continuing with empty stripe plans. This would fail loudly in Rails.env.production."
      []
    end

    plans = plans.map do |plan|
      description = ("$#{'%0.2f' % (plan.amount / 100.0)}" + ' ' + plan.currency.upcase + '/' +  plan.interval.to_s)

      {
        id: plan.id,
        product_id: plan.product,
        name: plan.nickname || description,
        description: description,
        amount: plan.amount,
        currency: plan.currency,
        interval: plan.interval,
        interval_count: plan.interval_count,
        trial_period_days: (plan.trial_period_days if plan.respond_to?(:trial_period_days))
      }
    end.sort do |x, y|
      val ||= (x[:interval] <=> y[:interval])
      val = nil if val == 0

      val ||= (x[:amount] <=> y[:amount])
      val = nil if val == 0

      val ||= (x[:name] <=> y[:name])
      val = nil if val == 0

      val || (x[:id] <=> y[:id])
    end

    # Calculate savings for any yearly per user plans, based on their matching monthly plans
    plans.select { |plan| plan[:interval] == 'year' }.each do |yearly|
      monthly_name = yearly[:name].downcase.gsub('year', 'month')
      monthly = plans.find { |plan| plan[:interval] == 'month' && plan[:name].downcase == monthly_name }
      next unless monthly

      savings = (monthly[:amount].to_i * 12) - yearly[:amount].to_i
      next unless savings > 0

      yearly[:savings] = savings
    end

    plans
  )
end
stripe_plans_collection() click to toggle source
# File lib/effective_orders.rb, line 227
def self.stripe_plans_collection
  stripe_plans.map { |plan| [plan[:name], plan[:id]] }
end
subscriptions?() click to toggle source
# File lib/effective_orders.rb, line 115
def self.subscriptions?
  subscriptions.kind_of?(Hash)
end
trial?() click to toggle source
# File lib/effective_orders.rb, line 119
def self.trial?
  trial.kind_of?(Hash)
end