lesli 5.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 (398) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +3 -0
  3. data/app/assets/config/lesli_manifest.js +53 -0
  4. data/app/assets/fonts/lesli/Domine/Domine-Bold.ttf +0 -0
  5. data/app/assets/fonts/lesli/Domine/Domine-Regular.ttf +0 -0
  6. data/app/assets/fonts/lesli/Domine/OFL.txt +95 -0
  7. data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
  8. data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
  9. data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
  10. data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
  11. data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +1 -0
  12. data/app/assets/fonts/lesli/Remix/remixicon.svg +7633 -0
  13. data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +11 -0
  14. data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
  15. data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
  16. data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
  17. data/app/assets/fonts/lesli/Roboto/LICENSE.txt +202 -0
  18. data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
  19. data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
  20. data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
  21. data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
  22. data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
  23. data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
  24. data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
  25. data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
  26. data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
  27. data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
  28. data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
  29. data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
  30. data/app/assets/icons/lesli/cloud-admin.svg +1 -0
  31. data/app/assets/icons/lesli/cloud-audit.svg +1 -0
  32. data/app/assets/icons/lesli/cloud-babel.svg +1 -0
  33. data/app/assets/icons/lesli/cloud-bell.svg +1 -0
  34. data/app/assets/icons/lesli/cloud-books.svg +1 -0
  35. data/app/assets/icons/lesli/cloud-development.svg +1 -0
  36. data/app/assets/icons/lesli/cloud-dispatcher.svg +1 -0
  37. data/app/assets/icons/lesli/cloud-driver.svg +1 -0
  38. data/app/assets/icons/lesli/cloud-focus.svg +1 -0
  39. data/app/assets/icons/lesli/cloud-help.svg +1 -0
  40. data/app/assets/icons/lesli/cloud-kb.svg +1 -0
  41. data/app/assets/icons/lesli/cloud-leaf.svg +1 -0
  42. data/app/assets/icons/lesli/cloud-lesli.svg +1 -0
  43. data/app/assets/icons/lesli/cloud-mailer.svg +1 -0
  44. data/app/assets/icons/lesli/cloud-one.svg +1 -0
  45. data/app/assets/icons/lesli/cloud-profile.svg +1 -0
  46. data/app/assets/icons/lesli/cloud-proposal.svg +1 -0
  47. data/app/assets/icons/lesli/cloud-scraper.svg +1 -0
  48. data/app/assets/icons/lesli/cloud-shared.svg +1 -0
  49. data/app/assets/icons/lesli/cloud-storage.svg +1 -0
  50. data/app/assets/icons/lesli/cloud-talk.svg +1 -0
  51. data/app/assets/icons/lesli/cloud-team.svg +1 -0
  52. data/app/assets/icons/lesli/cloud-time.svg +1 -0
  53. data/app/assets/icons/lesli/cloud-vault.svg +1 -0
  54. data/app/assets/icons/lesli/cloud-word.svg +1 -0
  55. data/app/assets/icons/lesli/icon-module.svg +1 -0
  56. data/app/assets/icons/lesli/logo-android.svg +1 -0
  57. data/app/assets/icons/lesli/logo-bulma.svg +1 -0
  58. data/app/assets/icons/lesli/logo-ios.svg +1 -0
  59. data/app/assets/icons/lesli/logo-linux.svg +1 -0
  60. data/app/assets/icons/lesli/logo-mac.svg +1 -0
  61. data/app/assets/icons/lesli/logo-module.svg +1 -0
  62. data/app/assets/icons/lesli/logo-postgresql.svg +1 -0
  63. data/app/assets/icons/lesli/logo-rails.svg +1 -0
  64. data/app/assets/icons/lesli/logo-ruby.svg +1 -0
  65. data/app/assets/icons/lesli/logo-sass.svg +1 -0
  66. data/app/assets/icons/lesli/logo-vue.svg +1 -0
  67. data/app/assets/icons/lesli/logo-web.svg +1 -0
  68. data/app/assets/icons/lesli/logo-windows.svg +1 -0
  69. data/app/assets/icons/readme.md +10 -0
  70. data/app/assets/images/lesli/brand/app-auth.svg +9 -0
  71. data/app/assets/images/lesli/brand/app-icon.svg +42 -0
  72. data/app/assets/images/lesli/brand/app-logo.svg +4 -0
  73. data/app/assets/images/lesli/brand/favicon.png +0 -0
  74. data/app/assets/images/lesli/brand/favicon.svg +61 -0
  75. data/app/assets/images/lesli/brand/login-background.jpg +0 -0
  76. data/app/assets/javascripts/lesli/users/sessions.js +786 -0
  77. data/app/assets/stylesheets/lesli/users/confirmations.scss +34 -0
  78. data/app/assets/stylesheets/lesli/users/devise.scss +32 -0
  79. data/app/assets/stylesheets/lesli/users/oauth.scss +34 -0
  80. data/app/assets/stylesheets/lesli/users/passwords.scss +34 -0
  81. data/app/assets/stylesheets/lesli/users/registrations.scss +34 -0
  82. data/app/assets/stylesheets/lesli/users/sessions.scss +38 -0
  83. data/app/controllers/lesli/application_controller.rb +108 -0
  84. data/app/controllers/lesli/application_devise_controller.rb +54 -0
  85. data/app/controllers/lesli/application_lesli_controller.rb +61 -0
  86. data/app/controllers/lesli/interfaces/application/authorization.rb +107 -0
  87. data/app/controllers/lesli/interfaces/application/customization.rb +46 -0
  88. data/app/controllers/lesli/interfaces/application/logger.rb +133 -0
  89. data/app/controllers/lesli/interfaces/application/requester.rb +84 -0
  90. data/app/controllers/lesli/interfaces/application/responder.rb +132 -0
  91. data/app/controllers/lesli/profiles_controller.rb +60 -0
  92. data/app/controllers/users/confirmations_controller.rb +30 -0
  93. data/app/controllers/users/omniauth_callbacks_controller.rb +30 -0
  94. data/app/controllers/users/passwords_controller.rb +34 -0
  95. data/app/controllers/users/registrations_controller.rb +62 -0
  96. data/app/controllers/users/sessions_controller.rb +142 -0
  97. data/app/controllers/users/unlocks_controller.rb +30 -0
  98. data/app/helpers/lesli/assets_helper.rb +92 -0
  99. data/app/helpers/lesli/customization_helper.rb +84 -0
  100. data/app/helpers/lesli/general_helper.rb +83 -0
  101. data/app/helpers/lesli/navigation_helper.rb +349 -0
  102. data/app/helpers/lesli/profiles_helper.rb +4 -0
  103. data/app/helpers/lesli/system_helper.rb +57 -0
  104. data/app/lib/date2.rb +192 -0
  105. data/app/lib/lesli/system.rb +80 -0
  106. data/app/models/concerns/account_engines.rb +249 -0
  107. data/app/models/concerns/user_activities.rb +163 -0
  108. data/app/models/concerns/user_extensions.rb +129 -0
  109. data/app/models/concerns/user_guard.rb +278 -0
  110. data/app/models/concerns/user_polyfill.rb +134 -0
  111. data/app/models/lesli/account/log.rb +57 -0
  112. data/app/models/lesli/account.rb +76 -0
  113. data/app/models/lesli/application_lesli_record.rb +37 -0
  114. data/app/models/lesli/profile.rb +4 -0
  115. data/app/models/lesli/system_controller/action.rb +37 -0
  116. data/app/models/lesli/system_controller.rb +37 -0
  117. data/app/models/lesli/user/agent.rb +37 -0
  118. data/app/models/lesli/user/log.rb +38 -0
  119. data/app/models/lesli/user/request.rb +37 -0
  120. data/app/models/lesli/user/session.rb +105 -0
  121. data/app/models/lesli/user.rb +162 -0
  122. data/app/services/lesli/application_lesli_service.rb +168 -0
  123. data/app/services/lesli/user/session_service.rb +62 -0
  124. data/app/validators/lesli/application_lesli_validator.rb +67 -0
  125. data/app/validators/lesli/users_validator.rb +217 -0
  126. data/app/views/devise/confirmations/new.html.erb +16 -0
  127. data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
  128. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  129. data/app/views/devise/mailer/password_change.html.erb +3 -0
  130. data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
  131. data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
  132. data/app/views/devise/passwords/edit.html.erb +25 -0
  133. data/app/views/devise/passwords/new.html.erb +16 -0
  134. data/app/views/devise/registrations/edit.html.erb +43 -0
  135. data/app/views/devise/registrations/new.html.erb +29 -0
  136. data/app/views/devise/sessions/new.html.erb +178 -0
  137. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  138. data/app/views/devise/shared/_links.html.erb +25 -0
  139. data/app/views/devise/unlocks/new.html.erb +16 -0
  140. data/app/views/lesli/devise/sessions/_form.html.erb +17 -0
  141. data/app/views/lesli/devise/sessions/_session.html.erb +2 -0
  142. data/app/views/lesli/devise/sessions/edit.html.erb +10 -0
  143. data/app/views/lesli/devise/sessions/index.html.erb +14 -0
  144. data/app/views/lesli/devise/sessions/new.html.erb +9 -0
  145. data/app/views/lesli/devise/sessions/show.html.erb +10 -0
  146. data/app/views/lesli/layouts/application-devise.html.erb +58 -0
  147. data/app/views/lesli/layouts/application-lesli.html.erb +57 -0
  148. data/app/views/lesli/layouts/application-public.html.erb +59 -0
  149. data/app/views/lesli/partials/_application-analytics.html.erb +71 -0
  150. data/app/views/lesli/partials/_application-data.html.erb +102 -0
  151. data/app/views/lesli/partials/_application-head.html.erb +56 -0
  152. data/app/views/lesli/partials/_application-lesli-chatbox.html.erb +35 -0
  153. data/app/views/lesli/partials/_application-lesli-content.html.erb +35 -0
  154. data/app/views/lesli/partials/_application-lesli-engines.html.erb +83 -0
  155. data/app/views/lesli/partials/_application-lesli-footer.html.erb +82 -0
  156. data/app/views/lesli/partials/_application-lesli-header.html.erb +79 -0
  157. data/app/views/lesli/partials/_application-lesli-icons.html.erb +1 -0
  158. data/app/views/lesli/partials/_application-lesli-javascript.html.erb +57 -0
  159. data/app/views/lesli/partials/_application-lesli-navigation.html.erb +52 -0
  160. data/app/views/lesli/partials/_application-lesli-notices.html.erb +43 -0
  161. data/app/views/lesli/partials/_application-lesli-panels.html.erb +58 -0
  162. data/app/views/lesli/partials/_application-lesli-scss.html.erb +60 -0
  163. data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +50 -0
  164. data/app/views/lesli/partials/_application-public-footer.html.erb +51 -0
  165. data/app/views/lesli/partials/_application-public-javascript.html.erb +51 -0
  166. data/app/views/lesli/partials/_application-public-scss.html.erb +35 -0
  167. data/app/views/lesli/profiles/_form.html.erb +17 -0
  168. data/app/views/lesli/profiles/_profile.html.erb +2 -0
  169. data/app/views/lesli/profiles/edit.html.erb +10 -0
  170. data/app/views/lesli/profiles/index.html.erb +14 -0
  171. data/app/views/lesli/profiles/new.html.erb +9 -0
  172. data/app/views/lesli/profiles/show.html.erb +10 -0
  173. data/app/views/lesli/wrappers/_application-auth.html.erb +65 -0
  174. data/config/initializers/devise.rb +334 -0
  175. data/config/initializers/lesli_defaults.rb +100 -0
  176. data/config/locales/devise.en.yml +65 -0
  177. data/config/routes.rb +52 -0
  178. data/db/migrate/v1.0/0010000110_create_lesli_accounts.rb +70 -0
  179. data/db/migrate/v1.0/0010000210_create_lesli_roles.rb +59 -0
  180. data/db/migrate/v1.0/0010000310_create_lesli_users.rb +97 -0
  181. data/db/migrate/v1.0/0010000610_create_lesli_system_controllers.rb +44 -0
  182. data/db/migrate/v1.0/0010000710_create_lesli_system_controller_actions.rb +43 -0
  183. data/db/migrate/v1.0/0010001210_create_lesli_account_activities.rb +50 -0
  184. data/db/migrate/v1.0/0010001310_create_lesli_account_logs.rb +45 -0
  185. data/db/migrate/v1.0/0010003210_create_lesli_user_sessions.rb +51 -0
  186. data/db/migrate/v1.0/0010003310_create_lesli_user_requests.rb +48 -0
  187. data/db/migrate/v1.0/0010003610_create_lesli_user_logs.rb +45 -0
  188. data/db/migrate/v1.0/0010004010_create_lesli_user_agents.rb +46 -0
  189. data/db/seed/development/accounts.rb +47 -0
  190. data/db/seed/development/users.rb +53 -0
  191. data/db/seed/development.rb +35 -0
  192. data/db/seed/production.rb +35 -0
  193. data/db/seed/test.rb +35 -0
  194. data/db/seed/tools.rb +60 -0
  195. data/db/seeds.rb +64 -0
  196. data/db/structure/00000000_locations.json +32 -0
  197. data/db/structure/00000000_people.json +34 -0
  198. data/db/structure/00000003_actions.json +14 -0
  199. data/db/structure/00000004_activities.json +20 -0
  200. data/db/structure/00000005_discussions.json +8 -0
  201. data/db/structure/00000006_files.json +32 -0
  202. data/db/structure/00000007_subscribers.json +11 -0
  203. data/db/structure/00000008_custom_fields.json +8 -0
  204. data/db/structure/00000201_workflows.json +17 -0
  205. data/db/structure/00000202_workflow_statuses.json +24 -0
  206. data/db/structure/00000203_workflow_associations.json +14 -0
  207. data/db/structure/00000204_workflow_actions.json +39 -0
  208. data/db/structure/00000205_workflow_checks.json +27 -0
  209. data/db/structure/00000301_custom_fields.json +38 -0
  210. data/db/structure/00000401_custom_validations.json +14 -0
  211. data/db/structure/00000402_custom_validation_rules.json +23 -0
  212. data/db/structure/00000403_custom_validation_fields.json +14 -0
  213. data/db/structure/00000501_dashboards.json +14 -0
  214. data/db/structure/00000502_dashboard_components.json +23 -0
  215. data/db/tables/0010001010_create_account_settings.rb +42 -0
  216. data/db/tables/0010001110_create_account_locations.rb +64 -0
  217. data/db/tables/0010001410_create_account_files.rb +52 -0
  218. data/db/tables/0010001510_create_account_currencies.rb +48 -0
  219. data/db/tables/0010001610_create_account_currency_exchange_rates.rb +54 -0
  220. data/db/tables/0010003010_create_user_details.rb +49 -0
  221. data/db/tables/0010003110_create_user_settings.rb +44 -0
  222. data/db/tables/0010003410_create_user_activities.rb +51 -0
  223. data/db/tables/0010003510_create_user_roles.rb +43 -0
  224. data/db/tables/0010003710_create_user_codes.rb +43 -0
  225. data/db/tables/0010003810_create_user_shortcuts.rb +46 -0
  226. data/db/tables/0010004110_create_user_tokens.rb +45 -0
  227. data/db/tables/0010005010_create_descriptors.rb +45 -0
  228. data/db/tables/0010005110_create_descriptor_privileges.rb +44 -0
  229. data/db/tables/0010005210_create_descriptor_activities.rb +51 -0
  230. data/db/tables/0010005510_create_role_descriptors.rb +44 -0
  231. data/db/tables/0010005610_create_role_activities.rb +50 -0
  232. data/db/tables/0010005710_create_role_privileges.rb +45 -0
  233. data/db/tables/0010009010_create_feedbacks.rb +56 -0
  234. data/lib/assets/javascripts/lesli/i18n.js +1095 -0
  235. data/lib/assets/javascripts/lesli/translations.js +15 -0
  236. data/lib/lesli/configuration.rb +45 -0
  237. data/lib/lesli/engine.rb +62 -0
  238. data/lib/lesli/version.rb +34 -0
  239. data/lib/lesli.rb +6 -0
  240. data/lib/sass/lesli/bulma/loader.scss +84 -0
  241. data/lib/sass/lesli/cloud-objects/discussion.scss +77 -0
  242. data/lib/sass/lesli/cloud-objects/file.scss +138 -0
  243. data/lib/sass/lesli/components/editor-richtext.scss +78 -0
  244. data/lib/sass/lesli/components/keypad.scss +109 -0
  245. data/lib/sass/lesli/devise/confirmations.scss.erb +75 -0
  246. data/lib/sass/lesli/devise/passwords.scss.erb +86 -0
  247. data/lib/sass/lesli/devise/registrations.scss.erb +50 -0
  248. data/lib/sass/lesli/devise/sessions.scss +36 -0
  249. data/lib/sass/lesli/elements/autocomplete.scss +72 -0
  250. data/lib/sass/lesli/elements/avatar.scss +48 -0
  251. data/lib/sass/lesli/elements/calendar.scss +47 -0
  252. data/lib/sass/lesli/elements/card.scss +37 -0
  253. data/lib/sass/lesli/elements/content.scss +37 -0
  254. data/lib/sass/lesli/elements/empty.scss +43 -0
  255. data/lib/sass/lesli/elements/file-uploader.scss +74 -0
  256. data/lib/sass/lesli/elements/form.scss +43 -0
  257. data/lib/sass/lesli/elements/gallery.scss +98 -0
  258. data/lib/sass/lesli/elements/header.scss +44 -0
  259. data/lib/sass/lesli/elements/input-tag.scss +73 -0
  260. data/lib/sass/lesli/elements/loading.scss +63 -0
  261. data/lib/sass/lesli/elements/map.scss +107 -0
  262. data/lib/sass/lesli/elements/msg.scss +77 -0
  263. data/lib/sass/lesli/elements/navbar.scss +115 -0
  264. data/lib/sass/lesli/elements/panel.scss +65 -0
  265. data/lib/sass/lesli/elements/tab.scss +48 -0
  266. data/lib/sass/lesli/elements/table.scss +118 -0
  267. data/lib/sass/lesli/elements/toggle.scss +102 -0
  268. data/lib/sass/lesli/elements/toolbar.scss +66 -0
  269. data/lib/sass/lesli/fonts/families.scss +47 -0
  270. data/lib/sass/lesli/fonts/mdicons.scss +84 -0
  271. data/lib/sass/lesli/fonts/remixicons.scss +2602 -0
  272. data/lib/sass/lesli/helpers/display.scss +44 -0
  273. data/lib/sass/lesli/helpers/tooltip.scss +91 -0
  274. data/lib/sass/lesli/layouts/application-announcements.scss +40 -0
  275. data/lib/sass/lesli/layouts/application-component.scss +50 -0
  276. data/lib/sass/lesli/layouts/application-engines.scss +155 -0
  277. data/lib/sass/lesli/layouts/application-footer.scss +102 -0
  278. data/lib/sass/lesli/layouts/application-header.scss +152 -0
  279. data/lib/sass/lesli/layouts/application-navbar.scss +61 -0
  280. data/lib/sass/lesli/layouts/application-search.scss +71 -0
  281. data/lib/sass/lesli/layouts/application-sidebar.scss +219 -0
  282. data/lib/sass/lesli/overrides/sweetalert.scss +106 -0
  283. data/lib/sass/lesli/pages/dashboards.scss +57 -0
  284. data/lib/sass/lesli/pages/invites.scss +81 -0
  285. data/lib/sass/lesli/pages/mfas.scss +36 -0
  286. data/lib/sass/lesli/pages/otps.scss +36 -0
  287. data/lib/sass/lesli/pages/passes.scss +35 -0
  288. data/lib/sass/lesli/panels/panel-announcements.scss +56 -0
  289. data/lib/sass/lesli/panels/panel-notification.scss +67 -0
  290. data/lib/sass/lesli/panels/panel-profile.scss +62 -0
  291. data/lib/sass/lesli/panels/panel-tasks.scss +41 -0
  292. data/lib/sass/lesli/panels/panel-ticket.scss +57 -0
  293. data/lib/sass/lesli/settings/variables.scss +148 -0
  294. data/lib/sass/lesli/shared/workflow-status-progress.scss +135 -0
  295. data/lib/sass/lesli/templates/application.scss +141 -0
  296. data/lib/sass/lesli/templates/dashboards.scss +32 -0
  297. data/lib/sass/lesli/templates/devise.scss +185 -0
  298. data/lib/sass/lesli/templates/empty.scss +42 -0
  299. data/lib/sass/lesli/templates/pdf.scss +45 -0
  300. data/lib/sass/lesli/templates/public.scss +71 -0
  301. data/lib/tasks/db.rb +75 -0
  302. data/lib/tasks/lesli/controllers.rake +103 -0
  303. data/lib/tasks/lesli_tasks.rake +23 -0
  304. data/lib/vue/application.js +269 -0
  305. data/lib/vue/apps/cloudobjects/action.vue +193 -0
  306. data/lib/vue/apps/cloudobjects/discussion/content.vue +60 -0
  307. data/lib/vue/apps/cloudobjects/discussion/element.vue +132 -0
  308. data/lib/vue/apps/cloudobjects/discussion/filters.vue +108 -0
  309. data/lib/vue/apps/cloudobjects/discussion/new.vue +130 -0
  310. data/lib/vue/apps/cloudobjects/discussion.vue +98 -0
  311. data/lib/vue/apps/cloudobjects/file/grid.vue +215 -0
  312. data/lib/vue/apps/cloudobjects/file/list.vue +106 -0
  313. data/lib/vue/apps/cloudobjects/file.vue +145 -0
  314. data/lib/vue/apps/dashboards/apps/edit.vue +105 -0
  315. data/lib/vue/apps/dashboards/apps/index.vue +114 -0
  316. data/lib/vue/apps/dashboards/apps/new.vue +89 -0
  317. data/lib/vue/apps/dashboards/apps/show.vue +76 -0
  318. data/lib/vue/apps/dashboards/components/form.vue +267 -0
  319. data/lib/vue/apps/dashboards/components/preview.vue +172 -0
  320. data/lib/vue/apps/workflows2/apps/actions/form.vue +232 -0
  321. data/lib/vue/apps/workflows2/apps/actions/forms/chatroom-form.vue +103 -0
  322. data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-clone-form.vue +125 -0
  323. data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-file-form.vue +102 -0
  324. data/lib/vue/apps/workflows2/apps/actions/forms/email-form.vue +190 -0
  325. data/lib/vue/apps/workflows2/apps/actions/forms/notification-form.vue +124 -0
  326. data/lib/vue/apps/workflows2/apps/actions/forms/send-cloud-object-file.vue +170 -0
  327. data/lib/vue/apps/workflows2/apps/actions/forms/task-form.vue +258 -0
  328. data/lib/vue/apps/workflows2/apps/actions/index.vue +146 -0
  329. data/lib/vue/apps/workflows2/apps/checks/form.vue +200 -0
  330. data/lib/vue/apps/workflows2/apps/checks/index.vue +160 -0
  331. data/lib/vue/apps/workflows2/apps/index.vue +177 -0
  332. data/lib/vue/apps/workflows2/apps/new.vue +97 -0
  333. data/lib/vue/apps/workflows2/apps/show.vue +146 -0
  334. data/lib/vue/apps/workflows2/components/associations.vue +215 -0
  335. data/lib/vue/apps/workflows2/components/chart.vue +91 -0
  336. data/lib/vue/apps/workflows2/components/workflow-form.vue +466 -0
  337. data/lib/vue/apps/workflows2/components/workflow-status-dropdown.vue +129 -0
  338. data/lib/vue/devise/confirmations.js +33 -0
  339. data/lib/vue/devise/passwords.js +137 -0
  340. data/lib/vue/devise/registrations.js +162 -0
  341. data/lib/vue/devise/sessions.js +143 -0
  342. data/lib/vue/layouts/application-announcements.vue +78 -0
  343. data/lib/vue/layouts/application-engines.vue +66 -0
  344. data/lib/vue/layouts/application-footer.vue +123 -0
  345. data/lib/vue/layouts/application-header.vue +213 -0
  346. data/lib/vue/layouts/application-navbar.vue +110 -0
  347. data/lib/vue/layouts/application-search.vue +86 -0
  348. data/lib/vue/layouts/application-sidebar.vue +63 -0
  349. data/lib/vue/layouts/dashboard-component.vue +62 -0
  350. data/lib/vue/pages/errors/app.js +32 -0
  351. data/lib/vue/pages/invites/app.js +76 -0
  352. data/lib/vue/pages/mfas/application.js +77 -0
  353. data/lib/vue/pages/onboarding/application.js +45 -0
  354. data/lib/vue/pages/onboarding/components/address.vue +120 -0
  355. data/lib/vue/pages/onboarding/components/buttons.vue +67 -0
  356. data/lib/vue/pages/onboarding/components/contact.vue +148 -0
  357. data/lib/vue/pages/onboarding/components/date-time.vue +265 -0
  358. data/lib/vue/pages/onboarding/components/finish.vue +62 -0
  359. data/lib/vue/pages/onboarding/components/general-info.vue +93 -0
  360. data/lib/vue/pages/onboarding/components/indicators.vue +78 -0
  361. data/lib/vue/pages/onboarding/components/welcome.vue +66 -0
  362. data/lib/vue/pages/onboarding/show.vue +67 -0
  363. data/lib/vue/pages/onboarding/store.js +165 -0
  364. data/lib/vue/pages/otps/application.js +90 -0
  365. data/lib/vue/pages/passes/application.js +80 -0
  366. data/lib/vue/pages/websites/application.js +34 -0
  367. data/lib/vue/panels/panel-announcements.vue +248 -0
  368. data/lib/vue/panels/panel-files.vue +281 -0
  369. data/lib/vue/panels/panel-notifications.vue +106 -0
  370. data/lib/vue/panels/panel-profile.vue +76 -0
  371. data/lib/vue/panels/panel-tasks.vue +124 -0
  372. data/lib/vue/panels/panel-tickets.vue +181 -0
  373. data/lib/vue/public.js +85 -0
  374. data/lib/vue/stores/announcements.js +75 -0
  375. data/lib/vue/stores/cloud-bell/notification.js +114 -0
  376. data/lib/vue/stores/cloudobjects/action.js +181 -0
  377. data/lib/vue/stores/cloudobjects/discussion.js +221 -0
  378. data/lib/vue/stores/cloudobjects/file.js +205 -0
  379. data/lib/vue/stores/dashboard.js +251 -0
  380. data/lib/vue/stores/firebase.js +163 -0
  381. data/lib/vue/stores/layout.js +60 -0
  382. data/lib/vue/stores/panels/announcements.js +153 -0
  383. data/lib/vue/stores/panels/task.js +66 -0
  384. data/lib/vue/stores/panels/tickets.js +129 -0
  385. data/lib/vue/stores/profile.js +90 -0
  386. data/lib/vue/stores/search.js +154 -0
  387. data/lib/vue/stores/services/translator.js +87 -0
  388. data/lib/vue/stores/workflow.js +185 -0
  389. data/lib/vue/stores/workflow2.js +345 -0
  390. data/lib/vue/stores/workflows/actions.js +327 -0
  391. data/lib/vue/stores/workflows/associations.js +130 -0
  392. data/lib/vue/stores/workflows/checks.js +210 -0
  393. data/lib/webpack/base.js +182 -0
  394. data/lib/webpack/core.js +80 -0
  395. data/lib/webpack/engines.js +162 -0
  396. data/license +674 -0
  397. data/readme.md +120 -0
  398. metadata +554 -0
