effective_orders 4.0.0beta12 → 4.0.0beta13

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 376115e079468c5d3491790fa4ecf3b3246a50ae
4
- data.tar.gz: 7fe5bd8bf1858d610165c69dbb5ea607ce43a592
3
+ metadata.gz: fdea3f4d9f23be9fc167ecab4c4fb9e713f5dace
4
+ data.tar.gz: 28345325ce45052bd240e048b52eefea6fcd06e4
5
5
  SHA512:
6
- metadata.gz: d23090e89bd8b6d52de083e31960952b3a770d22879acfa38df41996fc55cfd9e70f21b5edad298b7dd25fc034801b02ddcc7666bedd185dd791baebe7a532bb
7
- data.tar.gz: a0aff96d9a98967c8a5463a31973535d2f7d0c6cc5910200d5cfc158af5bc1d2d47e9fdaa777914bb7666cebc905a3ee0f1c138f9009f8ce2e5b47b3c8cc2ef1
6
+ metadata.gz: 1b03283f67b8f5f9d3d046b7f4f94e58f4631a6aa0f142ca560fbb829657220c139e949b7737d25f5217817996d55adb286f2ed7578939b579183006c0e581d6
7
+ data.tar.gz: f32aa391e9dcf39a615c392198ddc997d0f823535931b3a59b253877681d75c3d03a9a8d9000efec46d1561a66cff93905cafe86ae823b427f464deddda57178
@@ -40,3 +40,6 @@ $(document).on 'click', ".effective-orders-stripe-token-required[type='submit']"
40
40
  description: plan.name
41
41
  amount: plan.amount
42
42
  panelLabel: "{{amount}}/#{plan.interval} Go!"
43
+
44
+ $(document).on 'change', "input[name='effective_subscripter[stripe_plan_id]']", (event) ->
45
+ $(event.currentTarget).closest('form').find(".effective-orders-stripe-token-required[type='submit']").click()
@@ -39,21 +39,22 @@ module Effective
39
39
  # when 'charge.failed' # Card declined. 4000 0000 0000 0341
40
40
 
41
41
  when 'invoice.payment_succeeded'
42
- customer = Effective::Customer.where(stripe_customer_id: @event.data.object.customer).first!
43
42
  customer.update_attributes!(status: EffectiveOrders::ACTIVE)
44
43
 
45
44
  send_email(:subscription_payment_succeeded, customer)
46
45
  when 'invoice.payment_failed'
47
- customer = Effective::Customer.where(stripe_customer_id: @event.data.object.customer).first!
48
46
  customer.update_attributes!(status: EffectiveOrders::PAST_DUE)
49
47
 
50
48
  send_email(:subscription_payment_failed, customer)
51
49
  when 'customer.subscription.deleted'
52
- customer = Effective::Customer.where(stripe_customer_id: @event.data.object.customer).first!
53
50
  customer.update_attributes!(stripe_subscription_id: nil, status: nil, active_card: nil)
54
51
  customer.subscriptions.delete_all
55
52
 
56
53
  send_email(:subscription_canceled, customer)
54
+ when 'customer.subscription.created'
55
+ send_email(:subscription_created, customer)
56
+ when 'customer.subscription.updated'
57
+ send_email(:subscription_updated, customer)
57
58
  else
58
59
  Rails.logger.info "[STRIPE WEBHOOK] Unhandled event type #{@event.type}"
59
60
  end
@@ -64,6 +65,10 @@ module Effective
64
65
 
65
66
  private
66
67
 
68
+ def customer
69
+ @customer ||= Effective::Customer.where(stripe_customer_id: @event.data.object.customer).first!
70
+ end
71
+
67
72
  def send_email(email, *mailer_args)
68
73
  Effective::OrdersMailer.public_send(email, *mailer_args).public_send(EffectiveOrders.mailer[:deliver_method])
69
74
  end
@@ -64,6 +64,4 @@ module EffectiveSubscriptionsHelper
64
64
  }
