kaui 0.14.2 → 0.15.0

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.
Files changed (75) hide show
  1. checksums.yaml +4 -4
  2. data/.travis.yml +2 -0
  3. data/Gemfile +1 -1
  4. data/README.md +23 -6
  5. data/app/assets/javascripts/application.js +1 -0
  6. data/app/assets/stylesheets/application.css +1 -0
  7. data/app/assets/stylesheets/kaui/header.less +11 -4
  8. data/app/controllers/kaui/accounts_controller.rb +1 -1
  9. data/app/controllers/kaui/admin_tenants_controller.rb +113 -18
  10. data/app/controllers/kaui/bundles_controller.rb +0 -2
  11. data/app/controllers/kaui/chargebacks_controller.rb +1 -1
  12. data/app/controllers/kaui/charges_controller.rb +1 -1
  13. data/app/controllers/kaui/engine_controller.rb +5 -2
  14. data/app/controllers/kaui/invoices_controller.rb +1 -1
  15. data/app/controllers/kaui/payment_methods_controller.rb +1 -1
  16. data/app/controllers/kaui/payments_controller.rb +20 -2
  17. data/app/controllers/kaui/refunds_controller.rb +1 -1
  18. data/app/controllers/kaui/subscriptions_controller.rb +8 -13
  19. data/app/helpers/kaui/account_helper.rb +9 -0
  20. data/app/helpers/kaui/subscription_helper.rb +47 -21
  21. data/app/models/kaui/admin_tenant.rb +96 -2
  22. data/app/models/kaui/bundle.rb +1 -1
  23. data/app/models/kaui/catalog.rb +138 -0
  24. data/app/models/kaui/invoice_payment.rb +39 -5
  25. data/app/models/kaui/overdue.rb +85 -0
  26. data/app/models/kaui/simple_plan.rb +4 -0
  27. data/app/models/kaui/transaction.rb +2 -0
  28. data/app/views/kaui/account_timelines/show.html.erb +2 -1
  29. data/app/views/kaui/accounts/_billing_info.html.erb +18 -20
  30. data/app/views/kaui/accounts/_payment_methods.html.erb +11 -16
  31. data/app/views/kaui/admin_tenants/_form_catalog_translation.erb +24 -0
  32. data/app/views/kaui/admin_tenants/_form_invoice_template.erb +28 -0
  33. data/app/views/kaui/admin_tenants/_form_invoice_translation.erb +24 -0
  34. data/app/views/kaui/admin_tenants/_form_plugin_config.erb +199 -0
  35. data/app/views/kaui/admin_tenants/_show_catalog.erb +25 -0
  36. data/app/views/kaui/admin_tenants/_show_catalog_simple.erb +96 -0
  37. data/app/views/kaui/admin_tenants/_show_catalog_xml.erb +44 -0
  38. data/app/views/kaui/admin_tenants/_show_overdue.erb +89 -0
  39. data/app/views/kaui/admin_tenants/new_catalog.html.erb +176 -0
  40. data/app/views/kaui/admin_tenants/new_overdue_config.html.erb +138 -0
  41. data/app/views/kaui/admin_tenants/new_plan_currency.html.erb +34 -0
  42. data/app/views/kaui/admin_tenants/show.html.erb +20 -127
  43. data/app/views/kaui/bundles/index.html.erb +1 -1
  44. data/app/views/kaui/invoice_items/_edit_form.html.erb +1 -0
  45. data/app/views/kaui/layouts/kaui_account_navbar.html.erb +2 -0
  46. data/app/views/kaui/payments/_payment_table.html.erb +16 -5
  47. data/app/views/kaui/refunds/_form.html.erb +4 -5
  48. data/app/views/kaui/subscriptions/_edit_form.html.erb +48 -1
  49. data/app/views/kaui/subscriptions/_form.html.erb +36 -0
  50. data/app/views/kaui/subscriptions/_subscriptions_table.html.erb +12 -9
  51. data/config/routes.rb +8 -0
  52. data/db/ddl.sql +5 -2
  53. data/kaui.gemspec +3 -2
  54. data/lib/kaui/engine.rb +1 -0
  55. data/lib/kaui/version.rb +1 -1
  56. data/test/dummy/config/environments/development.rb +1 -1
  57. data/test/dummy/db/schema.rb +5 -5
  58. data/test/functional/kaui/account_emails_controller_test.rb +2 -2
  59. data/test/functional/kaui/accounts_controller_test.rb +4 -4
  60. data/test/functional/kaui/admin_tenants_controller_test.rb +5 -1
  61. data/test/functional/kaui/bundle_tags_controller_test.rb +1 -1
  62. data/test/functional/kaui/bundles_controller_test.rb +4 -4
  63. data/test/functional/kaui/chargebacks_controller_test.rb +2 -2
  64. data/test/functional/kaui/charges_controller_test.rb +2 -2
  65. data/test/functional/kaui/credits_controller_test.rb +2 -2
  66. data/test/functional/kaui/invoice_items_controller_test.rb +6 -4
  67. data/test/functional/kaui/invoices_controller_test.rb +2 -2
  68. data/test/functional/kaui/payments_controller_test.rb +4 -0
  69. data/test/functional/kaui/refunds_controller_test.rb +2 -2
  70. data/test/functional/kaui/subscriptions_controller_test.rb +6 -6
  71. data/test/killbill_test_helper.rb +7 -7
  72. metadata +47 -8
  73. data/db/migrate/20130812155313_devise_create_kaui_users.rb +0 -12
  74. data/db/migrate/20150109214021_create_kaui_tenants.rb +0 -12
  75. data/db/migrate/20150112232813_create_kaui_allowed_users.rb +0 -19
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0a9ec1ec7ef252ca12a43f8149f34b8d05f9380e
4
- data.tar.gz: 74b4b0292efc15111d1c199572a38dc8d47db671
3
+ metadata.gz: bf008611430663168c6e6f8ef1adca13ef8b0929
4
+ data.tar.gz: 55cd8e91ff9c1798881a5e8af70dfede6f9576de
5
5
  SHA512:
