effective_orders 4.6.2 → 5.0.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/MIT-LICENSE +1 -1
  3. data/README.md +14 -86
  4. data/app/controllers/admin/customers_controller.rb +5 -16
  5. data/app/controllers/admin/order_items_controller.rb +6 -9
  6. data/app/controllers/admin/orders_controller.rb +18 -82
  7. data/app/controllers/effective/carts_controller.rb +10 -6
  8. data/app/controllers/effective/concerns/purchase.rb +12 -19
  9. data/app/controllers/effective/customers_controller.rb +4 -2
  10. data/app/controllers/effective/orders_controller.rb +29 -26
  11. data/app/controllers/effective/providers/cheque.rb +3 -1
  12. data/app/controllers/effective/providers/free.rb +3 -2
  13. data/app/controllers/effective/providers/mark_as_paid.rb +5 -4
  14. data/app/controllers/effective/providers/moneris.rb +3 -1
  15. data/app/controllers/effective/providers/paypal.rb +3 -2
  16. data/app/controllers/effective/providers/phone.rb +3 -1
  17. data/app/controllers/effective/providers/pretend.rb +4 -3
  18. data/app/controllers/effective/providers/refund.rb +4 -3
  19. data/app/controllers/effective/providers/stripe.rb +4 -3
  20. data/app/controllers/effective/subscripter_controller.rb +4 -2
  21. data/app/controllers/effective/webhooks_controller.rb +12 -3
  22. data/app/datatables/admin/effective_customers_datatable.rb +7 -3
  23. data/app/datatables/admin/effective_orders_datatable.rb +2 -2
  24. data/app/datatables/effective_orders_datatable.rb +1 -3
  25. data/app/helpers/effective_orders_helper.rb +1 -7
  26. data/app/mailers/effective/orders_mailer.rb +131 -96
  27. data/app/models/concerns/acts_as_purchasable.rb +0 -11
  28. data/app/models/concerns/acts_as_subscribable.rb +0 -6
  29. data/app/models/effective/cart.rb +7 -5
  30. data/app/models/effective/cart_item.rb +7 -4
  31. data/app/models/effective/customer.rb +7 -6
  32. data/app/models/effective/order.rb +61 -61
  33. data/app/models/effective/order_item.rb +20 -8
  34. data/app/models/effective/product.rb +11 -6
  35. data/app/models/effective/subscription.rb +13 -12
  36. data/app/views/admin/orders/_form.html.haml +5 -9
  37. data/app/views/admin/orders/_order_item_fields.html.haml +8 -12
  38. data/app/views/effective/orders/_checkout_step2.html.haml +1 -2
  39. data/app/views/effective/orders/_order_actions.html.haml +2 -2
  40. data/app/views/effective/orders/show.html.haml +4 -0
  41. data/config/effective_orders.rb +8 -32
  42. data/config/routes.rb +16 -17
  43. data/db/migrate/01_create_effective_orders.rb.erb +4 -0
  44. data/lib/effective_orders.rb +34 -76
  45. data/lib/effective_orders/engine.rb +0 -7
  46. data/lib/effective_orders/version.rb +1 -1
  47. data/lib/generators/templates/effective_orders_mailer_preview.rb +13 -13
  48. data/lib/tasks/effective_orders_tasks.rake +2 -2
  49. metadata +2 -3
  50. data/app/models/effective/access_denied.rb +0 -17
@@ -1,10 +1,12 @@
1
1
  module Effective
2
2
  class CustomersController < ApplicationController
3
- layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:customers] : EffectiveOrders.layout)
3
+ before_action(:authenticate_user!) if defined?(Devise)
4
4
 
5
5
  include Effective::CrudController
6
6
 
7
- before_action :authenticate_user!
7
+ if (config = EffectiveOrders.layout)
8
+ layout(config.kind_of?(Hash) ? (config[:customers] || config[:application]) : config)
9
+ end
8
10
 
9
11
  submit :save, 'Save', success: -> { 'Successfully updated card.' }
10
12
  page_title 'Customer Settings'
@@ -1,18 +1,21 @@
1
1
  module Effective
2
2
  class OrdersController < ApplicationController
3
+ include Effective::CrudController
3
4
  include Concerns::Purchase
4
5
 
