kaui 2.1.0 → 3.0.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 +128 -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 +4 -3
  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 +8 -6
  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 +28 -30
  155. data/lib/tasks/kaui_tasks.rake +1 -0
  156. metadata +136 -438
  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,28 +1,32 @@
1
- class Kaui::InvoiceTagsController < Kaui::EngineController
1
+ # frozen_string_literal: true
2
2
 
3
- def edit
4
- @invoice_id = params.require(:invoice_id)
3
+ module Kaui
4
+ class InvoiceTagsController < Kaui::EngineController
5
+ def edit
6
+ @invoice_id = params.require(:invoice_id)
5
7
 
6
- cached_options_for_klient = options_for_klient
7
- fetch_tag_names = promise { (Kaui::Tag.all_for_invoice(@invoice_id, false, 'NONE', cached_options_for_klient).map { |tag| tag.tag_definition_name }).sort }
8
- fetch_available_tags = promise { Kaui::TagDefinition.all_for_invoice(cached_options_for_klient) }
8
+ cached_options_for_klient = options_for_klient
9
+ fetch_tag_names = promise { Kaui::Tag.all_for_invoice(@invoice_id, false, 'NONE', cached_options_for_klient).map(&:tag_definition_name).sort }
10
+ fetch_available_tags = promise { Kaui::TagDefinition.all_for_invoice(cached_options_for_klient) }
9
11
 
10
- @tag_names = wait(fetch_tag_names)
11
- @available_tags = wait(fetch_available_tags)
12
- end
12
+ @tag_names = wait(fetch_tag_names)
13
+ @available_tags = wait(fetch_available_tags)
14
+ end
13
15
 
14
- def update
15
- account_id = params.require(:account_id)
16
- invoice_id = params.require(:invoice_id)
16
+ def update
17
+ account_id = params.require(:account_id)
18
+ invoice_id = params.require(:invoice_id)
17
19
 
18
- tags = []
19
- params.each do |tag, tag_name|
20
- tag_info = tag.split('_')
21
- next if tag_info.size != 2 or tag_info[0] != 'tag'
22
- tags << tag_info[1]
23
- end
20
+ tags = []
21
+ params.each do |tag, _tag_name|
22
+ tag_info = tag.split('_')
23
+ next if (tag_info.size != 2) || (tag_info[0] != 'tag')
24
24
 