6
- metadata.gz: 4d1c6e1c3c01e6e17fa8b124a6211edfb95cd3104770b1f2abaa93a661e96334263564ea5b5bdaa9c450912182daba58efe24915b606d42ac090addaa23055cf
7
- data.tar.gz: 5bb0eb6ca5e539d3c8debd3fbca23817d028ae14438e3f7ded0f770d2e73709b2ae59c1ace08db7e3fbde6cc15bb24a1086a55de0d8c3ebb4fc0245b14f84d11
6
+ metadata.gz: 90239db91f63b3eeff5170aa41f6e7b75b34c3b4f17eceabe1830f86134193c8a44f3e09c28450b4e6851fdec534e346cd599c97094dd28039f480dd38b690f0
7
+ data.tar.gz: 7ee1407b3378494668e50879f686c6c33809ad3a3a086572c4abe9572b5a10c460298a5a6058977fe39c1ddcfc62195fc0cf7d461f4c062c6ebdc58ac4f20e23
data/.travis.yml CHANGED
@@ -1,5 +1,7 @@
1
1
  language: ruby
2
2
 
3
+ sudo: false
4
+
3
5
  notifications:
4
6
  email:
5
7
  - kill-bill-commits@googlegroups.com
data/Gemfile CHANGED
@@ -3,4 +3,4 @@ source 'http://rubygems.org'
3
3
  gemspec
4
4
 
5
5
  #gem 'killbill-client', :path => '../killbill-client-ruby'
6
- #gem 'killbill-client', :github => 'killbill/killbill-client-ruby', :ref => 'HEAD'
6
+ #gem 'killbill-client', :git => 'https://github.com/killbill/killbill-client-ruby.git'
data/README.md CHANGED
@@ -1,6 +1,16 @@
1
1
  Getting started
2
2
  ===============
3
3
 
