kaui 3.0.9 → 4.0.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 (259) hide show
  1. checksums.yaml +4 -4
  2. data/app/assets/images/kaui/account/authorize.svg +4 -0
  3. data/app/assets/images/kaui/account/credit.svg +4 -0
  4. data/app/assets/images/kaui/account/down-arrow.svg +3 -0
  5. data/app/assets/images/kaui/account/edit.svg +4 -0
  6. data/app/assets/images/kaui/account/pay-all.svg +5 -0
  7. data/app/assets/images/kaui/account/plus.svg +3 -0
  8. data/app/assets/images/kaui/account/purchase.svg +5 -0
  9. data/app/assets/images/kaui/account/refresh.svg +5 -0
  10. data/app/assets/images/kaui/arrow.svg +3 -0
  11. data/app/assets/images/kaui/card.svg +5 -0
  12. data/app/assets/images/kaui/copy.svg +12 -0
  13. data/app/assets/images/kaui/dashboard/aviate.svg +6 -0
  14. data/app/assets/images/kaui/dashboard/custom-field.svg +5 -0
  15. data/app/assets/images/kaui/dashboard/kaui-doc-img.png +0 -0
  16. data/app/assets/images/kaui/dashboard/plugins.svg +7 -0
  17. data/app/assets/images/kaui/dashboard/tags.svg +4 -0
  18. data/app/assets/images/kaui/dashboard/users.svg +6 -0
  19. data/app/assets/images/kaui/delete.svg +6 -0
  20. data/app/assets/images/kaui/dots.svg +5 -0
  21. data/app/assets/images/kaui/download-csv.svg +5 -0
  22. data/app/assets/images/kaui/download.svg +4 -0
  23. data/app/assets/images/kaui/eye-off.svg +9 -0
  24. data/app/assets/images/kaui/eye.svg +7 -0
  25. data/app/assets/images/kaui/file-upload.svg +34 -0
  26. data/app/assets/images/kaui/generate.svg +5 -0
  27. data/app/assets/images/kaui/header/account.svg +4 -0
  28. data/app/assets/images/kaui/header/cog_icon.svg +4 -0
  29. data/app/assets/images/kaui/header/invoice.svg +5 -0
  30. data/app/assets/images/kaui/header/payment.svg +5 -0
  31. data/app/assets/images/kaui/header/search_icon.svg +4 -0
  32. data/app/assets/images/kaui/header/subscription.svg +6 -0
  33. data/app/assets/images/kaui/logout.svg +4 -0
  34. data/app/assets/images/kaui/modal/close.svg +3 -0
  35. data/app/assets/images/kaui/modal/plus.svg +3 -0
  36. data/app/assets/images/kaui/modal/red-close.svg +10 -0
  37. data/app/assets/images/kaui/modal/search.svg +4 -0
  38. data/app/assets/images/kaui/payment/payment.svg +4 -0
  39. data/app/assets/images/kaui/payment/refund.svg +4 -0
  40. data/app/assets/images/kaui/plus.svg +3 -0
  41. data/app/assets/images/kaui/search.svg +4 -0
  42. data/app/assets/images/kaui/setting/account.svg +10 -0
  43. data/app/assets/images/kaui/setting/analytics.svg +7 -0
  44. data/app/assets/images/kaui/setting/custom-field.svg +5 -0
  45. data/app/assets/images/kaui/setting/e-notifications.svg +6 -0
  46. data/app/assets/images/kaui/setting/plugins.svg +7 -0
  47. data/app/assets/images/kaui/setting/plus.svg +3 -0
  48. data/app/assets/images/kaui/setting/reset.svg +4 -0
  49. data/app/assets/images/kaui/setting/tag-definitions.svg +5 -0
  50. data/app/assets/images/kaui/setting/tags.svg +4 -0
  51. data/app/assets/images/kaui/setting/tenants.svg +6 -0
  52. data/app/assets/images/kaui/setting/users.svg +6 -0
  53. data/app/assets/images/kaui/setting.svg +4 -0
  54. data/app/assets/images/kaui/sidebar/account.svg +4 -0
  55. data/app/assets/images/kaui/sidebar/audit.svg +5 -0
  56. data/app/assets/images/kaui/sidebar/custom-fields.svg +5 -0
  57. data/app/assets/images/kaui/sidebar/invoices.svg +5 -0
  58. data/app/assets/images/kaui/sidebar/payments.svg +5 -0
  59. data/app/assets/images/kaui/sidebar/queues.svg +5 -0
  60. data/app/assets/images/kaui/sidebar/subscriptions.svg +6 -0
  61. data/app/assets/images/kaui/sidebar/tags.svg +5 -0
  62. data/app/assets/images/kaui/sidebar/timeline.svg +5 -0
  63. data/app/assets/images/kaui/sign_in_background.svg +57 -0
  64. data/app/assets/images/kaui/sort-down.svg +3 -0
  65. data/app/assets/images/kaui/sort-up.svg +3 -0
  66. data/app/assets/images/kaui/subscription/add-on.svg +7 -0
  67. data/app/assets/images/kaui/subscription/cancel.svg +6 -0
  68. data/app/assets/images/kaui/subscription/change.svg +6 -0
  69. data/app/assets/images/kaui/subscription/date.svg +6 -0
  70. data/app/assets/images/kaui/subscription/pause.svg +4 -0
  71. data/app/assets/images/kaui/timeline/authorize.svg +5 -0
  72. data/app/assets/images/kaui/timeline/capture.svg +5 -0
  73. data/app/assets/images/kaui/timeline/chargeback.svg +3 -0
  74. data/app/assets/images/kaui/timeline/credit.svg +6 -0
  75. data/app/assets/images/kaui/timeline/invoice.svg +5 -0
  76. data/app/assets/images/kaui/timeline/purchase.svg +5 -0
  77. data/app/assets/images/kaui/timeline/refund.svg +4 -0
  78. data/app/assets/images/kaui/timeline/void.svg +4 -0
  79. data/app/assets/images/kaui/view-doc.svg +6 -0
  80. data/app/assets/images/kaui/warning.png +0 -0
  81. data/app/assets/javascripts/application.js +2 -2
  82. data/app/assets/javascripts/kaui/kaui_override.js +232 -0
  83. data/app/assets/javascripts/kaui/multi_functions_bar_utils.js +125 -24
  84. data/app/assets/stylesheets/application.css +13 -1
  85. data/app/assets/stylesheets/kaui/account.css +2028 -14
  86. data/app/assets/stylesheets/kaui/account_timeline.css +183 -0
  87. data/app/assets/stylesheets/kaui/admin_allowed_users.css +260 -0
  88. data/app/assets/stylesheets/kaui/audit.css +26 -16
  89. data/app/assets/stylesheets/kaui/audit_logs.css +443 -0
  90. data/app/assets/stylesheets/kaui/auth_pages.css +72 -0
  91. data/app/assets/stylesheets/kaui/breadcrumb.css +38 -0
  92. data/app/assets/stylesheets/kaui/chargebacks.css +118 -0
  93. data/app/assets/stylesheets/kaui/clock.css +103 -0
  94. data/app/assets/stylesheets/kaui/common.css +1744 -401
  95. data/app/assets/stylesheets/kaui/custom_fields.css +546 -0
  96. data/app/assets/stylesheets/kaui/dashboard.css +26 -0
  97. data/app/assets/stylesheets/kaui/datatable.css +114 -56
  98. data/app/assets/stylesheets/kaui/header.css +221 -114
  99. data/app/assets/stylesheets/kaui/home.css +89 -62
  100. data/app/assets/stylesheets/kaui/invoice.css +1061 -27
  101. data/app/assets/stylesheets/kaui/kaui.css +217 -145
  102. data/app/assets/stylesheets/kaui/overdue.css +5 -3
  103. data/app/assets/stylesheets/kaui/payment.css +1102 -13
  104. data/app/assets/stylesheets/kaui/queues.css +269 -0
  105. data/app/assets/stylesheets/kaui/refunds.css +185 -0
  106. data/app/assets/stylesheets/kaui/role_definitions.css +111 -0
  107. data/app/assets/stylesheets/kaui/sidebar.css +122 -0
  108. data/app/assets/stylesheets/kaui/subscription.css +677 -0
  109. data/app/assets/stylesheets/kaui/tag_definitions.css +524 -0
  110. data/app/assets/stylesheets/kaui/tags.css +592 -121
  111. data/app/assets/stylesheets/kaui/tenants.css +1478 -0
  112. data/app/assets/stylesheets/kaui/tooltip.css +9 -5
  113. data/app/assets/stylesheets/kaui/wallets.css +121 -0
  114. data/app/controllers/kaui/accounts_controller.rb +3 -2
  115. data/app/controllers/kaui/admin_tenants_controller.rb +33 -0
  116. data/app/controllers/kaui/custom_fields_controller.rb +1 -1
  117. data/app/controllers/kaui/engine_controller.rb +1 -2
  118. data/app/controllers/kaui/engine_controller_util.rb +5 -7
  119. data/app/controllers/kaui/home_controller.rb +24 -17
  120. data/app/controllers/kaui/invoices_controller.rb +4 -15
  121. data/app/controllers/kaui/payments_controller.rb +1 -1
  122. data/app/controllers/kaui/sessions_controller.rb +1 -0
  123. data/app/controllers/kaui/tag_definitions_controller.rb +1 -0
  124. data/app/helpers/kaui/account_helper.rb +13 -0
  125. data/app/helpers/kaui/plugin_helper.rb +27 -0
  126. data/app/views/kaui/account_custom_fields/index.html.erb +95 -29
  127. data/app/views/kaui/account_emails/_account_emails_table.html.erb +13 -3
  128. data/app/views/kaui/account_emails/_form.html.erb +23 -6
  129. data/app/views/kaui/account_emails/new.html.erb +12 -6
  130. data/app/views/kaui/account_tags/_form_bar.html.erb +10 -1
  131. data/app/views/kaui/account_tags/index.html.erb +103 -24
  132. data/app/views/kaui/account_timelines/_multi_functions_bar.html.erb +302 -69
  133. data/app/views/kaui/account_timelines/show.html.erb +360 -254
  134. data/app/views/kaui/accounts/_account_details.html.erb +165 -0
  135. data/app/views/kaui/accounts/_account_filterbar.html.erb +70 -80
  136. data/app/views/kaui/accounts/_add_parent.html.erb +26 -0
  137. data/app/views/kaui/accounts/_billing_details.html.erb +196 -0
  138. data/app/views/kaui/accounts/_close_account_modal.html.erb +62 -40
  139. data/app/views/kaui/accounts/_form_account.html.erb +157 -0
  140. data/app/views/kaui/accounts/_functions_bar.html.erb +606 -0
  141. data/app/views/kaui/accounts/_link_parent_modal.html.erb +1 -1
  142. data/app/views/kaui/accounts/_link_parent_to_modal.html.erb +62 -0
  143. data/app/views/kaui/accounts/_multi_functions_bar.html.erb +67 -28
  144. data/app/views/kaui/accounts/_payment_gateways.html.erb +43 -0
  145. data/app/views/kaui/accounts/_personal_details.html.erb +67 -0
  146. data/app/views/kaui/accounts/edit.html.erb +15 -9
  147. data/app/views/kaui/accounts/index.html.erb +77 -27
  148. data/app/views/kaui/accounts/new.html.erb +14 -8
  149. data/app/views/kaui/accounts/show.html.erb +17 -11
  150. data/app/views/kaui/admin/index.html.erb +44 -19
  151. data/app/views/kaui/admin_allowed_users/_form.html.erb +123 -31
  152. data/app/views/kaui/admin_allowed_users/edit.html.erb +15 -9
  153. data/app/views/kaui/admin_allowed_users/index.html.erb +150 -30
  154. data/app/views/kaui/admin_allowed_users/new.html.erb +14 -8
  155. data/app/views/kaui/admin_allowed_users/show.html.erb +137 -32
  156. data/app/views/kaui/admin_tenants/_add_allowed_user_modal.html.erb +42 -15
  157. data/app/views/kaui/admin_tenants/_clock.html.erb +72 -0
  158. data/app/views/kaui/admin_tenants/_form.html.erb +32 -20
  159. data/app/views/kaui/admin_tenants/_form_catalog_translation.erb +21 -8
  160. data/app/views/kaui/admin_tenants/_form_invoice_template.erb +25 -9
  161. data/app/views/kaui/admin_tenants/_form_invoice_translation.erb +36 -20
  162. data/app/views/kaui/admin_tenants/_form_plugin_config.erb +16 -20
  163. data/app/views/kaui/admin_tenants/_show_catalog.erb +13 -6
  164. data/app/views/kaui/admin_tenants/_show_catalog_simple.erb +95 -46
  165. data/app/views/kaui/admin_tenants/_show_catalog_xml.erb +62 -37
  166. data/app/views/kaui/admin_tenants/_show_overdue.erb +91 -75
  167. data/app/views/kaui/admin_tenants/_tenant_details.html.erb +106 -17
  168. data/app/views/kaui/admin_tenants/_tenants_table.html.erb +67 -6
  169. data/app/views/kaui/admin_tenants/_useful_links.html.erb +21 -16
  170. data/app/views/kaui/admin_tenants/index.html.erb +35 -11
  171. data/app/views/kaui/admin_tenants/index.js.erb +3 -0
  172. data/app/views/kaui/admin_tenants/new.html.erb +19 -13
  173. data/app/views/kaui/admin_tenants/new_catalog.html.erb +230 -98
  174. data/app/views/kaui/admin_tenants/new_overdue_config.html.erb +152 -80
  175. data/app/views/kaui/admin_tenants/new_plan_currency.html.erb +44 -30
  176. data/app/views/kaui/admin_tenants/show.html.erb +211 -78
  177. data/app/views/kaui/admin_tenants/show.js.erb +3 -0
  178. data/app/views/kaui/audit_logs/_multi_functions_bar.html.erb +298 -101
  179. data/app/views/kaui/audit_logs/index.html.erb +137 -38
  180. data/app/views/kaui/bundle_tags/_form_bar.html.erb +11 -4
  181. data/app/views/kaui/bundles/_bundle_details.html.erb +24 -12
  182. data/app/views/kaui/bundles/index.html.erb +79 -104
  183. data/app/views/kaui/bundles/pause_resume.html.erb +73 -38
  184. data/app/views/kaui/chargebacks/_form.html.erb +35 -18
  185. data/app/views/kaui/chargebacks/new.html.erb +16 -9
  186. data/app/views/kaui/charges/_form.html.erb +54 -42
  187. data/app/views/kaui/charges/new.html.erb +15 -8
  188. data/app/views/kaui/components/breadcrumb/_breadcrumb.html.erb +146 -0
  189. data/app/views/kaui/components/button/_button.html.erb +16 -0
  190. data/app/views/kaui/components/dashboard/_card.html.erb +15 -0
  191. data/app/views/kaui/components/dashboard/_setting.html.erb +15 -0
  192. data/app/views/kaui/components/form_input/_form_input.html.erb +4 -0
  193. data/app/views/kaui/components/form_password/_form_password.html.erb +6 -0
  194. data/app/views/kaui/components/logo/_logo.html.erb +1 -0
  195. data/app/views/kaui/components/menu_dropdown/_menu_dropdown.html.erb +59 -0
  196. data/app/views/kaui/components/search_input/_search_input.html.erb +81 -0
  197. data/app/views/kaui/credits/_form.html.erb +42 -25
  198. data/app/views/kaui/credits/new.html.erb +15 -8
  199. data/app/views/kaui/custom_fields/_form.html.erb +37 -25
  200. data/app/views/kaui/custom_fields/_list_bar.html.erb +11 -10
  201. data/app/views/kaui/custom_fields/index.html.erb +121 -27
  202. data/app/views/kaui/custom_fields/new.html.erb +19 -8
  203. data/app/views/kaui/errors/500.html.erb +1 -1
  204. data/app/views/kaui/home/index.html.erb +77 -30
  205. data/app/views/kaui/invoice_items/_edit_form.html.erb +30 -14
  206. data/app/views/kaui/invoice_items/edit.html.erb +15 -7
  207. data/app/views/kaui/invoice_tags/_form_bar.html.erb +13 -3
  208. data/app/views/kaui/invoices/_invoice_filterbar.html.erb +53 -69
  209. data/app/views/kaui/invoices/_invoice_table.html.erb +77 -92
  210. data/app/views/kaui/invoices/_multi_functions_bar.html.erb +351 -140
  211. data/app/views/kaui/invoices/index.html.erb +89 -27
  212. data/app/views/kaui/invoices/show.html.erb +392 -80
  213. data/app/views/kaui/layouts/kaui_account_sidebar.html.erb +42 -0
  214. data/app/views/kaui/layouts/kaui_application.html.erb +29 -15
  215. data/app/views/kaui/layouts/kaui_flash.html.erb +82 -31
  216. data/app/views/kaui/layouts/kaui_navbar.html.erb +109 -82
  217. data/app/views/kaui/layouts/kaui_setting_sidebar.html.erb +36 -0
  218. data/app/views/kaui/payment_methods/_form.html.erb +32 -11
  219. data/app/views/kaui/payment_methods/_new_creditcard_payment_method.html.erb +35 -34
  220. data/app/views/kaui/payment_methods/_payment_methods_details_table.html.erb +27 -29
  221. data/app/views/kaui/payment_methods/_payment_methods_table.html.erb +116 -38
  222. data/app/views/kaui/payment_methods/_plugin_properties.html.erb +19 -9
  223. data/app/views/kaui/payment_methods/new.html.erb +14 -8
  224. data/app/views/kaui/payments/_form.html.erb +30 -13
  225. data/app/views/kaui/payments/_multi_functions_bar.html.erb +351 -141
  226. data/app/views/kaui/payments/_payment_filterbar.html.erb +63 -79
  227. data/app/views/kaui/payments/_payment_invoice_table.html.erb +105 -0
  228. data/app/views/kaui/payments/_payment_table.html.erb +4 -67
  229. data/app/views/kaui/payments/index.html.erb +90 -26
  230. data/app/views/kaui/payments/new.html.erb +15 -8
  231. data/app/views/kaui/payments/show.html.erb +222 -28
  232. data/app/views/kaui/queues/index.html.erb +329 -111
  233. data/app/views/kaui/refunds/_form.html.erb +68 -45
  234. data/app/views/kaui/refunds/new.html.erb +15 -8
  235. data/app/views/kaui/role_definitions/_form.html.erb +104 -17
  236. data/app/views/kaui/role_definitions/new.html.erb +15 -8
  237. data/app/views/kaui/sessions/_form.html.erb +9 -19
  238. data/app/views/kaui/sessions/new.html.erb +10 -9
  239. data/app/views/kaui/subscriptions/_cancel_by_date_modal.html.erb +65 -35
  240. data/app/views/kaui/subscriptions/_edit_form.html.erb +66 -35
  241. data/app/views/kaui/subscriptions/_form.html.erb +63 -32
  242. data/app/views/kaui/subscriptions/_subscriptions_table.html.erb +215 -57
  243. data/app/views/kaui/subscriptions/edit.html.erb +19 -8
  244. data/app/views/kaui/subscriptions/edit_bcd.erb +46 -16
  245. data/app/views/kaui/subscriptions/new.html.erb +22 -15
  246. data/app/views/kaui/tag_definitions/_form.html.erb +51 -30
  247. data/app/views/kaui/tag_definitions/index.html.erb +151 -40
  248. data/app/views/kaui/tag_definitions/new.html.erb +15 -8
  249. data/app/views/kaui/tags/index.html.erb +136 -47
  250. data/app/views/kaui/tenants/_form.html.erb +8 -5
  251. data/app/views/kaui/tenants/index.html.erb +15 -9
  252. data/app/views/kaui/transactions/_control_plugin_names.html.erb +18 -10
  253. data/app/views/kaui/transactions/_form.html.erb +86 -25
  254. data/app/views/kaui/transactions/new.html.erb +15 -9
  255. data/config/routes.rb +1 -0
  256. data/lib/kaui/engine.rb +11 -0
  257. data/lib/kaui/version.rb +1 -1
  258. data/lib/kaui.rb +0 -1
  259. metadata +120 -2