25
- Kaui::Tag.set_for_invoice(invoice_id, tags, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
26
- redirect_to kaui_engine.invoice_path(invoice_id, :account_id => account_id), :notice => 'Invoice tags successfully set'
25
+ tags << tag_info[1]
26
+ end
27
+
28
+ Kaui::Tag.set_for_invoice(invoice_id, tags, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
29
+ redirect_to kaui_engine.invoice_path(invoice_id, account_id:), notice: 'Invoice tags successfully set'
30
+ end
27
31
  end
28
32
  end
@@ -1,68 +1,75 @@
1
- class Kaui::InvoicesController < Kaui::EngineController
1
+ # frozen_string_literal: true
2
2
 
3
- def index
4
- @search_query = params[:account_id]
3
+ module Kaui
4
+ class InvoicesController < Kaui::EngineController
5
+ def index
6
+ @search_query = params[:account_id]
5
7
 
6
- @ordering = params[:ordering] || (@search_query.blank? ? 'desc' : 'asc')
7
- @offset = params[:offset] || 0
8
- @limit = params[:limit] || 50
8
+ @ordering = params[:ordering] || (@search_query.blank? ? 'desc' : 'asc')
9
+ @offset = params[:offset] || 0
10
+ @limit = params[:limit] || 50
9
11
 
10
- @max_nb_records = @search_query.blank? ? Kaui::Invoice.list_or_search(nil, 0, 0, options_for_klient).pagination_max_nb_records : 0
11
- end
12
+ @max_nb_records = @search_query.blank? ? Kaui::Invoice.list_or_search(nil, 0, 0, options_for_klient).pagination_max_nb_records : 0
13
+ end
12
14
 
13
- def pagination
14
- cached_options_for_klient = options_for_klient
15
+ def pagination
16
+ cached_options_for_klient = options_for_klient
17
+
18
+ searcher = lambda do |search_key, offset, limit|
19
+ account = begin
20
+ Kaui::Account.find_by_id_or_key(search_key, false, false, cached_options_for_klient)
21
+ rescue StandardError
22
+ nil
23
+ end
24
+ if account.nil?
25
+ Kaui::Invoice.list_or_search(search_key, offset, limit, cached_options_for_klient)
26
+ else
27
+ account.invoices(cached_options_for_klient.merge({ params: { includeVoidedInvoices: true } })).map! { |invoice| Kaui::Invoice.build_from_raw_invoice(invoice) }
28
+ end
29
+ end
15
30
 
16
- searcher = lambda do |search_key, offset, limit|
17
- account = Kaui::Account::find_by_id_or_key(search_key, false, false, cached_options_for_klient) rescue nil
18
- if account.nil?
19
- Kaui::Invoice.list_or_search(search_key, offset, limit, cached_options_for_klient)
31
+ account_id = (params[:search] || {})[:value]
32
+ if account_id.blank?
33
+ # Don't show amount and balance, and they will not be populated
34
+ data_extractor = lambda do |invoice, column|
35
+ [
36
+ invoice.invoice_number.to_i,
37
+ invoice.invoice_date
38
+ ][column]
39
+ end
40
+ formatter = lambda do |invoice|
41
+ row = [view_context.link_to(invoice.invoice_number, view_context.url_for(controller: :invoices, action: :show, account_id: invoice.account_id, id: invoice.invoice_id))]
42
+ row += Kaui.invoice_search_columns.call(invoice, view_context)[1]
43
+ row
44
+ end
20
45
  else
21
- account.invoices(cached_options_for_klient.merge({ :params => { :includeVoidedInvoices => true } })).map! { |invoice| Kaui::Invoice.build_from_raw_invoice(invoice) }
46
+ data_extractor = lambda do |invoice, column|
47
+ [
48
+ invoice.invoice_number.to_i,
49
+ invoice.invoice_date,
50
+ invoice.amount,
51
+ invoice.balance,
52
+ invoice.status
53
+ ][column]
54
+ end
55
+ formatter = lambda do |invoice|
56
+ row = [view_context.link_to(invoice.invoice_number, view_context.url_for(controller: :invoices, action: :show, account_id: invoice.account_id, id: invoice.invoice_id))]
57
+ row += Kaui.account_invoices_columns.call(invoice, view_context)[1]
58
+ row
59
+ end
22
60
  end
23
- end
24
61
 
25
- account_id = (params[:search] || {})[:value]
26
- if account_id.blank?
27
- # Don't show amount and balance, and they will not be populated
28
- data_extractor = lambda do |invoice, column|
29
- [
30
- invoice.invoice_number.to_i,
31
- invoice.invoice_date
32
- ][column]
33
- end
34
- formatter = lambda do |invoice|
35
- row = [view_context.link_to(invoice.invoice_number, view_context.url_for(:controller => :invoices, :action => :show, :account_id => invoice.account_id, :id => invoice.invoice_id))]
36
- row += Kaui.invoice_search_columns.call(invoice, view_context)[1]
37
- row
38
- end
39
- else
40
- data_extractor = lambda do |invoice, column|
41
- [
42
- invoice.invoice_number.to_i,
43
- invoice.invoice_date,
44
- invoice.amount,
45
- invoice.balance,
46
- invoice.status
47
- ][column]
48
- end
49
- formatter = lambda do |invoice|
50
- row = [view_context.link_to(invoice.invoice_number, view_context.url_for(:controller => :invoices, :action => :show, :account_id => invoice.account_id, :id => invoice.invoice_id))]
51
- row += Kaui.account_invoices_columns.call(invoice, view_context)[1]
52
- row
53
- end
62
+ paginate searcher, data_extractor, formatter
54
63
  end
55
64
 
56
- paginate searcher, data_extractor, formatter
57
- end
58
-
59
- def show
60
- # Go to the database once
61
- cached_options_for_klient = options_for_klient
65
+ # rubocop:disable Lint/HashCompareByIdentity
66
+ def show
67
+ # Go to the database once
68
+ cached_options_for_klient = options_for_klient
62
69
 
63
- @invoice = Kaui::Invoice.find_by_id(params.require(:id), 'FULL', cached_options_for_klient)
64
- # This will put the TAX items at the bottom
65
- precedence = {
70
+ @invoice = Kaui::Invoice.find_by_id(params.require(:id), 'FULL', cached_options_for_klient)
71
+ # This will put the TAX items at the bottom
72
+ precedence = {
66
73
  'EXTERNAL_CHARGE' => 0,
67
74
  'FIXED' => 1,
68
75
  'RECURRING' => 2,
@@ -73,74 +80,82 @@ class Kaui::InvoicesController < Kaui::EngineController
73
80
  'CBA_ADJ' => 7,
74
81
  'CREDIT_ADJ' => 8,
75
82
  'TAX' => 9
76
- }
77
- # TODO The pretty description has to be shared with the view
78
- @invoice.items.sort_by! do |ii|
79
- # Make sure not to compare nil (ArgumentError comparison of Array with Array failed)
80
- a = precedence[ii.item_type] || 100
81
- b = (ii.pretty_plan_name.blank? || !ii.item_type.in?(%w{USAGE RECURRING}) ? ii.description : ii.pretty_plan_name) || ''
82
- [a, b]
83
- end
83
+ }
84
+ # TODO: The pretty description has to be shared with the view
85
+ @invoice.items.sort_by! do |ii|
86
+ # Make sure not to compare nil (ArgumentError comparison of Array with Array failed)
87
+ a = precedence[ii.item_type] || 100
88
+ b = (ii.pretty_plan_name.blank? || !ii.item_type.in?(%w[USAGE RECURRING]) ? ii.description : ii.pretty_plan_name) || ''
89
+ [a, b]
90
+ end
84
91
 
85
- fetch_payments = promise { @invoice.payments(true, true, 'FULL', cached_options_for_klient).map { |payment| Kaui::InvoicePayment.build_from_raw_payment(payment) } }
86
- fetch_pms = fetch_payments.then { |payments| Kaui::PaymentMethod.payment_methods_for_payments(payments, cached_options_for_klient) }
87
- fetch_invoice_fields = promise { @invoice.custom_fields('NONE', cached_options_for_klient).sort { |cf_a, cf_b| cf_a.name.downcase <=> cf_b.name.downcase } }
88
- fetch_payment_fields = promise {
89
- all_payment_fields = @account.all_custom_fields(:PAYMENT, 'NONE', cached_options_for_klient)
90
- all_payment_fields.inject({}) { |hsh, entry| (hsh[entry.object_id] ||= []) << entry; hsh }
91
- }
92
-
93
- fetch_available_invoice_item_tags = promise { Kaui::TagDefinition.all_for_invoice_item(cached_options_for_klient) }
94
- fetch_tags_per_invoice_item = promise {
95
- tags_per_invoice_item = @account.all_tags(:INVOICE_ITEM, false, 'NONE', cached_options_for_klient)
96
- tags_per_invoice_item.inject({}) {|hsh, entry| (hsh[entry.object_id] ||= []) << entry; hsh}
97
- }
98
-
99
- fetch_custom_fields_per_invoice_item = promise {
100
- custom_fields_per_invoice_item = @account.all_custom_fields(:INVOICE_ITEM, 'NONE', cached_options_for_klient)
101
- custom_fields_per_invoice_item.inject({}) { |hsh, entry| (hsh[entry.object_id] ||= []) << entry; hsh }
102
- }
103
-
104
- fetch_invoice_tags = promise { @invoice.tags(false, 'NONE', cached_options_for_klient).sort { |tag_a, tag_b| tag_a <=> tag_b } }
105
- fetch_available_invoice_tags = promise { Kaui::TagDefinition.all_for_invoice(cached_options_for_klient) }
106
-
107
- @payments = wait(fetch_payments)
108
- @payment_methods = wait(fetch_pms)
109
- @custom_fields = wait(fetch_invoice_fields)
110
- @payment_custom_fields = wait(fetch_payment_fields)
111
- @custom_fields_per_invoice_item = wait(fetch_custom_fields_per_invoice_item)
112
- @tags_per_invoice_item = wait(fetch_tags_per_invoice_item)
113
- @available_invoice_item_tags = wait(fetch_available_invoice_item_tags)
114
- @invoice_tags = wait(fetch_invoice_tags)
115
- @available_invoice_tags = wait(fetch_available_invoice_tags)
116
- @available_invoice_tags.reject! { |td| td.name == 'WRITTEN_OFF' } if @invoice.status == 'VOID'
117
- end
92
+ fetch_payments = promise { @invoice.payments(true, true, 'FULL', cached_options_for_klient).map { |payment| Kaui::InvoicePayment.build_from_raw_payment(payment) } }
93
+ fetch_pms = fetch_payments.then { |payments| Kaui::PaymentMethod.payment_methods_for_payments(payments, cached_options_for_klient) }
94
+ fetch_invoice_fields = promise { @invoice.custom_fields('NONE', cached_options_for_klient).sort { |cf_a, cf_b| cf_a.name.downcase <=> cf_b.name.downcase } }
95
+ fetch_payment_fields = promise do
96
+ all_payment_fields = @account.all_custom_fields(:PAYMENT, 'NONE', cached_options_for_klient)
97
+ all_payment_fields.each_with_object({}) do |entry, hsh|
98
+ (hsh[entry.object_id] ||= []) << entry
99
+ end
100
+ end
118
101
 
119
- def void_invoice
120
- cached_options_for_klient = options_for_klient
121
- invoice = KillBillClient::Model::Invoice.find_by_id(params.require(:id), 'NONE', cached_options_for_klient)
122
- begin
123
- invoice.void(current_user.kb_username, params[:reason], params[:comment], cached_options_for_klient)
124
- redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id), :notice => 'Invoice successfully voided'
125
- rescue => e
126
- flash[:error] = "Unable to void invoice: #{as_string(e)}"
127
- redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id)
102
+ fetch_available_invoice_item_tags = promise { Kaui::TagDefinition.all_for_invoice_item(cached_options_for_klient) }
103
+ fetch_tags_per_invoice_item = promise do
104
+ tags_per_invoice_item = @account.all_tags(:INVOICE_ITEM, false, 'NONE', cached_options_for_klient)
105
+ tags_per_invoice_item.each_with_object({}) do |entry, hsh|
106
+ (hsh[entry.object_id] ||= []) << entry
107
+ end
108
+ end
109
+
110
+ fetch_custom_fields_per_invoice_item = promise do
111
+ custom_fields_per_invoice_item = @account.all_custom_fields(:INVOICE_ITEM, 'NONE', cached_options_for_klient)
112
+ custom_fields_per_invoice_item.each_with_object({}) do |entry, hsh|
113
+ (hsh[entry.object_id] ||= []) << entry
114
+ end
115
+ end
116
+
117
+ fetch_invoice_tags = promise { @invoice.tags(false, 'NONE', cached_options_for_klient).sort { |tag_a, tag_b| tag_a <=> tag_b } }
118
+ fetch_available_invoice_tags = promise { Kaui::TagDefinition.all_for_invoice(cached_options_for_klient) }
119
+
120
+ @payments = wait(fetch_payments)
121
+ @payment_methods = wait(fetch_pms)
122
+ @custom_fields = wait(fetch_invoice_fields)
123
+ @payment_custom_fields = wait(fetch_payment_fields)
124
+ @custom_fields_per_invoice_item = wait(fetch_custom_fields_per_invoice_item)
125
+ @tags_per_invoice_item = wait(fetch_tags_per_invoice_item)
126
+ @available_invoice_item_tags = wait(fetch_available_invoice_item_tags)
127
+ @invoice_tags = wait(fetch_invoice_tags)
128
+ @available_invoice_tags = wait(fetch_available_invoice_tags)
129
+ @available_invoice_tags.reject! { |td| td.name == 'WRITTEN_OFF' } if @invoice.status == 'VOID'
130
+ end
131
+ # rubocop:enable Lint/HashCompareByIdentity
132
+
133
+ def void_invoice
134
+ cached_options_for_klient = options_for_klient
135
+ invoice = KillBillClient::Model::Invoice.find_by_id(params.require(:id), 'NONE', cached_options_for_klient)
136
+ begin
137
+ invoice.void(current_user.kb_username, params[:reason], params[:comment], cached_options_for_klient)
138
+ redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id), notice: 'Invoice successfully voided'
139
+ rescue StandardError => e
140
+ flash[:error] = "Unable to void invoice: #{as_string(e)}"
141
+ redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id)
142
+ end
128
143
  end