65
65
  end
66
66
 
67
-
68
-
69
67
  end
@@ -1,46 +1,30 @@
1
1
  module Effective
2
2
  class OrdersMailer < ActionMailer::Base
3
- helper EffectiveOrdersHelper
3
+ default from: EffectiveOrders.mailer[:default_from]
4
4
 
5
+ helper EffectiveOrdersHelper
5
6
  layout EffectiveOrders.mailer[:layout].presence || 'effective_orders_mailer_layout'
6
7
 
7
8
  def order_receipt_to_admin(order_param)
8
9
  return true unless EffectiveOrders.mailer[:send_order_receipt_to_admin]
9
10
 
10
11
  @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
12
+ @user = @order.user
11
13
 
12
- mail(
13
- to: EffectiveOrders.mailer[:admin_email],
14
- from: EffectiveOrders.mailer[:default_from],
15
- subject: subject_for_order_receipt_to_admin(@order)
16
- )
14
+ @subject = subject_for(@order, :order_receipt_to_admin, "Order Receipt: ##{@order.to_param}")
15
+
16
+ mail(to: EffectiveOrders.mailer[:admin_email], from: EffectiveOrders.mailer[:default_from], subject: @subject)
17
17
  end
18
18
 
19
19
  def order_receipt_to_buyer(order_param) # Buyer
20
20
  return true unless EffectiveOrders.mailer[:send_order_receipt_to_buyer]
21
21
 
22
22
  @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
23
+ @user = @order.user
23
24
 
24
- mail(
25
- to: @order.user.email,
26
- from: EffectiveOrders.mailer[:default_from],
27
- subject: subject_for_order_receipt_to_buyer(@order)
28
- )
29
- end
25
+ @subject = subject_for(@order, :order_receipt_to_buyer, "Order Receipt: ##{@order.to_param}")
30
26
 
31
- def order_receipt_to_seller(order_param, seller, order_items)
32
- return true unless EffectiveOrders.mailer[:send_order_receipt_to_seller]
33
-
34
- @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
35
- @user = seller.user
36
- @order_items = order_items
37
- @subject = subject_for_order_receipt_to_seller(@order, @order_items, seller.user)
38
-
39
- mail(
40
- to: @user.email,
41
- from: EffectiveOrders.mailer[:default_from],
42
- subject: @subject
43
- )
27
+ mail(to: @order.user.email, subject: @subject)
44
28
  end
45
29
 
46
30
  # This is sent when an admin creates a new order or /admin/orders/new
@@ -49,12 +33,11 @@ module Effective
49
33
  return true unless EffectiveOrders.mailer[:send_payment_request_to_buyer]
50
34
 
51
35
  @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
36
+ @user = @order.user
52
37
 
53
- mail(
54
- to: @order.user.email,
55
- from: EffectiveOrders.mailer[:default_from],
56
- subject: subject_for_payment_request_to_buyer(@order)
57
- )
38
+ @subject = subject_for(@order, :payment_request_to_buyer, "Request for Payment: Invoice ##{@order.to_param}")
39
+
40
+ mail(to: @order.user.email, subject: @subject)
58
41
  end
59
42
 
60
43
  # This is sent when someone chooses to Pay by Cheque
@@ -62,12 +45,11 @@ module Effective
62
45
  return true unless EffectiveOrders.mailer[:send_pending_order_invoice_to_buyer]
63
46
 
64
47
  @order = (order_param.kind_of?(Effective::Order) ? order_param : Effective::Order.find(order_param))
48
+ @user = @order.user
65
49
 
66
- mail(
67
- to: @order.user.email,
68
- from: EffectiveOrders.mailer[:default_from],
69
- subject: subject_for_pending_order_invoice_to_buyer(@order)
70
- )
50
+ @subject = subject_for(@order, :pending_order_invoice_to_buyer, "Pending Order: ##{@order.to_param}")
51
+
52
+ mail(to: @order.user.email, subject: @subject)
71
53
  end