@@ -0,0 +1,165 @@
1
+ <div class="account-details">
2
+
3
+ <div class="d-flex flex-column ">
4
+
5
+ <div class="account-details-header">
6
+ <div class="d-flex align-items-center">
7
+ <h2>Account Information</h2>
8
+ <% unless @account.parent_account_id.nil? %>
9
+ <span class="label label-info account-child-label">Child</span>
10
+ <% end %>
11
+ <% if @children.size > 0 %>
12
+ <span class="label label-info account-child-label">Parent</span>
13
+ <% end %>
14
+ </div>
15
+ <span class="link-view">
16
+ <% if can_close_account? && !account_closed? %>
17
+ <%= render "kaui/components/button/button", {
18
+ label: "Close Account",
19
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
20
+ type: "button",
21
+ html_class: "kaui-button dots-menu custom-hover",
22
+ html_options: {
23
+ data: {
24
+ bs_toggle: 'modal',
25
+ bs_target: '#closeAccountModal',
26
+ name: @account.name || '(not set)',
27
+ account_id: @account.account_id
28
+ }
29
+ }
30
+ } %>
31
+ <% end %>
32
+ <% if @children.size > 0 %>
33
+ <% if @children.size > 0 %>
34
+ <%= link_to kaui_engine.account_children_path(@account.account_id),
35
+ class: "btn btn-xs",
36
+ title: "View Children" do %>
37
+ <%= render "kaui/components/button/button", {
38
+ label: "Children (#{@children.size})",
39
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
40
+ type: "button",
41
+ html_class: "kaui-button custom-hover"
42
+ } %>
43
+ <% end %>
44
+ <% end %>
45
+ <% end %>
46
+ <span class="tag-bar tag-bar-breathe">
47
+ <% unless @available_tags.blank? %>
48
+ <div class="tag-select" onclick="void(0)">
49
+ <%= render "kaui/components/button/button", {
50
+ label: "Tag As",
51
+ trailing_icon: "kaui/account/down-arrow.svg",
52
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
53
+ type: "button",
54
+ html_class: "kaui-button custom-hover",
55
+ } %>
56
+ <div class="tag-select-box tag-as-select-box">
57
+ <strong>Tag As:</strong>
58
+ <%= render :partial => 'kaui/account_tags/form_bar',
59
+ :locals => {:account_id => @account.account_id,
60
+ :tag_names => @tags.map { |tag| tag.tag_definition_name },
61
+ :available_tags => @available_tags} %>
62
+ </div>
63
+ </div>
64
+ <% end %>
65
+ </span>
66
+
67
+ <% if can? :export, Kaui::AdminTenant %>
68
+ <%= link_to kaui_engine.export_account_path(@account.account_id),
69
+ :class => 'btn btn-xs',
70
+ :id => 'download_link',
71
+ :title => 'Export Account Data' do %>
72
+ <%= render "kaui/components/button/button", {
73
+ label: "Export",
74
+ icon: "kaui/download.svg",
75
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
76
+ type: "button",
77
+ html_class: "kaui-button custom-hover",
78
+ } %>
79
+ <% end %>
80
+ <% end %>
81
+
82
+ <% if can? :update, Kaui::Account %>
83
+ <%= link_to kaui_engine.edit_account_path(@account.account_id),
84
+ :class => 'btn btn-xs' do %>
85
+ <%= render "kaui/components/button/button", {
86
+ label: "Edit",
87
+ icon: "kaui/account/edit.svg",
88
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
89
+ type: "button",
90
+ html_class: "kaui-dropdown custom-hover",
91
+ } %>
92
+ <% end %>
93
+ <% end %>
94
+
95
+ </span>
96
+ </div>
97
+
98
+ <% unless @tags.find { |tag| tag.tag_definition_name == '__PARK__' }.nil? %>
99
+ <div class="alert alert-danger">
100
+ This account is parked, meaning the system detected inconsistent state which could lead to mis-billing. For safety, no more invoices will be generated.
101
+ <% if can? :trigger, Kaui::Invoice %>
102
+ Once the data is fixed, you can unpark it by manually <%= link_to 'triggering an invoice run', kaui_engine.trigger_invoice_path(params.to_h), :method => :post %>.
103
+ <% end %>
104
+ </div>
105
+ <% end %>
106
+
107
+ <div class="account-details-body">
108
+ <div class="row">
109
+ <div class="col-md-4 mb-3">
110
+ <h2 class="fw-semibold">ID</h2>
111
+ <p class="text-muted small mb-3 d-flex align-items-center">
112
+ <%= @account.account_id %>
113
+ <svg
114
+ class="mx-2"
115
+ width="16"
116
+ height="16"
117
+ viewBox="0 0 16 16"
118
+ fill="none"
119
+ xmlns="http://www.w3.org/2000/svg"
120
+ style="cursor: pointer;"
121
+ onclick="navigator.clipboard.writeText('<%= @account.account_id %>')"
122
+ >
123
+ <path d="M11.3332 5.94864V2.66659C11.3332 1.93021 10.7363 1.33325 9.99989 1.33325H2.66659C1.93021 1.33325 1.33325 1.93021 1.33325 2.66659V9.99992C1.33325 10.7363 1.93021 11.3333 2.66659 11.3333H5.94864" stroke="#717680" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
124
+ <path d="M13.3333 6C14.0697 6 14.6666 6.59695 14.6666 7.33333M7.33331 6C6.59695 6 6 6.59695 6 7.33333M13.3333 14.6667C14.0697 14.6667 14.6666 14.0697 14.6666 13.3333M7.33331 14.6667C6.59695 14.6667 6 14.0697 6 13.3333M9.33331 6H11.3333M9.33331 14.6667H11.3333M14.6666 9.33333V11.3333M6 9.33333V11.3333" stroke="#717680" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
125
+ </svg>
126
+ </p>
127
+
128
+
129
+ <h2 class="fw-semibold">External Key</h2>
130
+ <p class="text-muted small mb-3"><%= @account.external_key %></p>
131
+
132
+ <h2 class="fw-semibold">Currency</h2>
133
+ <p class="text-muted small mb-3"><%= @account.currency %></p>
134
+
135
+ </div>
136
+
137
+ <div class="col-md-4 mb-3">
138
+ <h2 class="fw-semibold">Timezone</h2>
139
+ <p class="text-muted small mb-3"><%= @account.time_zone %></p>
140
+
141
+ <h2 class="fw-semibold">Locale</h2>
142
+ <p class="text-muted small mb-3"><%= @account.locale %></p>
143
+
144
+ <h2 class="fw-semibold">Notes</h2>
145
+ <% if @account.notes.present? %>
146
+ <p class="text-muted small mb-3"><%= @account.notes %></p>
147
+ <% else %>
148
+ <p class="text-muted small mb-3">N/A</p>
149
+ <% end %>
150
+ </div>
151
+
152
+ <div class="col-md-4 mb-3 add_parent">
153
+ <%= render partial: 'kaui/custom_fields/list_bar', locals: {
154
+ custom_fields: @custom_fields,
155
+ container_class: 'mb-4',
156
+ } %>
157
+ <h2 class="fw-semibold">Parent</h2>
158
+ <%= render partial: 'add_parent', locals: { account_parent: @account_parent } %>
159
+ </div>
160
+ </div>
161
+ </div>
162
+
163
+ </div>
164
+
165
+ </div>
@@ -1,40 +1,64 @@
1
- <div class="modal fade" id="advanceSearchModal" tabindex="-1" role="dialog" aria-labelledby="advanceSearchModalLabel" aria-hidden="true">
1
+ <div class="modal fade kaui-accounts-index-filterbar" id="advanceSearchModal" tabindex="-1" role="dialog" aria-labelledby="advanceSearchModalLabel" aria-hidden="true">
2
2
  <div class="modal-dialog" role="document">