5
- include Providers::Cheque if EffectiveOrders.cheque?
6
- include Providers::Free if EffectiveOrders.free?
7
- include Providers::MarkAsPaid if EffectiveOrders.mark_as_paid?
8
- include Providers::Moneris if EffectiveOrders.moneris?
9
- include Providers::Paypal if EffectiveOrders.paypal?
10
- include Providers::Phone if EffectiveOrders.phone?
11
- include Providers::Pretend if EffectiveOrders.pretend?
12
- include Providers::Refund if EffectiveOrders.refund?
13
- include Providers::Stripe if EffectiveOrders.stripe?
14
-
15
- layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:orders] : EffectiveOrders.layout)
6
+ include Providers::Cheque
7
+ include Providers::Free
8
+ include Providers::MarkAsPaid
9
+ include Providers::Moneris
10
+ include Providers::Paypal
11
+ include Providers::Phone
12
+ include Providers::Pretend
13
+ include Providers::Refund
14
+ include Providers::Stripe
15
+
16
+ if (config = EffectiveOrders.layout)
17
+ layout(config.kind_of?(Hash) ? (config[:orders] || config[:application]) : config)
18
+ end
16
19
 
17
20
  before_action :authenticate_user!, except: [:ccbill_postback, :free, :paypal_postback, :moneris_postback, :pretend]
18
21
  before_action :set_page_title, except: [:show]
@@ -26,7 +29,7 @@ module Effective
26
29
  def new
27
30
  @order ||= Effective::Order.new(view_context.current_cart)
28
31
 
29
- EffectiveOrders.authorize!(self, :new, @order)
32
+ EffectiveResources.authorize!(self, :new, @order)
30
33
 
31
34
  unless @order.valid?
32
35
  flash[:danger] = "Unable to proceed: #{flash_errors(@order)}. Please try again."
@@ -38,7 +41,7 @@ module Effective
38
41
  # Confirms an order from the cart.
39
42
  def create
40
43
  @order ||= Effective::Order.new(view_context.current_cart)
41
- EffectiveOrders.authorize!(self, :create, @order)
44
+ EffectiveResources.authorize!(self, :create, @order)
42
45
 
43
46
  @order.assign_attributes(checkout_params)
44
47
 
@@ -57,21 +60,21 @@ module Effective
57
60
  # Might render step1 or step2
58
61
  def show
59
62
  @order = Effective::Order.find(params[:id])
60
- EffectiveOrders.authorize!(self, :show, @order)
63
+ EffectiveResources.authorize!(self, :show, @order)
61
64
 
62
65
  @page_title ||= ((@order.user == current_user && !@order.purchased?) ? 'Checkout' : @order.to_s)
63
66
  end
64
67
 
65
68
  # Always step1
66
69
  def edit
67
- @order ||= Effective::Order.find(params[:id])
68
- EffectiveOrders.authorize!(self, :edit, @order)
70
+ @order ||= Effective::Order.not_purchased.find(params[:id])
71
+ EffectiveResources.authorize!(self, :edit, @order)
69
72
  end
70
73
 
71
74
  # Confirms the order from existing order
72
75
  def update
73
- @order ||= Effective::Order.find(params[:id])
74
- EffectiveOrders.authorize!(self, :update, @order)
76
+ @order ||= Effective::Order.not_purchased.find(params[:id])
77
+ EffectiveResources.authorize!(self, :update, @order)
75
78
 
76
79
  @order.assign_attributes(checkout_params)
77
80
 
@@ -86,28 +89,28 @@ module Effective
86
89
  # My Orders History
87
90
  def index
88
91
  @datatable = EffectiveOrdersDatatable.new(user_id: current_user.id)
89
- EffectiveOrders.authorize!(self, :index, Effective::Order.new(user: current_user))
92
+ EffectiveResources.authorize!(self, :index, Effective::Order.new(user: current_user))
90
93
  end
91
94
 
92
95
  # Thank you for Purchasing this Order. This is where a successfully purchased order ends up
93
96
  def purchased # Thank You!
94
97
  @order = Effective::Order.purchased.find(params[:id])
95
- EffectiveOrders.authorize!(self, :show, @order)
98
+ EffectiveResources.authorize!(self, :show, @order)
96
99
  end
97
100
 
98
101
  def deferred
99
102
  @order = Effective::Order.deferred.find(params[:id])
100
- EffectiveOrders.authorize!(self, :show, @order)
103
+ EffectiveResources.authorize!(self, :show, @order)
101
104
  end
