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.
- checksums.yaml +7 -0
- data/Rakefile +3 -0
- data/app/assets/config/lesli_manifest.js +53 -0
- data/app/assets/fonts/lesli/Domine/Domine-Bold.ttf +0 -0
- data/app/assets/fonts/lesli/Domine/Domine-Regular.ttf +0 -0
- data/app/assets/fonts/lesli/Domine/OFL.txt +95 -0
- data/app/assets/fonts/lesli/MaterialDesign/icons.woff2 +0 -0
- data/app/assets/fonts/lesli/Montserrat/Montserrat-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/OpenSans/OpenSans-Variable.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.eot +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.glyph.json +1 -0
- data/app/assets/fonts/lesli/Remix/remixicon.svg +7633 -0
- data/app/assets/fonts/lesli/Remix/remixicon.symbol.svg +11 -0
- data/app/assets/fonts/lesli/Remix/remixicon.ttf +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff +0 -0
- data/app/assets/fonts/lesli/Remix/remixicon.woff2 +0 -0
- data/app/assets/fonts/lesli/Roboto/LICENSE.txt +202 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Black.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BlackItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Bold.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-BoldItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Italic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Light.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-LightItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Medium.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-MediumItalic.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Regular.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-Thin.ttf +0 -0
- data/app/assets/fonts/lesli/Roboto/Roboto-ThinItalic.ttf +0 -0
- data/app/assets/icons/lesli/cloud-admin.svg +1 -0
- data/app/assets/icons/lesli/cloud-audit.svg +1 -0
- data/app/assets/icons/lesli/cloud-babel.svg +1 -0
- data/app/assets/icons/lesli/cloud-bell.svg +1 -0
- data/app/assets/icons/lesli/cloud-books.svg +1 -0
- data/app/assets/icons/lesli/cloud-development.svg +1 -0
- data/app/assets/icons/lesli/cloud-dispatcher.svg +1 -0
- data/app/assets/icons/lesli/cloud-driver.svg +1 -0
- data/app/assets/icons/lesli/cloud-focus.svg +1 -0
- data/app/assets/icons/lesli/cloud-help.svg +1 -0
- data/app/assets/icons/lesli/cloud-kb.svg +1 -0
- data/app/assets/icons/lesli/cloud-leaf.svg +1 -0
- data/app/assets/icons/lesli/cloud-lesli.svg +1 -0
- data/app/assets/icons/lesli/cloud-mailer.svg +1 -0
- data/app/assets/icons/lesli/cloud-one.svg +1 -0
- data/app/assets/icons/lesli/cloud-profile.svg +1 -0
- data/app/assets/icons/lesli/cloud-proposal.svg +1 -0
- data/app/assets/icons/lesli/cloud-scraper.svg +1 -0
- data/app/assets/icons/lesli/cloud-shared.svg +1 -0
- data/app/assets/icons/lesli/cloud-storage.svg +1 -0
- data/app/assets/icons/lesli/cloud-talk.svg +1 -0
- data/app/assets/icons/lesli/cloud-team.svg +1 -0
- data/app/assets/icons/lesli/cloud-time.svg +1 -0
- data/app/assets/icons/lesli/cloud-vault.svg +1 -0
- data/app/assets/icons/lesli/cloud-word.svg +1 -0
- data/app/assets/icons/lesli/icon-module.svg +1 -0
- data/app/assets/icons/lesli/logo-android.svg +1 -0
- data/app/assets/icons/lesli/logo-bulma.svg +1 -0
- data/app/assets/icons/lesli/logo-ios.svg +1 -0
- data/app/assets/icons/lesli/logo-linux.svg +1 -0
- data/app/assets/icons/lesli/logo-mac.svg +1 -0
- data/app/assets/icons/lesli/logo-module.svg +1 -0
- data/app/assets/icons/lesli/logo-postgresql.svg +1 -0
- data/app/assets/icons/lesli/logo-rails.svg +1 -0
- data/app/assets/icons/lesli/logo-ruby.svg +1 -0
- data/app/assets/icons/lesli/logo-sass.svg +1 -0
- data/app/assets/icons/lesli/logo-vue.svg +1 -0
- data/app/assets/icons/lesli/logo-web.svg +1 -0
- data/app/assets/icons/lesli/logo-windows.svg +1 -0
- data/app/assets/icons/readme.md +10 -0
- data/app/assets/images/lesli/brand/app-auth.svg +9 -0
- data/app/assets/images/lesli/brand/app-icon.svg +42 -0
- data/app/assets/images/lesli/brand/app-logo.svg +4 -0
- data/app/assets/images/lesli/brand/favicon.png +0 -0
- data/app/assets/images/lesli/brand/favicon.svg +61 -0
- data/app/assets/images/lesli/brand/login-background.jpg +0 -0
- data/app/assets/javascripts/lesli/users/sessions.js +786 -0
- data/app/assets/stylesheets/lesli/users/confirmations.scss +34 -0
- data/app/assets/stylesheets/lesli/users/devise.scss +32 -0
- data/app/assets/stylesheets/lesli/users/oauth.scss +34 -0
- data/app/assets/stylesheets/lesli/users/passwords.scss +34 -0
- data/app/assets/stylesheets/lesli/users/registrations.scss +34 -0
- data/app/assets/stylesheets/lesli/users/sessions.scss +38 -0
- data/app/controllers/lesli/application_controller.rb +108 -0
- data/app/controllers/lesli/application_devise_controller.rb +54 -0
- data/app/controllers/lesli/application_lesli_controller.rb +61 -0
- data/app/controllers/lesli/interfaces/application/authorization.rb +107 -0
- data/app/controllers/lesli/interfaces/application/customization.rb +46 -0
- data/app/controllers/lesli/interfaces/application/logger.rb +133 -0
- data/app/controllers/lesli/interfaces/application/requester.rb +84 -0
- data/app/controllers/lesli/interfaces/application/responder.rb +132 -0
- data/app/controllers/lesli/profiles_controller.rb +60 -0
- data/app/controllers/users/confirmations_controller.rb +30 -0
- data/app/controllers/users/omniauth_callbacks_controller.rb +30 -0
- data/app/controllers/users/passwords_controller.rb +34 -0
- data/app/controllers/users/registrations_controller.rb +62 -0
- data/app/controllers/users/sessions_controller.rb +142 -0
- data/app/controllers/users/unlocks_controller.rb +30 -0
- data/app/helpers/lesli/assets_helper.rb +92 -0
- data/app/helpers/lesli/customization_helper.rb +84 -0
- data/app/helpers/lesli/general_helper.rb +83 -0
- data/app/helpers/lesli/navigation_helper.rb +349 -0
- data/app/helpers/lesli/profiles_helper.rb +4 -0
- data/app/helpers/lesli/system_helper.rb +57 -0
- data/app/lib/date2.rb +192 -0
- data/app/lib/lesli/system.rb +80 -0
- data/app/models/concerns/account_engines.rb +249 -0
- data/app/models/concerns/user_activities.rb +163 -0
- data/app/models/concerns/user_extensions.rb +129 -0
- data/app/models/concerns/user_guard.rb +278 -0
- data/app/models/concerns/user_polyfill.rb +134 -0
- data/app/models/lesli/account/log.rb +57 -0
- data/app/models/lesli/account.rb +76 -0
- data/app/models/lesli/application_lesli_record.rb +37 -0
- data/app/models/lesli/profile.rb +4 -0
- data/app/models/lesli/system_controller/action.rb +37 -0
- data/app/models/lesli/system_controller.rb +37 -0
- data/app/models/lesli/user/agent.rb +37 -0
- data/app/models/lesli/user/log.rb +38 -0
- data/app/models/lesli/user/request.rb +37 -0
- data/app/models/lesli/user/session.rb +105 -0
- data/app/models/lesli/user.rb +162 -0
- data/app/services/lesli/application_lesli_service.rb +168 -0
- data/app/services/lesli/user/session_service.rb +62 -0
- data/app/validators/lesli/application_lesli_validator.rb +67 -0
- data/app/validators/lesli/users_validator.rb +217 -0
- data/app/views/devise/confirmations/new.html.erb +16 -0
- data/app/views/devise/mailer/confirmation_instructions.html.erb +5 -0
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +8 -0
- data/app/views/devise/mailer/unlock_instructions.html.erb +7 -0
- data/app/views/devise/passwords/edit.html.erb +25 -0
- data/app/views/devise/passwords/new.html.erb +16 -0
- data/app/views/devise/registrations/edit.html.erb +43 -0
- data/app/views/devise/registrations/new.html.erb +29 -0
- data/app/views/devise/sessions/new.html.erb +178 -0
- data/app/views/devise/shared/_error_messages.html.erb +15 -0
- data/app/views/devise/shared/_links.html.erb +25 -0
- data/app/views/devise/unlocks/new.html.erb +16 -0
- data/app/views/lesli/devise/sessions/_form.html.erb +17 -0
- data/app/views/lesli/devise/sessions/_session.html.erb +2 -0
- data/app/views/lesli/devise/sessions/edit.html.erb +10 -0
- data/app/views/lesli/devise/sessions/index.html.erb +14 -0
- data/app/views/lesli/devise/sessions/new.html.erb +9 -0
- data/app/views/lesli/devise/sessions/show.html.erb +10 -0
- data/app/views/lesli/layouts/application-devise.html.erb +58 -0
- data/app/views/lesli/layouts/application-lesli.html.erb +57 -0
- data/app/views/lesli/layouts/application-public.html.erb +59 -0
- data/app/views/lesli/partials/_application-analytics.html.erb +71 -0
- data/app/views/lesli/partials/_application-data.html.erb +102 -0
- data/app/views/lesli/partials/_application-head.html.erb +56 -0
- data/app/views/lesli/partials/_application-lesli-chatbox.html.erb +35 -0
- data/app/views/lesli/partials/_application-lesli-content.html.erb +35 -0
- data/app/views/lesli/partials/_application-lesli-engines.html.erb +83 -0
- data/app/views/lesli/partials/_application-lesli-footer.html.erb +82 -0
- data/app/views/lesli/partials/_application-lesli-header.html.erb +79 -0
- data/app/views/lesli/partials/_application-lesli-icons.html.erb +1 -0
- data/app/views/lesli/partials/_application-lesli-javascript.html.erb +57 -0
- data/app/views/lesli/partials/_application-lesli-navigation.html.erb +52 -0
- data/app/views/lesli/partials/_application-lesli-notices.html.erb +43 -0
- data/app/views/lesli/partials/_application-lesli-panels.html.erb +58 -0
- data/app/views/lesli/partials/_application-lesli-scss.html.erb +60 -0
- data/app/views/lesli/partials/_application-lesli-sidebar.html.erb +50 -0
- data/app/views/lesli/partials/_application-public-footer.html.erb +51 -0
- data/app/views/lesli/partials/_application-public-javascript.html.erb +51 -0
- data/app/views/lesli/partials/_application-public-scss.html.erb +35 -0
- data/app/views/lesli/profiles/_form.html.erb +17 -0
- data/app/views/lesli/profiles/_profile.html.erb +2 -0
- data/app/views/lesli/profiles/edit.html.erb +10 -0
- data/app/views/lesli/profiles/index.html.erb +14 -0
- data/app/views/lesli/profiles/new.html.erb +9 -0
- data/app/views/lesli/profiles/show.html.erb +10 -0
- data/app/views/lesli/wrappers/_application-auth.html.erb +65 -0
- data/config/initializers/devise.rb +334 -0
- data/config/initializers/lesli_defaults.rb +100 -0
- data/config/locales/devise.en.yml +65 -0
- data/config/routes.rb +52 -0
- data/db/migrate/v1.0/0010000110_create_lesli_accounts.rb +70 -0
- data/db/migrate/v1.0/0010000210_create_lesli_roles.rb +59 -0
- data/db/migrate/v1.0/0010000310_create_lesli_users.rb +97 -0
- data/db/migrate/v1.0/0010000610_create_lesli_system_controllers.rb +44 -0
- data/db/migrate/v1.0/0010000710_create_lesli_system_controller_actions.rb +43 -0
- data/db/migrate/v1.0/0010001210_create_lesli_account_activities.rb +50 -0
- data/db/migrate/v1.0/0010001310_create_lesli_account_logs.rb +45 -0
- data/db/migrate/v1.0/0010003210_create_lesli_user_sessions.rb +51 -0
- data/db/migrate/v1.0/0010003310_create_lesli_user_requests.rb +48 -0
- data/db/migrate/v1.0/0010003610_create_lesli_user_logs.rb +45 -0
- data/db/migrate/v1.0/0010004010_create_lesli_user_agents.rb +46 -0
- data/db/seed/development/accounts.rb +47 -0
- data/db/seed/development/users.rb +53 -0
- data/db/seed/development.rb +35 -0
- data/db/seed/production.rb +35 -0
- data/db/seed/test.rb +35 -0
- data/db/seed/tools.rb +60 -0
- data/db/seeds.rb +64 -0
- data/db/structure/00000000_locations.json +32 -0
- data/db/structure/00000000_people.json +34 -0
- data/db/structure/00000003_actions.json +14 -0
- data/db/structure/00000004_activities.json +20 -0
- data/db/structure/00000005_discussions.json +8 -0
- data/db/structure/00000006_files.json +32 -0
- data/db/structure/00000007_subscribers.json +11 -0
- data/db/structure/00000008_custom_fields.json +8 -0
- data/db/structure/00000201_workflows.json +17 -0
- data/db/structure/00000202_workflow_statuses.json +24 -0
- data/db/structure/00000203_workflow_associations.json +14 -0
- data/db/structure/00000204_workflow_actions.json +39 -0
- data/db/structure/00000205_workflow_checks.json +27 -0
- data/db/structure/00000301_custom_fields.json +38 -0
- data/db/structure/00000401_custom_validations.json +14 -0
- data/db/structure/00000402_custom_validation_rules.json +23 -0
- data/db/structure/00000403_custom_validation_fields.json +14 -0
- data/db/structure/00000501_dashboards.json +14 -0
- data/db/structure/00000502_dashboard_components.json +23 -0
- data/db/tables/0010001010_create_account_settings.rb +42 -0
- data/db/tables/0010001110_create_account_locations.rb +64 -0
- data/db/tables/0010001410_create_account_files.rb +52 -0
- data/db/tables/0010001510_create_account_currencies.rb +48 -0
- data/db/tables/0010001610_create_account_currency_exchange_rates.rb +54 -0
- data/db/tables/0010003010_create_user_details.rb +49 -0
- data/db/tables/0010003110_create_user_settings.rb +44 -0
- data/db/tables/0010003410_create_user_activities.rb +51 -0
- data/db/tables/0010003510_create_user_roles.rb +43 -0
- data/db/tables/0010003710_create_user_codes.rb +43 -0
- data/db/tables/0010003810_create_user_shortcuts.rb +46 -0
- data/db/tables/0010004110_create_user_tokens.rb +45 -0
- data/db/tables/0010005010_create_descriptors.rb +45 -0
- data/db/tables/0010005110_create_descriptor_privileges.rb +44 -0
- data/db/tables/0010005210_create_descriptor_activities.rb +51 -0
- data/db/tables/0010005510_create_role_descriptors.rb +44 -0
- data/db/tables/0010005610_create_role_activities.rb +50 -0
- data/db/tables/0010005710_create_role_privileges.rb +45 -0
- data/db/tables/0010009010_create_feedbacks.rb +56 -0
- data/lib/assets/javascripts/lesli/i18n.js +1095 -0
- data/lib/assets/javascripts/lesli/translations.js +15 -0
- data/lib/lesli/configuration.rb +45 -0
- data/lib/lesli/engine.rb +62 -0
- data/lib/lesli/version.rb +34 -0
- data/lib/lesli.rb +6 -0
- data/lib/sass/lesli/bulma/loader.scss +84 -0
- data/lib/sass/lesli/cloud-objects/discussion.scss +77 -0
- data/lib/sass/lesli/cloud-objects/file.scss +138 -0
- data/lib/sass/lesli/components/editor-richtext.scss +78 -0
- data/lib/sass/lesli/components/keypad.scss +109 -0
- data/lib/sass/lesli/devise/confirmations.scss.erb +75 -0
- data/lib/sass/lesli/devise/passwords.scss.erb +86 -0
- data/lib/sass/lesli/devise/registrations.scss.erb +50 -0
- data/lib/sass/lesli/devise/sessions.scss +36 -0
- data/lib/sass/lesli/elements/autocomplete.scss +72 -0
- data/lib/sass/lesli/elements/avatar.scss +48 -0
- data/lib/sass/lesli/elements/calendar.scss +47 -0
- data/lib/sass/lesli/elements/card.scss +37 -0
- data/lib/sass/lesli/elements/content.scss +37 -0
- data/lib/sass/lesli/elements/empty.scss +43 -0
- data/lib/sass/lesli/elements/file-uploader.scss +74 -0
- data/lib/sass/lesli/elements/form.scss +43 -0
- data/lib/sass/lesli/elements/gallery.scss +98 -0
- data/lib/sass/lesli/elements/header.scss +44 -0
- data/lib/sass/lesli/elements/input-tag.scss +73 -0
- data/lib/sass/lesli/elements/loading.scss +63 -0
- data/lib/sass/lesli/elements/map.scss +107 -0
- data/lib/sass/lesli/elements/msg.scss +77 -0
- data/lib/sass/lesli/elements/navbar.scss +115 -0
- data/lib/sass/lesli/elements/panel.scss +65 -0
- data/lib/sass/lesli/elements/tab.scss +48 -0
- data/lib/sass/lesli/elements/table.scss +118 -0
- data/lib/sass/lesli/elements/toggle.scss +102 -0
- data/lib/sass/lesli/elements/toolbar.scss +66 -0
- data/lib/sass/lesli/fonts/families.scss +47 -0
- data/lib/sass/lesli/fonts/mdicons.scss +84 -0
- data/lib/sass/lesli/fonts/remixicons.scss +2602 -0
- data/lib/sass/lesli/helpers/display.scss +44 -0
- data/lib/sass/lesli/helpers/tooltip.scss +91 -0
- data/lib/sass/lesli/layouts/application-announcements.scss +40 -0
- data/lib/sass/lesli/layouts/application-component.scss +50 -0
- data/lib/sass/lesli/layouts/application-engines.scss +155 -0
- data/lib/sass/lesli/layouts/application-footer.scss +102 -0
- data/lib/sass/lesli/layouts/application-header.scss +152 -0
- data/lib/sass/lesli/layouts/application-navbar.scss +61 -0
- data/lib/sass/lesli/layouts/application-search.scss +71 -0
- data/lib/sass/lesli/layouts/application-sidebar.scss +219 -0
- data/lib/sass/lesli/overrides/sweetalert.scss +106 -0
- data/lib/sass/lesli/pages/dashboards.scss +57 -0
- data/lib/sass/lesli/pages/invites.scss +81 -0
- data/lib/sass/lesli/pages/mfas.scss +36 -0
- data/lib/sass/lesli/pages/otps.scss +36 -0
- data/lib/sass/lesli/pages/passes.scss +35 -0
- data/lib/sass/lesli/panels/panel-announcements.scss +56 -0
- data/lib/sass/lesli/panels/panel-notification.scss +67 -0
- data/lib/sass/lesli/panels/panel-profile.scss +62 -0
- data/lib/sass/lesli/panels/panel-tasks.scss +41 -0
- data/lib/sass/lesli/panels/panel-ticket.scss +57 -0
- data/lib/sass/lesli/settings/variables.scss +148 -0
- data/lib/sass/lesli/shared/workflow-status-progress.scss +135 -0
- data/lib/sass/lesli/templates/application.scss +141 -0
- data/lib/sass/lesli/templates/dashboards.scss +32 -0
- data/lib/sass/lesli/templates/devise.scss +185 -0
- data/lib/sass/lesli/templates/empty.scss +42 -0
- data/lib/sass/lesli/templates/pdf.scss +45 -0
- data/lib/sass/lesli/templates/public.scss +71 -0
- data/lib/tasks/db.rb +75 -0
- data/lib/tasks/lesli/controllers.rake +103 -0
- data/lib/tasks/lesli_tasks.rake +23 -0
- data/lib/vue/application.js +269 -0
- data/lib/vue/apps/cloudobjects/action.vue +193 -0
- data/lib/vue/apps/cloudobjects/discussion/content.vue +60 -0
- data/lib/vue/apps/cloudobjects/discussion/element.vue +132 -0
- data/lib/vue/apps/cloudobjects/discussion/filters.vue +108 -0
- data/lib/vue/apps/cloudobjects/discussion/new.vue +130 -0
- data/lib/vue/apps/cloudobjects/discussion.vue +98 -0
- data/lib/vue/apps/cloudobjects/file/grid.vue +215 -0
- data/lib/vue/apps/cloudobjects/file/list.vue +106 -0
- data/lib/vue/apps/cloudobjects/file.vue +145 -0
- data/lib/vue/apps/dashboards/apps/edit.vue +105 -0
- data/lib/vue/apps/dashboards/apps/index.vue +114 -0
- data/lib/vue/apps/dashboards/apps/new.vue +89 -0
- data/lib/vue/apps/dashboards/apps/show.vue +76 -0
- data/lib/vue/apps/dashboards/components/form.vue +267 -0
- data/lib/vue/apps/dashboards/components/preview.vue +172 -0
- data/lib/vue/apps/workflows2/apps/actions/form.vue +232 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/chatroom-form.vue +103 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-clone-form.vue +125 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/cloud-object-file-form.vue +102 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/email-form.vue +190 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/notification-form.vue +124 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/send-cloud-object-file.vue +170 -0
- data/lib/vue/apps/workflows2/apps/actions/forms/task-form.vue +258 -0
- data/lib/vue/apps/workflows2/apps/actions/index.vue +146 -0
- data/lib/vue/apps/workflows2/apps/checks/form.vue +200 -0
- data/lib/vue/apps/workflows2/apps/checks/index.vue +160 -0
- data/lib/vue/apps/workflows2/apps/index.vue +177 -0
- data/lib/vue/apps/workflows2/apps/new.vue +97 -0
- data/lib/vue/apps/workflows2/apps/show.vue +146 -0
- data/lib/vue/apps/workflows2/components/associations.vue +215 -0
- data/lib/vue/apps/workflows2/components/chart.vue +91 -0
- data/lib/vue/apps/workflows2/components/workflow-form.vue +466 -0
- data/lib/vue/apps/workflows2/components/workflow-status-dropdown.vue +129 -0
- data/lib/vue/devise/confirmations.js +33 -0
- data/lib/vue/devise/passwords.js +137 -0
- data/lib/vue/devise/registrations.js +162 -0
- data/lib/vue/devise/sessions.js +143 -0
- data/lib/vue/layouts/application-announcements.vue +78 -0
- data/lib/vue/layouts/application-engines.vue +66 -0
- data/lib/vue/layouts/application-footer.vue +123 -0
- data/lib/vue/layouts/application-header.vue +213 -0
- data/lib/vue/layouts/application-navbar.vue +110 -0
- data/lib/vue/layouts/application-search.vue +86 -0
- data/lib/vue/layouts/application-sidebar.vue +63 -0
- data/lib/vue/layouts/dashboard-component.vue +62 -0
- data/lib/vue/pages/errors/app.js +32 -0
- data/lib/vue/pages/invites/app.js +76 -0
- data/lib/vue/pages/mfas/application.js +77 -0
- data/lib/vue/pages/onboarding/application.js +45 -0
- data/lib/vue/pages/onboarding/components/address.vue +120 -0
- data/lib/vue/pages/onboarding/components/buttons.vue +67 -0
- data/lib/vue/pages/onboarding/components/contact.vue +148 -0
- data/lib/vue/pages/onboarding/components/date-time.vue +265 -0
- data/lib/vue/pages/onboarding/components/finish.vue +62 -0
- data/lib/vue/pages/onboarding/components/general-info.vue +93 -0
- data/lib/vue/pages/onboarding/components/indicators.vue +78 -0
- data/lib/vue/pages/onboarding/components/welcome.vue +66 -0
- data/lib/vue/pages/onboarding/show.vue +67 -0
- data/lib/vue/pages/onboarding/store.js +165 -0
- data/lib/vue/pages/otps/application.js +90 -0
- data/lib/vue/pages/passes/application.js +80 -0
- data/lib/vue/pages/websites/application.js +34 -0
- data/lib/vue/panels/panel-announcements.vue +248 -0
- data/lib/vue/panels/panel-files.vue +281 -0
- data/lib/vue/panels/panel-notifications.vue +106 -0
- data/lib/vue/panels/panel-profile.vue +76 -0
- data/lib/vue/panels/panel-tasks.vue +124 -0
- data/lib/vue/panels/panel-tickets.vue +181 -0
- data/lib/vue/public.js +85 -0
- data/lib/vue/stores/announcements.js +75 -0
- data/lib/vue/stores/cloud-bell/notification.js +114 -0
- data/lib/vue/stores/cloudobjects/action.js +181 -0
- data/lib/vue/stores/cloudobjects/discussion.js +221 -0
- data/lib/vue/stores/cloudobjects/file.js +205 -0
- data/lib/vue/stores/dashboard.js +251 -0
- data/lib/vue/stores/firebase.js +163 -0
- data/lib/vue/stores/layout.js +60 -0
- data/lib/vue/stores/panels/announcements.js +153 -0
- data/lib/vue/stores/panels/task.js +66 -0
- data/lib/vue/stores/panels/tickets.js +129 -0
- data/lib/vue/stores/profile.js +90 -0
- data/lib/vue/stores/search.js +154 -0
- data/lib/vue/stores/services/translator.js +87 -0
- data/lib/vue/stores/workflow.js +185 -0
- data/lib/vue/stores/workflow2.js +345 -0
- data/lib/vue/stores/workflows/actions.js +327 -0
- data/lib/vue/stores/workflows/associations.js +130 -0
- data/lib/vue/stores/workflows/checks.js +210 -0
- data/lib/webpack/base.js +182 -0
- data/lib/webpack/core.js +80 -0
- data/lib/webpack/engines.js +162 -0
- data/license +674 -0
- data/readme.md +120 -0
- metadata +554 -0
|
@@ -0,0 +1,163 @@
|
|
|
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
|
+
|
|
36
|
+
// · Import pinia tools
|
|
37
|
+
import { ref } from "vue"
|
|
38
|
+
import { defineStore } from "pinia"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
// · Import firebase tools
|
|
42
|
+
import { getFirestore } from "firebase/firestore"
|
|
43
|
+
import { getApp, initializeApp, getApps } from "firebase/app"
|
|
44
|
+
import { getAuth, signInWithEmailAndPassword } from "firebase/auth"
|
|
45
|
+
import { collection, query, where, onSnapshot, documentId, doc } from "firebase/firestore"
|
|
46
|
+
import { getStorage } from "firebase/storage"
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
|
|
50
|
+
// ·
|
|
51
|
+
export const useFirebase = defineStore("core.firebase", {
|
|
52
|
+
|
|
53
|
+
state: () => {
|
|
54
|
+
|
|
55
|
+
// check if we have at least a valid structure of credentials for firebase
|
|
56
|
+
if (
|
|
57
|
+
!lesli.providers.firebase.config ||
|
|
58
|
+
!lesli.providers.firebase.user.email ||
|
|
59
|
+
!lesli.providers.firebase.user.password
|
|
60
|
+
) {
|
|
61
|
+
return debug.error("No valid provider credentials found for firebase")
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
var user = null
|
|
65
|
+
|
|
66
|
+
// · When the store is created, the firebase app is initialized
|
|
67
|
+
if (getApps().length === 0) {
|
|
68
|
+
initializeApp(lesli.providers.firebase.config)
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
|
|
72
|
+
// try to login if user is empty
|
|
73
|
+
if (!user) {
|
|
74
|
+
|
|
75
|
+
// if user is not logged, try to login
|
|
76
|
+
signInWithEmailAndPassword(
|
|
77
|
+
getAuth(),
|
|
78
|
+
lesli.providers.firebase.user.email,
|
|
79
|
+
lesli.providers.firebase.user.password
|
|
80
|
+
).then((result) => {
|
|
81
|
+
user = result
|
|
82
|
+
}).catch((error) => {
|
|
83
|
+
console.log(error)
|
|
84
|
+
user = null
|
|
85
|
+
})
|
|
86
|
+
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
// initialize the firestore client
|
|
90
|
+
const firestore = getFirestore()
|
|
91
|
+
|
|
92
|
+
// Create a root reference to firebase storage
|
|
93
|
+
const storage = getStorage()
|
|
94
|
+
|
|
95
|
+
// initialize the user with static information
|
|
96
|
+
const currentUser = ref({
|
|
97
|
+
id: lesli.current_user.id.toString(),
|
|
98
|
+
email: lesli.current_user.email,
|
|
99
|
+
roles: lesli.current_user.roles,
|
|
100
|
+
full_name: lesli.current_user.full_name,
|
|
101
|
+
locale: lesli.current_user.settings.find((setting) => setting.name === "locale")?.value || "en",
|
|
102
|
+
active: true,
|
|
103
|
+
implementation: lesli.implementation
|
|
104
|
+
})
|
|
105
|
+
|
|
106
|
+
|
|
107
|
+
// get the users docs and keep listening for any change
|
|
108
|
+
onSnapshot(query(
|
|
109
|
+
collection(firestore, "instances", lesli.implementation, "users"),
|
|
110
|
+
where(documentId(), "==", lesli.current_user.id.toString())
|
|
111
|
+
), querySnapshot => {
|
|
112
|
+
|
|
113
|
+
// here we expect to receive only one document due we want to work only with one user
|
|
114
|
+
let data = querySnapshot?.docs.at(0)?.data()
|
|
115
|
+
|
|
116
|
+
// if you need to add more information to the currentUser
|
|
117
|
+
// this is the place to add those custom properties
|
|
118
|
+
currentUser.value.locale = data?.locale || currentUser.locale
|
|
119
|
+
currentUser.value.full_name = data?.full_name || currentUser.full_name
|
|
120
|
+
|
|
121
|
+
})
|
|
122
|
+
|
|
123
|
+
|
|
124
|
+
// return the state of the app :)
|
|
125
|
+
return {
|
|
126
|
+
firebase: getApp(),
|
|
127
|
+
firestore: firestore,
|
|
128
|
+
storage: storage,
|
|
129
|
+
currentUser: currentUser,
|
|
130
|
+
implementation: lesli.implementation,
|
|
131
|
+
users: []
|
|
132
|
+
}
|
|
133
|
+
},
|
|
134
|
+
|
|
135
|
+
actions: {
|
|
136
|
+
|
|
137
|
+
/**
|
|
138
|
+
* Return a reference to a firestore collection
|
|
139
|
+
* @param {...any} collectionPath
|
|
140
|
+
* @returns firebase collection
|
|
141
|
+
* @example
|
|
142
|
+
* getCollection("users")
|
|
143
|
+
* getCollection("chatrooms")
|
|
144
|
+
* getCollection("chatrooms", chatroom.id, "message")
|
|
145
|
+
*/
|
|
146
|
+
getCollection(...collectionPath) {
|
|
147
|
+
return collection(this.firestore, "instances", this.implementation, ...collectionPath)
|
|
148
|
+
},
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Return a reference to a firestore doc
|
|
152
|
+
* @param {...any} docPath
|
|
153
|
+
* @returns firebase doc
|
|
154
|
+
* @example
|
|
155
|
+
* getDoc("chatrooms", chatroom.id)
|
|
156
|
+
*/
|
|
157
|
+
getDoc(...docPath) {
|
|
158
|
+
return doc(this.firestore, "instances", this.implementation, ...docPath)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
}
|
|
162
|
+
|
|
163
|
+
})
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/*
|
|
2
|
+
Lesli
|
|
3
|
+
|
|
4
|
+
Copyright (c) 2023, Lesli Technologies, S. A.
|
|
5
|
+
|
|
6
|
+
This program is free software: you can redistribute it and/or modify
|
|
7
|
+
it under the terms of the GNU General Public License as published by
|
|
8
|
+
the Free Software Foundation, either version 3 of the License, or
|
|
9
|
+
(at your option) any later version.
|
|
10
|
+
|
|
11
|
+
This program is distributed in the hope that it will be useful,
|
|
12
|
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
13
|
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
14
|
+
GNU General Public License for more details.
|
|
15
|
+
|
|
16
|
+
You should have received a copy of the GNU General Public License
|
|
17
|
+
along with this program. If not, see http://www.gnu.org/licenses/.
|
|
18
|
+
|
|
19
|
+
Lesli · Ruby on Rails SaaS Development Framework.
|
|
20
|
+
|
|
21
|
+
Made with ♥ by https://www.lesli.tech
|
|
22
|
+
Building a better future, one line of code at a time.
|
|
23
|
+
|
|
24
|
+
@contact hello@lesli.tech
|
|
25
|
+
@website https://www.lesli.dev
|
|
26
|
+
@license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
|
|
27
|
+
|
|
28
|
+
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
|
29
|
+
// ·
|
|
30
|
+
*/
|
|
31
|
+
|
|
32
|
+
|
|
33
|
+
// ·
|
|
34
|
+
import { defineStore } from "pinia"
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
// ·
|
|
38
|
+
export const useLayout = defineStore("lesli.layout", {
|
|
39
|
+
state: () => {
|
|
40
|
+
return {
|
|
41
|
+
showEngines: false,
|
|
42
|
+
showNotifications: false,
|
|
43
|
+
showTasks: false,
|
|
44
|
+
showFiles: false,
|
|
45
|
+
showTickets: false,
|
|
46
|
+
showProfile: false,
|
|
47
|
+
showAnnouncements: false,
|
|
48
|
+
header: {
|
|
49
|
+
notifications: lesli.notifications,
|
|
50
|
+
tickets: lesli.tickets,
|
|
51
|
+
tasks: lesli.tasks
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
},
|
|
55
|
+
actions: {
|
|
56
|
+
toggleEngines() {
|
|
57
|
+
this.showEngines = !this.showEngines
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
})
|
|
@@ -0,0 +1,153 @@
|
|
|
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
|
+
|
|
36
|
+
// ·
|
|
37
|
+
import { defineStore } from "pinia"
|
|
38
|
+
import { useRouter } from 'vue-router'
|
|
39
|
+
import dayjs from 'dayjs'
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
// ·
|
|
43
|
+
export const useAnnouncements = defineStore("core.panel.announcements", {
|
|
44
|
+
state: () => {
|
|
45
|
+
return {
|
|
46
|
+
loading: false,
|
|
47
|
+
loaded: false,
|
|
48
|
+
announcement: { can_be_closed: true },
|
|
49
|
+
announcements: {},
|
|
50
|
+
router: useRouter()
|
|
51
|
+
}
|
|
52
|
+
},
|
|
53
|
+
actions: {
|
|
54
|
+
/**
|
|
55
|
+
* @description This action is used to create a new announcement
|
|
56
|
+
*/
|
|
57
|
+
postAnnouncement(){
|
|
58
|
+
this.loading = true
|
|
59
|
+
|
|
60
|
+
// Workaround to get the right url for the announcemets even if the url
|
|
61
|
+
// is changed outside the vue 3 router, after everything is running in vue3
|
|
62
|
+
// we can use the router to get the path
|
|
63
|
+
this.announcement.base_path = window.location.pathname
|
|
64
|
+
|
|
65
|
+
this.http.post(this.url.bell("announcements"), {
|
|
66
|
+
announcement: this.announcement
|
|
67
|
+
}).then(() => {
|
|
68
|
+
this.msg.success(I18n.t("core.users.messages_success_operation"))
|
|
69
|
+
}).catch(error => {
|
|
70
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
71
|
+
}).finally(() => {
|
|
72
|
+
this.getAnnouncements()
|
|
73
|
+
this.announcement = {}
|
|
74
|
+
this.loading = false
|
|
75
|
+
})
|
|
76
|
+
},
|
|
77
|
+
/**
|
|
78
|
+
* @description This action is used to get announcements
|
|
79
|
+
*/
|
|
80
|
+
getAnnouncements(){
|
|
81
|
+
this.announcements = {}
|
|
82
|
+
this.loading = true
|
|
83
|
+
|
|
84
|
+
let url = this.url.bell('announcements').filter({
|
|
85
|
+
base_path: [this.router.currentRoute.path]
|
|
86
|
+
})
|
|
87
|
+
|
|
88
|
+
this.http.get(url).then(result => {
|
|
89
|
+
this.loading = false
|
|
90
|
+
this.announcements = result.records
|
|
91
|
+
}).catch(error => {
|
|
92
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
93
|
+
})
|
|
94
|
+
},
|
|
95
|
+
/**
|
|
96
|
+
* @description This action is used to clear the announcement from the panel
|
|
97
|
+
*/
|
|
98
|
+
clearForm(){
|
|
99
|
+
this.announcement = {
|
|
100
|
+
name: '',
|
|
101
|
+
can_be_closed: true,
|
|
102
|
+
category: 'normal',
|
|
103
|
+
status: true,
|
|
104
|
+
message: ''
|
|
105
|
+
}
|
|
106
|
+
},
|
|
107
|
+
/**
|
|
108
|
+
* @description This action is used to delete an announcement
|
|
109
|
+
*/
|
|
110
|
+
deleteAnnouncement(announcement_id){
|
|
111
|
+
let url = this.url.bell('announcements/:id', {id: announcement_id})
|
|
112
|
+
this.http.delete(url).then(result => {
|
|
113
|
+
this.announcements = this.announcements.filter(e => e.id !== announcement_id)
|
|
114
|
+
this.msg.success(I18n.t("core.users.messages_success_operation"))
|
|
115
|
+
}).catch(error => {
|
|
116
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
117
|
+
})
|
|
118
|
+
},
|
|
119
|
+
/**
|
|
120
|
+
* @description This action is used to show the information of the announcement selected
|
|
121
|
+
*/
|
|
122
|
+
showAnnouncement(announcement){
|
|
123
|
+
announcement = this.announcements.find(e => e.id === announcement.id)
|
|
124
|
+
this.announcement = announcement
|
|
125
|
+
this.announcement.start_at= dayjs(this.announcement.start_at).format('YYYY-MM-DD') //Change date format to show in date selector
|
|
126
|
+
this.announcement.end_at= dayjs(this.announcement.end_at).format('YYYY-MM-DD') //Change date format to show in date selector
|
|
127
|
+
},
|
|
128
|
+
/**
|
|
129
|
+
* @description This action is used to check if the announcement exists to create or update the announcement
|
|
130
|
+
*/
|
|
131
|
+
formSubmit() {
|
|
132
|
+
if (this.announcement.id) {
|
|
133
|
+
this.putAnnouncement()
|
|
134
|
+
} else {
|
|
135
|
+
this.postAnnouncement()
|
|
136
|
+
}
|
|
137
|
+
},
|
|
138
|
+
/**
|
|
139
|
+
* @description This action is used to update an announcement
|
|
140
|
+
*/
|
|
141
|
+
putAnnouncement() {
|
|
142
|
+
this.loading = true
|
|
143
|
+
this.http.put(this.url.bell("announcements/:id", { id: this.announcement.id }), {
|
|
144
|
+
announcement: this.announcement
|
|
145
|
+
}).then(result => {
|
|
146
|
+
this.msg.success(I18n.t("core.users.messages_success_operation"))
|
|
147
|
+
this.loading = false
|
|
148
|
+
}).catch(error => {
|
|
149
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
150
|
+
})
|
|
151
|
+
},
|
|
152
|
+
}
|
|
153
|
+
})
|
|
@@ -0,0 +1,66 @@
|
|
|
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
|
+
|
|
36
|
+
// ·
|
|
37
|
+
import { defineStore } from "pinia"
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
// ·
|
|
41
|
+
export const useTask = defineStore("focus.task", {
|
|
42
|
+
state: () => {
|
|
43
|
+
return {
|
|
44
|
+
loading: false,
|
|
45
|
+
pagination: {},
|
|
46
|
+
records: []
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
actions: {
|
|
50
|
+
|
|
51
|
+
fetch() {
|
|
52
|
+
|
|
53
|
+
this.loading = false
|
|
54
|
+
|
|
55
|
+
let url = this.url.focus('tasks/resources/overdue_tasks')
|
|
56
|
+
|
|
57
|
+
this.http.get(url).then(result => {
|
|
58
|
+
this.records = result
|
|
59
|
+
}).catch(error => {
|
|
60
|
+
console.log(error)
|
|
61
|
+
}).finally(() => {
|
|
62
|
+
this.loading = false
|
|
63
|
+
})
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
})
|
|
@@ -0,0 +1,129 @@
|
|
|
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
|
+
|
|
36
|
+
// ·
|
|
37
|
+
import { defineStore } from "pinia"
|
|
38
|
+
import { useLayout } from "Lesli/stores/layout"
|
|
39
|
+
|
|
40
|
+
|
|
41
|
+
// ·
|
|
42
|
+
export const useTickets = defineStore("core.tickets", {
|
|
43
|
+
state: () => {
|
|
44
|
+
return {
|
|
45
|
+
loading: false,
|
|
46
|
+
loaded: false,
|
|
47
|
+
ticket: {
|
|
48
|
+
cloud_help_catalog_ticket_types_id: 2,
|
|
49
|
+
cloud_help_catalog_ticket_workspaces_id: null,
|
|
50
|
+
subject: "",
|
|
51
|
+
description: "",
|
|
52
|
+
reference_url: null
|
|
53
|
+
},
|
|
54
|
+
tickets: {},
|
|
55
|
+
options: {
|
|
56
|
+
types: [],
|
|
57
|
+
categories: [],
|
|
58
|
+
priorities: []
|
|
59
|
+
},
|
|
60
|
+
typesSelect : [],
|
|
61
|
+
workspaceSelect: [],
|
|
62
|
+
storeLayout: useLayout()
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
actions: {
|
|
66
|
+
/**
|
|
67
|
+
* @description This action is used to get get tickets
|
|
68
|
+
*/
|
|
69
|
+
fetchTickets() {
|
|
70
|
+
this.loading = true
|
|
71
|
+
this.http.get(this.url.help('tickets')
|
|
72
|
+
.paginate(1,3) // Here we only fetch the last 3 tickets assigned to show in the support ticket panel
|
|
73
|
+
.filter({search_type: ['active'], user_type:['own']})
|
|
74
|
+
).then(result => {
|
|
75
|
+
this.tickets = result.records
|
|
76
|
+
}).catch(error => {
|
|
77
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
78
|
+
}).finally(() => {
|
|
79
|
+
this.loading = false
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
},
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* @description This action is used to create a new ticket
|
|
86
|
+
*/
|
|
87
|
+
postTicket(){
|
|
88
|
+
this.loading = true
|
|
89
|
+
this.ticket.reference_url = window.location.href
|
|
90
|
+
this.http.post(this.url.help('tickets'), this.ticket).then(result => {
|
|
91
|
+
this.msg.success(I18n.t("core.users.messages_success_operation"))
|
|
92
|
+
this.resetForm()
|
|
93
|
+
this.loading = false
|
|
94
|
+
this.storeLayout.showTickets = false
|
|
95
|
+
}).catch(error => {
|
|
96
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
97
|
+
})
|
|
98
|
+
},
|
|
99
|
+
/**
|
|
100
|
+
* @description This action is used to reset form
|
|
101
|
+
*/
|
|
102
|
+
resetForm(){
|
|
103
|
+
this.ticket.subject = ''
|
|
104
|
+
this.ticket.description = ""
|
|
105
|
+
this.ticket.type = 2
|
|
106
|
+
},
|
|
107
|
+
|
|
108
|
+
/**
|
|
109
|
+
* @description This action is used to get get tickets options
|
|
110
|
+
*/
|
|
111
|
+
getTicketOptions() {
|
|
112
|
+
this.loaded = true
|
|
113
|
+
this.http.get(this.url.help('tickets/options')).then(result => {
|
|
114
|
+
this.options = result
|
|
115
|
+
|
|
116
|
+
result.types.map((type)=>{
|
|
117
|
+
this.typesSelect.push({label: type.name, value: type.id})
|
|
118
|
+
})
|
|
119
|
+
|
|
120
|
+
result.workspaces.map((workspace)=>{
|
|
121
|
+
this.workspaceSelect.push({label: workspace.name, value: workspace.id})
|
|
122
|
+
})
|
|
123
|
+
|
|
124
|
+
}).catch(error => {
|
|
125
|
+
this.msg.danger(I18n.t("core.shared.messages_danger_internal_error"))
|
|
126
|
+
})
|
|
127
|
+
},
|
|
128
|
+
}
|
|
129
|
+
})
|
|
@@ -0,0 +1,90 @@
|
|
|
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
|
+
|
|
36
|
+
// ·
|
|
37
|
+
import { defineStore } from "pinia"
|
|
38
|
+
import { useUser } from "LesliApp/administration/stores/user"
|
|
39
|
+
import { useLesliUtils } from "lesli-vue/composables"
|
|
40
|
+
|
|
41
|
+
|
|
42
|
+
const storeUtils = useLesliUtils()
|
|
43
|
+
|
|
44
|
+
|
|
45
|
+
// ·
|
|
46
|
+
export const useProfile = defineStore("profile", {
|
|
47
|
+
state: () => {
|
|
48
|
+
return {
|
|
49
|
+
storeUser: useUser(),
|
|
50
|
+
loading: false,
|
|
51
|
+
profile: {
|
|
52
|
+
detail_attributes: {}
|
|
53
|
+
},
|
|
54
|
+
roles: [],
|
|
55
|
+
new_email: null
|
|
56
|
+
}
|
|
57
|
+
},
|
|
58
|
+
actions: {
|
|
59
|
+
|
|
60
|
+
fetch() {
|
|
61
|
+
if (!this.profile.id) {
|
|
62
|
+
this.fetchProfile()
|
|
63
|
+
}
|
|
64
|
+
},
|
|
65
|
+
|
|
66
|
+
fetchProfile() {
|
|
67
|
+
this.loading = true
|
|
68
|
+
this.roles = []
|
|
69
|
+
this.http.get(this.url.admin("profile")).then(result => {
|
|
70
|
+
this.profile = result
|
|
71
|
+
this.profile['initials'] = storeUtils.initials(
|
|
72
|
+
this.profile.first_name,
|
|
73
|
+
this.profile.last_name
|
|
74
|
+
)
|
|
75
|
+
this.parseRoles(result.roles)
|
|
76
|
+
}).catch(error => {
|
|
77
|
+
console.log(error)
|
|
78
|
+
}).finally(() => {
|
|
79
|
+
this.loading = false
|
|
80
|
+
})
|
|
81
|
+
|
|
82
|
+
},
|
|
83
|
+
parseRoles(roles){
|
|
84
|
+
this.roles = []
|
|
85
|
+
roles.forEach(role =>{
|
|
86
|
+
this.roles.push(role.name)
|
|
87
|
+
})
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
})
|