@@ -0,0 +1,345 @@
1
+ /*
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Your Smart Business Assistant.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+
32
+ */
33
+
34
+
35
+ // · This store is needed to make http requests, manage the reactivity
36
+ // · of a workflow.
37
+
38
+ import { defineStore } from "pinia"
39
+ import { toHandlers } from "vue"
40
+
41
+ export const useWorkflow = defineStore("core.shared.workflow", {
42
+ state: () => {
43
+ return {
44
+ transitionOptions: [],
45
+ workflows: [],
46
+ loading: false,
47
+ cloudModule: null,
48
+ cloudObject: null,
49
+ cloudObjectId: null,
50
+ workflow: {},
51
+ new_status_name: '',
52
+ deleted_workflow_statuses: [],
53
+ selected_status: {},
54
+ status_select: [],
55
+ status_transition: null,
56
+ transition_statuses: [],
57
+ list_status: [],
58
+
59
+ workflowId: "",
60
+ workflowStatusId: "",
61
+ workflow_statuses: [],
62
+ currentStatus: {}
63
+ }
64
+ },
65
+ actions: {
66
+
67
+ /**
68
+ * @param {*} url is the url of the api to be called
69
+ * @description This action is used to fetch the list of transition options
70
+ */
71
+ fetchWorkflows(url) {
72
+ this.loading = true
73
+
74
+ if (!url) url = this.url[this.cloudModule](this.cloudObject)
75
+
76
+ this.http.get(url).then(result => {
77
+ this.workflows = result.workflows
78
+ }).catch(error => {
79
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
80
+ }).finally(() => {
81
+ this.loading = false
82
+ })
83
+ },
84
+
85
+ /**
86
+ * @param {string} stringToFind String to search for
87
+ * @description This action is used to search for a string in the workflows
88
+ */
89
+ searchWorkflows(stringToFind) {
90
+ const workflowsUrl = this.url[this.cloudModule](this.cloudObject).search(stringToFind)
91
+ this.fetchWorkflows(workflowsUrl)
92
+ },
93
+
94
+ /**
95
+ * @description This action is used to get the statuses from a workflow
96
+ */
97
+ async fetchWorkflowStatuses(){
98
+
99
+ this.loading = true
100
+
101
+
102
+ let cloudObjectScope = null
103
+
104
+ if (this.cloudObject.split("/").length >= 2) {
105
+ cloudObjectScope = this.cloudObject.split("/")[0]
106
+ }
107
+
108
+
109
+ let path = "workflows/:workflow_id/statuses"
110
+
111
+ if (cloudObjectScope) {
112
+ path = cloudObjectScope + "/" + path
113
+ }
114
+
115
+ let url = this.url[this.cloudModule](path, {
116
+ workflow_id: this.workflowId,
117
+ })
118
+
119
+ return this.http.get(url).then(result => {
120
+ this.workflow_statuses = result.sort((a, b) => a.number - b.number)
121
+ }).catch(error => {
122
+ this.msg.danger(I18n.t("core.shared").messages_danger_getting_transition_options)
123
+ }).finally(() => {
124
+ this.loading = false
125
+ })
126
+ },
127
+
128
+ /**
129
+ * @description This action is used to get the current status from workflow statuses
130
+ */
131
+ getCurrentStatus(){
132
+ this.currentStatus = this.workflow_statuses.find((status)=> status.id === this.workflowStatusId)
133
+ },
134
+
135
+ /**
136
+ * @description This action is used to fetch the list of transition options
137
+ */
138
+ fetchTransitionOptions(url) {
139
+ this.loading = true
140
+
141
+ // · If the cloud object has / split the url
142
+ let cloudObject = this.cloudObject.split("/").pop()
143
+ let cloudObjectScope = null
144
+
145
+ if (this.cloudObject.split("/").length >= 2) {
146
+ cloudObjectScope = this.cloudObject.split("/")[0]
147
+ }
148
+
149
+ // · Singularize the cloud object
150
+ let cloudObjectSingular = this.utils.singularize(cloudObject)
151
+
152
+ let path = "workflows/resources/transition-options/:cloudObject/:cloudObjectId"
153
+
154
+ if (cloudObjectScope) {
155
+ path = cloudObjectScope + "/" + path
156
+ }
157
+
158
+ if (!url) url = this.url[this.cloudModule](path, {
159
+ cloudObject: cloudObjectSingular,
160
+ cloudObjectId: this.cloudObjectId,
161
+ })
162
+
163
+ this.http.get(url).then(result => {
164
+ if (result === "") return this.transitionOptions = []
165
+ this.transitionOptions = result
166
+ }).catch(error => {
167
+ if (error?.message === "Not found") return this.transitionOptions = []
168
+ this.msg.danger(I18n.t("core.shared").messages_danger_getting_transition_options)
169
+ }).finally(() => {
170
+ this.loading = false
171
+ })
172
+ },
173
+
174
+ /**
175
+ * @param {*} payload
176
+ * @description This action is used to update the cloud object status
177
+ */
178
+ updateStatus(payload) {
179
+ this.loading = true
180
+
181
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:cloudObjectId`, { cloudObjectId: this.cloudObjectId })
182
+
183
+ this.http.put(url, payload).then(() => {
184
+ this.msg.success(I18n.t("core.shared").messages_success_status_changed)
185
+ this.fetchTransitionOptions()
186
+ }).catch(error => {
187
+ this.msg.danger(I18n.t("core.shared").messages_danger_updating_status)
188
+ }).finally(() => {
189
+ this.loading = false
190
+ })
191
+ },
192
+
193
+ /**
194
+ * @description This action is used to reset the store
195
+ */
196
+ reset() {
197
+ this.transitionOptions = []
198
+ this.workflows = []
199
+ this.loading = false
200
+ this.cloudModule = null
201
+ this.cloudObject = null
202
+ this.cloudObjectId = null
203
+ },
204
+ /**
205
+ * @description This action is used to get the information from a workflow
206
+ */
207
+ async fetchWorkflow (worfkflow_id){
208
+ this.loading = true
209
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId`, { workflowId: worfkflow_id })
210
+
211
+ return this.http.get(url).then(result => {
212
+ this.workflow = result
213
+ this.loading = false
214
+ }).catch(error => {
215
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
216
+ })
217
+ },
218
+ /**
219
+ * @description This action is used to post a workflow
220
+ */
221
+ async postWorkflow (){
222
+ this.loading = true
223
+ let statuses_attributes = this.workflow.statuses
224
+
225
+ let data = {
226
+ workflow: {
227
+ name: this.workflow.name,
228
+ statuses_attributes: statuses_attributes
229
+ }
230
+ }
231
+
232
+ const url = this.url[this.cloudModule](`${this.cloudObject}`)
233
+
234
+ return this.http.post(url, data).then(result => {
235
+ this.workflow = result
236
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
237
+ this.loading = false
238
+ }).catch(error => {
239
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
240
+ }).finally(()=>{
241
+ this.loading = false
242
+ })
243
+ },
244
+ /**
245
+ * @description This action is used to update workflow info
246
+ */
247
+ updateWorkflow(){
248
+
249
+ this.loading = true
250
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId`, { workflowId: this.workflow.id })
251
+
252
+ this.http.put(url, {
253
+ workflow: {
254
+ name: this.workflow.name
255
+ }
256
+ }).then(result => {
257
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
258
+ }).catch(error => {
259
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
260
+ }).finally(()=>{
261
+ this.loading = false
262
+ })
263
+ },
264
+ /**
265
+ * @description This action is used to post a new status for the actual workflow
266
+ */
267
+ async postStatus(){
268
+ this.loading = true
269
+ let new_status = {
270
+ next_statuses: '',
271
+ status_type: 'normal',
272
+ number: 0,
273
+ name: this.new_status_name
274
+ }
275
+
276
+ let data = {
277
+ workflow_status: new_status
278
+ }
279
+
280
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId/statuses`, { workflowId: this.workflow.id })
281
+
282
+ return this.http.post(url, data).then(result => {
283
+ new_status.id = result.id
284
+ this.new_status_name = ''
285
+ }).catch(error => {
286
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
287
+ }).finally(()=>{
288
+ this.loading = false
289
+ })
290
+
291
+ },
292
+ /**
293
+ * @description This action is used to post delete the actual workflow
294
+ */
295
+ async deleteWorkflow(){
296
+ this.loading = true
297
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId`, { workflowId: this.workflow.id })
298
+
299
+ return this.http.delete(url).then(result => {
300
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
301
+ this.loading = false
302
+ }).catch(error => {
303
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
304
+ })
305
+ },
306
+ /**
307
+ * @description This action is used to update statuses from a workflow
308
+ */
309
+ updateWorkflowStatuses(){
310
+
311
+ this.loading = true
312
+
313
+ let statuses_attributes = Object.values(this.workflow.statuses).concat(this.deleted_workflow_statuses)
314
+
315
+ let data = {
316
+ workflow: {
317
+ name: this.workflow.name,
318
+ statuses_attributes: statuses_attributes
319
+ }
320
+ }
321
+ const url = this.url[this.cloudModule](`${this.cloudObject}/:workflowId`, { workflowId: this.workflow.id })
322
+
323
+ this.http.put(url, data).then(result => {
324
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
325
+ this.deleted_workflow_statuses = []
326
+ }).catch(error => {
327
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
328
+ }).finally(()=>{
329
+ this.loading = false
330
+ })
331
+
332
+ },
333
+ /**
334
+ * @description This action is used to post reset workflow values for the workflow form
335
+ */
336
+ resetWorkflow(){
337
+ this.workflow = {}
338
+ this.selected_status = {},
339
+ this.status_select = [],
340
+ this.status_transition = null,
341
+ this.transition_statuses = [],
342
+ this.list_status = []
343
+ }
344
+ }
345
+ })
@@ -0,0 +1,327 @@
1
+ /*
2
+
3
+ Lesli
4
+
5
+ Copyright (c) 2023, Lesli Technologies, S. A.
6
+
7
+ This program is free software: you can redistribute it and/or modify
8
+ it under the terms of the GNU General Public License as published by
9
+ the Free Software Foundation, either version 3 of the License, or
10
+ (at your option) any later version.
11
+
12
+ This program is distributed in the hope that it will be useful,
13
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
14
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
15
+ GNU General Public License for more details.
16
+
17
+ You should have received a copy of the GNU General Public License
18
+ along with this program. If not, see http://www.gnu.org/licenses/.
19
+
20
+ Lesli · Your Smart Business Assistant.
21
+
22
+ Made with ♥ by https://www.lesli.tech
23
+ Building a better future, one line of code at a time.
24
+
25
+ @contact hello@lesli.tech
26
+ @website https://lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+
32
+ */
33
+
34
+
35
+ // · This store is needed to make http requests, manage the reactivity
36
+ // · of a workflow.
37
+
38
+ import { defineStore } from "pinia"
39
+
40
+ import { useWorkflow } from "Lesli/stores/shared/workflow"
41
+ import { useRouter } from "vue-router"
42
+
43
+ export const useActions = defineStore("core.shared.workflow.actions", {
44
+ state: () => {
45
+ return {
46
+ storeWorkflow: useWorkflow(),
47
+ actions: [],
48
+ loading: false,
49
+ action: {
50
+ active: true,
51
+ initial_status_id: null,
52
+ final_status_id: null,
53
+ name: '',
54
+ action_type: null,
55
+ execute_immediately: false,
56
+ template_path: null,
57
+ input_data: {},
58
+ system_data: {},
59
+ concerning_users: {
60
+ list: [
61
+ {}
62
+ ],
63
+ type: ""
64
+ },
65
+ configuration: {}
66
+ },
67
+ concerning_users: {
68
+ type: null
69
+ },
70
+ options: {
71
+ statuses: [],
72
+ action_types: [],
73
+ concerning_user_types: [],
74
+ users: [],
75
+ task_importances: [],
76
+ task_types: []
77
+ },
78
+ file_options: {
79
+ templates: {},
80
+ file_types: []
81
+ },
82
+ clone_options: {},
83
+ action_unavailable: false
84
+ }
85
+ },
86
+ actions: {
87
+ /**
88
+ * @description This action is used to fetch the list of actions for a workflow
89
+ */
90
+ fetchActions() {
91
+ this.loading = true
92
+
93
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions`, { workflowId: this.storeWorkflow.workflow.id })
94
+
95
+ this.http.get(url).then(result => {
96
+ this.actions = result
97
+ }).catch(error => {
98
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
99
+ }).finally(() => {
100
+ this.loading = false
101
+ })
102
+ },
103
+
104
+ /**
105
+ * @description This action is used to reset the store
106
+ */
107
+ reset() {
108
+ this.action = {
109
+ active: true,
110
+ initial_status_id: null,
111
+ final_status_id: null,
112
+ name: '',
113
+ action_type: null,
114
+ execute_immediately: false,
115
+ template_path: null,
116
+ input_data: {},
117
+ system_data: {},
118
+ concerning_users: {
119
+ list: [
120
+ {}
121
+ ],
122
+ type: ""
123
+ },
124
+ configuration: {},
125
+ concerning_user_types: ""
126
+ }
127
+ },
128
+ /**
129
+ * @description This action is used to get the information from a action
130
+ * @param {Integer} action_id id of the action to be fetched
131
+ */
132
+ fetchAction (action_id){
133
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions/:actionId`, { workflowId: this.storeWorkflow.workflow.id, actionId: action_id })
134
+
135
+ this.http.get(url).then(result => {
136
+ this.action = result
137
+ }).catch(error => {
138
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
139
+ })
140
+ },
141
+ /**
142
+ * @description This action is used to post an action for a workflow
143
+ */
144
+ postAction (){
145
+
146
+ let data = {
147
+ workflow_action: this.action
148
+ }
149
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions`, { workflowId: this.storeWorkflow.workflow.id })
150
+
151
+ this.http.post(url, data).then(result => {
152
+ this.action = {}
153
+ this.actions.push(result)
154
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
155
+ }).catch(error => {
156
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
157
+ }).finally(()=>{
158
+ this.loading = false
159
+ })
160
+ },
161
+ /**
162
+ * @description This action is used to update an action for a workflow
163
+ */
164
+ updateAction (){
165
+
166
+ let data = {
167
+ workflow_action: this.action
168
+ }
169
+
170
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions/:actionId`, { workflowId: this.storeWorkflow.workflow.id, actionId: this.action.id })
171
+
172
+ this.http.put(url, data).then(result => {
173
+ this.action = result
174
+ this.msg.success(I18n.t("core.users.messages_success_operation"))
175
+ }).catch(error => {
176
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
177
+ }).finally(()=>{
178
+ this.loading = false
179
+ })
180
+ },
181
+
182
+ /**
183
+ * @description This action is used to translate the options for an enum
184
+ * @param {Object, String, String}
185
+ */
186
+ translateEnum( translations, enum_prefix, value){
187
+ const new_value = translations[`${enum_prefix}_${value}`]
188
+ if(new_value){
189
+ return new_value
190
+ }
191
+
192
+ return value
193
+ },
194
+ /**
195
+ * @description This action is used to get options for check form
196
+ */
197
+ getOptions(){
198
+ this.options = {
199
+ statuses: [],
200
+ action_types: [],
201
+ concerning_user_types: []
202
+ }
203
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions/options`, { workflowId: this.storeWorkflow.workflow.id })
204
+
205
+ this.loading = true
206
+
207
+ this.http.get(url).then(result => {
208
+
209
+ Object.values(result["statuses"]).forEach((status)=>{
210
+ this.options["statuses"].push({
211
+ label: status.name,
212
+ value: status.id
213
+ })
214
+ })
215
+
216
+ result["action_types"].forEach((type)=>{
217
+ this.options["action_types"].push({
218
+ label: this.translateEnum(I18n.t('core.workflow/actions'), 'column_enum_action_type', type.text),
219
+ value: type.value
220
+ })
221
+ })
222
+
223
+ result["concerning_user_types"].forEach((type)=>{
224
+ this.options["concerning_user_types"].push({
225
+ label: this.translateEnum(I18n.t('core.workflow/actions'), 'column_enum_action_type', type.text),
226
+ value: type.value
227
+ })
228
+ })
229
+
230
+ }).catch(error => {
231
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
232
+ }).finally(()=>{
233
+ this.loading = false
234
+ })
235
+ },
236
+ /**
237
+ * @description This action is used to get options for users to assign
238
+ */
239
+ getUsers(){
240
+ this.http.get(this.url.admin("users/list")).then(result => {
241
+ this.options["users"] = result
242
+ }).catch(error => {
243
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
244
+ })
245
+ },
246
+ /**
247
+ * @description This action is used to get options for the task form
248
+ */
249
+ getTasksOptions (){
250
+ this.loading = true
251
+
252
+ this.options.task_importances = []
253
+ this.options.task_types = []
254
+
255
+ this.http.get(this.url.focus("tasks/options")).then(result => {
256
+
257
+ result["task_types"].forEach((type)=>{
258
+ this.options["task_types"].push({
259
+ label: type.text,
260
+ value: type.value
261
+ })
262
+ })
263
+
264
+ result["importances"].forEach((importance)=>{
265
+ this.options["task_importances"].push({
266
+ label: importance.text,
267
+ value: importance.value
268
+ })
269
+ })
270
+
271
+ this.loading = false
272
+ }).catch(error => {
273
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
274
+ })
275
+
276
+ },
277
+ /**
278
+ * @description This action is used to get options for creating a file
279
+ */
280
+ getCloudObjectFileOptions(){
281
+ this.loading = true
282
+
283
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions/resources/options_create_cloud_object_file`, { workflowId: this.storeWorkflow.workflow.id })
284
+
285
+ this.http.get(url).then(result => {
286
+ if(result && result.templates.length > 0){
287
+ this.file_options.templates = result.templates
288
+ this.file_options.file_types = result.file_types
289
+ }else{
290
+ this.action_unavailable = true
291
+ }
292
+ this.loading = false
293
+ }).catch(error => {
294
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
295
+ })
296
+ },
297
+ /**
298
+ * @description This action is used to get options for the clone object form
299
+ */
300
+ getCloneOptions(){
301
+ this.loading = true
302
+ const url = this.url[this.storeWorkflow.cloudModule](`${this.storeWorkflow.cloudObject}/:workflowId/actions/resources/options_cloud_object_clone`, { workflowId: this.storeWorkflow.workflow.id })
303
+
304
+ this.http.get(url).then(result => {
305
+ if(result){
306
+ for(let key in result){
307
+ this.clone_options[key] = result[key]
308
+ }
309
+ }else{
310
+ this.action_unavailable = true
311
+ }
312
+ this.loading = false
313
+ }).catch(error => {
314
+ this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
315
+ })
316
+ },
317
+ /**
318
+ * @description This action is used to add a reference to use on backend action
319
+ * @param {String, String}
320
+ */
321
+ addReference(reference, field){
322
+ let field_value = this.action.input_data[field] || ''
323
+ this.action.input_data[field] = `${field_value} %${reference}% `
324
+ }
325
+
326
+ }
327
+ })