kaui 2.1.0 → 2.2.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (269) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +8 -7
  3. data/Rakefile +4 -2
  4. data/app/assets/config/kaui_manifest.js +45 -0
  5. data/app/assets/javascripts/jquery.spin.js +76 -0
  6. data/app/assets/javascripts/kaui/kaui.js +76 -0
  7. data/app/assets/javascripts/kaui_application.js +25 -0
  8. data/app/assets/javascripts/spin.js +76 -0
  9. data/app/assets/stylesheets/bootstrap_and_overrides.scss +240 -0
  10. data/app/assets/stylesheets/kaui/{account.less → account.scss} +4 -0
  11. data/app/assets/stylesheets/kaui/{audit.less → audit.scss} +5 -1
  12. data/app/assets/stylesheets/kaui/{common.less → common.scss} +17 -15
  13. data/app/assets/stylesheets/kaui/{datatable.less → datatable.scss} +6 -3
  14. data/app/assets/stylesheets/kaui/{header.less → header.scss} +16 -12
  15. data/app/assets/stylesheets/kaui/{home.less → home.scss} +7 -4
  16. data/app/assets/stylesheets/kaui/{invoice.less → invoice.scss} +7 -3
  17. data/app/assets/stylesheets/kaui/kaui.scss +265 -0
  18. data/app/assets/stylesheets/kaui/kaui_bootstrap.scss +3 -0
  19. data/app/assets/stylesheets/kaui/{overdue.less → overdue.scss} +3 -1
  20. data/app/assets/stylesheets/kaui/{payment.less → payment.scss} +3 -0
  21. data/app/assets/stylesheets/kaui/{subscription.less → subscription.scss} +4 -1
  22. data/app/assets/stylesheets/kaui/{tags.less → tags.scss} +9 -5
  23. data/app/assets/stylesheets/kaui/timeline.scss +7 -0
  24. data/app/assets/stylesheets/kaui/tooltip.scss +15 -0
  25. data/app/controllers/kaui/account_children_controller.rb +25 -28
  26. data/app/controllers/kaui/account_custom_fields_controller.rb +16 -15
  27. data/app/controllers/kaui/account_emails_controller.rb +28 -25
  28. data/app/controllers/kaui/account_tags_controller.rb +37 -34
  29. data/app/controllers/kaui/account_timelines_controller.rb +38 -33
  30. data/app/controllers/kaui/accounts_controller.rb +268 -250
  31. data/app/controllers/kaui/admin_allowed_users_controller.rb +105 -99
  32. data/app/controllers/kaui/admin_controller.rb +32 -31
  33. data/app/controllers/kaui/admin_tenants_controller.rb +434 -388
  34. data/app/controllers/kaui/audit_logs_controller.rb +86 -83
  35. data/app/controllers/kaui/bundle_tags_controller.rb +24 -20
  36. data/app/controllers/kaui/bundles_controller.rb +96 -82
  37. data/app/controllers/kaui/chargebacks_controller.rb +36 -33
  38. data/app/controllers/kaui/charges_controller.rb +23 -20
  39. data/app/controllers/kaui/credits_controller.rb +28 -25
  40. data/app/controllers/kaui/custom_fields_controller.rb +172 -38
  41. data/app/controllers/kaui/engine_controller.rb +2 -1
  42. data/app/controllers/kaui/engine_controller_util.rb +130 -117
  43. data/app/controllers/kaui/home_controller.rb +230 -217
  44. data/app/controllers/kaui/invoice_items_controller.rb +43 -39
  45. data/app/controllers/kaui/invoice_tags_controller.rb +24 -20
  46. data/app/controllers/kaui/invoices_controller.rb +132 -117
  47. data/app/controllers/kaui/login_proxy_controller.rb +2 -1
  48. data/app/controllers/kaui/payment_methods_controller.rb +102 -94
  49. data/app/controllers/kaui/payments_controller.rb +95 -92
  50. data/app/controllers/kaui/queues_controller.rb +47 -14
  51. data/app/controllers/kaui/refunds_controller.rb +36 -33
  52. data/app/controllers/kaui/registrations_controller.rb +7 -7
  53. data/app/controllers/kaui/role_definitions_controller.rb +17 -14
  54. data/app/controllers/kaui/sessions_controller.rb +7 -4
  55. data/app/controllers/kaui/subscriptions_controller.rb +197 -187
  56. data/app/controllers/kaui/tag_definitions_controller.rb +28 -27
  57. data/app/controllers/kaui/tags_controller.rb +25 -22
  58. data/app/controllers/kaui/tenants_controller.rb +30 -28
  59. data/app/controllers/kaui/transactions_controller.rb +43 -38
  60. data/app/helpers/kaui/account_helper.rb +16 -14
  61. data/app/helpers/kaui/application_helper.rb +8 -3
  62. data/app/helpers/kaui/date_helper.rb +3 -2
  63. data/app/helpers/kaui/home_helper.rb +2 -0
  64. data/app/helpers/kaui/locale_helper.rb +7 -6
  65. data/app/helpers/kaui/money_helper.rb +2 -1
  66. data/app/helpers/kaui/object_helper.rb +11 -10
  67. data/app/helpers/kaui/payment_helper.rb +7 -6
  68. data/app/helpers/kaui/payment_method_helper.rb +3 -2
  69. data/app/helpers/kaui/permissions_helper.rb +9 -9
  70. data/app/helpers/kaui/plugin_helper.rb +25 -23
  71. data/app/helpers/kaui/subscription_helper.rb +27 -29
  72. data/app/helpers/kaui/us_states_helper.rb +7 -6
  73. data/app/helpers/kaui/uuid_helper.rb +7 -5
  74. data/app/models/kaui/ability.rb +19 -12
  75. data/app/models/kaui/account.rb +45 -28
  76. data/app/models/kaui/account_email.rb +23 -20
  77. data/app/models/kaui/account_timeline.rb +5 -1
  78. data/app/models/kaui/admin.rb +65 -64
  79. data/app/models/kaui/admin_tenant.rb +81 -82
  80. data/app/models/kaui/allowed_user.rb +13 -9
  81. data/app/models/kaui/allowed_user_tenant.rb +4 -2
  82. data/app/models/kaui/application_record.rb +2 -0
  83. data/app/models/kaui/audit_log.rb +6 -3
  84. data/app/models/kaui/base.rb +13 -7
  85. data/app/models/kaui/bundle.rb +41 -24
  86. data/app/models/kaui/catalog.rb +118 -113
  87. data/app/models/kaui/chargeback.rb +5 -1
  88. data/app/models/kaui/credit.rb +4 -1
  89. data/app/models/kaui/custom_field.rb +9 -6
  90. data/app/models/kaui/invoice.rb +25 -22
  91. data/app/models/kaui/invoice_item.rb +9 -6
  92. data/app/models/kaui/invoice_payment.rb +49 -54
  93. data/app/models/kaui/killbill_authenticatable.rb +14 -8
  94. data/app/models/kaui/killbill_registerable.rb +7 -0
  95. data/app/models/kaui/overdue.rb +64 -65
  96. data/app/models/kaui/payment.rb +22 -19
  97. data/app/models/kaui/payment_method.rb +48 -39
  98. data/app/models/kaui/payment_state.rb +41 -38
  99. data/app/models/kaui/rails_methods.rb +9 -9
  100. data/app/models/kaui/refund.rb +7 -1
  101. data/app/models/kaui/role_definition.rb +5 -1
  102. data/app/models/kaui/simple_plan.rb +5 -3
  103. data/app/models/kaui/subscription.rb +10 -7
  104. data/app/models/kaui/tag.rb +25 -22
  105. data/app/models/kaui/tag_definition.rb +50 -45
  106. data/app/models/kaui/tenant.rb +6 -5
  107. data/app/models/kaui/transaction.rb +43 -31
  108. data/app/models/kaui/user.rb +10 -16
  109. data/app/models/kaui/user_role.rb +8 -5
  110. data/app/views/kaui/accounts/_billing_info.html.erb +1 -1
  111. data/app/views/kaui/accounts/_form.html.erb +2 -2
  112. data/app/views/kaui/accounts/index.html.erb +2 -0
  113. data/app/views/kaui/admin_allowed_users/_form.html.erb +3 -3
  114. data/app/views/kaui/admin_tenants/_form_catalog_translation.erb +1 -1
  115. data/app/views/kaui/admin_tenants/_form_invoice_template.erb +1 -1
  116. data/app/views/kaui/admin_tenants/_form_invoice_translation.erb +1 -1
  117. data/app/views/kaui/admin_tenants/_show_catalog_simple.erb +11 -5
  118. data/app/views/kaui/admin_tenants/new_catalog.html.erb +2 -2
  119. data/app/views/kaui/admin_tenants/new_overdue_config.html.erb +2 -2
  120. data/app/views/kaui/admin_tenants/new_plan_currency.html.erb +1 -1
  121. data/app/views/kaui/bundles/index.html.erb +1 -1
  122. data/app/views/kaui/bundles/transfer.html.erb +13 -5
  123. data/app/views/kaui/invoices/_invoice_table.html.erb +1 -1
  124. data/app/views/kaui/layouts/kaui_flash.html.erb +24 -0
  125. data/app/views/kaui/layouts/kaui_header.html.erb +19 -2
  126. data/app/views/kaui/payment_methods/_payment_methods_details_table.html.erb +13 -4
  127. data/app/views/kaui/payments/_payment_table.html.erb +21 -11
  128. data/app/views/kaui/payments/index.html.erb +9 -9
  129. data/app/views/kaui/queues/index.html.erb +1 -1
  130. data/app/views/kaui/subscriptions/_cancel_by_date_modal.html.erb +1 -4
  131. data/app/views/kaui/subscriptions/_edit_form.html.erb +1 -1
  132. data/app/views/kaui/subscriptions/_form.html.erb +1 -1
  133. data/app/views/kaui/subscriptions/_subscriptions_table.html.erb +3 -3
  134. data/app/views/kaui/subscriptions/edit_bcd.erb +1 -1
  135. data/app/views/kaui/tag_definitions/index.html.erb +2 -2
  136. data/app/views/kaui/tags/index.html.erb +1 -0
  137. data/config/initializers/bootstrap_datepicker_rails.rb +3 -0
  138. data/config/initializers/devise.rb +8 -6
  139. data/config/initializers/js_routes.rb +9 -0
  140. data/config/initializers/kilbill_client_init.rb +13 -0
  141. data/config/initializers/killbill_authenticatable.rb +71 -21
  142. data/config/initializers/killbill_registerable.rb +5 -3
  143. data/config/initializers/time_formats.rb +6 -4
  144. data/config/locales/en.yml +78 -1
  145. data/config/routes.rb +34 -32
  146. data/db/migrate/20130812155313_devise_create_kaui_users.rb +10 -8
  147. data/db/migrate/20150109214021_create_kaui_tenants.rb +10 -8
  148. data/db/migrate/20150112232813_create_kaui_allowed_users.rb +10 -8
  149. data/lib/generators/kaui/install/install_generator.rb +23 -20
  150. data/lib/generators/kaui/install/templates/config/initializers/kaui.rb +3 -1
  151. data/lib/kaui/engine.rb +17 -5
  152. data/lib/kaui/installer/installer.rb +27 -26
  153. data/lib/kaui/version.rb +3 -1
  154. data/lib/kaui.rb +26 -37
  155. data/lib/tasks/kaui_tasks.rake +1 -0
  156. metadata +140 -442
  157. data/app/assets/javascripts/application.js +0 -17
  158. data/app/assets/javascripts/kaui/bootstrap-tweaks.js +0 -172
  159. data/app/assets/stylesheets/bootstrap_and_overrides.css.less +0 -44
  160. data/app/assets/stylesheets/kaui/kaui.less +0 -21
  161. data/app/assets/stylesheets/kaui/timeline.less +0 -4
  162. data/config/initializers/asset.rb +0 -1
  163. data/config/initializers/kilbill-client-init.rb +0 -9
  164. data/db/schema.rb +0 -15
  165. data/test/dummy/README.rdoc +0 -261
  166. data/test/dummy/Rakefile +0 -7
  167. data/test/dummy/app/controllers/application_controller.rb +0 -9
  168. data/test/dummy/app/helpers/application_helper.rb +0 -2
  169. data/test/dummy/bin/bundle +0 -3
  170. data/test/dummy/bin/rails +0 -4
  171. data/test/dummy/bin/rake +0 -4
  172. data/test/dummy/bin/setup +0 -38
  173. data/test/dummy/bin/update +0 -29
  174. data/test/dummy/bin/yarn +0 -11
  175. data/test/dummy/config/application.rb +0 -18
  176. data/test/dummy/config/boot.rb +0 -3
  177. data/test/dummy/config/database.yml +0 -27
  178. data/test/dummy/config/environment.rb +0 -5
  179. data/test/dummy/config/environments/development.rb +0 -58
  180. data/test/dummy/config/environments/production.rb +0 -91
  181. data/test/dummy/config/environments/test.rb +0 -49
  182. data/test/dummy/config/initializers/application_controller_renderer.rb +0 -6
  183. data/test/dummy/config/initializers/assets.rb +0 -14
  184. data/test/dummy/config/initializers/backtrace_silencers.rb +0 -7
  185. data/test/dummy/config/initializers/cookies_serializer.rb +0 -5
  186. data/test/dummy/config/initializers/filter_parameter_logging.rb +0 -4
  187. data/test/dummy/config/initializers/inflections.rb +0 -16
  188. data/test/dummy/config/initializers/killbill_client.rb +0 -1
  189. data/test/dummy/config/initializers/mime_types.rb +0 -4
  190. data/test/dummy/config/initializers/money.rb +0 -2
  191. data/test/dummy/config/initializers/new_framework_defaults_5_1.rb +0 -14
  192. data/test/dummy/config/initializers/secret_token.rb +0 -7
  193. data/test/dummy/config/initializers/session_store.rb +0 -8
  194. data/test/dummy/config/initializers/wrap_parameters.rb +0 -14
  195. data/test/dummy/config/locales/en.yml +0 -33
  196. data/test/dummy/config/routes.rb +0 -3
  197. data/test/dummy/config/secrets.yml +0 -32
  198. data/test/dummy/config/symmetric-encryption.yml +0 -135
  199. data/test/dummy/config.ru +0 -4
  200. data/test/dummy/db/schema.rb +0 -52
  201. data/test/dummy/public/404.html +0 -26
  202. data/test/dummy/public/422.html +0 -26
  203. data/test/dummy/public/500.html +0 -25
  204. data/test/dummy/public/favicon.ico +0 -0
  205. data/test/dummy/script/rails +0 -6
  206. data/test/fixtures/SpyCarAdvanced.xml +0 -824
  207. data/test/fixtures/catalog-v1.xml +0 -73
  208. data/test/fixtures/catalog_translation_fr-v1.properties +0 -1
  209. data/test/fixtures/invoice_template-v1.html +0 -100
  210. data/test/fixtures/invoice_translation_fr-v1.properties +0 -23
  211. data/test/fixtures/overdue-v1.xml +0 -49
  212. data/test/fixtures/stripe.yml +0 -2
  213. data/test/functional/kaui/account_children_controller_test.rb +0 -32
  214. data/test/functional/kaui/account_custom_fields_controller_test.rb +0 -29
  215. data/test/functional/kaui/account_emails_controller_test.rb +0 -55
  216. data/test/functional/kaui/account_tags_controller_test.rb +0 -48
  217. data/test/functional/kaui/account_timelines_controller_test.rb +0 -20
  218. data/test/functional/kaui/accounts_controller_test.rb +0 -297
  219. data/test/functional/kaui/admin_allowed_users_controller_test.rb +0 -234
  220. data/test/functional/kaui/admin_controller_test.rb +0 -45
  221. data/test/functional/kaui/admin_tenants_controller_test.rb +0 -352
  222. data/test/functional/kaui/audit_logs_controller_test.rb +0 -71
  223. data/test/functional/kaui/bundle_tags_controller_test.rb +0 -23
  224. data/test/functional/kaui/bundles_controller_test.rb +0 -130
  225. data/test/functional/kaui/chargebacks_controller_test.rb +0 -42
  226. data/test/functional/kaui/charges_controller_test.rb +0 -60
  227. data/test/functional/kaui/credits_controller_test.rb +0 -54
  228. data/test/functional/kaui/custom_fields_controller_test.rb +0 -52
  229. data/test/functional/kaui/functional_test_helper.rb +0 -13
  230. data/test/functional/kaui/functional_test_helper_nosetup.rb +0 -120
  231. data/test/functional/kaui/home_controller_test.rb +0 -407
  232. data/test/functional/kaui/invoice_items_controller_test.rb +0 -82
  233. data/test/functional/kaui/invoices_controller_test.rb +0 -88
  234. data/test/functional/kaui/login_proxy_controller_test.rb +0 -12
  235. data/test/functional/kaui/payment_methods_controller_test.rb +0 -52
  236. data/test/functional/kaui/payments_controller_test.rb +0 -59
  237. data/test/functional/kaui/queues_controller_test.rb +0 -17
  238. data/test/functional/kaui/refunds_controller_test.rb +0 -63
  239. data/test/functional/kaui/registrations_controller_test.rb +0 -49
  240. data/test/functional/kaui/role_definitions_controller_test.rb +0 -47
  241. data/test/functional/kaui/subscriptions_controller_test.rb +0 -194
  242. data/test/functional/kaui/tag_definitions_controller_test.rb +0 -29
  243. data/test/functional/kaui/tags_controller_test.rb +0 -21
  244. data/test/functional/kaui/tenants_controller_test.rb +0 -60
  245. data/test/functional/kaui/transactions_controller_test.rb +0 -90
  246. data/test/integration/kaui/date_helper_integration_test.rb +0 -16
  247. data/test/integration/kaui/integration_test_helper.rb +0 -32
  248. data/test/integration/kaui/navigation_test.rb +0 -43
  249. data/test/killbill_test_helper.rb +0 -219
  250. data/test/test_helper.rb +0 -22
  251. data/test/unit/helpers/kaui/admin_allowed_users_helper_test.rb +0 -6
  252. data/test/unit/helpers/kaui/admin_tenants_helper_test.rb +0 -6
  253. data/test/unit/helpers/kaui/payment_method_helper_test.rb +0 -17
  254. data/test/unit/helpers/kaui/tenants_helper_test.rb +0 -6
  255. data/test/unit/helpers/kaui/uuid_helper_test.rb +0 -16
  256. data/test/unit/kaui/account_email_test.rb +0 -19
  257. data/test/unit/kaui/account_test.rb +0 -14
  258. data/test/unit/kaui/admin_tenant_test.rb +0 -132
  259. data/test/unit/kaui/allowed_user_test.rb +0 -34
  260. data/test/unit/kaui/base_test.rb +0 -23
  261. data/test/unit/kaui/date_helper_test.rb +0 -26
  262. data/test/unit/kaui/invoice_item_test.rb +0 -11
  263. data/test/unit/kaui/invoice_payment_test.rb +0 -42
  264. data/test/unit/kaui/invoice_test.rb +0 -20
  265. data/test/unit/kaui/money_helper_test.rb +0 -16
  266. data/test/unit/kaui/payment_test.rb +0 -42
  267. data/test/unit/kaui/tag_definition_test.rb +0 -11
  268. data/test/unit/kaui/tenant_test.rb +0 -19
  269. /data/app/assets/stylesheets/{application.css → kaui_application.css} +0 -0
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Kaui
2
4
  class ApplicationRecord < ActiveRecord::Base