3
3
  <div class="modal-content">
4
4
  <div class="modal-header">
5
- <h5 class="modal-title" id="advanceSearchModalLabel">Advance Search</h5>
6
- <button type="button" class="close" data-dismiss="modal" aria-label="Close">
7
- <span aria-hidden="true">&times;</span>
5
+ <h5 class="modal-title d-flex align-items-center gap-3" id="advanceSearchModalLabel">
6
+ <span class="icon-container">
7
+ <%= image_tag("kaui/modal/search.svg", width: 20, height: 20) %>
8
+ </span>
9
+ Advance Search
10
+ </h5>
11
+ <button type="button" class="close close-button custom-hover" data-bs-dismiss="modal" aria-label="Close">
12
+ <span aria-hidden="true">
13
+ <%= image_tag("kaui/modal/close.svg", width: 20, height: 20) %>
14
+ </span>
8
15
  </button>
9
16
  </div>
10
17
  <div class="modal-body">
11
18
  <form id="advanceSearchForm">
12
19
  <div class="form-group d-flex align-items-center">
13
- <label for="searchFieldSelect" class="mr-2" style="width: 30%;">Search Fields:</label>
14
- <select id="searchFieldSelect" class="form-control mr-2">
15
- <% @search_fields.each do |value, title| %>
16
- <option value="<%= value %>"><%= title %></option>
17
- <% end %>
18
- </select>
19
- <button type="button" class="btn btn-secondary" id="addSearchField">Add</button>
20
+ <label for="searchFieldSelect" class="mr-2 field-label" style="width: 30%;">Search Field</label>
21
+ <select id="searchFieldSelect" class="form-control mr-2">
22
+ <% @search_fields.each do |value, title| %>
23
+ <option value="<%= value %>"><%= title %></option>
24
+ <% end %>
25
+ </select>
26
+ <button type="button" class="border-button custom-hover" id="addSearchField">
27
+ <%= image_tag("kaui/modal/plus.svg", width: 16, height: 16) %>
28
+ </button>
20
29
  </div>