72
54
 
73
55
  # Sent by the invoice.payment_succeeded webhook event
@@ -75,12 +57,12 @@ module Effective
75
57
  return true unless EffectiveOrders.mailer[:send_subscription_payment_succeeded]
76
58
 
77
59
  @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
60
+ @subscriptions = @customer.subscriptions
61
+ @user = @customer.user
78
62
 
79
- mail(
80
- to: @customer.user.email,
81
- from: EffectiveOrders.mailer[:default_from],
82
- subject: subject_for_subscription_payment_succeeded(@customer)
83
- )
63
+ @subject = subject_for(@customer, :subscription_payment_succeeded, 'Thank you for your payment')
64
+
65
+ mail(to: @customer.user.email, subject: @subject)
84
66
  end
85
67
 
86
68
  # Sent by the invoice.payment_failed webhook event
@@ -88,12 +70,38 @@ module Effective
88
70
  return true unless EffectiveOrders.mailer[:send_subscription_payment_failed]
89
71
 
90
72
  @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
73
+ @subscriptions = @customer.subscriptions
74
+ @user = @customer.user
91
75
 
92
- mail(
93
- to: @customer.user.email,
94
- from: EffectiveOrders.mailer[:default_from],
95
- subject: subject_for_subscription_payment_failed(@customer)
96
- )
76
+ @subject = subject_for(@customer, :subscription_payment_failed, 'Payment failed - please update your card details')
77
+
78
+ mail(to: @customer.user.email, subject: @subject)
79
+ end
80
+
81
+ # Sent by the customer.subscription.created webhook event
82
+ def subscription_created(customer_param)
83
+ return true unless EffectiveOrders.mailer[:send_subscription_created]
84
+
85
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
86
+ @subscriptions = @customer.subscriptions
87
+ @user = @customer.user
88
+
89
+ @subject = subject_for(@customer, :subscription_created, 'New Subscription')
90
+
91
+ mail(to: @customer.user.email, subject: @subject)
92
+ end
93
+
94
+ # Sent by the customer.subscription.updated webhook event
95
+ def subscription_updated(customer_param)
96
+ return true unless EffectiveOrders.mailer[:send_subscription_updated]
97
+
98
+ @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
99
+ @subscriptions = @customer.subscriptions
100
+ @user = @customer.user
101
+
102
+ @subject = subject_for(@customer, :subscription_updated, 'Subscription Changed')
103
+
104
+ mail(to: @customer.user.email, subject: @subject)
97
105
  end
98
106
 
99
107
  # Sent by the invoice.payment_failed webhook event
@@ -101,25 +109,24 @@ module Effective
101
109
  return true unless EffectiveOrders.mailer[:send_subscription_canceled]
102
110
 
103
111
  @customer = (customer_param.kind_of?(Effective::Customer) ? customer_param : Effective::Customer.find(customer_param))
112
+ @subscriptions = @customer.subscriptions
113
+ @user = @customer.user
104
114
 
105
- mail(
106
- to: @customer.user.email,
107
- from: EffectiveOrders.mailer[:default_from],
108
- subject: subject_for_subscription_canceled(@customer)
109
- )
115
+ @subject = subject_for(@customer, :subscription_canceled, 'Subscription canceled')
116
+
117
+ mail(to: @customer.user.email, subject: @subject)
110
118
  end
111
119
 
112
120
  # Sent by the effective_orders:notify_trial_users rake task.
113
- def subscription_trial_expiring(subscribable)
114
- return true unless EffectiveOrders.mailer[:send_subscription_trial_expiring]
121
+ def subscription_trialing(subscribable)
122
+ return true unless EffectiveOrders.mailer[:send_subscription_trialing]
115
123
 
116
124
  @subscribable = subscribable
125
+ @user = @subscribable.subscribable_buyer
117
126
 