3
5
  self.abstract_class = true
@@ -1,7 +1,10 @@
1
- class Kaui::AuditLog
1
+ # frozen_string_literal: true
2
+
3
+ module Kaui
4
+ class AuditLog
5
+ def self.description(log)
6
+ return unless log.changed_by.present?
2
7
 
3
- def self.description(log)
4
- if log.changed_by.present?
5
8
  changed_str = "#{log.change_type} by #{log.changed_by.strip}"
6
9
  if log.reason_code.blank? && log.comments.blank?
7
10
  changed_str
@@ -1,10 +1,16 @@
1
- class Kaui::Base
1
+ # frozen_string_literal: true
2
2
 
3
- def self.to_money(amount, currency)
4
- begin
5
- return Money.from_amount(amount.to_f, currency)
6
- rescue => _
7
- end if currency.present?
8
- Money.from_amount(amount.to_f, 'USD')
3
+ module Kaui
4
+ class Base
5
+ def self.to_money(amount, currency)
6
+ if currency.present?
7
+ begin
8
+ return Money.from_amount(amount.to_f, currency)
9
+ rescue StandardError => _e
10
+ # Pass through
11
+ end
12
+ end
13
+ Money.from_amount(amount.to_f, 'USD')
14
+ end
9
15
  end
10
16
  end