102
105
 
103
106
  def declined
104
107
  @order = Effective::Order.declined.find(params[:id])
105
- EffectiveOrders.authorize!(self, :show, @order)
108
+ EffectiveResources.authorize!(self, :show, @order)
106
109
  end
107
110
 
108
111
  def send_buyer_receipt
109
- @order = Effective::Order.find(params[:id])
110
- EffectiveOrders.authorize!(self, :show, @order)
112
+ @order = Effective::Order.purchased.find(params[:id])
113
+ EffectiveResources.authorize!(self, :show, @order)
111
114
 
112
115
  if @order.send_order_receipt_to_buyer!
113
116
  flash[:success] = "A receipt has been sent to #{@order.emails_send_to}"
@@ -128,10 +131,10 @@ module Effective
128
131
  @orders = Effective::Order.purchased.where(id: params[:ids])
129
132
 
130
133
  begin
131
- EffectiveOrders.authorize!(self, :index, Effective::Order.new(user: current_user))
134
+ EffectiveResources.authorize!(self, :index, Effective::Order.new(user: current_user))
132
135
 
133
136
  @orders.each do |order|
134
- next unless EffectiveOrders.authorized?(self, :show, order)
137
+ next unless EffectiveResources.authorized?(self, :show, order)
135
138
  order.send_order_receipt_to_buyer!
136
139
  end
137
140
 
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def cheque
7
+ raise('cheque provider is not available') unless EffectiveOrders.cheque?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  flash[:success] = EffectiveOrders.cheque[:success]
12
14
 
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def free
7
+ raise('free provider is not available') unless EffectiveOrders.free?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  unless @order.free?
12
14
  flash[:danger] = 'Unable to process free order with a non-zero total'
@@ -19,7 +21,6 @@ module Effective
19
21
  provider: 'free',
20
22
  card: 'none',
21
23
  purchased_url: free_params[:purchased_url],
22
- declined_url: free_params[:declined_url],
23
24
  email: false
24
25
  )
25
26
  end
@@ -4,10 +4,12 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def mark_as_paid
7
+ raise('mark_as_paid provider is not available') unless EffectiveOrders.mark_as_paid?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
10
- EffectiveOrders.authorize!(self, :admin, :effective_orders)
11
+ EffectiveResources.authorize!(self, :update, @order)
12
+ EffectiveResources.authorize!(self, :admin, :effective_orders)
11
13
 
12
14
  @order.assign_attributes(mark_as_paid_params.except(:payment, :payment_provider, :payment_card))
13
15
 
@@ -17,8 +19,7 @@ module Effective
17
19
  card: mark_as_paid_params[:payment_card],
18
20
  email: @order.send_mark_as_paid_email_to_buyer?,
19
21
  skip_buyer_validations: true,
20
- purchased_url: effective_orders.admin_order_path(@order),
21
- declined_url: effective_orders.admin_order_path(@order)
22
+ purchased_url: effective_orders.admin_order_path(@order)
22
23
  )
23
24
  end
24
25
 
@@ -10,9 +10,11 @@ module Effective
10
10
  end
11
11
 
12
12
  def moneris_postback
13
+ raise('moneris provider is not available') unless EffectiveOrders.moneris?
14
+
13
15
  @order ||= Effective::Order.find(params[:response_order_id])
14
16
 
15
- (EffectiveOrders.authorize!(self, :update, @order) rescue false)
17
+ (EffectiveResources.authorize!(self, :update, @order) rescue false)
16
18
 
17
19
  # Delete the Purchased and Declined Redirect URLs
18
20
  purchased_url = params.delete(:rvar_purchased_url)
@@ -10,9 +10,11 @@ module Effective
10
10
  # TODO: Make paypal postback work with admin checkout workflow
11
11
 
12
12
  def paypal_postback
13
+ raise('paypal provider is not available') unless EffectiveOrders.paypal?
14
+
13
15
  @order ||= Effective::Order.where(id: (params[:invoice].to_i rescue 0)).first
14
16
 
15
- (EffectiveOrders.authorize!(self, :update, @order) rescue false)
17
+ (EffectiveResources.authorize!(self, :update, @order) rescue false)
16
18
 
17
19
  if @order.present?
18
20
  if @order.purchased?
@@ -27,7 +29,6 @@ module Effective
27
29
  head(:ok)
28
30
  end
29
31
 
30
-
31
32
  end