118
- mail(
119
- to: @subscribable.subscribable_buyer.email,
120
- from: EffectiveOrders.mailer[:default_from],
121
- subject: subject_for_subscription_trial_expiring(@subscribable)
122
- )
127
+ @subject = subject_for(@customer, :subscription_trialing, 'Trial is active')
128
+
129
+ mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
123
130
  end
124
131
 
125
132
  # Sent by the effective_orders:notify_trial_users rake task.
@@ -127,28 +134,23 @@ module Effective
127
134
  return true unless EffectiveOrders.mailer[:send_subscription_trial_expired]
128
135
 
129
136
  @subscribable = subscribable
137
+ @user = @subscribable.subscribable_buyer
130
138
 
131
- mail(
132
- to: @subscribable.subscribable_buyer.email,
133
- from: EffectiveOrders.mailer[:default_from],
134
- subject: subject_for_subscription_trial_expired(@subscribable)
135
- )
139
+ @subject = subject_for(@customer, :subscription_trial_expired, 'Trial expired')
140
+
141
+ mail(to: @subscribable.subscribable_buyer.email, subject: @subject)
136
142
  end
137
143
 
138
144
  def order_error(order: nil, error: nil, to: nil, from: nil, subject: nil, template: 'order_error')
139
- if order.present?
140
- @order = (order.kind_of?(Effective::Order) ? order : Effective::Order.find(order))
141
- @subject = (subject || "An error occurred with order: ##{@order.try(:to_param)}")
142
- else
143
- @subject = (subject || "An order error occurred with an unknown order")
144
- end
145
-
145
+ @order = (order.kind_of?(Effective::Order) ? order : Effective::Order.find(order))
146
146
  @error = error.to_s
147
147
 
148
+ @subject = subject_for(@order, :error, "An error occurred with order: ##{@order.try(:to_param)}")
149
+
148
150
  mail(
149
151
  to: (to || EffectiveOrders.mailer[:admin_email]),
150
152
  from: (from || EffectiveOrders.mailer[:default_from]),
151
- subject: prefix_subject(@subject),
153
+ subject: (subject || @subject)
152
154
  ) do |format|
153
155
  format.html { render(template) }
154
156
  end
@@ -156,109 +158,15 @@ module Effective
156
158
 
157
159
  private
158
160
 
159
- def subject_for_order_receipt_to_admin(order)
160
- string_or_callable = EffectiveOrders.mailer[:subject_for_order_receipt_to_admin]
161
-
162
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
163
- string_or_callable = self.instance_exec(order, &string_or_callable)
164
- end
165
-
166
- prefix_subject(string_or_callable.presence || "Order Receipt: ##{order.to_param}")
167
- end
168
-
169
- def subject_for_order_receipt_to_buyer(order)
170
- string_or_callable = EffectiveOrders.mailer[:subject_for_order_receipt_to_buyer]
171
-
172
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
173
- string_or_callable = self.instance_exec(order, &string_or_callable)
174
- end
175
-
176
- prefix_subject(string_or_callable.presence || "Order Receipt: ##{order.to_param}")
177
- end
178
-
179
- def subject_for_order_receipt_to_seller(order, order_items, seller)
180
- string_or_callable = EffectiveOrders.mailer[:subject_for_order_receipt_to_seller]
181
-
182
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
183
- string_or_callable = self.instance_exec(order, order_items, seller, &string_or_callable)
184
- end
185
-
186
- prefix_subject(string_or_callable.presence || "#{order_items.length} of your products #{order_items.length > 1 ? 'have' : 'has'} been purchased")
187
- end
188
-
189
- def subject_for_payment_request_to_buyer(order)
190
- string_or_callable = EffectiveOrders.mailer[:subject_for_payment_request_to_buyer]
161
+ def subject_for(order, action, fallback)
162
+ subject = EffectiveOrders.mailer["subject_for_#{action}".to_sym]
163
+ prefix = EffectiveOrders.mailer[:subject_prefix].to_s
191
164
 