@@ -1,34 +1,39 @@
1
- class Kaui::Bundle < KillBillClient::Model::Bundle
1
+ # frozen_string_literal: true
2
+
3
+ module Kaui
4
+ class Bundle < KillBillClient::Model::Bundle
5
+ def self.find_by_id_or_key(bundle_id_or_key, options = {})
6
+ if bundle_id_or_key =~ /[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}/
7
+ bundle = begin
8
+ find_by_id(bundle_id_or_key, options)
9
+ rescue StandardError
10
+ nil
11
+ end
12
+ return bundle unless bundle.nil?
13
+ end
2
14
 
3
- def self.find_by_id_or_key(bundle_id_or_key, options = {})
4
- if bundle_id_or_key =~ /[A-Fa-f0-9]{8}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{4}-[A-Fa-f0-9]{12}/
5
- bundle = find_by_id(bundle_id_or_key, options) rescue nil
6
- return bundle unless bundle.nil?
15
+ # Return the active one
16
+ find_by_external_key(bundle_id_or_key, false, options)
7
17
  end
8
18
 
9
- # Return the active one
10
- find_by_external_key(bundle_id_or_key, false, options)
11
- end
12
-
13
- def self.list_or_search(search_key = nil, offset = 0, limit = 10, options = {})
14
- if search_key.present?
15
- find_in_batches_by_search_key(search_key, offset, limit, options)
16
- else
17
- find_in_batches(offset, limit, options)
19
+ def self.list_or_search(search_key = nil, offset = 0, limit = 10, options = {})
20
+ if search_key.present?
21
+ find_in_batches_by_search_key(search_key, offset, limit, options)
22
+ else
23
+ find_in_batches(offset, limit, options)
24
+ end
18
25
  end
