kaui 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/controllers/kaui/account_tags_controller.rb +1 -1
- data/app/controllers/kaui/account_timelines_controller.rb +1 -1
- data/app/controllers/kaui/accounts_controller.rb +1 -1
- data/app/controllers/kaui/bundle_tags_controller.rb +1 -1
- data/app/controllers/kaui/bundles_controller.rb +1 -1
- data/app/controllers/kaui/chargebacks_controller.rb +5 -2
- data/app/controllers/kaui/credits_controller.rb +1 -1
- data/app/controllers/kaui/engine_controller.rb +6 -0
- data/app/controllers/kaui/home_controller.rb +2 -4
- data/app/controllers/kaui/invoices_controller.rb +2 -2
- data/app/controllers/kaui/payment_methods_controller.rb +1 -1
- data/app/controllers/kaui/refunds_controller.rb +10 -4
- data/app/controllers/kaui/subscriptions_controller.rb +60 -8
- data/app/helpers/kaui/killbill_helper.rb +94 -60
- data/app/models/kaui/account.rb +2 -2
- data/app/models/kaui/invoice.rb +8 -9
- data/app/models/kaui/invoice_item.rb +8 -7
- data/app/models/kaui/payment.rb +14 -15
- data/app/models/kaui/subscription.rb +10 -10
- data/app/views/kaui/chargebacks/new.html.erb +1 -1
- data/app/views/kaui/invoices/show.html.erb +3 -4
- data/app/views/kaui/refunds/new.html.erb +2 -2
- data/app/views/kaui/subscriptions/_subscriptions_table.html.erb +16 -12
- data/app/views/kaui/subscriptions/new.html.erb +22 -0
- data/app/views/kaui/subscriptions/show.html.erb +1 -1
- data/config/routes.rb +6 -2
- data/lib/kaui/version.rb +1 -1
- data/lib/kaui.rb +0 -2
- metadata +6 -5
- data/app/controllers/kaui/application_controller.rb +0 -2
@@ -1,4 +1,4 @@
|
|
1
|
-
class Kaui::ChargebacksController <
|
1
|
+
class Kaui::ChargebacksController < Kaui::EngineController
|
2
2
|
def show
|
3
3
|
@payment_id = params[:id]
|
4
4
|
if @payment_id.present?
|
@@ -34,9 +34,12 @@ class Kaui::ChargebacksController < ApplicationController
|
|
34
34
|
success = Kaui::KillbillHelper::create_chargeback(chargeback, params[:reason], params[:comment])
|
35
35
|
if success
|
36
36
|
flash[:info] = "Chargeback created"
|
37
|
+
else
|
38
|
+
flash[:error] = "Could not process chargeback"
|
37
39
|
end
|
40
|
+
else
|
41
|
+
flash[:error] = "No chargeback to process"
|
38
42
|
end
|
39
|
-
flash[:error] = "Could not process chargeback"
|
40
43
|
redirect_to account_timeline_path(:id => params[:account_id])
|
41
44
|
end
|
42
45
|
|
@@ -0,0 +1,6 @@
|
|
1
|
+
class Kaui::EngineController < ApplicationController
|
2
|
+
# This is a semi-isolated engine (https://bibwild.wordpress.com/2012/05/10/the-semi-isolated-rails-engine/)
|
3
|
+
# We expect that the hosting app's ApplicationController has these methods defined:
|
4
|
+
#
|
5
|
+
# current_user - returns the id of the current user
|
6
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Kaui::InvoicesController <
|
1
|
+
class Kaui::InvoicesController < Kaui::EngineController
|
2
2
|
def index
|
3
3
|
if params[:id].present?
|
4
4
|
redirect_to invoice_path(params[:id])
|
@@ -23,7 +23,7 @@ class Kaui::InvoicesController < ApplicationController
|
|
23
23
|
end
|
24
24
|
end
|
25
25
|
else
|
26
|
-
flash[:error] = "Invoice items for #{@invoice_id} not found"
|
26
|
+
flash[:error] = "Invoice items for #{@invoice_id} not found"
|
27
27
|
end
|
28
28
|
else
|
29
29
|
flash[:error] = "Invoice #{@invoice_id} not found"
|
@@ -1,4 +1,4 @@
|
|
1
|
-
class Kaui::RefundsController <
|
1
|
+
class Kaui::RefundsController < Kaui::EngineController
|
2
2
|
def show
|
3
3
|
@payment_id = params[:id]
|
4
4
|
if @payment_id.present?
|
@@ -32,10 +32,16 @@ class Kaui::RefundsController < ApplicationController
|
|
32
32
|
refund = Kaui::Refund.new(params[:refund])
|
33
33
|
refund.adjusted = (refund.adjusted == "1")
|
34
34
|
if refund.present?
|
35
|
-
Kaui::KillbillHelper::create_refund(params[:payment_id], refund, params[:reason], params[:comment])
|
36
|
-
|
35
|
+
success = Kaui::KillbillHelper::create_refund(params[:payment_id], refund, params[:reason], params[:comment])
|
36
|
+
if success
|
37
|
+
flash[:info] = "Refund created"
|
38
|
+
else
|
39
|
+
flash[:error] = "Error while processing refund"
|
40
|
+
end
|
37
41
|
else
|
38
|
-
flash[:error] = "No refund
|
42
|
+
flash[:error] = "No refund to process"
|
39
43
|
end
|
44
|
+
redirect_to account_timeline_path(:id => params[:account_id])
|
40
45
|
end
|
46
|
+
|
41
47
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'kaui/product'
|
2
2
|
|
3
|
-
class Kaui::SubscriptionsController <
|
3
|
+
class Kaui::SubscriptionsController < Kaui::EngineController
|
4
4
|
def index
|
5
5
|
if params[:subscription_id].present?
|
6
6
|
redirect_to subscription_path(params[:subscription_id])
|
@@ -16,6 +16,48 @@ class Kaui::SubscriptionsController < ApplicationController
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def new
|
19
|
+
bundle_id = params[:bundle_id]
|
20
|
+
@base_subscription = params[:base_subscription]
|
21
|
+
@bundle = Kaui::KillbillHelper::get_bundle(bundle_id)
|
22
|
+
if @base_subscription.present?
|
23
|
+
@catalog = Kaui::KillbillHelper::get_available_addons(@base_subscription)
|
24
|
+
else
|
25
|
+
# TODO: call catalog to get base subscription types
|
26
|
+
end
|
27
|
+
|
28
|
+
@subscription = Kaui::Subscription.new("bundleId" => bundle_id)
|
29
|
+
end
|
30
|
+
|
31
|
+
def create
|
32
|
+
@base_subscription = params[:base_subscription]
|
33
|
+
@subscription = Kaui::Subscription.new(params[:subscription])
|
34
|
+
@bundle = Kaui::KillbillHelper::get_bundle(@subscription.bundle_id)
|
35
|
+
@plan_name = params[:plan_name]
|
36
|
+
if @base_subscription.present?
|
37
|
+
@catalog = Kaui::KillbillHelper::get_available_addons(@base_subscription)
|
38
|
+
@subscription.product_category = "ADD_ON"
|
39
|
+
else
|
40
|
+
# TODO: call catalog to get base subscription types
|
41
|
+
@subscription.product_category = "BASE"
|
42
|
+
end
|
43
|
+
|
44
|
+
plan = @catalog[@plan_name]
|
45
|
+
@subscription.billing_period = plan["billingPeriod"]
|
46
|
+
@subscription.product_name = plan["productName"]
|
47
|
+
@subscription.price_list = plan["priceListName"]
|
48
|
+
|
49
|
+
begin
|
50
|
+
Kaui::KillbillHelper::create_subscription(@subscription)
|
51
|
+
redirect_to Kaui.bundle_home_path.call(@bundle.external_key)
|
52
|
+
rescue => e
|
53
|
+
flash[:error] = e.message
|
54
|
+
render :new
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
def add_addon
|
59
|
+
@base_product_name = params[:base_product_name]
|
60
|
+
|
19
61
|
@bundle_id = params[:bundle_id]
|
20
62
|
@product_name = params[:product_name]
|
21
63
|
@product_category = params[:product_category]
|
@@ -27,14 +69,9 @@ class Kaui::SubscriptionsController < ApplicationController
|
|
27
69
|
:product_category => @product_category,
|
28
70
|
:billing_period => @billing_period,
|
29
71
|
:price_list => @price_list)
|
30
|
-
end
|
31
|
-
|
32
|
-
def create
|
33
|
-
subscription = Kaui::Subscription.new(params[:subscription])
|
34
|
-
bundle = Kaui::KillbillHelper.get_bundle(subscription.bundle_id)
|
35
72
|
|
36
|
-
Kaui::KillbillHelper
|
37
|
-
|
73
|
+
@bundle = Kaui::KillbillHelper.get_bundle(subscription.bundle_id)
|
74
|
+
@available_plans = Kaui::KillbillHelper.get_available_addons(params[:base_product_name])
|
38
75
|
end
|
39
76
|
|
40
77
|
def edit
|
@@ -64,6 +101,21 @@ class Kaui::SubscriptionsController < ApplicationController
|
|
64
101
|
end
|
65
102
|
end
|
66
103
|
|
104
|
+
def reinstate
|
105
|
+
subscription_id = params[:id]
|
106
|
+
if subscription_id.present?
|
107
|
+
success = Kaui::KillbillHelper.reinstate_subscription(subscription_id, current_user)
|
108
|
+
if success
|
109
|
+
flash[:info] = "Subscription reinstated"
|
110
|
+
else
|
111
|
+
flash[:error] = "Error reinstating subscription"
|
112
|
+
end
|
113
|
+
redirect_to :back
|
114
|
+
else
|
115
|
+
flash[:error] = "No subscription id given"
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
67
119
|
def destroy
|
68
120
|
subscription_id = params[:id]
|
69
121
|
if subscription_id.present?
|
@@ -15,6 +15,20 @@ module Kaui
|
|
15
15
|
data
|
16
16
|
end
|
17
17
|
|
18
|
+
def self.process_response(response, arity, &block)
|
19
|
+
if response.nil? || response[:json].nil?
|
20
|
+
arity == :single ? nil : []
|
21
|
+
elsif block_given?
|
22
|
+
arity == :single ? yield(response[:json]) : response[:json].collect {|item| yield(item) }
|
23
|
+
else
|
24
|
+
response[:json]
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
def self.extract_reason_code(reason)
|
29
|
+
reason_code = $1 if reason =~ /\s*(\d+).*/
|
30
|
+
end
|
31
|
+
|
18
32
|
############## ACCOUNT ##############
|
19
33
|
|
20
34
|
def self.get_account_timeline(account_id)
|
@@ -106,7 +120,6 @@ module Kaui
|
|
106
120
|
bundles.each do |bundle|
|
107
121
|
subscriptions += get_subscriptions_for_bundle(bundle.bundle_id)
|
108
122
|
end
|
109
|
-
puts subscriptions
|
110
123
|
subscriptions
|
111
124
|
rescue RestClient::BadRequest
|
112
125
|
[]
|
@@ -124,60 +137,61 @@ module Kaui
|
|
124
137
|
end
|
125
138
|
end
|
126
139
|
|
127
|
-
def self.create_subscription(subscription)
|
140
|
+
def self.create_subscription(subscription, current_user = nil, reason = nil, comment = nil)
|
128
141
|
begin
|
129
142
|
subscription_data = Kaui::Subscription.camelize(subscription.to_hash)
|
130
143
|
data = call_killbill :post,
|
131
144
|
"/1.0/kb/subscriptions",
|
132
145
|
ActiveSupport::JSON.encode(subscription_data, :root => false),
|
133
146
|
:content_type => "application/json",
|
134
|
-
"X-Killbill-CreatedBy" =>
|
135
|
-
"X-Killbill-Reason" => "
|
136
|
-
"X-Killbill-Comment" => "
|
147
|
+
"X-Killbill-CreatedBy" => current_user,
|
148
|
+
"X-Killbill-Reason" => "#{reason}",
|
149
|
+
"X-Killbill-Comment" => "#{comment}"
|
137
150
|
return data[:code] == 201
|
138
151
|
rescue => e
|
139
152
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
140
153
|
end
|
141
154
|
end
|
142
155
|
|
143
|
-
def self.update_subscription(subscription)
|
156
|
+
def self.update_subscription(subscription, current_user = nil, reason = nil, comment = nil)
|
144
157
|
begin
|
145
158
|
subscription_data = Kaui::Subscription.camelize(subscription.to_hash)
|
146
159
|
data = call_killbill :put,
|
147
160
|
"/1.0/kb/subscriptions/#{subscription.subscription_id}",
|
148
161
|
ActiveSupport::JSON.encode(subscription_data, :root => false),
|
149
162
|
:content_type => :json,
|
150
|
-
"X-Killbill-CreatedBy" =>
|
151
|
-
"X-Killbill-Reason" => "
|
152
|
-
"X-Killbill-Comment" => "
|
153
|
-
return data[:code]
|
163
|
+
"X-Killbill-CreatedBy" => current_user,
|
164
|
+
"X-Killbill-Reason" => "#{reason}",
|
165
|
+
"X-Killbill-Comment" => "#{comment}"
|
166
|
+
return data[:code] < 300
|
154
167
|
rescue => e
|
155
168
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
156
169
|
end
|
157
170
|
end
|
158
171
|
|
159
|
-
def self.reinstate_subscription(subscription_id)
|
172
|
+
def self.reinstate_subscription(subscription_id, current_user = nil, reason = nil, comment = nil)
|
160
173
|
begin
|
161
174
|
data = call_killbill :put,
|
162
|
-
"/1.0/subscriptions/#{subscription_id}/uncancel",
|
175
|
+
"/1.0/kb/subscriptions/#{subscription_id}/uncancel",
|
176
|
+
"",
|
163
177
|
:content_type => :json,
|
164
|
-
"X-Killbill-CreatedBy" =>
|
165
|
-
"X-Killbill-Reason" => "
|
166
|
-
"X-Killbill-Comment" => "
|
167
|
-
return data[:code]
|
178
|
+
"X-Killbill-CreatedBy" => current_user,
|
179
|
+
"X-Killbill-Reason" => "#{reason}",
|
180
|
+
"X-Killbill-Comment" => "#{comment}"
|
181
|
+
return data[:code] < 300
|
168
182
|
rescue => e
|
169
183
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
170
184
|
end
|
171
185
|
end
|
172
186
|
|
173
|
-
def self.delete_subscription(subscription_id)
|
187
|
+
def self.delete_subscription(subscription_id, current_user = nil, reason = nil, comment = nil)
|
174
188
|
begin
|
175
189
|
data = call_killbill :delete,
|
176
190
|
"/1.0/kb/subscriptions/#{subscription_id}",
|
177
|
-
"X-Killbill-CreatedBy" =>
|
178
|
-
"X-Killbill-Reason" => "
|
179
|
-
"X-Killbill-Comment" => "
|
180
|
-
return data[:code]
|
191
|
+
"X-Killbill-CreatedBy" => current_user,
|
192
|
+
"X-Killbill-Reason" => "#{reason}",
|
193
|
+
"X-Killbill-Comment" => "#{comment}"
|
194
|
+
return data[:code] < 300
|
181
195
|
rescue => e
|
182
196
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
183
197
|
end
|
@@ -196,10 +210,12 @@ module Kaui
|
|
196
210
|
|
197
211
|
############## CATALOG ##############
|
198
212
|
|
199
|
-
def self.get_available_addons
|
213
|
+
def self.get_available_addons(base_product_name)
|
200
214
|
begin
|
201
|
-
data = call_killbill :get, "/1.0/catalog/availableAddons"
|
202
|
-
|
215
|
+
data = call_killbill :get, "/1.0/kb/catalog/availableAddons?baseProductName=#{base_product_name}"
|
216
|
+
if data.has_key?(:json)
|
217
|
+
data[:json].inject({}) {|catalog_hash, item| catalog_hash.merge!(item["planName"] => item) }
|
218
|
+
end
|
203
219
|
rescue => e
|
204
220
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
205
221
|
end
|
@@ -231,8 +247,12 @@ module Kaui
|
|
231
247
|
|
232
248
|
def self.get_payment(invoice_id, payment_id)
|
233
249
|
payments = get_payments(invoice_id)
|
234
|
-
payments.
|
235
|
-
|
250
|
+
if payments.present?
|
251
|
+
payments.each do |payment|
|
252
|
+
if payment.payment_id == payment_id
|
253
|
+
return payment
|
254
|
+
end
|
255
|
+
end
|
236
256
|
end
|
237
257
|
nil
|
238
258
|
end
|
@@ -240,7 +260,8 @@ module Kaui
|
|
240
260
|
def self.get_payments(invoice_id)
|
241
261
|
begin
|
242
262
|
data = call_killbill :get, "/1.0/kb/invoices/#{invoice_id}/payments"
|
243
|
-
process_response(data, :
|
263
|
+
response_data = process_response(data, :multiple) {|json| Kaui::Payment.new(json) }
|
264
|
+
return response_data
|
244
265
|
rescue => e
|
245
266
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
246
267
|
[]
|
@@ -249,9 +270,13 @@ module Kaui
|
|
249
270
|
|
250
271
|
############## PAYMENT METHOD ##############
|
251
272
|
|
252
|
-
def self.delete_payment_method(account_id, payment_method_id)
|
273
|
+
def self.delete_payment_method(account_id, payment_method_id, current_user = nil, reason = nil, comment = nil)
|
253
274
|
begin
|
254
|
-
call_killbill :delete,
|
275
|
+
call_killbill :delete,
|
276
|
+
"/1.0/accounts/#{account_id}/paymentMethods/#{payment_method_id}",
|
277
|
+
"X-Killbill-CreatedBy" => current_user,
|
278
|
+
"X-Killbill-Reason" => "#{reason}",
|
279
|
+
"X-Killbill-Comment" => "#{comment}"
|
255
280
|
rescue => e
|
256
281
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
257
282
|
end
|
@@ -260,7 +285,7 @@ module Kaui
|
|
260
285
|
def self.get_payment_methods(account_id)
|
261
286
|
begin
|
262
287
|
data = call_killbill :get, "/1.0/accounts/#{account_id}/paymentMethods"
|
263
|
-
process_response(data, :
|
288
|
+
process_response(data, :multiple) {|json| Kaui::PaymentMethod.new(json) }
|
264
289
|
rescue => e
|
265
290
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
266
291
|
end
|
@@ -270,23 +295,25 @@ module Kaui
|
|
270
295
|
|
271
296
|
def self.get_refunds_for_payment(payment_id)
|
272
297
|
begin
|
273
|
-
call_killbill :get, "/1.0/kb/payments/#{payment_id}/refunds"
|
298
|
+
data = call_killbill :get, "/1.0/kb/payments/#{payment_id}/refunds"
|
299
|
+
process_response(data, :multiple) {|json| Kaui::Refund.new(json) }
|
274
300
|
rescue => e
|
275
301
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
276
302
|
end
|
277
303
|
end
|
278
304
|
|
279
|
-
def self.create_refund(payment_id, refund, reason, comment)
|
305
|
+
def self.create_refund(payment_id, refund, current_user = nil, reason = nil, comment = nil)
|
280
306
|
begin
|
281
307
|
refund_data = Kaui::Refund.camelize(refund.to_hash)
|
308
|
+
|
282
309
|
data = call_killbill :post,
|
283
310
|
"/1.0/kb/payments/#{payment_id}/refunds",
|
284
311
|
ActiveSupport::JSON.encode(refund_data, :root => false),
|
285
312
|
:content_type => "application/json",
|
286
|
-
"X-Killbill-CreatedBy" =>
|
287
|
-
"X-Killbill-Reason" =>
|
313
|
+
"X-Killbill-CreatedBy" => current_user,
|
314
|
+
"X-Killbill-Reason" => extract_reason_code(reason),
|
288
315
|
"X-Killbill-Comment" => "#{comment}"
|
289
|
-
return
|
316
|
+
return data[:code] < 300
|
290
317
|
rescue => e
|
291
318
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
292
319
|
end
|
@@ -297,23 +324,42 @@ module Kaui
|
|
297
324
|
def self.get_chargebacks_for_payment(payment_id)
|
298
325
|
begin
|
299
326
|
data = call_killbill :get, "/1.0/kb/chargebacks/payments/#{payment_id}"
|
300
|
-
process_response(data, :
|
327
|
+
process_response(data, :multiple) {|json| Kaui::Chargeback.new(json) }
|
301
328
|
rescue => e
|
302
329
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
303
330
|
end
|
304
331
|
end
|
305
332
|
|
306
|
-
def self.create_chargeback(chargeback, reason, comment)
|
333
|
+
def self.create_chargeback(chargeback, current_user = nil, reason = nil, comment = nil)
|
307
334
|
begin
|
308
335
|
chargeback_data = Kaui::Refund.camelize(chargeback.to_hash)
|
336
|
+
|
309
337
|
data = call_killbill :post,
|
310
338
|
"/1.0/kb/chargebacks",
|
311
339
|
ActiveSupport::JSON.encode(chargeback_data, :root => false),
|
312
340
|
:content_type => "application/json",
|
313
|
-
"X-Killbill-CreatedBy" =>
|
314
|
-
"X-Killbill-Reason" =>
|
341
|
+
"X-Killbill-CreatedBy" => current_user,
|
342
|
+
"X-Killbill-Reason" => extract_reason_code(reason),
|
315
343
|
"X-Killbill-Comment" => "#{comment}"
|
316
|
-
return data[:code]
|
344
|
+
return data[:code] < 300
|
345
|
+
rescue => e
|
346
|
+
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
347
|
+
end
|
348
|
+
end
|
349
|
+
|
350
|
+
############## CREDIT ##############
|
351
|
+
|
352
|
+
def self.create_credit(credit, current_user = nil, reason = nil, comment = nil)
|
353
|
+
begin
|
354
|
+
credit_data = Kaui::Refund.camelize(credit.to_hash)
|
355
|
+
data = call_killbill :post,
|
356
|
+
"/1.0/kb/credits",
|
357
|
+
ActiveSupport::JSON.encode(credit_data, :root => false),
|
358
|
+
:content_type => "application/json",
|
359
|
+
"X-Killbill-CreatedBy" => current_user,
|
360
|
+
"X-Killbill-Reason" => extract_reason_code(reason),
|
361
|
+
"X-Killbill-Comment" => "#{comment}"
|
362
|
+
return data[:code] < 300
|
317
363
|
rescue => e
|
318
364
|
puts "#{$!}\n\t" + e.backtrace.join("\n\t")
|
319
365
|
end
|
@@ -350,16 +396,16 @@ module Kaui
|
|
350
396
|
end
|
351
397
|
|
352
398
|
|
353
|
-
def self.set_tags_for_account(account_id, tags)
|
399
|
+
def self.set_tags_for_account(account_id, tags, current_user = nil, reason = nil, comment = nil)
|
354
400
|
begin
|
355
401
|
if tags.nil? || tags.empty?
|
356
402
|
else
|
357
403
|
data = call_killbill :post,
|
358
404
|
"/1.0/kb/accounts/#{account_id}/tags?" + RestClient::Payload.generate(:tag_list => tags.join(",")).to_s,
|
359
405
|
nil,
|
360
|
-
"X-Killbill-CreatedBy" =>
|
361
|
-
"X-Killbill-Reason" => "
|
362
|
-
"X-Killbill-Comment" => "
|
406
|
+
"X-Killbill-CreatedBy" => current_user,
|
407
|
+
"X-Killbill-Reason" => "#{reason}",
|
408
|
+
"X-Killbill-Comment" => "#{comment}"
|
363
409
|
return data[:code] == 201
|
364
410
|
end
|
365
411
|
rescue => e
|
@@ -367,16 +413,16 @@ module Kaui
|
|
367
413
|
end
|
368
414
|
end
|
369
415
|
|
370
|
-
def self.set_tags_for_bundle(bundle_id, tags)
|
416
|
+
def self.set_tags_for_bundle(bundle_id, tags, current_user = nil, reason = nil, comment = nil)
|
371
417
|
begin
|
372
418
|
if tags.nil? || tags.empty?
|
373
419
|
else
|
374
420
|
data = call_killbill :post,
|
375
421
|
"/1.0/kb/bundles/#{bundle_id}/tags?" + RestClient::Payload.generate(:tag_list => tags.join(",")).to_s,
|
376
422
|
nil,
|
377
|
-
"X-Killbill-CreatedBy" =>
|
378
|
-
"X-Killbill-Reason" => "
|
379
|
-
"X-Killbill-Comment" => "
|
423
|
+
"X-Killbill-CreatedBy" => current_user,
|
424
|
+
"X-Killbill-Reason" => "#{reason}",
|
425
|
+
"X-Killbill-Comment" => "#{comment}"
|
380
426
|
return data[:code] == 201
|
381
427
|
end
|
382
428
|
rescue => e
|
@@ -384,17 +430,5 @@ module Kaui
|
|
384
430
|
end
|
385
431
|
end
|
386
432
|
|
387
|
-
private
|
388
|
-
|
389
|
-
def self.process_response(response, arity, &block)
|
390
|
-
if response.nil? || response[:json].nil?
|
391
|
-
arity == :single ? nil : []
|
392
|
-
elsif block_given?
|
393
|
-
arity == :single ? yield(response[:json]) : response[:json].collect {|item| yield(item) }
|
394
|
-
else
|
395
|
-
response[:json]
|
396
|
-
end
|
397
|
-
end
|
398
|
-
|
399
433
|
end
|
400
434
|
end
|
data/app/models/kaui/account.rb
CHANGED
@@ -6,8 +6,8 @@ class Kaui::Account < Kaui::Base
|
|
6
6
|
define_attr :name
|
7
7
|
define_attr :first_name_length
|
8
8
|
define_attr :email
|
9
|
-
define_attr :billing_day
|
10
9
|
define_attr :currency
|
10
|
+
define_attr :payment_method_id
|
11
11
|
define_attr :timezone
|
12
12
|
define_attr :address1
|
13
13
|
define_attr :address2
|
@@ -22,8 +22,8 @@ class Kaui::Account < Kaui::Base
|
|
22
22
|
:name => data['name'] || "#{data['firstName'] || ''}#{data.has_key?('firstName') ? ' ' : ''}#{data['lastName'] || ''}",
|
23
23
|
:first_name_length => data['length'] || (data.has_key?('firstName') ? data['firstName'].length : 0),
|
24
24
|
:email => data['email'],
|
25
|
-
:billing_day => data['billingDay'],
|
26
25
|
:currency => data['currency'],
|
26
|
+
:payment_method_id => data['paymentMethodId'],
|
27
27
|
:timezone => data['timeZone'] || data['timezone'],
|
28
28
|
:address1 => data['address1'],
|
29
29
|
:address2 => data['address2'],
|
data/app/models/kaui/invoice.rb
CHANGED
@@ -17,19 +17,18 @@ class Kaui::Invoice < Kaui::Base
|
|
17
17
|
has_many :items, Kaui::InvoiceItem
|
18
18
|
|
19
19
|
def initialize(data = {})
|
20
|
-
super(
|
21
|
-
:balance => data['balance'],
|
22
|
-
:invoice_id => data['invoiceId'],
|
20
|
+
super(
|
23
21
|
:account_id => data['accountId'],
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:refund_adjustment => data['refundAdj'],
|
22
|
+
:amount => data['amount'],
|
23
|
+
:balance => data['balance'],
|
27
24
|
:credit_balance_adjustment => data['cba'],
|
28
25
|
:credit_adjustment => data['creditAdj'],
|
29
26
|
:invoice_dt => data['invoiceDate'],
|
30
|
-
:
|
27
|
+
:invoice_id => data['invoiceId'],
|
28
|
+
:invoice_number => data['invoiceNumber'],
|
29
|
+
:refund_adjustment => data['refundAdj'],
|
31
30
|
:target_dt => data['targetDate'],
|
32
|
-
:
|
33
|
-
:
|
31
|
+
:items => data['items'],
|
32
|
+
:bundle_keys => data['bundleKeys'])
|
34
33
|
end
|
35
34
|
end
|
@@ -14,16 +14,17 @@ class Kaui::InvoiceItem < Kaui::Base
|
|
14
14
|
define_attr :currency;
|
15
15
|
|
16
16
|
def initialize(data = {})
|
17
|
-
super(
|
17
|
+
super(
|
18
18
|
:account_id => data['accountId'],
|
19
|
+
:amount => data['amount'],
|
19
20
|
:bundle_id => data['bundleId'],
|
20
|
-
:
|
21
|
-
:plan_name => data['planName'],
|
22
|
-
:phase_name => data['phaseName'],
|
21
|
+
:currency => data['currency'],
|
23
22
|
:description => data['description'],
|
24
|
-
:start_date => data['startDate'],
|
25
23
|
:end_date => data['endDate'],
|
26
|
-
:
|
27
|
-
:
|
24
|
+
:invoice_id => data['invoiceId'],
|
25
|
+
:phase_name => data['phaseName'],
|
26
|
+
:plan_name => data['planName'],
|
27
|
+
:start_date => data['startDate'],
|
28
|
+
:subscription_id => data['subscriptionId'])
|
28
29
|
end
|
29
30
|
end
|
data/app/models/kaui/payment.rb
CHANGED
@@ -1,34 +1,33 @@
|
|
1
1
|
require 'active_model'
|
2
2
|
|
3
3
|
class Kaui::Payment < Kaui::Base
|
4
|
-
define_attr :
|
4
|
+
define_attr :account_id
|
5
5
|
define_attr :amount
|
6
|
-
define_attr :refund_amount
|
7
6
|
define_attr :currency
|
7
|
+
define_attr :invoice_id
|
8
|
+
define_attr :effective_dt
|
9
|
+
define_attr :paid_amount
|
8
10
|
define_attr :payment_id
|
9
|
-
define_attr :external_payment_id
|
10
|
-
define_attr :payment_attempt_date
|
11
|
-
define_attr :payment_method
|
12
11
|
define_attr :payment_method_id
|
13
|
-
define_attr :
|
12
|
+
define_attr :refund_amount
|
14
13
|
define_attr :requested_dt
|
15
|
-
define_attr :
|
14
|
+
define_attr :retry_count
|
16
15
|
define_attr :status
|
17
16
|
define_attr :bundle_keys
|
18
17
|
|
19
18
|
def initialize(data = {})
|
20
|
-
super(
|
19
|
+
super(
|
20
|
+
:account_id => data['accountId'],
|
21
21
|
:amount => data['amount'],
|
22
|
-
:refund_amount => data['refundAmount'],
|
23
22
|
:currency => data['currency'],
|
24
|
-
:
|
25
|
-
:
|
26
|
-
:
|
27
|
-
:
|
23
|
+
:effective_dt => data['effectiveDate'],
|
24
|
+
:invoice_id => data['invoiceId'],
|
25
|
+
:paid_amount => data['paidAmount'],
|
26
|
+
:payment_id => data['paymentId'],
|
28
27
|
:payment_method_id => data['paymentMethodId'],
|
29
|
-
:
|
28
|
+
:refund_amount => data['refundAmount'],
|
30
29
|
:requested_dt => data['requestedDate'],
|
31
|
-
:
|
30
|
+
:retry_count => data['retryCount'],
|
32
31
|
:status => data['status'],
|
33
32
|
:bundle_keys => data['bundleKeys'])
|
34
33
|
end
|
@@ -7,19 +7,19 @@ class Kaui::Subscription < Kaui::Base
|
|
7
7
|
define_attr :charged_through_date
|
8
8
|
define_attr :price_list
|
9
9
|
define_attr :start_date
|
10
|
-
define_attr :
|
10
|
+
define_attr :canceled_date
|
11
11
|
has_many :events, Kaui::Event
|
12
12
|
|
13
13
|
def initialize(data = {})
|
14
|
-
super(:subscription_id => data['subscriptionId'],
|
15
|
-
:bundle_id => data['bundleId'],
|
16
|
-
:product_category => data['productCategory'],
|
17
|
-
:product_name => data['productName'],
|
18
|
-
:billing_period => data['billingPeriod'],
|
19
|
-
:charged_through_date => data['chargedThroughDate'],
|
20
|
-
:price_list => data['priceList'],
|
21
|
-
:start_date => data['startDate'],
|
22
|
-
:
|
14
|
+
super(:subscription_id => data['subscriptionId'] || data['subscription_id'],
|
15
|
+
:bundle_id => data['bundleId'] || data['bundle_id'],
|
16
|
+
:product_category => data['productCategory'] || data['product_category'],
|
17
|
+
:product_name => data['productName'] || data['product_name'],
|
18
|
+
:billing_period => data['billingPeriod'] || data['billing_period'],
|
19
|
+
:charged_through_date => data['chargedThroughDate'] || data['charged_through_date'],
|
20
|
+
:price_list => data['priceList'] || data['price_list'],
|
21
|
+
:start_date => data['startDate'] || data['start_date'],
|
22
|
+
:canceled_date => data['cancelledDate'] || data['canceled_date'],
|
23
23
|
:events => data['events'])
|
24
24
|
end
|
25
25
|
end
|
@@ -1,10 +1,9 @@
|
|
1
1
|
<% if @invoice.present? %>
|
2
|
+
<h3>Invoice number: <%= @invoice.invoice_number %></h3>
|
2
3
|
<dl class="dl-horizontal">
|
3
4
|
<dt>Account Name:</dt>
|
4
5
|
<dd><%= @account.name %> </dd>
|
5
6
|
<dd><%= link_to @account.email, Kaui.account_home_path.call(@account.external_key) %> </dd>
|
6
|
-
<dt>Invoice number:</dt>
|
7
|
-
<dd><%= @invoice.invoice_number %> </dd>
|
8
7
|
<dt>Invoice date:</dt>
|
9
8
|
<dd><%= format_date(@invoice.invoice_dt).html_safe %> </dd>
|
10
9
|
<dt>Target date:</dt>
|
@@ -27,7 +26,7 @@
|
|
27
26
|
<th>Start date</th>
|
28
27
|
<th>Charged through date</th>
|
29
28
|
<th>Price list</th>
|
30
|
-
</tr>
|
29
|
+
</tr>
|
31
30
|
</thead>
|
32
31
|
<tbody>
|
33
32
|
<% @invoice.items.each do |item| %>
|
@@ -51,7 +50,7 @@
|
|
51
50
|
</table>
|
52
51
|
<div class="page-header">
|
53
52
|
<h3>Payments</h3>
|
54
|
-
</div>
|
53
|
+
</div>
|
55
54
|
<% else %>
|
56
55
|
<p>Invoice not found</p>
|
57
56
|
<% end %>
|
@@ -42,7 +42,7 @@
|
|
42
42
|
<label class="control-label">Payment method</label>
|
43
43
|
<div class="controls">
|
44
44
|
<label class="checkbox">
|
45
|
-
<%= @payment.
|
45
|
+
<%= @payment.payment_method_id %>
|
46
46
|
</label>
|
47
47
|
</div>
|
48
48
|
</div>
|
@@ -58,7 +58,7 @@
|
|
58
58
|
<label class="control-label">Payment</label>
|
59
59
|
<div class="controls">
|
60
60
|
<label class="checkbox">
|
61
|
-
<%= @payment.amount %> <%= @account.currency %>
|
61
|
+
<%= @payment.amount %> <%= @account.currency if @payment.amount.present? %>
|
62
62
|
</label>
|
63
63
|
</div>
|
64
64
|
</div>
|
@@ -23,21 +23,25 @@
|
|
23
23
|
<td><%= format_date(sub.start_date).html_safe %></td>
|
24
24
|
<td><%= format_date(sub.charged_through_date).html_safe %></td>
|
25
25
|
<td>
|
26
|
-
<% if sub.
|
27
|
-
<%= "
|
26
|
+
<% if sub.canceled_date.present? %>
|
27
|
+
<%= "Pending cancellation on " %> <%= format_date(sub.canceled_date).html_safe %>
|
28
28
|
<% end %>
|
29
29
|
</td>
|
30
30
|
<td>
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
31
|
+
<nobr>
|
32
|
+
<% if sub.product_category == 'BASE' %>
|
33
|
+
<%= link_to "Change", kaui_engine.edit_subscription_path(sub.subscription_id), :class => "btn btn-mini" unless sub.canceled_date.present? %>
|
34
|
+
<%= link_to "Cancel", kaui_engine.subscription_path(:id => sub.subscription_id), :method => :delete, :class => "btn btn-mini" %>
|
35
|
+
<%= link_to "Add Addons", kaui_engine.new_subscription_path(:params => { :bundle_id => sub.bundle_id, :base_subscription => sub.product_name }), :class => "btn btn-mini" %>
|
36
|
+
<% else %>
|
37
|
+
<% end %>
|
38
|
+
<% if sub.product_category == 'ADD_ON' %>
|
39
|
+
<%= link_to "Cancel", kaui_engine.subscription_path(:id => sub.subscription_id), :method => :delete, :class => "btn btn-mini" unless sub.canceled_date.present? %>
|
40
|
+
<% if sub.canceled_date.present? && Time.parse(sub.canceled_date) > Time.now %>
|
41
|
+
<%= link_to "Reinstate", kaui_engine.reinstate_subscription_path(:id => sub.subscription_id), :method => :put, :class => "btn btn-mini" %>
|
42
|
+
<% end %>
|
43
|
+
<% end %>
|
44
|
+
</nobr>
|
41
45
|
</td>
|
42
46
|
</tr>
|
43
47
|
<% end %>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
<div class="page-header">
|
2
|
+
<h1>Add subscription to <%= Kaui.bundle_key_display_string.call(@bundle.external_key) %></h1>
|
3
|
+
</div>
|
4
|
+
<%= form_for(@subscription, :url => { :action => :create }, :html => { :class => "form-horizontal" }) do |f| %>
|
5
|
+
<fieldset>
|
6
|
+
<%= f.hidden_field :bundle_id %>
|
7
|
+
<%= hidden_field_tag :base_subscription, @base_subscription %>
|
8
|
+
<div class="control-group">
|
9
|
+
<%= label_tag :plan_name, "Available Plans:", :class => "control-label" %>
|
10
|
+
<div class="controls">
|
11
|
+
<%= select_tag :plan_name, options_for_select(@catalog.keys, @plan_name) %>
|
12
|
+
<p class="help-block">
|
13
|
+
Proration on customer's invoice will be done automatically.
|
14
|
+
</p>
|
15
|
+
</div>
|
16
|
+
</div>
|
17
|
+
<div class="form-actions">
|
18
|
+
<%= f.submit 'Add', :class => 'btn btn-primary' %>
|
19
|
+
<%= link_to 'Back', :back, :class => 'btn' %>
|
20
|
+
</div>
|
21
|
+
</fieldset>
|
22
|
+
<% end %>
|
@@ -18,4 +18,4 @@
|
|
18
18
|
<hr/>
|
19
19
|
<%= link_to "Change", kaui_engine.edit_subscription_path(@subscription.subscription_id), :class => "btn btn-mini" %>
|
20
20
|
<%= link_to "Cancel", kaui_engine.subscription_path(@subscription.subscription_id), :method => :delete, :confirm => "Are you sure?", :class => "btn btn-mini" %>
|
21
|
-
<%= link_to "Add Addons", kaui_engine.
|
21
|
+
<%= link_to "Add Addons", kaui_engine.new_subscription_path(:params => { :bundle_id => @subscription.bundle_id, :base_subscription => @subscription.product_name }), :class => "btn btn-mini" %>
|
data/config/routes.rb
CHANGED
@@ -16,7 +16,7 @@ Kaui::Engine.routes.draw do
|
|
16
16
|
post :credits, :as => "credits"
|
17
17
|
end
|
18
18
|
end
|
19
|
-
|
19
|
+
|
20
20
|
resources :chargebacks, :only => [ :show, :create, :new ]
|
21
21
|
|
22
22
|
resources :credits, :only => [ :create, :new ]
|
@@ -29,7 +29,11 @@ Kaui::Engine.routes.draw do
|
|
29
29
|
|
30
30
|
resources :bundles, :only => [ :index, :show ]
|
31
31
|
|
32
|
-
resources :subscriptions
|
32
|
+
resources :subscriptions do
|
33
|
+
member do
|
34
|
+
put :reinstate
|
35
|
+
end
|
36
|
+
end
|
33
37
|
|
34
38
|
scope "/account_tags" do
|
35
39
|
match "/" => "account_tags#show", :via => :get, :as => "account_tags"
|
data/lib/kaui/version.rb
CHANGED
data/lib/kaui.rb
CHANGED
@@ -9,12 +9,10 @@ module Kaui
|
|
9
9
|
mattr_accessor :bundle_home_path
|
10
10
|
mattr_accessor :invoice_home_path
|
11
11
|
mattr_accessor :bundle_key_display_string
|
12
|
-
mattr_accessor :current_user
|
13
12
|
|
14
13
|
self.killbill_finder = lambda { Kaui::Engine.config.killbill_url }
|
15
14
|
self.account_home_path = lambda {|account_id| Kaui::Engine.routes.url_helpers.account_path(account_id) }
|
16
15
|
self.bundle_home_path = lambda {|bundle_id| Kaui::Engine.routes.url_helpers.bundle_path(:id => bundle_id) }
|
17
16
|
self.invoice_home_path = lambda {|invoice_id| Kaui::Engine.routes.url_helpers.invoice_path(:id => invoice_id) }
|
18
17
|
self.bundle_key_display_string = lambda {|bundle_key| bundle_key }
|
19
|
-
self.current_user = lambda { nil }
|
20
18
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: kaui
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 25
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 3
|
10
|
+
version: 0.0.3
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Alena Dudzinskaya
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2012-07-
|
18
|
+
date: 2012-07-23 00:00:00 Z
|
19
19
|
dependencies: []
|
20
20
|
|
21
21
|
description: Rails UI plugin for Killbill administration.
|
@@ -49,11 +49,11 @@ files:
|
|
49
49
|
- app/controllers/kaui/account_tags_controller.rb
|
50
50
|
- app/controllers/kaui/account_timelines_controller.rb
|
51
51
|
- app/controllers/kaui/accounts_controller.rb
|
52
|
-
- app/controllers/kaui/application_controller.rb
|
53
52
|
- app/controllers/kaui/bundle_tags_controller.rb
|
54
53
|
- app/controllers/kaui/bundles_controller.rb
|
55
54
|
- app/controllers/kaui/chargebacks_controller.rb
|
56
55
|
- app/controllers/kaui/credits_controller.rb
|
56
|
+
- app/controllers/kaui/engine_controller.rb
|
57
57
|
- app/controllers/kaui/home_controller.rb
|
58
58
|
- app/controllers/kaui/invoices_controller.rb
|
59
59
|
- app/controllers/kaui/payment_methods_controller.rb
|
@@ -107,6 +107,7 @@ files:
|
|
107
107
|
- app/views/kaui/subscriptions/_subscriptions_table.html.erb
|
108
108
|
- app/views/kaui/subscriptions/edit.html.erb
|
109
109
|
- app/views/kaui/subscriptions/index.html.erb
|
110
|
+
- app/views/kaui/subscriptions/new.html.erb
|
110
111
|
- app/views/kaui/subscriptions/show.html.erb
|
111
112
|
- app/views/kaui/tags/_tags_table.html.erb
|
112
113
|
- config/initializers/time_formats.rb
|