192
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
193
- string_or_callable = self.instance_exec(order, &string_or_callable)
194
- end
195
-
196
- prefix_subject(string_or_callable.presence || "Request for Payment: Invoice ##{order.to_param}")
197
- end
198
-
199
- def subject_for_pending_order_invoice_to_buyer(order)
200
- string_or_callable = EffectiveOrders.mailer[:subject_for_pending_order_invoice_to_buyer]
201
-
202
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
203
- string_or_callable = self.instance_exec(order, &string_or_callable)
204
- end
205
-
206
- prefix_subject(string_or_callable.presence || "Pending Order: ##{order.to_param}")
207
- end
208
-
209
- def subject_for_subscription_payment_succeeded(customer)
210
- string_or_callable = EffectiveOrders.mailer[:subject_for_subscription_payment_succeeded]
211
-
212
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
213
- string_or_callable = self.instance_exec(order, &string_or_callable)
214
- end
165
+ subject = self.instance_exec(order, &subject) if subject.respond_to?(:call)
166
+ subject = subject.presence || fallback
215
167
 
216
- prefix_subject(string_or_callable.presence || 'Thank you for your payment')
168
+ prefix.present? ? (prefix.chomp(' ') + ' ' + subject) : subject
217
169
  end
218
170
 
219
- def subject_for_subscription_payment_failed(customer)
220
- string_or_callable = EffectiveOrders.mailer[:subject_for_subscription_payment_failed]
221
-
222
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
223
- string_or_callable = self.instance_exec(order, &string_or_callable)
224
- end
225
-
226
- prefix_subject(string_or_callable.presence || 'Payment failed - please update your card details')
227
- end
228
-
229
- def subject_for_subscription_canceled(customer)
230
- string_or_callable = EffectiveOrders.mailer[:subject_for_subscription_canceled]
231
-
232
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
233
- string_or_callable = self.instance_exec(order, &string_or_callable)
234
- end
235
-
236
- prefix_subject(string_or_callable.presence || 'Subscription canceled')
237
- end
238
-
239
- def subject_for_subscription_trial_expiring(customer)
240
- string_or_callable = EffectiveOrders.mailer[:subject_for_subscription_trial_expiring]
241
-
242
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
243
- string_or_callable = self.instance_exec(order, &string_or_callable)
244
- end
245
-
246
- prefix_subject(string_or_callable.presence || 'Trial expiring soon')
247
- end
248
-
249
- def subject_for_subscription_trial_expired(customer)
250
- string_or_callable = EffectiveOrders.mailer[:subject_for_subscription_trial_expired]
251
-
252
- if string_or_callable.respond_to?(:call) # This is a Proc or a function, not a string
253
- string_or_callable = self.instance_exec(order, &string_or_callable)
254
- end
255
-
256
- prefix_subject(string_or_callable.presence || 'Trial expired')
257
- end
258
-
259
- def prefix_subject(text)
260
- prefix = (EffectiveOrders.mailer[:subject_prefix].to_s rescue '')
261
- prefix.present? ? (prefix.chomp(' ') + ' ' + text) : text
262
- end
263
171
  end
264
172
  end
@@ -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.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)
@@ -112,21 +112,19 @@ EffectiveOrders.setup do |config|
112
112
  config.pretend_message = '* payment information is not required to process this order at this time.'
113
113
 
114
114
  # Mailer Settings
115
- # effective_orders will send out receipts to the buyer, seller and admins.
115
+ # effective_orders sends out receipts to buyers and admins as well as trial and subscription related emails.
116
116
  # For all the emails, the same :subject_prefix will be prefixed. Leave as nil / empty string if you don't want any prefix
117
117
  #
118
- # The subject_for_admin_receipt, subject_for_buyer_receipt, subject_for_payment_request and
119
- # subject_for_seller_receipt can be one of:
118
+ # All the subject_* keys below can one of:
120
119
  # - nil / empty string to use the built in defaults