21
30
  <div id="search-fields-container">
22
31
  </div>
23
32
  </form>
24
33
  </div>
25
34
  <div class="modal-footer">
26
- <button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
27
- <button type="button" class="btn btn-primary" id="applyAdvanceSearch">Apply Search</button>
28
- <button type="button" class="btn btn-danger" id="clearAdvanceSearch">Clear Search</button>
35
+ <%= render "kaui/components/button/button", {
36
+ label: 'Clear Search',
37
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
38
+ type: "button",
39
+ html_class: "kaui-button custom-hover",
40
+ html_options: {
41
+ id: "clearAdvanceSearch"
42
+ }
43
+ } %>
44
+ <%= render "kaui/components/button/button", {
45
+ label: 'Apply Search',
46
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
47
+ type: "button",
48
+ html_class: "kaui-dropdown custom-hover",
49
+ html_options: {
50
+ id: "applyAdvanceSearch"
51
+ }
52
+ } %>
29
53
  </div>
30
54
  </div>
31
55
  </div>
32
56
  </div>
33
57
 
34
- <template id="search-field-template">
35
- <div class="form-group row align-items-center search-field">
36
- <label class="col-sm-4 col-form-label search-field-label"></label>
37
- <div class="col-sm-3">
58
+ <template id="search-field-template" class="kaui-accounts-index-filterbar">
59
+ <div class="form-group row align-items-center justify-content-between search-field">
60
+ <label class="col-sm-3 col-form-label search-field-label"></label>
61
+ <div class="col-sm-4">
38
62
  <select class="form-control search-field-filter">