129
- end
130
144
 
131
- def restful_show
132
- invoice = Kaui::Invoice.find_by_id(params.require(:id), 'NONE', options_for_klient)
133
- redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id)
134
- end
145
+ def restful_show
146
+ invoice = Kaui::Invoice.find_by_id(params.require(:id), 'NONE', options_for_klient)
147
+ redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id)
148
+ end
135
149
 
136
- def show_html
137
- render :html => Kaui::Invoice.as_html(params.require(:id), options_for_klient).html_safe
138
- end
150
+ def show_html
151
+ render html: Kaui::Invoice.as_html(params.require(:id), options_for_klient).html_safe
152
+ end
139
153
 
140
- def commit_invoice
141
- cached_options_for_klient = options_for_klient
142
- invoice = KillBillClient::Model::Invoice.find_by_id(params.require(:id), 'NONE', cached_options_for_klient)
143
- invoice.commit(current_user.kb_username, params[:reason], params[:comment], cached_options_for_klient)
144
- redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id), :notice => 'Invoice successfully committed'
154
+ def commit_invoice
155
+ cached_options_for_klient = options_for_klient
156
+ invoice = KillBillClient::Model::Invoice.find_by_id(params.require(:id), 'NONE', cached_options_for_klient)
157
+ invoice.commit(current_user.kb_username, params[:reason], params[:comment], cached_options_for_klient)
158
+ redirect_to account_invoice_path(invoice.account_id, invoice.invoice_id), notice: 'Invoice successfully committed'
159
+ end
145
160
  end