121
120
  # - A string with the full subject line for this email
122
121
  # - A Proc to create the subject line based on the email
123
- # In all three of these cases, the subject_prefix will still be used.
122
+ # The subject_prefix will then be applied ontop of these.
123
+ #
124
+ # send_order_receipt_to_buyer: Proc.new { |order| "Order #{order.to_param} has been purchased"}
125
+ # subject_for_subscription_payment_succeeded: Proc.new { |order| "Order #{order.to_param} has been purchased"}
124
126
 
125
- # The Procs are the same for admin & buyer receipt, the seller Proc is different
126
- # subject_for_order_receipt_to_admin: Proc.new { |order| "Order #{order.to_param} has been purchased"}
127
- # subject_for_order_receipt_to_buyer: Proc.new { |order| "Order #{order.to_param} has been purchased"}
128
- # subject_for_payment_request_to_buyer: Proc.new { |order| "Pending Order #{order.to_param}"}
129
- # subject_for_order_receipt_to_seller: Proc.new { |order, order_items, seller| "Order #{order.to_param} has been purchased"}
127
+ # subject_for_subscription_trialing: Proc.new { |subscribable| "Pending Order #{order.to_param}"}
130
128
 
131
129
  config.mailer = {
132
130
  send_order_receipt_to_admin: true,
@@ -135,23 +133,32 @@ EffectiveOrders.setup do |config|
135
133
  send_pending_order_invoice_to_buyer: true,
136
134
  send_order_receipts_when_mark_as_paid: false,
137
135
 
136
+ send_subscription_created: true,
137
+ send_subscription_updated: true,
138
+ send_subscription_canceled: true,
138
139
  send_subscription_payment_succeeded: true,
139
140
  send_subscription_payment_failed: true,
140
- send_subscription_canceled: true,
141
- send_subscription_trial_expiring: true, # Only if you schedule the rake task to run
141
+
142
+ send_subscription_trialing: true, # Only if you schedule the rake task to run
142
143
  send_subscription_trial_expired: true, # Only if you schedule the rake task to run
143
144
 
144
145
  subject_prefix: '[example]',
145
146
 
147
+ # Procs yield an Effective::Order object
146
148
  subject_for_order_receipt_to_admin: '',
147
149
  subject_for_order_receipt_to_buyer: '',
148
150
  subject_for_payment_request_to_buyer: '',
149
151
  subject_for_pending_order_invoice_to_buyer: '',
150
152
 
153
+ # Procs yield an Effective::Customer object
154
+ subject_for_subscription_created: '',
155
+ subject_for_subscription_updated: '',
156
+ subject_for_subscription_canceled: '',
151
157
  subject_for_subscription_payment_succeeded: '',
152
158
  subject_for_subscription_payment_failed: '',
153
- subject_for_subscription_canceled: '',
154
- subject_for_subscription_trial_expiring: '',
159
+
160
+ # Procs yield the acts_as_subscribable object
161
+ subject_for_subscription_trialing: '',
155
162
  subject_for_subscription_trial_expired: '',
156
163
 
157
164
  layout: 'effective_orders_mailer_layout',
@@ -1,3 +1,3 @@
1
1
  module EffectiveOrders
2
- VERSION = '4.0.0beta12'.freeze
2
+ VERSION = '4.0.0beta13'.freeze
3
3
  end
@@ -23,6 +23,19 @@ module EffectiveOrders
23
23
  template ('../' * 3) + 'config/effective_orders.rb', 'config/initializers/effective_orders.rb'
24
24
  end
25
25
 
26
+ def copy_mailer_layout
27
+ layout = 'app/views/layouts/effective_orders_mailer_layout.html.haml'
28
+ template ('../' * 3) + layout, layout
29
+ end
30
+
31
+ def copy_mailer_templates
32
+ path = 'app/views/effective/orders_mailer/'
33
+
34
+ Dir["#{source_paths.first}/../../../#{path}**"].map { |file| file.split('/').last }.each do |name|
35
+ template (('../' * 3) + path + name), (path + name)
36
+ end
37
+ end
38
+
26
39
  def copy_mailer_preview
27
40
  mailer_preview_path = (Rails.application.config.action_mailer.preview_path rescue nil)
28
41
 
@@ -11,11 +11,6 @@ class EffectiveOrdersMailerPreview < ActionMailer::Preview
11
11
  Effective::OrdersMailer.order_receipt_to_buyer(build_preview_order)
12
12
  end
13
13
 
14
- def order_receipt_to_seller
15
- order = build_preview_order
16
- Effective::OrdersMailer.order_receipt_to_seller(order, preview_customer, order.order_items)
17
- end
18
-
19
14
  def payment_request_to_buyer
20
15
  Effective::OrdersMailer.payment_request_to_buyer(build_preview_order)
21
16
  end
@@ -32,12 +27,20 @@ class EffectiveOrdersMailerPreview < ActionMailer::Preview
32
27
  Effective::OrdersMailer.subscription_payment_failed(preview_customer)
33
28
  end
34
29
 
30
+ def subscription_created
31
+ Effective::OrdersMailer.subscription_created(preview_customer)
32
+ end
33
+
34
+ def subscription_updated
35
+ Effective::OrdersMailer.subscription_updated(preview_customer)
36
+ end
37
+
35
38
  def subscription_canceled
36
39
  Effective::OrdersMailer.subscription_canceled(preview_customer)
37
40
  end
38
41
 
39
- def subscription_trial_expiring
40
- Effective::OrdersMailer.subscription_trial_expiring(preview_subscribable)
42
+ def subscription_trialing
43
+ Effective::OrdersMailer.subscription_trialing(preview_subscribable)
41
44
  end
42
45
 
43
46
  def subscription_trial_expired
@@ -51,7 +54,7 @@ class EffectiveOrdersMailerPreview < ActionMailer::Preview
51
54
  protected
52
55
 
53
56
  def build_preview_order
54
- order = Effective::Order.new
57
+ order = Effective::Order.new(id: 1)
55
58
  order.user = preview_user
56
59
  preview_order_items.each { |atts| order.order_items.build(atts) }
57
60
  order.valid?
@@ -90,22 +93,24 @@ class EffectiveOrdersMailerPreview < ActionMailer::Preview
90
93
  end
91
94
 
92
95
  def preview_customer
93
- Effective::Customer.new(user: preview_user, active_card: '**** **** **** 1234 Visa 04/20')
96
+ customer = Effective::Customer.new(user: preview_user, active_card: '**** **** **** 1234 Visa 04/20')
97
+
98
+ if preview_subscribable.present?
99
+ customer.subscriptions.build(subscribable: preview_subscribable, name: 'Bronze Plan')
100
+ customer.subscriptions.build(subscribable: preview_subscribable, name: 'Silver Plan')
101
+ end
102
+
103
+ customer
94
104
  end
95
105
 
96
106
  def preview_subscribable
97
- Class.new do
98
- include ActiveModel::Model
99
- attr_accessor :buyer
107
+ Rails.application.eager_load!
100
108
 
101
- def to_s
102
- 'My cool service'
103
- end
109
+ klasses = Array(ActsAsSubscribable.descendants).compact
110
+ return unless klasses.present?
104
111
 
105
- def trial_expires_at
106
- Time.zone.now + 1.day
107
- end
108
- end.new(buyer: preview_user)
112
+ klasses.map { |klass| klass.all.order(Arel.sql('random()')).first }.compact.first ||
113
+ klasses.first.new(subscribable_buyer: preview_user)
109
114
  end
110
115
 
111
116
  end
@@ -28,10 +28,9 @@ namespace :effective_orders do
28
28
  end
29
29
  end
30
30
 
31
-
32
- # rake effective_orders:send_trial_expiring_emails
33
- desc 'Sends trial expiring and expired emails to each subscribable. Schedule me to run once per day.'
34
- task send_trial_expiring_emails: :environment do
31
+ # rake effective_orders:send_trial_emails
32
+ desc 'Sends subscription_trialing and subscription_trial_expired emails to each subscribable. Schedule me to run once per day.'
33
+ task send_trial_emails: :environment do
35
34
  trial_remind_at = Array(EffectiveOrders.trial[:remind_at]).compact
36
35
  exit unless trial_remind_at.present? && trial_remind_at.all? { |x| x.present? }
37
36
 
@@ -43,6 +42,7 @@ namespace :effective_orders do
43
42
  begin
44
43
  ActsAsSubscribable.descendants.each do |klass|
45
44
  klass.trialing.find_each do |subscribable|
45
+
46
46
  if subscribable.trialing_until == today
47
47
  puts "sending trial expired to #{subscribable}"
48
48
  Effective::OrdersMailer.subscription_trial_expired(subscribable).deliver_now
@@ -50,25 +50,21 @@ namespace :effective_orders do
50
50
 
51
51
  next if subscribable.trial_past_due? # We already notified them
52
52
 
53
- reminders.each do |remind_at|
54
- date = (subscribable.trialing_until - EffectiveOrders.trial.fetch(:length)) # Should be same as created_at.beginning_of_day
53
+ date = (subscribable.trialing_until - EffectiveOrders.trial.fetch(:length)) # Should be same as created_at.beginning_of_day
55
54
 
55
+ reminders.each do |remind_at|
56
56
  next unless date == (today + remind_at)
57
-
58
- puts "sending trial expiring to #{subscribable}. expires in #{(subscribable.trialing_until - today) / 1.day.to_i} days."
59
- Effective::OrdersMailer.subscription_trial_expiring(subscribable).deliver_now
57
+ Effective::OrdersMailer.subscription_trialing(subscribable).deliver_now
60
58
  end
61
59
  end
62
60
  end
63
61
 
64
- puts 'send_trial_expiring_emails completed'
65
- EffectiveLogger.success('scheduled task send_trial_expiring_emails completed') if defined?(EffectiveLogger)
62
+ puts 'send_trial_emails completed'
63
+ EffectiveLogger.success('scheduled task send_trial_emails completed') if defined?(EffectiveLogger)
66
64
  rescue => e
67
65
  ExceptionNotifier.notify_exception(e) if defined?(ExceptionNotifier)
68
66
  raise e
69
67
  end
70
-
71
- true
72
68
  end
73
69
 
74
70
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: effective_orders
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.0beta12
4
+ version: 4.0.0beta13
5
5
  platform: ruby
6
6
  authors:
7
7
  - Code and Effect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-05-31 00:00:00.000000000 Z
11
+ date: 2018-06-20 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -223,10 +223,12 @@ files:
223
223
  - app/views/effective/orders_mailer/payment_request_to_buyer.html.haml
224
224
  - app/views/effective/orders_mailer/pending_order_invoice_to_buyer.html.haml
225
225
  - app/views/effective/orders_mailer/subscription_canceled.html.haml
226
+ - app/views/effective/orders_mailer/subscription_created.html.haml
226
227
  - app/views/effective/orders_mailer/subscription_payment_failed.html.haml
227
228
  - app/views/effective/orders_mailer/subscription_payment_succeeded.html.haml
228
229
  - app/views/effective/orders_mailer/subscription_trial_expired.html.haml
229
- - app/views/effective/orders_mailer/subscription_trial_expiring.html.haml
230
+ - app/views/effective/orders_mailer/subscription_trialing.html.haml
231
+ - app/views/effective/orders_mailer/subscription_updated.html.haml
230
232
  - app/views/effective/subscripter/_form.html.haml
231
233
  - app/views/effective/subscriptions/_plan.html.haml
232
234
  - app/views/effective/subscriptions/_subscription.html.haml