39
63
  <option value="eq">Equals</option>
40
64
  <option value="neq">Not Equals</option>
@@ -48,61 +72,12 @@
48
72
  <div class="col-sm-4">
49
73
  <input type="text" class="form-control search-field-value">
50
74
  </div>
51
- <div class="col-sm-1">
52
- <i class="glyphicon glyphicon-remove" id=remove-search-field></i>
53
- </div>
75
+ <button type="button" class="button custom-hover" id="remove-search-field">
76
+ <%= image_tag("kaui/modal/red-close.svg", width: 16, height: 16) %>
77
+ </button>
54
78
  </div>
55
79
  </template>
56
80
 
57
- <style>
58
- .form-group.row.align-items-center {
59
- display: flex;
60
- align-items: center;
61
- }
62
-
63
- .form-group.row.align-items-center label {
64
- margin-bottom: 0; /* Remove default margin */
65
- }
66
-
67
- .form-group.row.align-items-center .form-control {
68
- margin-right: 10px; /* Add some space between elements */
69
- }
70
-
71
- .form-group.d-flex {
72
- display: flex;
73
- align-items: center;
74
- }
75
-
76
- .form-group.d-flex label {
77
- margin-bottom: 0; /* Remove default margin */
78
- }
79
-
80
- .form-group.d-flex .form-control {
81
- margin-right: 10px; /* Add some space between the select box and the button */
82
- }
83
-
84
- #search-labels-container .label {
85
- margin-left: 5px; /* Add space between labels */
86
- margin-bottom: 5px; /* Add space below labels if they wrap to the next line */
87
- color: white;
88
- }
89
-
90
- .filter-bar-container {
91
- display: flex;
92
- justify-content: flex-start; /* Align items to the left */
93
- align-items: center; /* Center items vertically */
94
- }
95
-
96
- .filter-bar {
97
- display: flex;
98
- align-items: center; /* Center items vertically */
99
- }
100
-
101
- .filter-bar label {
102
- margin: 10px; /* Add some space between the label and the select box */
103
- }
104
- </style>
105
-
106
81
  <%= javascript_tag do %>