32
33
  end
33
34
  end
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def phone
7
+ raise('phone provider is not available') unless EffectiveOrders.phone?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  flash[:success] = EffectiveOrders.phone[:success]
12
14
 
@@ -4,16 +4,17 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def pretend
7
+ raise('pretend provider is not available') unless EffectiveOrders.pretend?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  order_purchased(
12
14
  payment: 'for pretend',
13
15
  provider: 'pretend',
14
16
  card: 'none',
15
- purchased_url: pretend_params[:purchased_url],
16
- declined_url: pretend_params[:declined_url]
17
+ purchased_url: pretend_params[:purchased_url]
17
18
  )
18
19
  end
19
20
 
@@ -4,9 +4,11 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def refund
7
+ raise('refund provider is not available') unless EffectiveOrders.refund?
8
+
7
9
  @order ||= Order.find(params[:id])
8
10
 
9
- EffectiveOrders.authorize!(self, :update, @order)
11
+ EffectiveResources.authorize!(self, :update, @order)
10
12
 
11
13
  unless @order.refund?
12
14
  flash[:danger] = 'Unable to process refund order with a positive total'
@@ -19,8 +21,7 @@ module Effective
19
21
  order_purchased(
20
22
  payment: 'refund. no payment required.',
21
23
  provider: 'refund',
22
- purchased_url: refund_params[:purchased_url],
23
- declined_url: refund_params[:declined_url]
24
+ purchased_url: refund_params[:purchased_url]
24
25
  )
25
26
  end
26
27
 
@@ -4,10 +4,12 @@ module Effective
4
4
  extend ActiveSupport::Concern
5
5
 
6
6
  def stripe
7
+ raise('stripe provider is not available') unless EffectiveOrders.stripe?
8
+
7
9
  @order = Order.find(params[:id])
8
10
  @customer = Effective::Customer.for_user(@order.user)
9
11
 
10
- EffectiveOrders.authorize!(self, :update, @order)
12
+ EffectiveResources.authorize!(self, :update, @order)
11
13
 
12
14
  payment = validate_stripe_payment(stripe_params[:payment_intent_id])
13
15
 
@@ -24,8 +26,7 @@ module Effective
24
26
  payment: payment,
25
27
  provider: 'stripe',
26
28
  card: payment[:card],
27
- purchased_url: stripe_params[:purchased_url],
28
- declined_url: stripe_params[:declined_url]
29
+ purchased_url: stripe_params[:purchased_url]
29
30
  )
30
31
  end
31
32
 
@@ -1,9 +1,11 @@
1
1
  module Effective
2
2
  class SubscripterController < ApplicationController
3
- layout (EffectiveOrders.layout.kind_of?(Hash) ? EffectiveOrders.layout[:subscriptions] : EffectiveOrders.layout)
4
-
5
3
  include Effective::CrudController
6
4
 
5
+ if (config = EffectiveOrders.layout)
6
+ layout(config.kind_of?(Hash) ? (config[:subscriptions] || config[:application]) : config)
7
+ end
8
+
7
9
  submit :save, 'Save', redirect: :back, success: -> { 'Successfully updated plan.' }
8
10
 
9
11
  def resource
@@ -89,9 +89,18 @@ module Effective
89
89
  end
90
90
  end
91
91
 
92
- def send_email(email, *mailer_args)
93
- Effective::OrdersMailer.public_send(email, *mailer_args).public_send(EffectiveOrders.mailer[:deliver_method])
94
- Effective::OrdersMailer.public_send(:subscription_event_to_admin, email.to_s, *mailer_args).public_send(EffectiveOrders.mailer[:deliver_method])
92
+ def send_email(email, *args)
93
+ raise('expected args to be an Array') unless args.kind_of?(Array)
94
+
95
+ if defined?(Tenant)
96
+ tenant = Tenant.current || raise('expected a current tenant')
97
+ args << { tenant: tenant }
98
+ end
99
+
100
+ deliver_method = EffectiveOrders.mailer[:deliver_method] || EffectiveResources.deliver_method
101
+
102
+ EffectiveOrders.mailer_klass.send(email, *args).send(deliver_method)
103
+ EffectiveOrders.mailer_klass.send(:subscription_event_to_admin, email.to_s, *args).send(deliver_method)
95
104
  end
96
105
 
97
106
  def run_subscribable_buyer_callbacks!