146
161
  end
@@ -1,6 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Kaui
2
4
  class LoginProxyController < Kaui::EngineController
3
-
4
5
  def check_login
5
6
  #
6
7
  # Redirect to where we come from after going through all the Kaui filters ensuring correct authentication and kb_tenant_id
@@ -1,116 +1,124 @@
1
- class Kaui::PaymentMethodsController < Kaui::EngineController
1
+ # frozen_string_literal: true
2
2
 
3
- def new
4
- @payment_method = Kaui::PaymentMethod.new(:account_id => params[:account_id],
5
- :plugin_name => params[:plugin_name] || Kaui.creditcard_plugin_name.call)
6
- end
3
+ module Kaui
4
+ class PaymentMethodsController < Kaui::EngineController
5
+ def new
6
+ @payment_method = Kaui::PaymentMethod.new(account_id: params[:account_id],
7
+ plugin_name: params[:plugin_name] || Kaui.creditcard_plugin_name.call)
8
+ end
7
9
 
8
- def create
9
- @payment_method = Kaui::PaymentMethod.new(params[:payment_method].delete_if { |key, value| value.blank? })
10
- # Transform "1" into boolean
11
- @payment_method.is_default = @payment_method.is_default == '1'
12
- # Sensible default
13
- @payment_method.plugin_name ||= Kaui.creditcard_plugin_name.call
14
-
15
- # Instance variables needed in case of failure
16
- @card_type = params[:card_type]
17
- @card_holder_name = params[:card_holder_name]
18
- @expiration_year = params[:expiration_year]
19
- @expiration_month = params[:expiration_month]
20
- @credit_card_number = params[:credit_card_number]
21
- @verification_value = params[:verification_value]
22
- @address1 = params[:address1]
23
- @address2 = params[:address2]
24
- @city = params[:city]
25
- @postal_code = params[:postal_code]
26
- @state = params[:state]
27
- @country = params[:country]
28
-
29
- # Magic from lib/killbill/helpers/active_merchant/payment_plugin.rb
30
- @payment_method.plugin_info = {
31
- 'type' => 'CreditCard',
32
- 'ccType' => @card_type,
33
- 'ccFirstName' => @card_holder_name,
34
- 'ccLastName' => @card_holder_name,
35
- 'ccExpirationMonth' => @expiration_month,
36
- 'ccExpirationYear' => @expiration_year,
37
- 'ccNumber' => @credit_card_number,
10
+ def create
11
+ @payment_method = Kaui::PaymentMethod.new(params[:payment_method].delete_if { |_key, value| value.blank? })
12
+ # Transform "1" into boolean
13
+ @payment_method.is_default = @payment_method.is_default == '1'
14
+ # Sensible default
15
+ @payment_method.plugin_name ||= Kaui.creditcard_plugin_name.call
16
+
17
+ # Instance variables needed in case of failure
18
+ @card_type = params[:card_type]
19
+ @card_holder_name = params[:card_holder_name]
20
+ @expiration_year = params[:expiration_year]
21
+ @expiration_month = params[:expiration_month]
22
+ @credit_card_number = params[:credit_card_number]
23
+ @verification_value = params[:verification_value]
24
+ @address1 = params[:address1]
25
+ @address2 = params[:address2]
26
+ @city = params[:city]
27
+ @postal_code = params[:postal_code]
28
+ @state = params[:state]
29
+ @country = params[:country]
30
+
31
+ # Magic from lib/killbill/helpers/active_merchant/payment_plugin.rb
32
+ @payment_method.plugin_info = {
33
+ 'type' => 'CreditCard',
34
+ 'ccType' => @card_type,
35
+ 'ccFirstName' => @card_holder_name,
36
+ 'ccLastName' => @card_holder_name,
37
+ 'ccExpirationMonth' => @expiration_month,
38
+ 'ccExpirationYear' => @expiration_year,
39
+ 'ccNumber' => @credit_card_number,
38
40
  'ccVerificationValue' => @verification_value,
39
- 'address1' => @address1,
40
- 'address2' => @address2,
41
- 'city' => @city,
42
- 'country' => @country,
43
- 'zip' => @postal_code,
44
- 'state' => @state
45
- }
46
-
47
- @plugin_properties = params[:plugin_properties].values.select{ |item| !(item['value'].blank? || item['key'].blank?) } rescue @plugin_properties = nil
48
- if @plugin_properties.blank?
49
- # In case of error, we want the view to receive nil, not [], so that at least the first row is populated (required to make the JS work)
50
- # See https://github.com/killbill/killbill-admin-ui/issues/258
51
- @plugin_properties = nil
52
- else
53
- @plugin_properties.map! do |property|
54
- KillBillClient::Model::PluginPropertyAttributes.new(property)
41
+ 'address1' => @address1,
42
+ 'address2' => @address2,
43
+ 'city' => @city,
44
+ 'country' => @country,
45
+ 'zip' => @postal_code,
46
+ 'state' => @state
47
+ }
48
+
49
+ @plugin_properties = begin
50
+ params[:plugin_properties].values.reject { |item| (item['value'].blank? || item['key'].blank?) }
51
+ rescue StandardError
52
+ @plugin_properties = nil
53
+ end
54
+ if @plugin_properties.blank?
55
+ # In case of error, we want the view to receive nil, not [], so that at least the first row is populated (required to make the JS work)
56
+ # See https://github.com/killbill/killbill-admin-ui/issues/258
57
+ @plugin_properties = nil
58
+ else
59
+ @plugin_properties.map! do |property|
60
+ KillBillClient::Model::PluginPropertyAttributes.new(property)
61
+ end
62
+ end
63
+
64
+ begin
65
+ @payment_method = @payment_method.create(@payment_method.is_default, current_user.kb_username, params[:reason], params[:comment],
66
+ @plugin_properties.blank? ? options_for_klient : { pluginProperty: @plugin_properties }.merge(options_for_klient))
67
+ redirect_to kaui_engine.account_path(@payment_method.account_id), notice: 'Payment method was successfully created'
68
+ rescue StandardError => e
69
+ flash.now[:error] = "Error while creating payment method: #{as_string(e)}"
70
+ render action: :new
55
71
  end
