effective_orders 4.5.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.md +1004 -0
  4. data/app/assets/images/effective_orders/stripe.png +0 -0
  5. data/app/assets/javascripts/effective_orders.js +6 -0
  6. data/app/assets/javascripts/effective_orders/customers.js.coffee +32 -0
  7. data/app/assets/javascripts/effective_orders/providers/stripe.js.coffee +77 -0
  8. data/app/assets/javascripts/effective_orders/subscriptions.js.coffee +81 -0
  9. data/app/assets/stylesheets/effective_orders.scss +2 -0
  10. data/app/assets/stylesheets/effective_orders/_cart.scss +4 -0
  11. data/app/assets/stylesheets/effective_orders/_order.scss +58 -0
  12. data/app/controllers/admin/customers_controller.rb +24 -0
  13. data/app/controllers/admin/order_items_controller.rb +16 -0
  14. data/app/controllers/admin/orders_controller.rb +223 -0
  15. data/app/controllers/effective/carts_controller.rb +85 -0
  16. data/app/controllers/effective/concerns/purchase.rb +62 -0
  17. data/app/controllers/effective/customers_controller.rb +20 -0
  18. data/app/controllers/effective/orders_controller.rb +162 -0
  19. data/app/controllers/effective/providers/cheque.rb +22 -0
  20. data/app/controllers/effective/providers/free.rb +33 -0
  21. data/app/controllers/effective/providers/mark_as_paid.rb +33 -0
  22. data/app/controllers/effective/providers/moneris.rb +60 -0
  23. data/app/controllers/effective/providers/paypal.rb +33 -0
  24. data/app/controllers/effective/providers/phone.rb +22 -0
  25. data/app/controllers/effective/providers/pretend.rb +26 -0
  26. data/app/controllers/effective/providers/refund.rb +33 -0
  27. data/app/controllers/effective/providers/stripe.rb +72 -0
  28. data/app/controllers/effective/subscripter_controller.rb +18 -0
  29. data/app/controllers/effective/webhooks_controller.rb +109 -0
  30. data/app/datatables/admin/effective_customers_datatable.rb +22 -0
  31. data/app/datatables/admin/effective_orders_datatable.rb +100 -0
  32. data/app/datatables/effective_orders_datatable.rb +79 -0
  33. data/app/helpers/effective_carts_helper.rb +113 -0
  34. data/app/helpers/effective_orders_helper.rb +143 -0
  35. data/app/helpers/effective_paypal_helper.rb +49 -0
  36. data/app/helpers/effective_stripe_helper.rb +85 -0
  37. data/app/helpers/effective_subscriptions_helper.rb +34 -0
  38. data/app/mailers/effective/orders_mailer.rb +196 -0
  39. data/app/models/concerns/acts_as_purchasable.rb +118 -0
  40. data/app/models/concerns/acts_as_subscribable.rb +90 -0
  41. data/app/models/concerns/acts_as_subscribable_buyer.rb +49 -0
  42. data/app/models/effective/access_denied.rb +17 -0
  43. data/app/models/effective/cart.rb +88 -0
  44. data/app/models/effective/cart_item.rb +40 -0
  45. data/app/models/effective/customer.rb +92 -0
  46. data/app/models/effective/order.rb +541 -0
  47. data/app/models/effective/order_item.rb +63 -0
  48. data/app/models/effective/product.rb +23 -0
  49. data/app/models/effective/sold_out_validator.rb +7 -0
  50. data/app/models/effective/subscripter.rb +185 -0
  51. data/app/models/effective/subscription.rb +95 -0
  52. data/app/models/effective/tax_rate_calculator.rb +48 -0
  53. data/app/views/admin/customers/_actions.html.haml +2 -0
  54. data/app/views/admin/customers/index.html.haml +6 -0
  55. data/app/views/admin/customers/show.html.haml +6 -0
  56. data/app/views/admin/order_items/index.html.haml +3 -0
  57. data/app/views/admin/orders/_datatable_actions.html.haml +18 -0
  58. data/app/views/admin/orders/_form.html.haml +35 -0
  59. data/app/views/admin/orders/_form_note_internal.html.haml +7 -0
  60. data/app/views/admin/orders/_order_actions.html.haml +9 -0
  61. data/app/views/admin/orders/_order_item_fields.html.haml +14 -0
  62. data/app/views/admin/orders/checkout.html.haml +3 -0
  63. data/app/views/admin/orders/edit.html.haml +6 -0
  64. data/app/views/admin/orders/index.html.haml +6 -0
  65. data/app/views/admin/orders/new.html.haml +4 -0
  66. data/app/views/admin/orders/show.html.haml +4 -0
  67. data/app/views/effective/carts/_cart.html.haml +28 -0
  68. data/app/views/effective/carts/_cart_actions.html.haml +3 -0
  69. data/app/views/effective/carts/show.html.haml +17 -0
  70. data/app/views/effective/customers/_customer.html.haml +72 -0
  71. data/app/views/effective/customers/_form.html.haml +21 -0
  72. data/app/views/effective/customers/edit.html.haml +4 -0
  73. data/app/views/effective/customers/update.js.erb +5 -0
  74. data/app/views/effective/orders/_checkout_actions.html.haml +3 -0
  75. data/app/views/effective/orders/_checkout_step1.html.haml +4 -0
  76. data/app/views/effective/orders/_checkout_step2.html.haml +37 -0
  77. data/app/views/effective/orders/_datatable_actions.html.haml +2 -0
  78. data/app/views/effective/orders/_fields.html.haml +31 -0
  79. data/app/views/effective/orders/_fields_note.html.haml +7 -0
  80. data/app/views/effective/orders/_fields_terms.html.haml +8 -0
  81. data/app/views/effective/orders/_order.html.haml +11 -0
  82. data/app/views/effective/orders/_order_actions.html.haml +18 -0
  83. data/app/views/effective/orders/_order_deferred.html.haml +9 -0
  84. data/app/views/effective/orders/_order_footer.html.haml +1 -0
  85. data/app/views/effective/orders/_order_header.html.haml +23 -0
  86. data/app/views/effective/orders/_order_items.html.haml +72 -0
  87. data/app/views/effective/orders/_order_notes.html.haml +17 -0
  88. data/app/views/effective/orders/_order_payment.html.haml +24 -0
  89. data/app/views/effective/orders/_order_shipping.html.haml +30 -0
  90. data/app/views/effective/orders/_orders_table.html.haml +23 -0
  91. data/app/views/effective/orders/cheque/_form.html.haml +4 -0
  92. data/app/views/effective/orders/declined.html.haml +12 -0
  93. data/app/views/effective/orders/deferred.html.haml +13 -0
  94. data/app/views/effective/orders/deferred/_form.html.haml +16 -0
  95. data/app/views/effective/orders/edit.html.haml +3 -0
  96. data/app/views/effective/orders/free/_form.html.haml +5 -0
  97. data/app/views/effective/orders/index.html.haml +3 -0
  98. data/app/views/effective/orders/mark_as_paid/_form.html.haml +23 -0
  99. data/app/views/effective/orders/moneris/_form.html.haml +47 -0
  100. data/app/views/effective/orders/new.html.haml +3 -0
  101. data/app/views/effective/orders/paypal/_form.html.haml +5 -0
  102. data/app/views/effective/orders/phone/_form.html.haml +4 -0
  103. data/app/views/effective/orders/pretend/_form.html.haml +8 -0
  104. data/app/views/effective/orders/purchased.html.haml +11 -0
  105. data/app/views/effective/orders/refund/_form.html.haml +5 -0
  106. data/app/views/effective/orders/show.html.haml +6 -0
  107. data/app/views/effective/orders/stripe/_element.html.haml +8 -0
  108. data/app/views/effective/orders/stripe/_form.html.haml +31 -0
  109. data/app/views/effective/orders_mailer/order_error.html.haml +11 -0
  110. data/app/views/effective/orders_mailer/order_receipt_to_admin.html.haml +2 -0
  111. data/app/views/effective/orders_mailer/order_receipt_to_buyer.html.haml +2 -0
  112. data/app/views/effective/orders_mailer/payment_request_to_buyer.html.haml +13 -0
  113. data/app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml +13 -0
  114. data/app/views/effective/orders_mailer/refund_notification_to_admin.html.haml +15 -0
  115. data/app/views/effective/orders_mailer/subscription_canceled.html.haml +9 -0
  116. data/app/views/effective/orders_mailer/subscription_created.html.haml +13 -0
  117. data/app/views/effective/orders_mailer/subscription_event_to_admin.html.haml +13 -0
  118. data/app/views/effective/orders_mailer/subscription_payment_failed.html.haml +9 -0
  119. data/app/views/effective/orders_mailer/subscription_payment_succeeded.html.haml +9 -0
  120. data/app/views/effective/orders_mailer/subscription_trial_expired.html.haml +5 -0
  121. data/app/views/effective/orders_mailer/subscription_trialing.html.haml +7 -0
  122. data/app/views/effective/orders_mailer/subscription_updated.html.haml +13 -0
  123. data/app/views/effective/subscripter/_form.html.haml +60 -0
  124. data/app/views/effective/subscripter/_plan.html.haml +23 -0
  125. data/app/views/layouts/effective_orders_mailer_layout.html.haml +25 -0
  126. data/config/effective_orders.rb +279 -0
  127. data/config/routes.rb +70 -0
  128. data/db/migrate/01_create_effective_orders.rb.erb +137 -0
  129. data/lib/effective_orders.rb +243 -0
  130. data/lib/effective_orders/engine.rb +60 -0
  131. data/lib/effective_orders/version.rb +3 -0
  132. data/lib/generators/effective_orders/install_generator.rb +63 -0
  133. data/lib/generators/templates/effective_orders_mailer_preview.rb +120 -0
  134. data/lib/tasks/effective_orders_tasks.rake +69 -0
  135. metadata +276 -0