19
- end
20
26
 
21
- private
27
+ def self.get_active_bundle_or_latest_created(bundles, time_zone = nil)
28
+ return nil if bundles.empty?
22
29
 
23
- def self.get_active_bundle_or_latest_created(bundles, time_zone=nil)
24
- return nil if bundles.empty?
30
+ latest_start_date = nil
31
+ latest_bundle = nil
25
32
 
26
- latest_start_date = nil
27
- latest_bundle = nil
33
+ bundles.each do |b|
34
+ b.subscriptions.each do |s|
35
+ next unless s.product_category != 'ADD_ON'
28
36
 
29
- bundles.each do |b|
30
- b.subscriptions.each do |s|
31
- if s.product_category != 'ADD_ON'
32
37
  if latest_start_date.nil? || latest_start_date < s.start_date
33
38
  latest_start_date = s.start_date
34
39
  latest_bundle = b
@@ -37,8 +42,20 @@ class Kaui::Bundle < KillBillClient::Model::Bundle
37
42
  return b if s.cancelled_date.nil? || s.cancelled_date > ActionController::Base.helpers.current_time(time_zone)
38
43
  end
39
44
  end
45
+
46
+ latest_bundle
40
47
  end
41
48
 
42
- latest_bundle
49
+ def self.list_transfer_policy_params
50
+ @policy_params = [
51
+ [I18n.translate('start_of_term'), 'START_OF_TERM'],
52
+ [I18n.translate('end_of_term'), 'END_OF_TERM'],
53
+ [I18n.translate('immediate'), 'IMMEDIATE']
54
+ ]
55
+ end
56
+
57
+ def self.list_transfer_policy_params_keys
58
+ @policy_params = %w[START_OF_TERM END_OF_TERM IMMEDIATE]
59
+ end
43
60
  end