4
+ Kaui core mountable engine. For Kaui the UI, see [killbill-admin-ui-standalone](https://github.com/killbill/killbill-admin-ui-standalone).
5
+
6
+ Kill Bill compatibility
7
+ -----------------------
8
+
9
+ | API version | Kill Bill version |
10
+ | ----------: | ----------------: |
11
+ | 0.14.y | 0.16.z |
12
+ | 0.15.y | 0.18.z |
13
+
4
14
  Running Kaui locally
5
15
  ---------------------
6
16
 
@@ -12,6 +22,7 @@ export RAILS_ENV=development
12
22
  bundle install
13
23
  rake kaui:install:migrations
14
24
  rake db:migrate
25
+ bundle exec rake assets:precompile
15
26
  rails server
16
27
  ```
17
28
 
@@ -46,17 +57,23 @@ Running tests
46
57
  -------------
47
58
 
48
59
  Go into 'test/dummy':
49
- > cd test/dummy/
60
+ ```
61
+ cd test/dummy/
62
+ ```
50
63
 
51
64
  Run migrations:
52
- > export RAILS_ENV=test
53
- > rake kaui:install:migrations
54
- > rake db:migrate
65
+ ```
66
+ export RAILS_ENV=test
67
+ rake kaui:install:migrations
68
+ rake db:migrate
69
+ ```
55
70
 
56
71
  Run the tests:
57
72
  (Move back to top level)
58
- > cd ../..
59
- > rake test
73
+ ```
74
+ cd ../..
75
+ rake test
76
+ ```
60
77
 
61
78
  Note: functional and integration tests require an instance of Kill Bill to test against.
62
79
 
@@ -6,6 +6,7 @@
6
6
  //
7
7
  //= require js-routes
8
8
  //= require jquery
9
+ //= require jquery-ui/autocomplete
9
10
  //= require jquery_ujs
10
11
  //= require dataTables/jquery.dataTables
11
12
  //= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
@@ -5,6 +5,7 @@
5
5
  *= require_self
6
6
  *= require bootstrap-datepicker3
7
7
  *= require dataTables/jquery.dataTables
8
+ *= require jquery-ui/autocomplete
8
9
  *= require dataTables/bootstrap/3/jquery.dataTables.bootstrap
9
10
  *= require bootstrap_and_overrides
10
11
  *= require kaui/kaui
@@ -126,14 +126,11 @@ header {
126
126
  }
127
127
  }
128
128
 
129
- a {
129
+ a,p {
130
130
  display: inline-block;
131
131
  padding: 12px 40px;
132
132
  font-size: 12px;
133
- text-transform: uppercase;
134
- color: #666666;
135
133
  margin: 0;
136
- border-left: 1px solid #fff;
137
134
  line-height: 12px;
138
135
  background: transparent;
139
136
  vertical-align: top;
@@ -173,6 +170,12 @@ header {
173
170
  width: 100%;
174
171
  }
175
172
  }
173
+ }
174
+
175
+ a {
176
+ color: #666666;
177
+ text-transform: uppercase;
178
+ border-left: 1px solid #fff;
176
179
 
177
180
  &:hover, &.current {
178
181
  color: #fff;
@@ -183,4 +186,8 @@ header {
183
186
  border-right: 1px solid #fff;
184
187
  }
185
188
  }
189
+
190
+ p {
191
+ font-weight: normal;
192
+ }
186
193
  }
@@ -55,6 +55,7 @@ class Kaui::AccountsController < Kaui::EngineController
55
55
  end
56
56
 
57
57
  def show
58
+ # Re-fetch the account with balance and CBA
58
59
  @account = Kaui::Account::find_by_id_or_key(params.require(:account_id), true, true, options_for_klient)
59
60
 
60
61
  fetch_overdue_state = lambda { @overdue_state = @account.overdue(options_for_klient) }
@@ -72,7 +73,6 @@ class Kaui::AccountsController < Kaui::EngineController
72
73
  end
73
74
 
74
75
  def edit
75
- @account = Kaui::Account::find_by_id_or_key(params.require(:account_id), false, false, options_for_klient)
76
76
  end
77
77
 
78
78
  def update
@@ -14,18 +14,11 @@ class Kaui::AdminTenantsController < Kaui::EngineController
14
14
 
15
15
  def create
16
16
  param_tenant = params[:tenant]
17
- old_tenant = Kaui::Tenant.find_by_name(param_tenant[:name])
18
- if old_tenant
19
- flash.now[:error] = "Tenant with name #{param_tenant[:name]} already exists!"
20
- @tenant = Kaui::Tenant.new
21
- render :new and return
22
- end
23
17
 
24
- old_tenant = Kaui::Tenant.find_by_api_key(param_tenant[:api_key])
18
+ old_tenant = Kaui::Tenant.find_by_name(param_tenant[:name]) || Kaui::Tenant.find_by_api_key(param_tenant[:api_key])
25
19
  if old_tenant
26
- flash.now[:error] = "Tenant with api key #{param_tenant[:api_key]} already exists!"
27
- @tenant = Kaui::Tenant.new
28
- render :new and return
20
+ old_tenant.kaui_allowed_users << Kaui::AllowedUser.where(:kb_username => current_user.kb_username).first_or_create
21
+ redirect_to admin_tenant_path(old_tenant[:id]), :notice => 'Tenant was successfully configured' and return
29
22
  end
30
23
 
31
24
  begin
@@ -37,24 +30,24 @@ class Kaui::AdminTenantsController < Kaui::EngineController
37
30
  options[:api_secret] = param_tenant[:api_secret]
38
31
  new_tenant = Kaui::AdminTenant.find_by_api_key(param_tenant[:api_key], options)
39
32
  rescue KillBillClient::API::Unauthorized, KillBillClient::API::NotFound
33
+
40
34
  # Create the tenant in Kill Bill
41
35
  new_tenant = Kaui::AdminTenant.new
42
36
  new_tenant.external_key = param_tenant[:name]
43
37
  new_tenant.api_key = param_tenant[:api_key]
44
38
  new_tenant.api_secret = param_tenant[:api_secret]
45
- new_tenant = new_tenant.create(options[:username], nil, comment, options)
39
+ new_tenant = new_tenant.create(false, options[:username], nil, comment, options)
46
40
  end
47
41
 
48
42
  # Transform object to Kaui model
49
43
  tenant_model = Kaui::Tenant.new
50
- tenant_model.name = new_tenant.external_key
51
- tenant_model.kb_tenant_id = new_tenant.tenant_id
52
- tenant_model.api_key = new_tenant.api_key
44
+ tenant_model.name = param_tenant[:name]
45
+ tenant_model.api_key = param_tenant[:api_key]
53
46
  tenant_model.api_secret = param_tenant[:api_secret]
47
+ tenant_model.kb_tenant_id = new_tenant.tenant_id
54
48
 
55
49
  # Save in KAUI tables
56
50
  tenant_model.save!
57
-
58
51
  # Make sure at least the current user can access the tenant
59
52
  tenant_model.kaui_allowed_users << Kaui::AllowedUser.where(:kb_username => current_user.kb_username).first_or_create
60
53
  rescue => e
@@ -72,6 +65,20 @@ class Kaui::AdminTenantsController < Kaui::EngineController
72
65
  def show
73
66
  @tenant = safely_find_tenant_by_id(params[:id])
74
67
  @allowed_users = @tenant.kaui_allowed_users & retrieve_allowed_users_for_current_user
68
+
69
+ options = tenant_options_for_client
70
+ options[:api_key] = @tenant.api_key
71
+ options[:api_secret] = @tenant.api_secret
72
+
73
+ @catalogs = Kaui::Catalog::get_catalog_json(false, options) rescue @catalogs = []
74
+ @catalogs_xml = Kaui::Catalog::get_catalog_xml(options) rescue @catalogs_xml = []
75
+ @overdue = Kaui::Overdue::get_overdue_json(options) rescue @overdue = nil
76
+ @overdue_xml = Kaui::Overdue::get_tenant_overdue_config('xml', options) rescue @overdue_xml = nil
77
+
78
+ plugin_repository = Kaui::AdminTenant::get_plugin_repository
79
+
80
+ @plugin_config = Kaui::AdminTenant::get_oss_plugin_info(plugin_repository) rescue @plugin_config = ""
81
+ @tenant_plugin_config = Kaui::AdminTenant::get_tenant_plugin_config(plugin_repository, options) rescue @tenant_plugin_config = ""
75
82
  end
76
83
 
77
84
  def upload_catalog
@@ -89,6 +96,80 @@ class Kaui::AdminTenantsController < Kaui::EngineController
89
96
  redirect_to admin_tenant_path(current_tenant.id), :notice => 'Catalog was successfully uploaded'
90
97
  end
91
98
 
99
+ def new_catalog
100
+ @tenant = safely_find_tenant_by_id(params[:id])
101
+
102
+ options = tenant_options_for_client
103
+ options[:api_key] = @tenant.api_key
104
+ options[:api_secret] = @tenant.api_secret
105
+
106
+ latest_catalog = Kaui::Catalog::get_catalog_json(true, options)
107
+
108
+ @ao_mapping = Kaui::Catalog::build_ao_mapping(latest_catalog)
109
+
110
+ @available_base_products = latest_catalog && latest_catalog.products ?
111
+ latest_catalog.products.select { |p| p.type == 'BASE' }.map { |p| p.name } : []
112
+ @available_ao_products = latest_catalog && latest_catalog.products ?
113
+ latest_catalog.products.select { |p| p.type == 'ADD_ON' }.map { |p| p.name } : []
114
+ @available_standalone_products = latest_catalog && latest_catalog.products ?
115
+ latest_catalog.products.select { |p| p.type == 'STANDALONE' }.map { |p| p.name } : []
116
+ @product_categories = [:BASE, :ADD_ON, :STANDALONE]
117
+ @billing_period = [:DAILY, :WEEKLY, :BIWEEKLY, :THIRTY_DAYS, :MONTHLY, :QUARTERLY, :BIANNUAL, :ANNUAL, :BIENNIAL]
118
+ @time_units = [:UNLIMITED, :DAYS, :MONTHS, :YEARS]
119
+
120
+ @simple_plan = Kaui::SimplePlan.new
121
+ end
122
+
123
+ def new_plan_currency
124
+ @tenant = safely_find_tenant_by_id(params[:id])
125
+ @simple_plan = Kaui::SimplePlan.new
126
+ @simple_plan.plan_id = params[:plan_id]
127
+ end
128
+
129
+
130
+ def create_simple_plan
131
+
132
+ current_tenant = safely_find_tenant_by_id(params[:id])
133
+
134
+ options = tenant_options_for_client
135
+ options[:api_key] = current_tenant.api_key
136
+ options[:api_secret] = current_tenant.api_secret
137
+
138
+ simple_plan = params.require(:simple_plan).delete_if { |e, value| value.blank? }
139
+ # Fix issue in Rails where first entry in the multi-select array is an empty string
140
+ simple_plan["available_base_products"].reject!(&:blank?) if simple_plan["available_base_products"]
141
+
142
+ simple_plan = KillBillClient::Model::SimplePlanAttributes.new(simple_plan)
143
+
144
+ Kaui::Catalog.add_tenant_catalog_simple_plan(simple_plan, options[:username], nil, comment, options)
145
+
146
+ redirect_to admin_tenant_path(current_tenant.id), :notice => 'Catalog plan was successfully added'
147
+ end
148
+
149
+ def new_overdue_config
150
+ @tenant = safely_find_tenant_by_id(params[:id])
151
+
152
+ options = tenant_options_for_client
153
+ options[:api_key] = @tenant.api_key
154
+ options[:api_secret] = @tenant.api_secret
155
+ @overdue = Kaui::Overdue::get_overdue_json(options)
156
+ end
157
+
158
+ def modify_overdue_config
159
+
160
+ current_tenant = safely_find_tenant_by_id(params[:id])
161
+
162
+ options = tenant_options_for_client
163
+ options[:api_key] = current_tenant.api_key
164
+ options[:api_secret] = current_tenant.api_secret
165
+
166
+ view_form_model = params.require(:kill_bill_client_model_overdue).delete_if { |e, value| value.blank? }
167
+ overdue = Kaui::Overdue::from_overdue_form_model(view_form_model)
168
+ overdue.upload_tenant_overdue_config_json(options[:username], nil, comment, options)
169
+ redirect_to admin_tenant_path(current_tenant.id), :notice => 'Overdue config was successfully added '
170
+ end
171
+
172
+
92
173
  def upload_overdue_config
93
174
  current_tenant = safely_find_tenant_by_id(params[:id])
94
175
 
@@ -161,10 +242,13 @@ class Kaui::AdminTenantsController < Kaui::EngineController
161
242
  options[:api_secret] = current_tenant.api_secret
162
243
 
163
244
  plugin_name = params[:plugin_name]
164
- uploaded_plugin_config = params[:plugin_config]
165
- plugin_config = uploaded_plugin_config.read
245
+ plugin_properties = params[:plugin_properties]
246
+ plugin_type = params[:plugin_type]
166
247
 
167
- Kaui::AdminTenant.upload_tenant_plugin_config(plugin_name, plugin_config, options[:username], nil, comment, options)
248
+ plugin_config = Kaui::AdminTenant.format_plugin_config(plugin_name, plugin_type, plugin_properties)
249
+
250
+ key = plugin_type.present? ? "killbill-#{plugin_name}" : plugin_name
251
+ Kaui::AdminTenant.upload_tenant_plugin_config(key, plugin_config, options[:username], nil, comment, options)
168
252
 
169
253
  redirect_to admin_tenant_path(current_tenant.id), :notice => 'Config for plugin was successfully uploaded'
170
254
  end
@@ -183,6 +267,17 @@ class Kaui::AdminTenantsController < Kaui::EngineController
183
267
  render :json => '{}', :status => 200
184
268
  end
185
269
 
270
+ def display_catalog_xml
271
+ @catalog_xml = params.require(:xml)
272
+ render xml: @catalog_xml
273
+ end
274
+
275
+
276
+ def display_overdue_xml
277
+ render xml: params.require(:xml)
278
+ end
279
+
280
+
186
281
  private
187
282
 
188
283
  def safely_find_tenant_by_id(tenant_id)
@@ -1,8 +1,6 @@
1
1
  class Kaui::BundlesController < Kaui::EngineController
2
2
 
3
3
  def index
4
- @account = Kaui::Account::find_by_id_or_key(params.require(:account_id), false, false, options_for_klient)
5
-
6
4
  fetch_bundles = lambda { @bundles = @account.bundles(options_for_klient) }
7
5
  fetch_bundle_tags = lambda {
8
6
  all_bundle_tags = @account.all_tags(:BUNDLE, false, 'NONE', options_for_klient)
@@ -1,7 +1,7 @@
1
1
  class Kaui::ChargebacksController < Kaui::EngineController
2
2
 
3
3
  def new
4
- payment = Kaui::Payment::find_by_id(params.require(:payment_id), options_for_klient)
4
+ payment = Kaui::Payment::find_by_id(params.require(:payment_id), false, false, options_for_klient)
5
5
  @chargeback = Kaui::Chargeback.new(:payment_id => payment.payment_id,
6
6
  :amount => payment.paid_amount_to_money.to_f,
7
7
  :currency => payment.currency)
@@ -19,7 +19,7 @@ class Kaui::ChargesController < Kaui::EngineController
19
19
  charge = Kaui::InvoiceItem.new(params.require(:invoice_item).delete_if { |key, value| value.blank? })
20
20
  charge.account_id ||= params.require(:account_id)
21
21
 
22
- charge = charge.create(current_user.kb_username, params[:reason], params[:comment], options_for_klient)
22
+ charge = charge.create(true, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
23
23
  redirect_to kaui_engine.account_invoice_path(charge.account_id, charge.invoice_id), :notice => 'Charge was successfully created'
24
24
  end
25
25
  end
@@ -2,7 +2,7 @@ class Kaui::EngineController < ApplicationController
2
2
 
3
3
  include Kaui::EngineControllerUtil
4
4
 
5
- before_filter :authenticate_user!, :check_for_redirect_to_tenant_screen
5
+ before_filter :authenticate_user!, :check_for_redirect_to_tenant_screen, :populate_account_details
6
6
 
7
7
  layout :get_layout
8
8
 
@@ -18,7 +18,6 @@ class Kaui::EngineController < ApplicationController
18
18
  super
19
19
  end
20
20
 
21
-
22
21
  def current_ability
23
22
  # Redefined here to namespace Ability in the correct module
24
23
  @current_ability ||= Kaui::Ability.new(current_user)
@@ -32,6 +31,10 @@ class Kaui::EngineController < ApplicationController
32
31
  end
33
32
  end
34
33
 
34
+ def populate_account_details
35
+ @account ||= params[:account_id].present? ? Kaui::Account.find_by_id(params[:account_id], false, false, options_for_klient) : Kaui::Account.new
36
+ end
37
+
35
38
  def retrieve_tenants_for_current_user
36
39
  if Kaui.root_username == current_user.kb_username
37
40
  Kaui::Tenant.all.map(&:kb_tenant_id)
@@ -39,7 +39,7 @@ class Kaui::InvoicesController < Kaui::EngineController
39
39
  @invoice = Kaui::Invoice.find_by_id_or_number(params.require(:id), true, 'FULL', options_for_klient)
40
40
 
41
41
  fetch_payments_and_pms = lambda do
42
- @payments = @invoice.payments(true, 'FULL', options_for_klient).map { |payment| Kaui::InvoicePayment.build_from_raw_payment(payment) }
42
+ @payments = @invoice.payments(true, true, 'FULL', options_for_klient).map { |payment| Kaui::InvoicePayment.build_from_raw_payment(payment) }
43
43
  @payment_methods = Kaui::PaymentMethod.payment_methods_for_payments(@payments, options_for_klient)
44
44
  end
45
45
  fetch_account = lambda { @account = Kaui::Account.find_by_id(@invoice.account_id, false, false, options_for_klient) }
@@ -58,7 +58,7 @@ class Kaui::PaymentMethodsController < Kaui::EngineController
58
58
 
59
59
  payment_method = Kaui::PaymentMethod.find_by_id(payment_method_id, false, options_for_klient)
60
60
  begin
61
- Kaui::PaymentMethod.destroy(payment_method_id, params[:set_auto_pay_off], current_user.kb_username, params[:reason], params[:comment], options_for_klient)
61
+ Kaui::PaymentMethod.destroy(payment_method_id, params[:set_auto_pay_off], false, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
62
62
  redirect_to kaui_engine.account_path(payment_method.account_id), :notice => "Payment method #{payment_method_id} successfully deleted"
63
63
  rescue => e
64
64
  flash[:error] = "Error while deleting payment method #{payment_method_id}: #{as_string(e)}"
@@ -65,7 +65,7 @@ class Kaui::PaymentsController < Kaui::EngineController
65
65
  end
66
66
 
67
67
  def show
68
- @payment = Kaui::InvoicePayment.find_by_id(params.require(:id), true, options_for_klient)
68
+ @payment = Kaui::InvoicePayment.build_from_raw_payment(Kaui::InvoicePayment.find_by_id(params.require(:id), true, true, options_for_klient))
69
69
 
70
70
  fetch_account = lambda { @account = Kaui::Account.find_by_id(@payment.account_id, false, false, options_for_klient) }
71
71
  # The payment method may have been deleted
@@ -75,10 +75,28 @@ class Kaui::PaymentsController < Kaui::EngineController
75
75
  end
76
76
 
77
77
  def restful_show
78
- payment = Kaui::InvoicePayment.find_by_id(params.require(:id), false, options_for_klient)
78
+ begin
79
+ payment = Kaui::InvoicePayment.find_by_id(params.require(:id), false, true, options_for_klient)
80
+ rescue KillBillClient::API::NotFound
81
+ payment = Kaui::Payment.find_by_external_key(params.require(:id), false, true, options_for_klient)
82
+ end
79
83
  redirect_to account_payment_path(payment.account_id, payment.payment_id)
80
84
  end
81
85
 
86
+ def cancel_scheduled_payment
87
+ begin
88
+ payment_transaction = Kaui::Transaction.new
89
+ payment_transaction.transaction_external_key = params.require(:transaction_external_key)
90
+
91
+ payment_transaction.cancel_scheduled_payment(current_user.kb_username, params[:reason], params[:comment], options_for_klient)
92
+
93
+ redirect_to kaui_engine.account_payment_path(params.require(:account_id), params.require(:id)), :notice => "Payment attempt retry successfully deleted"
94
+ rescue => e
95
+ flash[:error] = "Error deleting payment attempt retry: #{as_string(e)}"
96
+ redirect_to kaui_engine.account_path(params.require(:account_id))
97
+ end
98
+ end
99
+
82
100
  private
83
101
 
84
102
  def invoice_payment_params
@@ -2,7 +2,7 @@ class Kaui::RefundsController < Kaui::EngineController
2
2
 
3
3
  def new
4
4
  fetch_invoice = lambda { @invoice = Kaui::Invoice.find_by_id_or_number(params.require(:invoice_id), true, 'NONE', options_for_klient) }
5
- fetch_payment = lambda { @payment = Kaui::InvoicePayment::find_by_id(params.require(:payment_id), false, options_for_klient) }
5
+ fetch_payment = lambda { @payment = Kaui::InvoicePayment::find_by_id(params.require(:payment_id), false, false, options_for_klient) }
6
6
 
7
7
  run_in_parallel fetch_invoice, fetch_payment
8
8
 
@@ -30,11 +30,9 @@ class Kaui::SubscriptionsController < Kaui::EngineController
30
30
  plan_details = plans_details.find { |p| p.plan == plan_name }
31
31
  raise "Unable to find plan #{plan_name}" if plan_details.nil?
32
32
 
33
- @subscription.billing_period = plan_details.final_phase_billing_period
34
- @subscription.product_name = plan_details.product
35
- @subscription.price_list = plan_details.price_list
36
-
37
- @subscription = @subscription.create(current_user.kb_username, params[:reason], params[:comment], params[:requested_date], false, options_for_klient)
33
+ @subscription.plan_name = plan_name
34
+ requested_date = params[:type_change] == "DATE" ? params[:requested_date].presence : nil
35
+ @subscription = @subscription.create(current_user.kb_username, params[:reason], params[:comment], requested_date, false, options_for_klient)
38
36
  redirect_to kaui_engine.account_bundles_path(@subscription.account_id), :notice => 'Subscription was successfully created'
39
37
  rescue => e
40
38
  @plans = plans_details.nil? ? [] : plans_details.map { |p| p.plan }
@@ -53,21 +51,18 @@ class Kaui::SubscriptionsController < Kaui::EngineController
53
51
  end
54
52
 
55
53
  def update
54
+
56
55
  plan_name = params.require(:plan_name)
57
56
 
58
- requested_date = params[:requested_date].presence
59
- billing_policy = params[:policy].presence
57
+ requested_date = params[:type_change] == "DATE" ? params[:requested_date].presence : nil
58
+ billing_policy = params[:type_change] == "POLICY" ? params[:policy].presence : nil
59
+
60
60
  wait_for_completion = params[:wait_for_completion] == '1'
61
61
 
62
62
  subscription = Kaui::Subscription.find_by_id(params.require(:id), options_for_klient)
63
- plans_details = Kaui::Catalog::available_base_plans(options_for_klient)
64
- new_plan_details = plans_details.find { |p| p.plan == plan_name }
65
- raise "Unable to find plan #{plan_name}" if new_plan_details.nil?
66
63
 
67
64
  subscription.change_plan({
68
- :productName => new_plan_details.product,
69
- :billingPeriod => new_plan_details.final_phase_billing_period,
70
- :priceList => new_plan_details.price_list
65
+ :planName => plan_name
71
66
  },
72
67
  current_user.kb_username,
73
68
  params[:reason],
@@ -0,0 +1,9 @@
1
+ module Kaui
2
+ module AccountHelper
3
+
4
+ def pretty_account_identifier
5
+ return nil if @account.nil?
6
+ @account.name.presence || @account.email.presence || @account.external_key
7
+ end
8
+ end
9
+ end
@@ -1,37 +1,53 @@
1
1
  module Kaui
2
2
  module SubscriptionHelper
3
3
 
4
- def humanized_product_category(sub)
4
+ def humanized_subscription_product_category(sub)
5
5
  if !sub.present? or !sub.product_category.present?
6
6
  nil
7
- elsif sub.product_category == 'BASE'
7
+ else
8
+ humanized_product_category(sub.product_category)
9
+ end
10
+ end
11
+
12
+ def humanized_product_category(product_category)
13
+ if product_category == 'BASE'
8
14
  'Base'
9
- elsif sub.product_category == 'ADD_ON'
15
+ elsif product_category == 'ADD_ON'
10
16
  'Add-on'
11
17
  else
12
- sub.product_category.downcase.capitalize
18
+ product_category.downcase.capitalize
13
19
  end
14
20
  end
15
21
 
16
- def humanized_product_name(sub)
22
+ def humanized_subscription_product_name(sub)
17
23
  if !sub.present? or !sub.product_name.present?
18
24
  nil
19
25
  else
20
- sub.product_name.downcase.capitalize
26
+ humanized_product_name(sub.product_name)
21
27
  end
22
28
  end
23
29
 
24
- def humanized_billing_period(sub)
30
+ def humanized_product_name(product_name)
31
+ product_name.downcase.capitalize
32
+ end
33
+
34
+ def humanized_subscription_billing_period(sub)
25
35
  if !sub.present? or !sub.billing_period.present?
26
36
  nil
27
- elsif sub.billing_period == 'NO_BILLING_PERIOD'
37
+ else
38
+ humanized_billing_period(sub.billing_period)
39
+ end
40
+ end
41
+
42
+ def humanized_billing_period(billing_period)
43
+ if billing_period == 'NO_BILLING_PERIOD'
28
44
  'No billing period'
29
45
  else
30
- sub.billing_period.downcase.capitalize
46
+ billing_period.downcase.capitalize
31
47
  end
32
48
  end
33
49
 
34
- def humanized_price_list(sub, show_default=true)
50
+ def humanized_subscription_price_list(sub, show_default=true)
35
51
  if !sub.present? or !sub.price_list.present? or (!show_default and sub.price_list.upcase == 'DEFAULT')
36
52
  nil
37
53
  else
@@ -39,10 +55,10 @@ module Kaui
39
55
  end
40
56
  end
41
57
 
42
- def humanized_full_product_name(sub)
43
- humanized_product_name = humanized_product_name(sub)
44
- humanized_billing_period = humanized_billing_period(sub)
45
- humanized_price_list = humanized_price_list(sub, false)
58
+ def humanized_subscription_full_product_name(sub)
59
+ humanized_product_name = humanized_subscription_product_name(sub)
60
+ humanized_billing_period = humanized_subscription_billing_period(sub)
61
+ humanized_price_list = humanized_subscription_price_list(sub, false)
46
62
 
47
63
  if humanized_billing_period.nil?
48
64
  if humanized_price_list.nil?
@@ -59,7 +75,11 @@ module Kaui
59
75
  end
60
76
  end
61
77
 
62
- def humanized_start_date(sub, account)
78
+ def humanized_subscription_phase_type(sub)
79
+ sub.phase_type
80
+ end
81
+
82
+ def humanized_subscription_start_date(sub, account)
63
83
  if !sub.present? or !sub.start_date.present? or !account.present? or !account.time_zone.present?
64
84
  nil
65
85
  else
@@ -67,7 +87,7 @@ module Kaui
67
87
  end
68
88
  end
69
89
 
70
- def humanized_charged_through_date(sub, account)
90
+ def humanized_subscription_charged_through_date(sub, account)
71
91
  if !sub.present? or !sub.charged_through_date.present? or !account.present? or !account.time_zone.present?
72
92
  nil
73
93
  else
@@ -75,7 +95,7 @@ module Kaui
75
95
  end
76
96
  end
77
97
 
78
- def humanized_cancelled_date(sub, account)
98
+ def humanized_subscription_cancelled_date(sub, account)
79
99
  if !sub.present? or !sub.cancelled_date.present? or !account.present? or !account.time_zone.present?
80
100
  nil
81
101
  else
@@ -88,7 +108,7 @@ module Kaui
88
108
  end
89
109
  end
90
110
 
91
- def humanized_billing_start_date(sub, account)
111
+ def humanized_subscription_billing_start_date(sub, account)
92
112
  if !sub.present? or !sub.billing_start_date.present? or !account.present? or !account.time_zone.present?
93
113
  nil
94
114
  else
@@ -96,7 +116,7 @@ module Kaui
96
116
  end
97
117
  end
98
118
 
99
- def humanized_billing_end_date(sub, account)
119
+ def humanized_subscription_billing_end_date(sub, account)
100
120
  if !sub.present? or !sub.billing_end_date.present? or !account.present? or !account.time_zone.present?
101
121
  nil
102
122
  else
@@ -104,11 +124,17 @@ module Kaui
104
124
  end
105
125
  end
106
126
 
107
- def is_future_cancelled?(sub)
127
+
128
+ def humanized_time_unit(time_unit)
129
+ time_unit.downcase.capitalize
130
+ end
131
+
132
+
133
+ def is_subscription_future_cancelled?(sub)
108
134
  sub.present? and sub.billing_end_date.present? and Time.parse(sub.billing_end_date) > Time.now
109
135
  end
110
136
 
111
- def is_cancelled?(sub)
137
+ def is_subscription_cancelled?(sub)
112
138
  sub.present? and sub.billing_end_date.present?
113
139
  end
114
140
  end