@@ -0,0 +1,13 @@
1
+ %p.effective-orders-receipt-info Pending order created
2
+
3
+ %p We have received notice of your intention to purchase the following items.
4
+
5
+ %p Please remit payment at your earliest convenience.
6
+
7
+ %p #{link_to('Click here', effective_orders.order_url(@order))} to review your order online.
8
+
9
+ - if EffectiveOrders.cheque?
10
+ %p When we receive your cheque in the mail we will mark your order paid.
11
+
12
+ = render(@order, no_order_actions: true)
13
+
@@ -0,0 +1,15 @@
1
+ %p.effective-orders-receipt-info A new refund has been created!
2
+
3
+ %p Please sign in to your payment processor and issue the following refund:
4
+
5
+ %p
6
+ Refund
7
+ = price_to_currency(@order.total)
8
+ to
9
+ = @order.billing_name
10
+ = @order.email
11
+
12
+
13
+ %p Thanks and have a great day!
14
+
15
+ = render(@order, no_order_actions: true)
@@ -0,0 +1,9 @@
1
+ %p.effective-orders-receipt-info Subscription canceled
2
+
3
+ %p We will no longer charge your credit card.
4
+
5
+ %p Thank you for trying our app.
6
+
7
+ %p If you would like to continue, please click the following link to update your card settings:
8
+
9
+ %p= link_to(effective_orders.customer_settings_url, effective_orders.customer_settings_url)
@@ -0,0 +1,13 @@
1
+ %p.effective-orders-receipt-info Subscription created
2
+
3
+ %p Thank you for subscribing!
4
+
5
+ %p You are currently subscribed to the following:
6
+
7
+ %ul
8
+ - @subscriptions.each do |subscription|
9
+ %li #{subscription.subscribable.to_s} - #{subscription}
10
+
11
+ %p Please click the following link to view past invoices or update your card settings:
12
+
13
+ %p= link_to(effective_orders.customer_settings_url, effective_orders.customer_settings_url)
@@ -0,0 +1,13 @@
1
+ %p Hi admin,
2
+
3
+ %p A <strong>#{@event}</strong> event has occurred.
4
+
5
+ %p Customer: #{@customer}, #{@customer.email}, #{@customer.stripe_customer_id}
6
+
7
+ - if @subscriptions.present?
8
+ %p Current subscriptions:
9
+ %ul
10
+ - @subscriptions.each do |subscription|
11
+ %li #{subscription.subscribable.to_s} - #{subscription}
12
+ - else
13
+ %p This customer has no current subscriptions.
@@ -0,0 +1,9 @@
1
+ %p.effective-orders-receipt-info Payment failed
2
+
3
+ %p We were unable to charge your credit card #{@customer.active_card}.
4
+
5
+ %p We will attempt to charge your credit card again in a few days for 3 total attempts.
6
+
7
+ %p Please click the following link to update your card settings:
8
+
9
+ %p= link_to(effective_orders.customer_settings_url, effective_orders.customer_settings_url)
@@ -0,0 +1,9 @@
1
+ %p.effective-orders-receipt-info Payment succeeded
2
+
3
+ %p Thank you for your payment.
4
+
5
+ %p We have charged your credit card #{@customer.active_card}.
6
+
7
+ %p Please click the following link to view past invoices or update your card settings:
8
+
9
+ %p= link_to(effective_orders.customer_settings_url, effective_orders.customer_settings_url)
@@ -0,0 +1,5 @@
1
+ %p.effective-orders-receipt-info Trial expired
2
+
3
+ %p Your trial for #{@subscribable} has expired. To continue, please choose a paid plan.
4
+
5
+ %p= link_to(root_url, root_url)
@@ -0,0 +1,7 @@
1
+ %p.effective-orders-receipt-info Trial expiring
2
+
3
+ %p Your trial for #{@subscribable} expires on #{@subscribable.trialing_until.strftime('%F')}.
4
+
5
+ %p Please upgrade to a paid plan before your trial expires.
6
+
7
+ %p= link_to(root_url, root_url)
@@ -0,0 +1,13 @@
1
+ %p.effective-orders-receipt-info Subscription updated
2
+
3
+ %p Your subscription has changed
4
+
5
+ %p You are currently subscribed to the following:
6
+
7
+ %ul
8
+ - @subscriptions.each do |subscription|
9
+ %li #{subscription.subscribable.to_s} - #{subscription}
10
+
11
+ %p Please click the following link to view past invoices or update your card settings:
12
+
13
+ %p= link_to(effective_orders.customer_settings_url, effective_orders.customer_settings_url)
@@ -0,0 +1,60 @@
1
+ = javascript_include_tag 'https://checkout.stripe.com/checkout.js'
2
+
3
+ - stripe = subscripter_stripe_data(subscripter)
4
+ - plans = subscripter_stripe_plans(subscripter)
5
+
6
+ - subscripter.quantity ||= subscripter.subscribable.subscribable_quantity_used
7
+ - subscripter.stripe_plan_id ||= Hash(plans.first)[:id]
8
+
9
+ - if subscripter.stripe_plan_id.present? && plans.present? && plans.none? { |plan| plan[:id] == subscripter.stripe_plan_id }
10
+ - closest_plan = plans.find { |plan| plan[:interval] == subscripter.plan[:interval] }
11
+ - subscripter.stripe_plan_id = closest_plan[:id] if closest_plan.present?
12
+
13
+ = effective_form_with(model: subscripter, url: effective_orders.subscripter_path, remote: true, data: { stripe: stripe, plans: plans }) do |f|
14
+ = f.hidden_field :subscribable_global_id
15
+ = f.hidden_field :stripe_token, value: nil
16
+ = f.hidden_field :stripe_plan_id
17
+ = f.error :stripe_token
18
+
19
+ - if f.object.subscribable.subscribed?
20
+ - quantity_used = f.object.subscribable.subscribable_quantity_used.to_i
21
+ - quantity_purchased = f.object.subscribable.subscription.quantity
22
+
23
+ .text-center
24
+ %p
25
+ You currently have <strong>#{pluralize(quantity_used, 'member')}</strong> in your team
26
+ and have space for <strong>#{pluralize(quantity_purchased, 'member')}</strong>.
27
+
28
+ - if quantity_purchased > quantity_used
29
+ %p You can add #{pluralize(quantity_purchased - quantity_used, 'more member')} without updating your plan.
30
+ - else
31
+ %p To add more members you will need to update your plan.
32
+
33
+ %p To pay for less than #{pluralize(quantity_used, 'member')}, remove some team members first.
34
+
35
+ - else
36
+ .text-center
37
+ %p
38
+ You are not currently subscribed to any plan.
39
+ %br
40
+ For full access, upgrade to a paid plan below.
41
+ %br
42
+ To upgrade with fewer people, remove some team members first.
43
+
44
+ .card.mb-4
45
+ .card-body.card-subscripter
46
+ %h5.card-title.subscripter-title Billing Cycle
47
+
48
+ = f.radios :stripe_plan_id, plans.map { |plan| [plan[:name], plan[:id]] }, label: false, buttons: true
49
+
50
+ %hr.mt-4.mb-4
51
+
52
+ - plans.each do |plan|
53
+ = f.show_if(:stripe_plan_id, plan[:id]) do
54
+ = render 'effective/subscripter/plan', plan: plan, f: f
55
+
56
+ = f.submit(border: false, center: true) do
57
+ - if f.object.token_required?
58
+ = f.save('Continue to Billing', class: 'effective-orders-stripe-token-required')
59
+ - else
60
+ = f.save('Upgrade Now')
@@ -0,0 +1,23 @@
1
+ .effective-orders-stripe-plan{data: plan}
2
+ .d-flex.justify-content-around.align-top
3
+ = f.integer_field :quantity, autocomplete: 'off', required: true, label: 'Total People', maxlength: 3,
4
+ class: 'effective-orders-subscripter-plan-quantity form-control-lg'
5
+
6
+ .subscripter-math-symbol= 'x'
7
+
8
+ = f.static_field :price_per_person, label: 'Price Per Person' do
9
+ = price_to_currency(plan[:amount])
10
+
11
+ - if plan[:savings]
12
+ .subscripter-savings.text-danger
13
+ Save #{price_to_currency(plan[:savings])}/person
14
+
15
+ .subscripter-math-symbol= '='
16
+
17
+ = f.static_field :total_amount, label: 'Total Amount' do
18
+ = price_to_currency(plan[:amount] * f.object.quantity.to_i)
19
+
20
+ - if plan[:savings]
21
+ .subscripter-total-savings.text-danger
22
+ Save
23
+ %span #{price_to_currency(f.object.quantity.to_i * plan[:savings])}
@@ -0,0 +1,25 @@
1
+ !!!
2
+ %html{style: 'background: #fff;'}
3
+ %head
4
+ %meta{:content => 'text/html; charset=UTF-8', 'http-equiv' => 'Content-Type'}
5
+
6
+ :css
7
+ .effective-order table.table { min-width: 650px; vertical-align: top; border: 0; }
8
+ .effective-order table.table td { border: 0; vertical-align: top; }
9
+ .effective-order { text-align: left; }
10
+ .effective-order .price { text-align: right; }
11
+ .effective-order tfoot th { text-align: right; }
12
+ .effective-order tfoot tr:first-child td { padding-top: 24px; }
13
+ .effective-order tfoot tr:first-child th { padding-top: 24px; }
14
+ .effective-order-shipping { padding-top: 12px; padding-bottom: 12px; }
15
+ .effective-order-header h1 { margin: 0; }
16
+ @media print { .effective-page-break { page-break-inside: avoid; page-break-after: always; min-height: 1px; } }
17
+
18
+ %body{style: 'background: #fff;'}
19
+ %table{style: 'width: 100%;'}
20
+ %tr
21
+ %td
22
+ %table{style: 'max-width: 650px; margin: 4px auto 30px;'}
23
+ %tbody{style: 'width: 100%;'}
24
+ %tr
25
+ %td= yield
@@ -0,0 +1,279 @@
1
+ # EffectiveOrders Rails Engine
2
+
3
+ EffectiveOrders.setup do |config|
4
+ # Configure Database Tables
5
+ config.orders_table_name = :orders
6
+ config.order_items_table_name = :order_items
7
+ config.carts_table_name = :carts
8
+ config.cart_items_table_name = :cart_items
9
+ config.customers_table_name = :customers
10
+ config.subscriptions_table_name = :subscriptions
11
+ config.products_table_name = :products
12
+
13
+ # Authorization Method
14
+ #
15
+ # This method is called by all controller actions with the appropriate action and resource
16
+ # If the method returns false, an Effective::AccessDenied Error will be raised (see README.md for complete info)
17
+ #
18
+ # Use via Proc (and with CanCan):
19
+ # config.authorization_method = Proc.new { |controller, action, resource| can?(action, resource) }
20
+ #
21
+ # Use via custom method:
22
+ # config.authorization_method = :my_authorization_method
23
+ #
24
+ # And then in your application_controller.rb:
25
+ #
26
+ # def my_authorization_method(action, resource)
27
+ # current_user.is?(:admin)
28
+ # end
29
+ #
30
+ # Or disable the check completely:
31
+ # config.authorization_method = false
32
+ config.authorization_method = Proc.new { |controller, action, resource| authorize!(action, resource) } # CanCanCan
33
+
34
+ # Layout Settings
35
+ # Configure the Layout per controller, or all at once
36
+
37
+ # config.layout = 'application' # All EffectiveOrders controllers will use this layout
38
+ config.layout = {
39
+ carts: 'application',
40
+ orders: 'application',
41
+ subscriptions: 'application',
42
+ admin_customers: 'admin',
43
+ admin_orders: 'admin'
44
+ }
45
+
46
+ # Filter the @orders on admin/orders#index screen
47
+ # config.orders_collection_scope = Proc.new { |scope| scope.where(...) }
48
+
49
+ # Require these addresses when creating a new Order. Works with effective_addresses gem
50
+ config.billing_address = true
51
+ config.shipping_address = false
52
+ config.use_address_full_name = true
53
+
54
+ # Use effective_obfuscation gem to change order.id into a seemingly random 10-digit number
55
+ config.obfuscate_order_ids = false
56
+
57
+ # If set, the orders#new screen will render effective/orders/_order_note_fields to capture any Note info
58
+ config.collect_note = false
59
+ config.collect_note_required = false
60
+ config.collect_note_message = ''
61
+
62
+ # If true, the orders#new screen will render effective/orders/_terms_and_conditions_fields to require a Terms of Service boolean
63
+ # config.terms_and_conditions_label can be a String or a Proc
64
+ # config.terms_and_conditions_label = Proc.new { |order| "Yes, I agree to the #{link_to 'terms and conditions', terms_and_conditions_path}." }
65
+ config.terms_and_conditions = false
66
+ config.terms_and_conditions_label = 'I agree to the terms and conditions.'
67
+
68
+ # Tax Calculation Method
69
+ # The Effective::TaxRateCalculator considers the order.billing_address and assigns a tax based on country & state code
70
+ # Right now, only Canadian provinces are supported. Sorry.
71
+ # To always charge 12.5% tax: Proc.new { |order| 12.5 }
72
+ # To always charge 0% tax: Proc.new { |order| 0 }
73
+ # If the Proc returns nil, the tax rate will be calculated once again whenever the order is validated
74
+ # An order must have a tax rate (even if the value is 0) to be purchased
75
+ config.order_tax_rate_method = Proc.new { |order| Effective::TaxRateCalculator.new(order: order).tax_rate }
76
+
77
+ # Minimum Charge
78
+ # Prevent orders less than this value from being purchased
79
+ # Stripe doesn't allow orders less than $0.50
80
+ # Set to nil for no minimum charge
81
+ # Default value is 50 cents, or $0.50
82
+ config.minimum_charge = 50
83
+
84
+ # Free Orders
85
+ # Allow orders with a total of 0.00 to be purchased (regardless of the minimum charge setting)
86
+ config.free_enabled = true
87
+
88
+ # Mark as Paid
89
+ # Mark an order as paid without going through a processor
90
+ # This is accessed via the admin screens only. Must have can?(:admin, :effective_orders)
91
+ config.mark_as_paid_enabled = false
92
+
93
+ # Pretend Purchase
94
+ # Display a 'Purchase order' button on the Checkout screen allowing the user
95
+ # to purchase an Order without going through the payment processor.
96
+ # WARNING: Setting this option to true will allow users to purchase! an Order without entering a credit card
97
+ # WARNING: When true, users can purchase! anything without paying money
98
+ config.pretend_enabled = !Rails.env.production?
99
+ config.pretend_message = '* payment information is not required to process this order at this time.'
100
+
101
+ # Mailer Settings
102
+ # effective_orders sends out receipts to buyers and admins as well as trial and subscription related emails.
103
+ # For all the emails, the same :subject_prefix will be prefixed. Leave as nil / empty string if you don't want any prefix
104
+ #
105
+ # All the subject_* keys below can one of:
106
+ # - nil / empty string to use the built in defaults
107
+ # - A string with the full subject line for this email
108
+ # - A Proc to create the subject line based on the email
109
+ # The subject_prefix will then be applied ontop of these.
110
+ #
111
+ # send_order_receipt_to_buyer: Proc.new { |order| "Order #{order.to_param} has been purchased"}
112
+ # subject_for_subscription_payment_succeeded: Proc.new { |order| "Order #{order.to_param} has been purchased"}
113
+
114
+ # subject_for_subscription_trialing: Proc.new { |subscribable| "Pending Order #{order.to_param}"}
115
+
116
+ config.mailer = {
117
+ send_order_receipt_to_admin: true,
118
+ send_order_receipt_to_buyer: true,
119
+ send_payment_request_to_buyer: true,
120
+ send_pending_order_invoice_to_buyer: true,
121
+ send_order_receipts_when_mark_as_paid: false,
122
+
123
+ send_subscription_event_to_admin: true,
124
+ send_subscription_created: true,
125
+ send_subscription_updated: true,
126
+ send_subscription_canceled: true,
127
+ send_subscription_payment_succeeded: true,
128
+ send_subscription_payment_failed: true,
129
+
130
+ send_subscription_trialing: true, # Only if you schedule the rake task to run
131
+ send_subscription_trial_expired: true, # Only if you schedule the rake task to run
132
+
133
+ subject_prefix: '[example]',
134
+
135
+ # Procs yield an Effective::Order object
136
+ subject_for_order_receipt_to_admin: '',
137
+ subject_for_order_receipt_to_buyer: '',
138
+ subject_for_payment_request_to_buyer: '',
139
+ subject_for_pending_order_invoice_to_buyer: '',
140
+ subject_for_refund_notification_to_admin: '',
141
+
142
+ # Procs yield an Effective::Customer object
143
+ subject_for_subscription_created: '',
144
+ subject_for_subscription_updated: '',
145
+ subject_for_subscription_canceled: '',
146
+ subject_for_subscription_payment_succeeded: '',
147
+ subject_for_subscription_payment_failed: '',
148
+
149
+ # Procs yield the acts_as_subscribable object
150
+ subject_for_subscription_trialing: '',
151
+ subject_for_subscription_trial_expired: '',
152
+
153
+ layout: 'effective_orders_mailer_layout',
154
+
155
+ default_from: 'info@example.com',
156
+ admin_email: 'admin@example.com', # Refund notifications will also be sent here
157
+
158
+ deliver_method: nil # When nil, will use deliver_later if active_job is configured, otherwise deliver_now
159
+ }
160
+
161
+ #######################################
162
+ ## Payment Provider specific options ##
163
+ #######################################
164
+
165
+ # Cheque
166
+ # This is an deferred payment
167
+ config.cheque = false
168
+
169
+ # config.cheque = {
170
+ # confirm: 'Proceed with pay by cheque?',
171
+ # success: 'Thank you! You have indicated that this order will be purchased by cheque. Please send us a cheque and a copy of this invoice at your earliest convenience.'
172
+ # }
173
+
174
+ # Moneris
175
+ config.moneris = false
176
+
177
+ # if Rails.env.production?
178
+ # config.moneris = {
179
+ # ps_store_id: '',
180
+ # hpp_key: '',
181
+ # hpp_url: 'https://www3.moneris.com/HPPDP/index.php',
182
+ # verify_url: 'https://www3.moneris.com/HPPDP/verifyTxn.php'
183
+ # }
184
+ # else
185
+ # config.moneris = {
186
+ # ps_store_id: '',
187
+ # hpp_key: '',
188
+ # hpp_url: 'https://esqa.moneris.com/HPPDP/index.php',
189
+ # verify_url: 'https://esqa.moneris.com/HPPDP/verifyTxn.php'
190
+ # }
191
+ # end
192
+
193
+ # Paypal
194
+ config.paypal = false
195
+
196
+ # if Rails.env.production?
197
+ # config.paypal = {
198
+ # seller_email: '',
199
+ # secret: '',
200
+ # cert_id: '',
201
+ # paypal_url: 'https://www.paypal.com/cgi-bin/webscr',
202
+ # currency: 'CAD',
203
+ # paypal_cert: "#{Rails.root}/config/paypalcerts/production/paypal_cert.pem",
204
+ # app_cert: "#{Rails.root}/config/paypalcerts/production/app_cert.pem",
205
+ # app_key: "#{Rails.root}/config/paypalcerts/production/app_key.pem"
206
+ # }
207
+ # else
208
+ # config.paypal = {
209
+ # seller_email: '',
210
+ # secret: '',
211
+ # cert_id: '',
212
+ # paypal_url: 'https://www.sandbox.paypal.com/cgi-bin/webscr',
213
+ # currency: 'CAD',
214
+ # paypal_cert: "#{Rails.root}/config/paypalcerts/#{Rails.env}/paypal_cert.pem",
215
+ # app_cert: "#{Rails.root}/config/paypalcerts/#{Rails.env}/app_cert.pem",
216
+ # app_key: "#{Rails.root}/config/paypalcerts/#{Rails.env}/app_key.pem"
217
+ # }
218
+ # end
219
+
220
+ # Phone
221
+ # This is an deferred payment
222
+ config.phone = false
223
+
224
+ # config.phone = {
225
+ # confirm: 'Proceed with pay by phone?',
226
+ # success: 'Thank you! You have indicated that this order will be purchased by phone. Please give us a call at your earliest convenience.'
227
+ # }
228
+
229
+
230
+ # Refunds
231
+ # This does not issue a refund with the payment processor at all.
232
+ # Instead, we mark the order as purchased, create a refund object to track it, and
233
+ # send an email to mailer[:admin_email] with instructions to issue a refund
234
+ config.refund = false
235
+
236
+ # config.refund = {
237
+ # success: 'Thank you! Your refund will be processed in the next few business days.'
238
+ # }
239
+
240
+ # Stripe
241
+ config.stripe = false
242
+
243
+ # if Rails.env.production?
244
+ # config.stripe = {
245
+ # secret_key: 'sk_xxx',
246
+ # publishable_key: 'pk_xxx',
247
+ # currency: 'usd',
248
+ # site_title: 'My Site',
249
+ # site_image: 'logo.png' # A relative or absolute URL pointing to a square image of your brand or product. The recommended minimum size is 128x128px.
250
+ # }
251
+ # else
252
+ # config.stripe = {
253
+ # secret_key: 'sk_test_xxx',
254
+ # publishable_key: 'pk_test_xxx',
255
+ # currency: 'usd',
256
+ # site_title: 'My Site',
257
+ # site_image: 'logo.png' # A relative or absolute URL pointing to a square image of your brand or product. The recommended minimum size is 128x128px.
258
+ # }
259
+ # end
260
+
261
+ # Subscriptions (https://stripe.com/docs/subscriptions)
262
+ config.subscriptions = false
263
+
264
+ # config.subscriptions = {
265
+ # webhook_secret: 'whsec_xxx',
266
+ # ignore_livemode: false # Use this to run test mode in production. careful.
267
+ # }
268
+
269
+ # Trial
270
+ config.trial = false
271
+
272
+ # config.trial = {
273
+ # name: 'Free Trial',
274
+ # description: '45-Day Free Trial',
275
+ # length: 45.days,
276
+ # remind_at: [1.day, 3.days, 7.days, 40.days, 44.days], # Send email notification to trialing owners on day 1, 3, 7 40 and 44. false to disable
277
+ # }
278
+
279
+ end