44
61
  end
@@ -1,145 +1,150 @@
1
- require 'nokogiri'
2
-
3
- class Kaui::Catalog < KillBillClient::Model::Catalog
4
-
5
- class << self
6
-
7
- def get_account_catalog_json(account_id, requested_date = nil, options = {})
8
- params = {}
9
- params[:accountId] = account_id
10
- params[:requestedDate] = requested_date if requested_date
1
+ # frozen_string_literal: true
11
2
 
12
- get KillBillClient::Model::Catalog::KILLBILL_API_CATALOG_PREFIX,
13
- params,
14
- {
15
- :head => {'Accept' => "application/json"},
16
- :content_type => "application/json",
3
+ require 'nokogiri'
17
4
 
18
- }.merge(options)
19
- end
5
+ module Kaui
6
+ class Catalog < KillBillClient::Model::Catalog
7
+ class << self
8
+ def get_account_catalog_json(account_id, requested_date = nil, options = {})
9
+ params = {}
10
+ params[:accountId] = account_id
11
+ params[:requestedDate] = requested_date if requested_date
12
+
13
+ get KillBillClient::Model::Catalog::KILLBILL_API_CATALOG_PREFIX,
14
+ params,
15
+ {
16
+ head: { 'Accept' => 'application/json' },
17
+ content_type: 'application/json'
18
+ }.merge(options)
19
+ end
20
20
 
21
- def get_tenant_catalog_json(requested_date = nil, options = {})
22
- super
23
- rescue ::KillBillClient::API::InternalServerError => e
24
- if !e.response.nil? && !e.response.body.nil?
25
- error_message = JSON.parse(e.response.body) rescue nil
26
- raise e if error_message.nil? || error_message['message'].nil?
21
+ def get_tenant_catalog_json(requested_date = nil, account_id = nil, options = {})
22
+ super
23
+ rescue ::KillBillClient::API::InternalServerError => e
24
+ if !e.response.nil? && !e.response.body.nil?
25
+ error_message = begin
26
+ JSON.parse(e.response.body)
27
+ rescue StandardError
28
+ nil
29
+ end
30
+ raise e if error_message.nil? || error_message['message'].nil?
27
31
 
28
- # Hack for lack of proper Kill Bill messaging (see https://github.com/killbill/killbill-admin-ui/issues/265)
29
- return [] if error_message['message'].starts_with?('No existing versions')
32
+ # Hack for lack of proper Kill Bill messaging (see https://github.com/killbill/killbill-admin-ui/issues/265)
33
+ return [] if error_message['message'].starts_with?('No existing versions')
34
+ end
35
+ raise e
30
36
  end
31
- raise e
32
- end
33
37
 
34
- def get_catalog_json(latest, requested_date, options)
35
- catalogs = get_tenant_catalog_json(requested_date, options)
36
- return catalogs.length > 0 ? catalogs[catalogs.length - 1] : nil if latest
38
+ def get_catalog_json(latest, requested_date, options)
39
+ catalogs = get_tenant_catalog_json(requested_date, nil, options)
40
+ return catalogs.length.positive? ? catalogs[catalogs.length - 1] : nil if latest
37
41
 
38
- # Order by latest
39
- result = []
40
- catalogs.sort! { |l, r| r.effective_date <=> l.effective_date }
42
+ # Order by latest
43
+ result = []
44
+ catalogs.sort! { |l, r| r.effective_date <=> l.effective_date }
41
45
 
42
- catalogs.each_with_index do |current_catalog, idx|
43
- result << {:version => idx,
44
- :version_date => current_catalog.effective_date,
45
- :currencies => current_catalog.currencies,
46
- :plans => build_existing_simple_plans(current_catalog)}
46
+ catalogs.each_with_index do |current_catalog, idx|
47
+ result << { version: idx,
48
+ version_date: current_catalog.effective_date,
49
+ currencies: current_catalog.currencies,
50
+ plans: build_existing_simple_plans(current_catalog) }
51
+ end
52
+ result
47
53
  end
48
- result
49
- end
50
54
 