@@ -2,8 +2,12 @@ class Admin::EffectiveCustomersDatatable < Effective::Datatable
2
2
  datatable do
3
3
 
4
4
  col :id, visible: false
5
- col :user
6
- col 'user.email'
5
+
6
+ col :user, search: :string
7
+
8
+ col :email do |customer|
9
+ customer.user.email
10
+ end
7
11
 
8
12
  if EffectiveOrders.stripe?
9
13
  col :stripe_customer_id
@@ -17,6 +21,6 @@ class Admin::EffectiveCustomersDatatable < Effective::Datatable
17
21
  end
18
22
 
19
23
  collection do
20
- Effective::Customer.joins(:user).all
24
+ Effective::Customer.includes(:user).all
21
25
  end
22
26
  end
@@ -40,7 +40,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
40
40
  end
41
41
 
42
42
  if attributes[:user_id].blank?
43
- col :user
43
+ col :user, search: :string
44
44
  col :billing_name, visible: false
45
45
  col :email, visible: false
46
46
  end
@@ -102,7 +102,7 @@ class Admin::EffectiveOrdersDatatable < Effective::Datatable
102
102
  end
103
103
 
104
104
  def user
105
- @user ||= User.find(attributes[:user_id])
105
+ @user ||= current_user.class.find(attributes[:user_id])
106
106
  end
107
107
 
108
108
  end
@@ -6,8 +6,6 @@ class EffectiveOrdersDatatable < Effective::Datatable
6
6
  scope :purchased, default: true
7
7
  scope :deferred
8
8
  scope :refunds
9
- scope :not_purchased
10
- scope :all
11
9
  end
12
10
  end
13
11
 
@@ -79,7 +77,7 @@ class EffectiveOrdersDatatable < Effective::Datatable
79
77
  end
80
78
 
81
79
  def user
82
- @user ||= User.find(attributes[:user_id])
80
+ @user ||= view.current_user.class.find(attributes[:user_id])
83
81
  end
84
82
 
85
83
  end
@@ -107,13 +107,7 @@ module EffectiveOrdersHelper
107
107
  end
108
108
  end
109
109
 
110
- def render_orders(obj, opts = {})
111
- orders = Array(obj.kind_of?(User) ? Effective::Order.purchased_by(obj) : obj)
112
-
113
- if orders.any? { |order| order.kind_of?(Effective::Order) == false }
114
- raise 'expected a User or Effective::Order'
115
- end
116
-
110
+ def render_orders(orders, opts = {})
117
111
  render(partial: 'effective/orders/orders_table', locals: { orders: orders }.merge(opts))
118
112
  end
119
113
 
@@ -1,183 +1,218 @@
1
1
  module Effective
2
2
  class OrdersMailer < ActionMailer::Base
3
- default from: EffectiveOrders.mailer[:default_from]
3
+ default from: -> { EffectiveOrders.mailer[:default_from] }
4
+ layout -> { EffectiveOrders.mailer[:layout].presence || 'effective_orders_mailer_layout' }
4
5
 
5
6
  helper EffectiveOrdersHelper
6
- layout EffectiveOrders.mailer[:layout].presence || 'effective_orders_mailer_layout'
7
7
 
8
- def order_receipt_to_admin(order_param)
9
- return true unless EffectiveOrders.mailer[:send_order_receipt_to_admin]
8
+ def order_receipt_to_admin(order_param, atts = {})
9
+ around_mail_action(:order_receipt_to_admin, order_param, atts) do
10
+ return true unless EffectiveOrders.mailer[:send_order_receipt_to_admin]
10
11
 
11
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
12
- @user = @order.user
12
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
13
+ @user = @order.user
13
14
 
14
- @subject = subject_for(@order, :order_receipt_to_admin, "Order Receipt: ##{@order.to_param}")
15
+ @subject = subject_for(@order, :order_receipt_to_admin, "Order Receipt: ##{@order.to_param}")
15
16
 
16
- mail(to: EffectiveOrders.mailer[:admin_email], from: EffectiveOrders.mailer[:default_from], subject: @subject)
17
+ mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
18
+ end
17
19
  end
18
20
 
19
- def order_receipt_to_buyer(order_param) # Buyer
20
- return true unless EffectiveOrders.mailer[:send_order_receipt_to_buyer]
21
+ def order_receipt_to_buyer(order_param, atts = {}) # Buyer
22
+ around_mail_action(:order_receipt_to_buyer, order_param, atts) do
23
+ return true unless EffectiveOrders.mailer[:send_order_receipt_to_buyer]
21
24
 