107
82
  $(document).ready(function() {
108
83
  populateSearchLabelsFromUrl();
@@ -135,32 +110,47 @@ $(document).ready(function() {
135
110
  searchLabelsContainer.empty();
136
111
 
137
112
  var table = $('#accounts-table').DataTable();
138
- table.on('preXhr.dt', function(e, settings, data) {
139
- data.search.value = searchQuery;
113
+ table.off('preXhr.dt.filter');
114
+ table.on('preXhr.dt.filter', function(e, settings, data) {
115
+ data.search.value = searchQuery('');
140
116
  });
141
117
 
142
- table.ajax.url("<%= accounts_pagination_path(:ordering => @ordering, :format => :json) %>").load();
118
+ // Update the DataTables ajax URL with the new search parameters
119
+ var searchParams = searchQuery('');
120
+ var ajaxUrl = "<%= accounts_pagination_path(:ordering => @ordering, :format => :json) %>";
121
+ if (searchParams) {
122
+ ajaxUrl += (ajaxUrl.includes('?') ? '&' : '?') + searchParams;
123
+ }
124
+ table.ajax.url(ajaxUrl).load();
143
125
 
144
126
  // Update the URL with the search parameters
145
- var searchParams = searchQuery('');
146
127
  if (searchParams) {
128
+ searchParams = searchParams.replace(/account_id/g, 'ac_id');
147
129
  var newUrl = window.location.protocol + "//" + window.location.host + window.location.pathname + '?' + searchParams;
148
130
  window.history.pushState({ path: newUrl }, '', newUrl);
149
131
  }
150
132
 
151
133
  searchFields.each(function() {
152
- var filter = $(this).find('.search-field-filter option:selected').text();
153
- var value = $(this).find('.search-field-value').val();
154
- var columnName = $(this).find('.search-field-filter').attr('name').replace('Filter', '');
134
+ var filter = $(this).find('.search-field-filter option:selected').text().trim();
135
+ var value = $(this).find('.search-field-value').val().trim();
136
+ var columnName = $(this).find('.search-field-filter').attr('name').replace('Filter', '').trim();
155
137
 
156
138
  // Create and append the search label
157
139
  if (value !== '') {
158
140
  var label = $('<span>', {
159
- class: 'label label-info',
160
- text: columnName + ' [' + filter + '] ' + value
141
+ class: 'label label-info d-inline-flex align-items-center gap-2',
142
+ 'data-field': columnName,
143
+ 'data-filter': filter,
144
+ 'data-value': value
161
145
  });
146
+ var labelText = $('<span>', { text: columnName + ' [' + filter + '] ' + value });
147
+ var closeIcon = $('<span>', {
148
+ class: 'filter-close-icon',
149
+ style: 'cursor: pointer; margin-left: 5px; display: inline-flex; align-items: center;'
150
+ }).html('<svg width="12" height="12" viewBox="0 0 20 20" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M15.8337 4.1665L4.16699 15.8332M4.16699 4.1665L15.8337 15.8332" stroke="#A4A7AE" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/></svg>');
151
+ label.append(labelText).append(closeIcon);
152
+ searchLabelsContainer.append(label);
162
153
  }
163
- searchLabelsContainer.append(label);
164
154
  });
165
155
 
166
156
  $('#advanceSearchModal').modal('hide');
@@ -0,0 +1,26 @@
1
+ <tr>
2
+ <td>
3
+ <% if account_parent.present? %>
4
+ <%= link_to account_parent.account_id, kaui_engine.account_path(@account.parent_account_id) %>
5
+ <% if can? :update, Kaui::Account %>
6
+ <%= link_to '
7
+ <svg width="13" height="12" viewBox="0 0 13 12" fill="none" xmlns="http://www.w3.org/2000/svg" style="vertical-align: middle;">
8
+ <path d="M9.8335 2.5L2.8335 9.50001M2.8335 2.5L9.8335 9.50001" stroke="#A4A7AE" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
9
+ </svg>
10
+ '.html_safe, kaui_engine.unlink_to_parent_path(@account.account_id), method: :delete
11
+ %>
12
+
13
+ <% end %>&nbsp;
14
+ <% end %>
15
+ <% unless account_parent.present? %>
16
+ <% if can? :update, Kaui::Account %>
17
+ <button type="button" class="naked" data-bs-toggle="modal" data-bs-target="#link_account">
18
+ <svg width="17" height="16" viewBox="0 0 17 16" fill="none" xmlns="http://www.w3.org/2000/svg">
19
+ <path d="M8.33333 2.66675V13.3334M13.6667 8.00008H3" stroke="#1570EF" stroke-width="1.25" stroke-linecap="round" stroke-linejoin="round"/>
20
+ </svg>
21
+ Add
22
+ </button>
23
+ <% end %>
24
+ <% end %>
25
+ </td>
26
+ </tr>
@@ -0,0 +1,196 @@
1
+ <div class="billing-details">
2
+ <div class="d-flex flex-column">
3
+ <div class="billing-details-header">
4
+ <h2>Billing Information</h2>
5
+ <span>
6
+ <% if can?(:trigger, Kaui::Payment) || can?(:credit, Kaui::Account) || can?(:charge, Kaui::Account) %>
7
+ <div class="tag-bar tag-bar-breathe">
8
+ <div class="toggler">
9
+ <div class="toggle">
10
+ <div class="actions">
11
+ <!-- Payment, Credit then Charge. Same ordering as in the billing timeline -->
12
+
13
+ <% if can?(:trigger, Kaui::Payment) && @account.account_balance.present? && @account.account_balance > 0 %>
14
+ <%= link_to kaui_engine.pay_all_invoices_account_path(@account.account_id),
15
+ :method => :post do %>
16
+ <%= render "kaui/components/button/button", {
17
+ label: "Pay All Invoices",
18
+ icon: "kaui/account/pay-all.svg",
19
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
20
+ type: "button",
21
+ html_class: "kaui-button custom-hover",
22
+ } %>
23
+ <% end %>
24
+ <% end %>
25
+
26
+ <% if can? :charge, Kaui::Account %>
27
+ <%= link_to kaui_engine.new_account_charge_path(@account.account_id, :currency => @account.currency) do %>
28
+ <%= render "kaui/components/button/button", {
29
+ label: "Create Charge",
30
+ icon: "kaui/account/plus.svg",
31
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
32
+ type: "button",
33
+ html_class: "kaui-button custom-hover",
34
+ } %>
35
+ <% end %>
36
+ <% end %>
37
+
38
+ <% if can? :credit, Kaui::Account %>
39
+ <%= link_to kaui_engine.new_account_credit_path(@account.account_id, :currency => @account.currency) do %>
40
+ <%= render "kaui/components/button/button", {
41
+ label: "Add Credit",
42
+ icon: "kaui/plus.svg",
43
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
44
+ type: "button",
45
+ html_class: "kaui-dropdown custom-hover",
46
+ } %>
47
+ <% end %>
48
+ <% end %>
49
+
50
+ <% if deposit_plugin_available? %>
51
+ <%= link_to deposit_engine.collection_index_path(:account_id => @account.account_id, :currency => @account.currency) do %>
52
+ <%= render "kaui/components/button/button", {
53
+ label: "Create Deposit",
54
+ icon: "kaui/plus.svg",
55
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
56
+ type: "button",
57
+ html_class: "kaui-dropdown custom-hover",
58
+ } %>
59
+ <% end %>
60
+ <% end %>
61
+
62
+ </div>
63
+ </div>
64
+ </div>
65
+ </div>
66
+ <% end %>
67
+ </span>
68
+ </div>
69
+ <div class="account-summary">
70
+
71
+ <div class="row">
72
+
73
+ <!-- Left Column -->
74
+ <div class="col-md-4">
75
+ <div class="info-item">
76
+ <b>Account balance</b>
77
+ <% if @account.account_balance.nil? %>
78
+ <p class="badge neutral">N/A</p>
79
+ <% elsif @account.account_balance <= 0 %>
80
+ <p class="badge success"><%= humanized_money_with_symbol @account.balance_to_money %></p>
81
+ <% else %>
82
+ <p class="badge danger"><%= humanized_money_with_symbol @account.balance_to_money %></p>
83
+ <% end %>
84
+ </div>
85
+
86
+ <div class="info-item">
87
+ <b>Account credit</b>
88
+ <% if @account.account_cba.nil? %>
89
+ <p class="badge neutral">N/A</p>
90
+ <% elsif @account.account_cba >= 0 %>
91
+ <p class="badge success"><%= humanized_money_with_symbol @account.cba_to_money %></p>
92
+ <% else %>
93
+ <p class="badge danger"><%= humanized_money_with_symbol @account.cba_to_money %></p>
94
+ <% end %>
95
+ </div>
96
+
97
+ <div class="info-item">
98
+ <b>Overdue status</b>
99
+ <% if @overdue_state.nil? %>
100
+ <p class="badge neutral">N/A</p>
101
+ <% elsif @overdue_state.is_clear_state %>
102
+ <p class="badge success">Good</p>
103
+ <% else %>
104
+ <p class="badge danger"><%= @overdue_state.name %></p>
105
+ <% end %>
106
+ </div>
107
+ </div>
108
+
109
+ <!-- Middle Column -->
110
+ <div class="col-md-4">
111
+ <div class="info-item">
112
+ <b>Bill cycle day</b>
113
+ <% if @account.bill_cycle_day_local > 0 %>
114
+ <p><%= @account.bill_cycle_day_local %> (user timezone)</p>
115
+ <% else %>
116
+ <p>N/A</p>
117
+ <% end %>
118
+ </div>
119
+
120
+ <% if can? :trigger, Kaui::Invoice %>
121
+ <div class="info-item">
122
+ <b>Next invoice date</b>
123
+ <p id='next-invoice-date'>N/A</p>
124
+ </div>
125
+ <% end %>
126
+ </div>
127
+
128
+ <!-- Right Column -->
129
+ <div class="col-md-4">
130
+ <% if (can? :trigger, Kaui::Invoice) || (can? :dry_run, Kaui::Invoice) %>
131
+ <div class="trigger-invoice-box">
132
+ <b>Trigger invoice generation</b>
133
+ <%= form_tag kaui_engine.trigger_invoice_path(params.to_h), :method => :post do %>
134
+ <div class="d-flex align-items-center mb-2">
135
+ <div class="custom-date-input-wrapper kaui-button custom-hover">
136
+ <svg width="21" height="20" viewBox="0 0 21 20" fill="none" xmlns="http://www.w3.org/2000/svg">
137
+ <path d="M14.9167 12.5V18.3333M17.8333 15.4167H12" stroke="#A4A7AE" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
138
+ <path d="M14.0833 1.66675V5.00008M6.58325 1.66675V5.00008" stroke="#A4A7AE" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
139
+ <path d="M17.8333 10.8333V4.99992C17.8333 4.07944 17.0871 3.33325 16.1666 3.33325H4.49992C3.57944 3.33325 2.83325 4.07944 2.83325 4.99992V16.6666C2.83325 17.5871 3.57944 18.3333 4.49992 18.3333H10.3333" stroke="#A4A7AE" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
140
+ <path d="M2.83325 8.33325H17.8333" stroke="#A4A7AE" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round"/>
141
+ </svg>
142
+
143
+
144
+ <input
145
+ class="form-control"
146
+ id="target_date"
147
+ name="target_date"
148
+ type="text"
149
+ placeholder="Select date"
150
+ data-provide="datepicker"
151
+ data-date-format="yyyy-mm-dd"
152
+ />
153
+ </div>
154
+
155
+ <%= render "kaui/components/button/button", {
156
+ label: "Generate",
157
+ icon: "kaui/generate.svg",
158
+ variant: "outline-secondary d-inline-flex align-items-center gap-1",
159
+ type: "submit",
160
+ html_class: "btn btn-xs kaui-dropdown custom-hover py-2 px-3",
161
+ } %>
162
+ </div>
163
+ <div class="form-check">
164
+ <%= check_box_tag :dry_run, '1', true, class: 'form-check-input', id: 'dry_run_checkbox', disabled: !can?(:trigger, Kaui::Invoice) %>
165
+ <%= label_tag :dry_run, 'Dry-run', class: 'form-check-label' %>
166
+ </div>
167
+ <% end %>
168
+ </div>
169
+ <% end %>
170
+ </div>
171
+ </div>
172
+ </div>
173
+ </div>
174
+ </div>
175
+
176
+ <%= javascript_tag do %>
177
+ $(document).ready(function() {
178
+ if ($("#next-invoice-date").length) {
179
+ var next_invoice_date_path = Routes.kaui_engine_next_invoice_date_path('<%= @account.account_id %>', {format: "json"});
180
+ var populateNextInvoiceDate = function (next_invoice_date) {
181
+ if (next_invoice_date === null) {
182
+ return;
183
+ }
184
+
185
+ $("#next-invoice-date").text(next_invoice_date);
186
+ };
187
+
188
+ $.ajax({
189
+ type: 'GET',
190
+ contentType: 'application/json',
191
+ dataType: 'json',
192
+ url: next_invoice_date_path
193
+ }).done(populateNextInvoiceDate);
194
+ }
195
+ });
196
+ <% end %>