51
- def build_ao_mapping(catalog)
52
- tmp = {}
53
- catalog.products.each do |p|
54
- p.available.each do |ap|
55
- if !tmp.has_key?(ap)
56
- tmp[ap] = []
55
+ def build_ao_mapping(catalog)
56
+ tmp = {}
57
+ catalog&.products&.each do |p|
58
+ p.available.each do |ap|
59
+ tmp[ap] = [] unless tmp.key?(ap)
60
+ tmp[ap] << p.name
57
61
  end
58
- tmp[ap] << p.name
59
62
  end
60
- end unless catalog.nil?
61
- tmp.map { |e,v| "#{e}:#{v.join(",")}" }.join(";")
62
- end
63
-
64
-
65
- def get_catalog_xml(requested_date, options)
63
+ tmp.map { |e, v| "#{e}:#{v.join(',')}" }.join(';')
64
+ end
66
65
 
67
- catalog_xml = KillBillClient::Model::Catalog.get_tenant_catalog_xml(requested_date, options)
66
+ def get_catalog_xml(requested_date, options)
67
+ catalog_xml = KillBillClient::Model::Catalog.get_tenant_catalog_xml(requested_date, nil, options)
68
68
 
69
- parsed_catalog = parse_catalog_xml(catalog_xml)
69
+ parsed_catalog = parse_catalog_xml(catalog_xml)
70
70
 
71
- result = []
72
- parsed_catalog.keys.each_with_index do |version_date, i|
73
- entry = {}
74
- entry[:version] = i
75
- entry[:version_date] = version_date
76
- entry[:xml] = parsed_catalog[version_date]
77
- result << entry
71
+ result = []
72
+ parsed_catalog.keys.each_with_index do |version_date, i|
73
+ entry = {}
74
+ entry[:version] = i
75
+ entry[:version_date] = version_date
76
+ entry[:xml] = parsed_catalog[version_date]
77
+ result << entry
78
+ end
79
+ result
78
80
  end
79
- result
80
- end
81
-
82
- private
83
81
 
84
- def build_existing_simple_plans(catalog)
82
+ private
85
83
 
86
- tmp = catalog.products.map do |p|
87
- p.plans.each do |plan|
88
- class << plan
89
- attr_accessor :product_name
90
- attr_accessor :product_category
84
+ def build_existing_simple_plans(catalog)
85
+ tmp = catalog.products.map do |p|
86
+ p.plans.each do |plan|
87
+ class << plan
88
+ attr_accessor :product_name, :product_category
89
+ end
90
+ plan.product_name = p.name
91
+ plan.product_category = p.type
91
92
  end
92
- plan.product_name = p.name
93
- plan.product_category = p.type
94
- end
95
- end.flatten!
93
+ end.flatten!
96
94
 
97
- selected = tmp.select { |p| p.phases.length.to_i <= 2 && p.phases[p.phases.length - 1].type == "EVERGREEN" }
95
+ selected = tmp.select { |p| p.phases.length.to_i <= 2 }
98
96
 
99
- currencies = catalog.currencies
97
+ currencies = catalog.currencies
100
98
 
101
- result = []
102
- selected.each do |plan|
103
- has_trial = plan.phases[0].type == 'TRIAL'
99
+ result = []
100
+ selected.each do |plan|
101
+ has_trial = plan.phases[0].type == 'TRIAL'
104
102
 
105
- simple_plan = KillBillClient::Model::SimplePlanAttributes.new
103
+ simple_plan = KillBillClient::Model::SimplePlanAttributes.new
106
104
 
107
- # Embellish SimplePlanAttributes to contain a map currency -> amount (required in the view)
108
- class << simple_plan
109
- attr_accessor :prices
105
+ # Embellish SimplePlanAttributes to contain a map currency -> amount (required in the view)
106
+ class << simple_plan
107
+ attr_accessor :prices, :final_phase_duration
108
+ end
109
+ simple_plan.prices = plan.phases[-1].prices.each_with_object({}) do |e, r|
110
+ r[e.currency] = e.value
111
+ end
112
+
113
+ simple_plan.plan_id = plan.name
114
+ simple_plan.product_name = plan.product_name
115
+ simple_plan.product_category = plan.product_category
116
+ simple_plan.currency = currencies[0]
117
+ simple_plan.amount = simple_plan.prices[currencies[0]]
118
+ simple_plan.billing_period = plan.billing_period
119
+ simple_plan.trial_length = has_trial ? plan.phases[0].duration.number : 0
120
+ simple_plan.trial_time_unit = has_trial ? plan.phases[0].duration.unit : 'N/A'
121
+ last_phase_duration = plan.phases.last.duration
122
+ simple_plan.final_phase_duration = if last_phase_duration.number.positive?
123
+ "#{last_phase_duration.number} #{last_phase_duration.unit.downcase}"
124
+ else
125
+ last_phase_duration.unit
126
+ end
127
+
128
+ result << simple_plan
110
129
  end
111
- simple_plan.prices = plan.phases[-1].prices.inject({}) { |r, e| r[e.currency] = e.value; r }
112
-
113
- simple_plan.plan_id = plan.name
114
- simple_plan.product_name = plan.product_name
115
- simple_plan.product_category = plan.product_category
116
- simple_plan.currency = currencies[0]
117
- simple_plan.amount = simple_plan.prices[currencies[0]]
118
- simple_plan.billing_period = plan.billing_period
119
- simple_plan.trial_length = has_trial ? plan.phases[0].duration.number : 0
120
- simple_plan.trial_time_unit = has_trial ? plan.phases[0].duration.unit : "N/A"
121
-
122
- result << simple_plan
130
+ result
123
131
  end
124
- result
125
- end
126
-
127
- def parse_catalog_xml(input_xml)
128
- doc = Nokogiri::XML(input_xml) { |x| x.noblanks }
129
- doc_versions = doc.xpath("//version")
130
132
 
