Module: EffectiveOrders
- Includes:
- EffectiveGem
- Defined in:
- lib/effective_orders.rb,
lib/effective_orders/engine.rb,
lib/effective_orders/version.rb,
lib/generators/effective_orders/install_generator.rb
Defined Under Namespace
Modules: Generators Classes: AlreadyPurchasedException, Engine, SoldOutException
Constant Summary collapse
- PENDING =
Order states
'pending'- CONFIRMED =
New orders are created in a pending state
'confirmed'- DEFERRED =
Once the order has passed checkout step 1
'deferred'- PURCHASED =
Deferred providers. Cheque or Phone was selected.
'purchased'- DECLINED =
Purchased by provider
'declined'- ABANDONED =
Declined by provider
'abandoned'- STATES =
Not set by this gem. Can be set outside it.
{ PENDING => PENDING, CONFIRMED => CONFIRMED, DEFERRED => DEFERRED, PURCHASED => PURCHASED, DECLINED => DECLINED, ABANDONED => ABANDONED }
- ACTIVE =
Subscription statuses (as per stripe)
'active'- PAST_DUE =
'past_due'- TRIALING =
'trialing'- CANCELED =
'canceled'- STATUSES =
{ ACTIVE => ACTIVE, PAST_DUE => PAST_DUE, CANCELED => CANCELED, TRIALING => TRIALING }
- VERSION =
'5.5.2'.freeze
Class Method Summary collapse
-
.admin_payment_providers ⇒ Object
For the Admin Mark as Paid screen.
- .can_skip_checkout_step1? ⇒ Boolean
- .cheque? ⇒ Boolean
- .config_keys ⇒ Object
- .deferred? ⇒ Boolean
- .deferred_providers ⇒ Object
- .free? ⇒ Boolean
- .gem_path ⇒ Object
- .mailer_class ⇒ Object
- .mark_as_paid? ⇒ Boolean
- .moneris? ⇒ Boolean
- .moneris_checkout? ⇒ Boolean
- .moneris_checkout_script_url ⇒ Object
- .moneris_request_url ⇒ Object
-
.payment_providers ⇒ Object
The Effective::Order.payment_provider value must be in this collection.
- .paypal? ⇒ Boolean
- .permitted_params ⇒ Object
- .phone? ⇒ Boolean
- .pretend? ⇒ Boolean
- .qb_online? ⇒ Boolean
- .qb_sync? ⇒ Boolean
- .refund? ⇒ Boolean
- .single_payment_processor? ⇒ Boolean
- .stripe? ⇒ Boolean
- .stripe_plans ⇒ Object
- .stripe_plans_collection ⇒ Object
- .subscriptions? ⇒ Boolean
- .trial? ⇒ Boolean
Class Method Details
.admin_payment_providers ⇒ Object
For the Admin Mark as Paid screen
146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 |
# File 'lib/effective_orders.rb', line 146 def self.admin_payment_providers [ ('cheque' if mark_as_paid?), ('credit card' if mark_as_paid?), #('free' if free?), ('moneris' if moneris?), ('moneris_checkout' if moneris_checkout?), ('paypal' if paypal?), ('phone' if mark_as_paid?), #('pretend' if pretend?), #('refund' if refund?), ('stripe' if stripe?), ('other' if mark_as_paid?), 'none' ].compact end |
.can_skip_checkout_step1? ⇒ Boolean
179 180 181 182 183 184 185 |
# File 'lib/effective_orders.rb', line 179 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? ⇒ Boolean
71 72 73 |
# File 'lib/effective_orders.rb', line 71 def self.cheque? cheque.kind_of?(Hash) end |
.config_keys ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 |
# 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? ⇒ Boolean
79 80 81 |
# File 'lib/effective_orders.rb', line 79 def self.deferred? deferred_providers.present? end |
.deferred_providers ⇒ Object
163 164 165 |
# File 'lib/effective_orders.rb', line 163 def self.deferred_providers [('cheque' if cheque?), ('phone' if phone?)].compact end |
.free? ⇒ Boolean
75 76 77 |
# File 'lib/effective_orders.rb', line 75 def self.free? free_enabled == true end |
.gem_path ⇒ Object
268 269 270 |
# File 'lib/effective_orders.rb', line 268 def self.gem_path __dir__.chomp('/lib') end |
.mailer_class ⇒ Object
175 176 177 |
# File 'lib/effective_orders.rb', line 175 def self.mailer_class mailer&.constantize || Effective::OrdersMailer end |
.mark_as_paid? ⇒ Boolean
83 84 85 |
# File 'lib/effective_orders.rb', line 83 def self.mark_as_paid? mark_as_paid_enabled == true end |
.moneris? ⇒ Boolean
87 88 89 |
# File 'lib/effective_orders.rb', line 87 def self.moneris? moneris.kind_of?(Hash) end |
.moneris_checkout? ⇒ Boolean
91 92 93 |
# File 'lib/effective_orders.rb', line 91 def self.moneris_checkout? moneris_checkout.kind_of?(Hash) end |
.moneris_checkout_script_url ⇒ Object
249 250 251 252 253 254 255 |
# File 'lib/effective_orders.rb', line 249 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 ⇒ Object
257 258 259 260 261 262 263 |
# File 'lib/effective_orders.rb', line 257 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 ⇒ Object
The Effective::Order.payment_provider value must be in this collection
128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 |
# 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? ⇒ Boolean
95 96 97 |
# File 'lib/effective_orders.rb', line 95 def self.paypal? paypal.kind_of?(Hash) end |
.permitted_params ⇒ Object
62 63 64 65 66 67 68 69 |
# 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? ⇒ Boolean
99 100 101 |
# File 'lib/effective_orders.rb', line 99 def self.phone? phone.kind_of?(Hash) end |
.pretend? ⇒ Boolean
103 104 105 |
# File 'lib/effective_orders.rb', line 103 def self.pretend? pretend_enabled == true end |
.qb_online? ⇒ Boolean
171 172 173 |
# File 'lib/effective_orders.rb', line 171 def self.qb_online? use_effective_qb_online && defined?(EffectiveQbOnline) end |
.qb_sync? ⇒ Boolean
167 168 169 |
# File 'lib/effective_orders.rb', line 167 def self.qb_sync? use_effective_qb_sync && defined?(EffectiveQbSync) end |
.refund? ⇒ Boolean
107 108 109 |
# File 'lib/effective_orders.rb', line 107 def self.refund? refund.kind_of?(Hash) end |
.single_payment_processor? ⇒ Boolean
123 124 125 |
# File 'lib/effective_orders.rb', line 123 def self.single_payment_processor? [moneris?, moneris_checkout?, paypal?, stripe?].select { |enabled| enabled }.length == 1 end |
.stripe? ⇒ Boolean
111 112 113 |
# File 'lib/effective_orders.rb', line 111 def self.stripe? stripe.kind_of?(Hash) end |
.stripe_plans ⇒ Object
187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 |
# File 'lib/effective_orders.rb', line 187 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.}" 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 ⇒ Object
245 246 247 |
# File 'lib/effective_orders.rb', line 245 def self.stripe_plans_collection stripe_plans.map { |plan| [plan[:name], plan[:id]] } end |
.subscriptions? ⇒ Boolean
115 116 117 |
# File 'lib/effective_orders.rb', line 115 def self.subscriptions? subscriptions.kind_of?(Hash) end |
.trial? ⇒ Boolean
119 120 121 |
# File 'lib/effective_orders.rb', line 119 def self.trial? trial.kind_of?(Hash) end |