22
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
23
- @user = @order.user
25
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
26
+ @user = @order.user
24
27
 
25
- @subject = subject_for(@order, :order_receipt_to_buyer, "Order Receipt: ##{@order.to_param}")
28
+ @subject = subject_for(@order, :order_receipt_to_buyer, "Order Receipt: ##{@order.to_param}")
26
29
 
27
- mail(to: @order.email, cc: @order.cc, subject: @subject)
30
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
31
+ end
28
32
  end
29
33
 
30
34
  # This is sent when an admin creates a new order or /admin/orders/new
31
35
  # Or when Pay by Cheque or Pay by Phone (deferred payments)
32
36
  # Or uses the order action Send Payment Request
33
- def payment_request_to_buyer(order_param)
34
- return true unless EffectiveOrders.mailer[:send_payment_request_to_buyer]
37
+ def payment_request_to_buyer(order_param, atts = {})
38
+ around_mail_action(:payment_request_to_buyer, order_param, atts) do
39
+ return true unless EffectiveOrders.mailer[:send_payment_request_to_buyer]
35
40
 
36
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
37
- @user = @order.user
41
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
42
+ @user = @order.user
38
43
 
39
- @subject = subject_for(@order, :payment_request_to_buyer, "Request for Payment: Invoice ##{@order.to_param}")
44
+ @subject = subject_for(@order, :payment_request_to_buyer, "Request for Payment: Invoice ##{@order.to_param}")
40
45
 
41
- mail(to: @order.email, cc: @order.cc, subject: @subject)
46
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
47
+ end
42
48
  end
43
49
 
50
+
44
51
  # This is sent when someone chooses to Pay by Cheque
45
- def pending_order_invoice_to_buyer(order_param)
46
- return true unless EffectiveOrders.mailer[:send_pending_order_invoice_to_buyer]
52
+ def pending_order_invoice_to_buyer(order_param, atts = {})
53
+ around_mail_action(:pending_order_invoice_to_buyer, order_param, atts) do
54
+ return true unless EffectiveOrders.mailer[:send_pending_order_invoice_to_buyer]
47
55
 
48
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
49
- @user = @order.user
56
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
57
+ @user = @order.user
50
58
 
51
- @subject = subject_for(@order, :pending_order_invoice_to_buyer, "Pending Order: ##{@order.to_param}")
59
+ @subject = subject_for(@order, :pending_order_invoice_to_buyer, "Pending Order: ##{@order.to_param}")
52
60
 
53
- mail(to: @order.email, cc: @order.cc, subject: @subject)
61
+ mail(to: @order.email, cc: @order.cc, subject: @subject)
62
+ end
54
63
  end
55
64
 
56
65
  # This is sent to admin when someone Accepts Refund
57
- def refund_notification_to_admin(order_param)
58
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
59
- @user = @order.user
66
+ def refund_notification_to_admin(order_param, atts = {})
67
+ around_mail_action(:refund_notification_to_admin, order_param, atts) do
68
+ @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
69
+ @user = @order.user
60
70
 
61
- @subject = subject_for(@order, :refund_notification_to_admin, "New Refund: ##{@order.to_param}")
71
+ @subject = subject_for(@order, :refund_notification_to_admin, "New Refund: ##{@order.to_param}")
62
72
 
63
- mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
73
+ mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
74
+ end
64
75
  end
65
76
 
66
77
  # Sent by the invoice.payment_succeeded webhook event
67
- def subscription_payment_succeeded(customer_param)
68
- return true unless EffectiveOrders.mailer[:send_subscription_payment_succeeded]
78
+ def subscription_payment_succeeded(customer_param, atts = {})
79
+ around_mail_action(:subscription_payment_succeeded, customer_param, atts) do
80
+ return true unless EffectiveOrders.mailer[:send_subscription_payment_succeeded]
69
81
 
70
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
71
- @subscriptions = @customer.subscriptions
72
- @user = @customer.user
82
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
83
+ @subscriptions = @customer.subscriptions
84
+ @user = @customer.user
73
85
 
74
- @subject = subject_for(@customer, :subscription_payment_succeeded, 'Thank you for your payment')
86
+ @subject = subject_for(@customer, :subscription_payment_succeeded, 'Thank you for your payment')
75
87
 