56
72
  end
57
73
 
58
- begin
59
- @payment_method = @payment_method.create(@payment_method.is_default, current_user.kb_username, params[:reason], params[:comment],
60
- @plugin_properties.blank? ? options_for_klient : ({:pluginProperty => @plugin_properties}).merge(options_for_klient))
61
- redirect_to kaui_engine.account_path(@payment_method.account_id), :notice => 'Payment method was successfully created'
62
- rescue => e
63
- flash.now[:error] = "Error while creating payment method: #{as_string(e)}"
64
- render :action => :new
74
+ def destroy
75
+ payment_method_id = params[:id]
76
+
77
+ payment_method = Kaui::PaymentMethod.find_by_id(payment_method_id, false, options_for_klient)
78
+ begin
79
+ Kaui::PaymentMethod.destroy(payment_method_id, params[:set_auto_pay_off], false, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
80
+ redirect_to kaui_engine.account_path(payment_method.account_id), notice: "Payment method #{payment_method_id} successfully deleted"
81
+ rescue StandardError => e
82
+ flash[:error] = "Error while deleting payment method #{payment_method_id}: #{as_string(e)}"
83
+ redirect_to kaui_engine.account_path(payment_method.account_id)
84
+ end
65
85
  end
66
- end
67
86
 
68
- def destroy
69
- payment_method_id = params[:id]
87
+ def show
88
+ restful_show
89
+ end
70
90
 
71
- payment_method = Kaui::PaymentMethod.find_by_id(payment_method_id, false, options_for_klient)
72
- begin
73
- Kaui::PaymentMethod.destroy(payment_method_id, params[:set_auto_pay_off], false, current_user.kb_username, params[:reason], params[:comment], options_for_klient)
74
- redirect_to kaui_engine.account_path(payment_method.account_id), :notice => "Payment method #{payment_method_id} successfully deleted"
75
- rescue => e
76
- flash[:error] = "Error while deleting payment method #{payment_method_id}: #{as_string(e)}"
91
+ def restful_show
92
+ payment_method = Kaui::PaymentMethod.find_by_id(params.require(:id), false, options_for_klient)
77
93
  redirect_to kaui_engine.account_path(payment_method.account_id)
78
94
  end
79
- end
80
95
 
81
- def show
82
- restful_show
83
- end
84
-
85
- def restful_show
86
- payment_method = Kaui::PaymentMethod.find_by_id(params.require(:id), false, options_for_klient)
87
- redirect_to kaui_engine.account_path(payment_method.account_id)
88
- end
96
+ def validate_external_key
97
+ json_response do
98
+ external_key = params.require(:external_key)
89
99
 
90
- def validate_external_key
91
- json_response do
92
- external_key = params.require(:external_key)
100
+ begin
101
+ payment_methods = Kaui::PaymentMethod.find_by_external_key(external_key, false, false, 'NONE', options_for_klient)
102
+ rescue KillBillClient::API::NotFound
103
+ payment_methods = nil
104
+ end
93
105
 
94
- begin
95
- payment_methods = Kaui::PaymentMethod::find_by_external_key(external_key,false,false,'NONE', options_for_klient)
96
- rescue KillBillClient::API::NotFound
97
- payment_methods = nil
106
+ { is_found: !payment_methods.nil? }
98
107
  end
108
+ end
99
109
 
100
- { :is_found => !payment_methods.nil? }
110
+ def refresh
111
+ Kaui::PaymentMethod.refresh(params.require(:account_id), current_user.kb_username, params[:reason], params[:comment], options_for_klient)
112
+ redirect_to kaui_engine.account_path(params.require(:account_id)), notice: 'Payment methods successfully refreshed'
101
113
  end
102
- end
103
114
 
104
- def refresh
105
- Kaui::PaymentMethod.refresh(params.require(:account_id), current_user.kb_username, params[:reason], params[:comment], options_for_klient)
106
- redirect_to kaui_engine.account_path(params.require(:account_id)), :notice => 'Payment methods successfully refreshed'
107
- end
115
+ private
108
116
 
109
- private
117
+ def find_value_from_properties(properties, key)
118
+ return nil if key.nil? || properties.nil?
110
119
 
111
- def find_value_from_properties(properties, key)
112
- return nil if key.nil? or properties.nil?
113
- prop = (properties.find { |kv| kv.key.to_s == key.to_s })
114
- prop.nil? ? nil : prop.value
120
+ prop = (properties.find { |kv| kv.key.to_s == key.to_s })
121
+ prop&.value
122
+ end
115
123
  end
116
124
  end