131
- doc_versions.inject({}) do |hsh, v|
133
+ def parse_catalog_xml(input_xml)
134
+ doc = Nokogiri::XML(input_xml, &:noblanks)
135
+ doc_versions = doc.xpath('//version')
132
136
 
133
- # Replace node 'version' with 'catalog' and add the attributes
134
- v.name = 'catalog'
135
- v['xmlns:xsi'] = "http://www.w3.org/2001/XMLSchema-instance"
136
- v['xsi:noNamespaceSchemaLocation'] = "CatalogSchema.xsd"
137
- # Extract version
138
- version = v.search("effectiveDate").text
137
+ doc_versions.each_with_object({}) do |v, hsh|
138
+ # Replace node 'version' with 'catalog' and add the attributes
139
+ v.name = 'catalog'
140
+ v['xmlns:xsi'] = 'http://www.w3.org/2001/XMLSchema-instance'
141
+ v['xsi:noNamespaceSchemaLocation'] = 'CatalogSchema.xsd'
142
+ # Extract version
143
+ version = v.search('effectiveDate').text
139
144
 
140
- # Add entry
141
- hsh[version] = '<?xml version="1.0" encoding="utf-8"?>' + v.to_xml(:indent => 4)
142
- hsh
145
+ # Add entry
146
+ hsh[version] = "<?xml version=\"1.0\" encoding=\"utf-8\"?>#{v.to_xml(indent: 4)}"
147
+ end
143
148
  end
144
149
  end
145
150
  end
@@ -1,2 +1,6 @@
1
- class Kaui::Chargeback < KillBillClient::Model::Transaction
1
+ # frozen_string_literal: true
2
+
3
+ module Kaui
4
+ class Chargeback < KillBillClient::Model::Transaction
5
+ end
2
6
  end
@@ -1,3 +1,6 @@
1
- class Kaui::Credit < KillBillClient::Model::Credit
1
+ # frozen_string_literal: true
2
2
 
3
+ module Kaui
4
+ class Credit < KillBillClient::Model::Credit
5
+ end
3
6
  end
@@ -1,10 +1,13 @@
1
- class Kaui::CustomField < KillBillClient::Model::CustomField
1
+ # frozen_string_literal: true
2
2
 
3
- def self.list_or_search(search_key = nil, offset = 0, limit = 10, options = {})
4
- if search_key.present?
5
- find_in_batches_by_search_key(search_key, offset, limit, options)
6
- else
7
- find_in_batches(offset, limit, options)
3
+ module Kaui
4
+ class CustomField < KillBillClient::Model::CustomField
5
+ def self.list_or_search(search_key = nil, offset = 0, limit = 10, options = {})
6
+ if search_key.present?
7
+ find_in_batches_by_search_key(search_key, offset, limit, options)
8
+ else
9
+ find_in_batches(offset, limit, options)
10
+ end
8
11
  end
9
12
  end
10
13
  end
@@ -1,32 +1,35 @@
1
- class Kaui::Invoice < KillBillClient::Model::Invoice
1
+ # frozen_string_literal: true
2
2
 
3
- def self.build_from_raw_invoice(raw_invoice)
4
- result = Kaui::Invoice.new
5
- KillBillClient::Model::InvoiceAttributes.instance_variable_get('@json_attributes').each do |attr|
6
- result.send("#{attr}=", raw_invoice.send(attr))
3
+ module Kaui
4
+ class Invoice < KillBillClient::Model::Invoice
5
+ def self.build_from_raw_invoice(raw_invoice)
6
+ result = Kaui::Invoice.new
7
+ KillBillClient::Model::InvoiceAttributes.instance_variable_get('@json_attributes').each do |attr|
8
+ result.send("#{attr}=", raw_invoice.send(attr))
9
+ end
10
+ result
7
11
  end
8
- result
9
- end
10
12
 
11
- def self.list_or_search(search_key = nil, offset = 0, limit = 10, options = {})
12
- if search_key.present?
13
- find_in_batches_by_search_key(search_key, offset, limit, options)
14
- else
15
- find_in_batches(offset, limit, options)
13
+ def self.list_or_search(search_key = nil, offset = 0, limit = 10, options = {})
14
+ if search_key.present?
15
+ find_in_batches_by_search_key(search_key, offset, limit, options)
16
+ else
17
+ find_in_batches(offset, limit, options)
18
+ end
16
19
  end
17
- end
18
20
 
19
- [:amount, :balance, :credits].each do |type|
20
- define_method "#{type}_to_money" do
21
- Kaui::Base.to_money(send(type), currency)
21
+ %i[amount balance credits].each do |type|
22
+ define_method "#{type}_to_money" do
23
+ Kaui::Base.to_money(send(type), currency)
24
+ end
22
25
  end
23
- end
24
26
 
25
- def refund_adjustment_to_money
26
- Kaui::Base.to_money(refund_adj, currency)
27
- end
27
+ def refund_adjustment_to_money
28
+ Kaui::Base.to_money(refund_adj, currency)
29
+ end
28
30
 
29
- def credit_adjustment_to_money
30
- Kaui::Base.to_money(credit_adj, currency)
31
+ def credit_adjustment_to_money
32
+ Kaui::Base.to_money(credit_adj, currency)
33
+ end
31
34
  end
32
35
  end
@@ -1,10 +1,13 @@
1
- class Kaui::InvoiceItem < KillBillClient::Model::InvoiceItem
1
+ # frozen_string_literal: true
2
2
 
3
- def amount_to_money
4
- Kaui::Base.to_money(amount, currency)
5
- end
3
+ module Kaui
4
+ class InvoiceItem < KillBillClient::Model::InvoiceItem
5
+ def amount_to_money
6
+ Kaui::Base.to_money(amount, currency)
7
+ end
6
8
 