76
- mail(to: @customer.user.email, subject: @subject)
88
+ mail(to: @customer.user.email, subject: @subject)
89
+ end
77
90
  end
78
91
 
79
92
  # Sent by the invoice.payment_failed webhook event
80
- def subscription_payment_failed(customer_param)
81
- return true unless EffectiveOrders.mailer[:send_subscription_payment_failed]
93
+ def subscription_payment_failed(customer_param, atts = {})
94
+ around_mail_action(:subscription_payment_failed, customer_param, atts) do
95
+ return true unless EffectiveOrders.mailer[:send_subscription_payment_failed]
82
96
 
83
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
84
- @subscriptions = @customer.subscriptions
85
- @user = @customer.user
97
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
98
+ @subscriptions = @customer.subscriptions
99
+ @user = @customer.user
86
100
 
87
- @subject = subject_for(@customer, :subscription_payment_failed, 'Payment failed - please update your card details')
101
+ @subject = subject_for(@customer, :subscription_payment_failed, 'Payment failed - please update your card details')
88
102
 
89
- mail(to: @customer.user.email, subject: @subject)
103
+ mail(to: @customer.user.email, subject: @subject)
104
+ end
90
105
  end
91
106
 
92
107
  # Sent by the customer.subscription.created webhook event
93
- def subscription_created(customer_param)
94
- return true unless EffectiveOrders.mailer[:send_subscription_created]
108
+ def subscription_created(customer_param, atts = {})
109
+ around_mail_action(:subscription_created, customer_param, atts) do
110
+ return true unless EffectiveOrders.mailer[:send_subscription_created]
95
111
 
96
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
97
- @subscriptions = @customer.subscriptions
98
- @user = @customer.user
112
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
113
+ @subscriptions = @customer.subscriptions
114
+ @user = @customer.user
99
115
 
100
- @subject = subject_for(@customer, :subscription_created, 'New Subscription')
116
+ @subject = subject_for(@customer, :subscription_created, 'New Subscription')
101
117
 
102
- mail(to: @customer.user.email, subject: @subject)
118
+ mail(to: @customer.user.email, subject: @subject)
119
+ end
103
120
  end
104
121
 
105
122
  # Sent by the customer.subscription.updated webhook event
106
- def subscription_updated(customer_param)
107
- return true unless EffectiveOrders.mailer[:send_subscription_updated]
123
+ def subscription_updated(customer_param, atts = {})
124
+ around_mail_action(:subscription_updated, customer_param, atts) do
125
+ return true unless EffectiveOrders.mailer[:send_subscription_updated]
108
126
 
109
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
110
- @subscriptions = @customer.subscriptions
111
- @user = @customer.user
127
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
128
+ @subscriptions = @customer.subscriptions
129
+ @user = @customer.user
112
130
 
113
- @subject = subject_for(@customer, :subscription_updated, 'Subscription Changed')
131
+ @subject = subject_for(@customer, :subscription_updated, 'Subscription Changed')
114
132
 
115
- mail(to: @customer.user.email, subject: @subject)
133
+ mail(to: @customer.user.email, subject: @subject)
134
+ end
116
135
  end
117
136
 
118
137
  # Sent by the invoice.payment_failed webhook event
119
- def subscription_canceled(customer_param)
120
- return true unless EffectiveOrders.mailer[:send_subscription_canceled]
138
+ def subscription_canceled(customer_param, atts = {})
139
+ around_mail_action(:subscription_canceled, customer_param, atts) do
140
+ return true unless EffectiveOrders.mailer[:send_subscription_canceled]
121
141
 
122
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
123
- @subscriptions = @customer.subscriptions
124
- @user = @customer.user
142
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
143
+ @subscriptions = @customer.subscriptions
144
+ @user = @customer.user
125
145
 
126
- @subject = subject_for(@customer, :subscription_canceled, 'Subscription canceled')
146
+ @subject = subject_for(@customer, :subscription_canceled, 'Subscription canceled')
127
147
 
128
- mail(to: @customer.user.email, subject: @subject)
148
+ mail(to: @customer.user.email, subject: @subject)
149
+ end
129
150
  end
130
151
 
131
152
  # Sent by the effective_orders:notify_trial_users rake task.
132
- def subscription_trialing(subscribable)
133
- return true unless EffectiveOrders.mailer[:send_subscription_trialing]
153
+ def subscription_trialing(subscribable, atts = {})
154
+ around_mail_action(:subscription_trialing, subscribable, atts) do
155
+ return true unless EffectiveOrders.mailer[:send_subscription_trialing]
134
156
 
135
- @subscribable = subscribable
136
- @user = @subscribable.subscribable_buyer
157
+ @subscribable = subscribable
158
+ @user = @subscribable.subscribable_buyer
137
159
 
138
- @subject = subject_for(@customer, :subscription_trialing, 'Trial is active')
160
+ @subject = subject_for(@customer, :subscription_trialing, 'Trial is active')
139
161
 
140
- mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
162
+ mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
163
+ end
141
164
  end
142
165
 
143
166
  # Sent by the effective_orders:notify_trial_users rake task.
144
- def subscription_trial_expired(subscribable)
145
- return true unless EffectiveOrders.mailer[:send_subscription_trial_expired]
167
+ def subscription_trial_expired(subscribable, atts = {})
168
+ around_mail_action(:subscription_trial_expired, subscribable, atts) do
169
+ return true unless EffectiveOrders.mailer[:send_subscription_trial_expired]
146
170
 
147
- @subscribable = subscribable
148
- @user = @subscribable.subscribable_buyer
171
+ @subscribable = subscribable
172
+ @user = @subscribable.subscribable_buyer
149
173
 
150
- @subject = subject_for(@customer, :subscription_trial_expired, 'Trial expired')
174
+ @subject = subject_for(@customer, :subscription_trial_expired, 'Trial expired')
151
175
 
152
- mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
176
+ mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
177
+ end
153
178
  end
154
179
 
155
- def subscription_event_to_admin(event, customer_param)
156
- return true unless EffectiveOrders.mailer[:send_subscription_event_to_admin]
180
+ def subscription_event_to_admin(event, customer_param, atts = {})
181
+ around_mail_action(:subscription_event_to_admin, event, atts) do
182
+ return true unless EffectiveOrders.mailer[:send_subscription_event_to_admin]
157
183
 
158
- @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
159
- @subscriptions = @customer.subscriptions
160
- @user = @customer.user
161
- @event = event.to_s
184
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
185
+ @subscriptions = @customer.subscriptions
186
+ @user = @customer.user
187
+ @event = event.to_s
162
188
 
163
- @subject = subject_for(@customer, :subscription_event_to_admin, "Subscription event - @event - @customer").gsub('@event', @event.to_s).gsub('@customer', @customer.to_s)
189
+ @subject = subject_for(@customer, :subscription_event_to_admin, "Subscription event - @event - @customer").gsub('@event', @event.to_s).gsub('@customer', @customer.to_s)
164
190
 
165
- mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
191
+ mail(to: EffectiveOrders.mailer[:admin_email], subject: @subject)
192
+ end
166
193
  end
167
194
 
168
195
  def order_error(order: nil, error: nil, to: nil, from: nil, subject: nil, template: 'order_error')
169
- @order = (order.kind_of?(Effective::Order) ? order : Effective::Order.find(order))
170
- @error = error.to_s
196
+ around_mail_action(:order_error, order, {error: error, to: to, from: from, subject: subject, template: template}) do
197
+ @order = (order.kind_of?(Effective::Order) ? order : Effective::Order.find(order))
198
+ @error = error.to_s
199
+
200
+ @subject = subject_for(@order, :error, "An error occurred with order: ##{@order.try(:to_param)}")
201
+
202
+ mail(
203
+ to: (to || EffectiveOrders.mailer[:admin_email]),
204
+ from: (from || EffectiveOrders.mailer[:default_from]),
205
+ subject: (subject || @subject)
206
+ ) do |format|
207
+ format.html { render(template) }
208
+ end
209
+ end
210
+ end
171
211
 
172
- @subject = subject_for(@order, :error, "An error occurred with order: ##{@order.try(:to_param)}")
212
+ protected
173
213
 
174
- mail(
175
- to: (to || EffectiveOrders.mailer[:admin_email]),
176
- from: (from || EffectiveOrders.mailer[:default_from]),
177
- subject: (subject || @subject)
178
- ) do |format|
179
- format.html { render(template) }
180
- end
214
+ def around_mail_action(name, param, atts = {}, &block)
215
+ yield
181
216
  end
182
217
 
183
218
  private