7
- def self.amount_to_money(invoice_item)
8
- self.new(:amount => invoice_item.amount, :currency => invoice_item.currency).amount_to_money
9
+ def self.amount_to_money(invoice_item)
10
+ new(amount: invoice_item.amount, currency: invoice_item.currency).amount_to_money
11
+ end
9
12
  end
10
13
  end
@@ -1,67 +1,62 @@
1
- class Kaui::InvoicePayment < KillBillClient::Model::InvoicePayment
2
-
3
- include Kaui::PaymentState
4
-
5
- class << self
6
-
7
- def find_safely_by_id(id, options = {})
8
- Kaui::InvoicePayment.find_by_id(id, true, true, options)
9
- rescue => e
10
- # Maybe the plugin is not registered or the plugin threw an exception
11
- Rails.logger.warn(e)
12
- Kaui::InvoicePayment.find_by_id(id, false, true, options)
13
- end
14
-
15
- def build_from_raw_payment(raw_payment)
1
+ # frozen_string_literal: true
2
+
3
+ module Kaui
4
+ class InvoicePayment < KillBillClient::Model::InvoicePayment
5
+ include Kaui::PaymentState
6
+
7
+ class << self
8
+ def find_safely_by_id(id, options = {})
9
+ Kaui::InvoicePayment.find_by_id(id, true, true, options)
10
+ rescue StandardError => e
11
+ # Maybe the plugin is not registered or the plugin threw an exception
12
+ Rails.logger.warn(e)
13
+ Kaui::InvoicePayment.find_by_id(id, false, true, options)
14
+ end
16
15
 
17
- return nil if raw_payment.nil?
16
+ def build_from_raw_payment(raw_payment)
17
+ return nil if raw_payment.nil?
18
18
 
19
- result = Kaui::InvoicePayment.new
20
- KillBillClient::Model::InvoicePaymentAttributes.instance_variable_get('@json_attributes').each do |attr|
21
- result.send("#{attr}=", raw_payment.send(attr))
22
- end
23
- # Use Kaui::Transaction to benefit from additional fields (e.g next_retry_date)
24
- original_transactions = (result.transactions || [])
25
- result.transactions = []
26
- original_transactions.each do |transaction|
27
- new_transaction = Kaui::Transaction.new
28
- KillBillClient::Model::PaymentTransactionAttributes.instance_variable_get('@json_attributes').each do |attr|
29
- new_transaction.send("#{attr}=", transaction.send(attr))
19
+ result = Kaui::InvoicePayment.new
20
+ KillBillClient::Model::InvoicePaymentAttributes.instance_variable_get('@json_attributes').each do |attr|
21
+ result.send("#{attr}=", raw_payment.send(attr))
30
22
  end
31
- result.transactions << new_transaction
23
+ # Use Kaui::Transaction to benefit from additional fields (e.g next_retry_date)
24
+ original_transactions = (result.transactions || [])
25
+ result.transactions = []
26
+ original_transactions.each do |transaction|
27
+ new_transaction = Kaui::Transaction.new
28
+ KillBillClient::Model::PaymentTransactionAttributes.instance_variable_get('@json_attributes').each do |attr|
29
+ new_transaction.send("#{attr}=", transaction.send(attr))
30
+ end
31
+ result.transactions << new_transaction
32
+ end
33
+ result.build_transactions_next_retry_date!
34
+ result
32
35
  end
33
- result.build_transactions_next_retry_date!
34
- result
35
- end
36
-
37
- end
38
-
39
- [:auth, :captured, :purchased, :refunded, :credited].each do |type|
40
- define_method "#{type}_amount_to_money" do
41
- Kaui::Base.to_money(send("#{type}_amount"), currency)
42
36
  end
43
- end
44
-
45
- # For each payment transaction, compute next_retry date by joining with payment attempts
46
- def build_transactions_next_retry_date!
47
37
 
48
- # Filter scheduled attempts: We could have several in parallel when multiple independent transactions occur at the same time
49
- # (They would have different transaction_external_key)
50
- scheduled_attempts = (payment_attempts || []).select do |a|
51
- a.state_name == 'SCHEDULED'
38
+ %i[auth captured purchased refunded credited].each do |type|
39
+ define_method "#{type}_amount_to_money" do
40
+ Kaui::Base.to_money(send("#{type}_amount"), currency)
41
+ end
52
42
  end
53
43
 
54
- # Look for latest transaction associated with each such scheduled attempt and set retry date accordingly
55
- scheduled_attempts.each do |a|
44
+ # For each payment transaction, compute next_retry date by joining with payment attempts
45
+ def build_transactions_next_retry_date!
46
+ # Filter scheduled attempts: We could have several in parallel when multiple independent transactions occur at the same time
47
+ # (They would have different transaction_external_key)
48
+ scheduled_attempts = (payment_attempts || []).select do |a|
49
+ a.state_name == 'SCHEDULED'
50
+ end
56
51
 
57
- last_transaction_for_attempt = (transactions || []).select do |t|
58
- t.transaction_external_key == a.transaction_external_key
59
- end.sort_by do |t|
60
- t.effective_date
61
- end.last
52
+ # Look for latest transaction associated with each such scheduled attempt and set retry date accordingly
53
+ scheduled_attempts.each do |a|
54
+ last_transaction_for_attempt = (transactions || []).select do |t|
55
+ t.transaction_external_key == a.transaction_external_key
56
+ end.max_by(&:effective_date)
62
57
 
63
- last_transaction_for_attempt.next_retry_date = a.effective_date if last_transaction_for_attempt
58
+ last_transaction_for_attempt.next_retry_date = a.effective_date if last_transaction_for_attempt
59
+ end
64
60
  end
65
-
66
61
  end
67
62
  end