lesli_support 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (165) hide show
  1. checksums.yaml +7 -0
  2. data/Rakefile +5 -0
  3. data/app/assets/config/lesli_support_manifest.js +38 -0
  4. data/app/assets/images/lesli_support/support-logo.svg +9 -0
  5. data/app/assets/javascripts/lesli_support/application.js +5011 -0
  6. data/app/assets/stylesheets/lesli_support/application.css +9 -0
  7. data/app/controllers/lesli_support/accounts_controller.rb +60 -0
  8. data/app/controllers/lesli_support/application_controller.rb +4 -0
  9. data/app/controllers/lesli_support/catalog_categories_controller.rb +60 -0
  10. data/app/controllers/lesli_support/catalog_priorities_controller.rb +60 -0
  11. data/app/controllers/lesli_support/catalog_types_controller.rb +60 -0
  12. data/app/controllers/lesli_support/catalog_workspaces_controller.rb +60 -0
  13. data/app/controllers/lesli_support/catalogs_controller.rb +12 -0
  14. data/app/controllers/lesli_support/dashboard/components_controller.rb +92 -0
  15. data/app/controllers/lesli_support/dashboards_controller.rb +36 -0
  16. data/app/controllers/lesli_support/options_controller.rb +23 -0
  17. data/app/controllers/lesli_support/ticket/discussions_controller.rb +5 -0
  18. data/app/controllers/lesli_support/tickets_controller.rb +169 -0
  19. data/app/helpers/lesli_support/accounts_helper.rb +4 -0
  20. data/app/helpers/lesli_support/application_helper.rb +4 -0
  21. data/app/helpers/lesli_support/catalog_categories_helper.rb +4 -0
  22. data/app/helpers/lesli_support/catalog_priorities_helper.rb +4 -0
  23. data/app/helpers/lesli_support/catalog_types_helper.rb +4 -0
  24. data/app/helpers/lesli_support/catalog_workspaces_helper.rb +4 -0
  25. data/app/helpers/lesli_support/catalogs_helper.rb +4 -0
  26. data/app/helpers/lesli_support/dashboards_helper.rb +4 -0
  27. data/app/helpers/lesli_support/options_helper.rb +4 -0
  28. data/app/helpers/lesli_support/ticket/discussions_helper.rb +4 -0
  29. data/app/jobs/lesli_support/application_job.rb +4 -0
  30. data/app/mailers/lesli_support/application_mailer.rb +6 -0
  31. data/app/models/lesli_support/account.rb +48 -0
  32. data/app/models/lesli_support/application_record.rb +5 -0
  33. data/app/models/lesli_support/catalog.rb +15 -0
  34. data/app/models/lesli_support/catalog_category.rb +5 -0
  35. data/app/models/lesli_support/catalog_priority.rb +5 -0
  36. data/app/models/lesli_support/catalog_type.rb +5 -0
  37. data/app/models/lesli_support/catalog_workspace.rb +5 -0
  38. data/app/models/lesli_support/dashboard/component.rb +18 -0
  39. data/app/models/lesli_support/dashboard.rb +15 -0
  40. data/app/models/lesli_support/option.rb +4 -0
  41. data/app/models/lesli_support/ticket/discussion.rb +7 -0
  42. data/app/models/lesli_support/ticket.rb +44 -0
  43. data/app/services/lesli_support/catalog_service.rb +139 -0
  44. data/app/services/lesli_support/ticket_service.rb +147 -0
  45. data/app/views/layouts/lesli_support/application.html.erb +15 -0
  46. data/app/views/lesli_support/accounts/_account.html.erb +2 -0
  47. data/app/views/lesli_support/accounts/_form.html.erb +17 -0
  48. data/app/views/lesli_support/accounts/edit.html.erb +10 -0
  49. data/app/views/lesli_support/accounts/index.html.erb +14 -0
  50. data/app/views/lesli_support/accounts/new.html.erb +9 -0
  51. data/app/views/lesli_support/accounts/show.html.erb +10 -0
  52. data/app/views/lesli_support/catalog_categories/_catalog_category.html.erb +2 -0
  53. data/app/views/lesli_support/catalog_categories/_form.html.erb +17 -0
  54. data/app/views/lesli_support/catalog_categories/edit.html.erb +10 -0
  55. data/app/views/lesli_support/catalog_categories/index.html.erb +14 -0
  56. data/app/views/lesli_support/catalog_categories/new.html.erb +9 -0
  57. data/app/views/lesli_support/catalog_categories/show.html.erb +10 -0
  58. data/app/views/lesli_support/catalog_priorities/_catalog_priority.html.erb +2 -0
  59. data/app/views/lesli_support/catalog_priorities/_form.html.erb +17 -0
  60. data/app/views/lesli_support/catalog_priorities/edit.html.erb +10 -0
  61. data/app/views/lesli_support/catalog_priorities/index.html.erb +14 -0
  62. data/app/views/lesli_support/catalog_priorities/new.html.erb +9 -0
  63. data/app/views/lesli_support/catalog_priorities/show.html.erb +10 -0
  64. data/app/views/lesli_support/catalog_types/_catalog_type.html.erb +2 -0
  65. data/app/views/lesli_support/catalog_types/_form.html.erb +17 -0
  66. data/app/views/lesli_support/catalog_types/edit.html.erb +10 -0
  67. data/app/views/lesli_support/catalog_types/index.html.erb +14 -0
  68. data/app/views/lesli_support/catalog_types/new.html.erb +9 -0
  69. data/app/views/lesli_support/catalog_types/show.html.erb +10 -0
  70. data/app/views/lesli_support/catalog_workspaces/_catalog_workspace.html.erb +2 -0
  71. data/app/views/lesli_support/catalog_workspaces/_form.html.erb +17 -0
  72. data/app/views/lesli_support/catalog_workspaces/edit.html.erb +10 -0
  73. data/app/views/lesli_support/catalog_workspaces/index.html.erb +14 -0
  74. data/app/views/lesli_support/catalog_workspaces/new.html.erb +9 -0
  75. data/app/views/lesli_support/catalog_workspaces/show.html.erb +10 -0
  76. data/app/views/lesli_support/catalogs/_catalog.html.erb +2 -0
  77. data/app/views/lesli_support/catalogs/_form.html.erb +17 -0
  78. data/app/views/lesli_support/catalogs/edit.html.erb +10 -0
  79. data/app/views/lesli_support/catalogs/index.html.erb +14 -0
  80. data/app/views/lesli_support/catalogs/new.html.erb +9 -0
  81. data/app/views/lesli_support/catalogs/show.html.erb +10 -0
  82. data/app/views/lesli_support/dashboards/edit.html.erb +1 -0
  83. data/app/views/lesli_support/dashboards/index.html.erb +1 -0
  84. data/app/views/lesli_support/dashboards/new.html.erb +1 -0
  85. data/app/views/lesli_support/dashboards/show.html.erb +1 -0
  86. data/app/views/lesli_support/options/_form.html.erb +17 -0
  87. data/app/views/lesli_support/options/_option.html.erb +2 -0
  88. data/app/views/lesli_support/options/edit.html.erb +10 -0
  89. data/app/views/lesli_support/options/index.html.erb +14 -0
  90. data/app/views/lesli_support/options/new.html.erb +9 -0
  91. data/app/views/lesli_support/options/show.html.erb +10 -0
  92. data/app/views/lesli_support/partials/_engine-navigation.html.erb +39 -0
  93. data/app/views/lesli_support/ticket/discussions/_discussion.html.erb +2 -0
  94. data/app/views/lesli_support/ticket/discussions/_form.html.erb +17 -0
  95. data/app/views/lesli_support/ticket/discussions/edit.html.erb +10 -0
  96. data/app/views/lesli_support/ticket/discussions/index.html.erb +14 -0
  97. data/app/views/lesli_support/ticket/discussions/new.html.erb +9 -0
  98. data/app/views/lesli_support/ticket/discussions/show.html.erb +10 -0
  99. data/app/views/lesli_support/tickets/edit.html.erb +20 -0
  100. data/app/views/lesli_support/tickets/index.html.erb +34 -0
  101. data/app/views/lesli_support/tickets/new.html.erb +20 -0
  102. data/app/views/lesli_support/tickets/show.html.erb +20 -0
  103. data/config/locales/translations.en.yml +43 -0
  104. data/config/locales/translations.es.yml +43 -0
  105. data/config/locales/translations.fr.yml +43 -0
  106. data/config/locales/translations.it.yml +43 -0
  107. data/config/locales/translations.pt.yml +43 -0
  108. data/config/routes.rb +61 -0
  109. data/db/migrate/v1/0702000110_create_lesli_support_accounts.rb +42 -0
  110. data/db/migrate/v1/0702000210_create_lesli_support_account_settings.rb +46 -0
  111. data/db/migrate/v1/0702010110_create_lesli_support_catalog_workspaces.rb +43 -0
  112. data/db/migrate/v1/0702010210_create_lesli_support_catalog_types.rb +42 -0
  113. data/db/migrate/v1/0702010310_create_lesli_support_catalog_categories.rb +43 -0
  114. data/db/migrate/v1/0702010410_create_lesli_support_catalog_priorities.rb +43 -0
  115. data/db/migrate/v1/0702050110_create_lesli_support_dashboards.rb +50 -0
  116. data/db/migrate/v1/0702050210_create_lesli_support_dashboard_components.rb +50 -0
  117. data/db/migrate/v1/0702100110_create_lesli_support_slas.rb +59 -0
  118. data/db/migrate/v1/0702110110_create_lesli_support_tickets.rb +99 -0
  119. data/db/migrate/v1/0702110510_create_lesli_support_ticket_discussions.rb +52 -0
  120. data/db/seed/development.rb +62 -0
  121. data/db/seed/production.rb +31 -0
  122. data/db/seed/test.rb +31 -0
  123. data/db/seeds.rb +45 -0
  124. data/db/tables/0702010510_create_cloud_help_catalog_ticket_sources.rb +44 -0
  125. data/db/tables/0702020110_create_cloud_help_workflows.rb +47 -0
  126. data/db/tables/0702020210_create_cloud_help_workflow_statuses.rb +47 -0
  127. data/db/tables/0702020310_create_cloud_help_workflow_associations.rb +29 -0
  128. data/db/tables/0702020410_create_cloud_help_workflow_actions.rb +18 -0
  129. data/db/tables/0702020510_create_cloud_help_workflow_checks.rb +20 -0
  130. data/db/tables/0702030110_create_cloud_help_custom_fields.rb +15 -0
  131. data/db/tables/0702040110_create_cloud_help_custom_validations.rb +16 -0
  132. data/db/tables/0702040210_create_cloud_help_custom_validation_rules.rb +16 -0
  133. data/db/tables/0702040310_create_cloud_help_custom_validation_fields.rb +16 -0
  134. data/db/tables/0702100310_create_cloud_help_ticket_actions.rb +16 -0
  135. data/db/tables/0702100410_create_cloud_help_ticket_activities.rb +15 -0
  136. data/db/tables/0702100610_create_cloud_help_ticket_files.rb +16 -0
  137. data/db/tables/0702100710_create_cloud_help_ticket_subscribers.rb +16 -0
  138. data/db/tables/0702101010_create_cloud_help_ticket_timelines.rb +14 -0
  139. data/db/tables/0702101110_create_cloud_help_ticket_assignments.rb +15 -0
  140. data/db/tables/0702101210_create_cloud_help_ticket_histories.rb +15 -0
  141. data/db/tables/0702110310_create_cloud_help_sla_actions.rb +17 -0
  142. data/db/tables/0702110410_create_cloud_help_sla_activities.rb +15 -0
  143. data/db/tables/0702110510_create_cloud_help_sla_discussions.rb +17 -0
  144. data/db/tables/0702110610_create_cloud_help_sla_files.rb +16 -0
  145. data/db/tables/0702110710_create_cloud_help_sla_subscribers.rb +16 -0
  146. data/db/tables/0702111010_create_cloud_help_sla_associations.rb +13 -0
  147. data/lib/lesli_support/engine.rb +50 -0
  148. data/lib/lesli_support/version.rb +4 -0
  149. data/lib/lesli_support.rb +6 -0
  150. data/lib/scss/application.scss +11 -0
  151. data/lib/tasks/lesli_support_tasks.rake +4 -0
  152. data/lib/vue/application.js +93 -0
  153. data/lib/vue/apps/dashboard/components/engine-version.vue +71 -0
  154. data/lib/vue/apps/dashboard/components/my-tasks.vue +77 -0
  155. data/lib/vue/apps/tickets/components/assignments.vue +93 -0
  156. data/lib/vue/apps/tickets/components/form.vue +305 -0
  157. data/lib/vue/apps/tickets/components/internal-comments.vue +107 -0
  158. data/lib/vue/apps/tickets/components/sla-info.vue +115 -0
  159. data/lib/vue/apps/tickets/index.vue +145 -0
  160. data/lib/vue/apps/tickets/new.vue +78 -0
  161. data/lib/vue/apps/tickets/show.vue +183 -0
  162. data/lib/vue/stores/tickets.js +276 -0
  163. data/lib/vue/stores/translations.json +272 -0
  164. data/readme.md +72 -0
  165. metadata +223 -0
@@ -0,0 +1,16 @@
1
+ class CreateCloudHelpTicketActions < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000003_actions.json")))
4
+ create_table :cloud_help_ticket_actions do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_ticket_actions, :users, foreign_key: true
14
+ add_reference :cloud_help_ticket_actions, :cloud_help_tickets, foreign_key: true, index: { name: "help_ticket_actions_tickets" }
15
+ end
16
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCloudHelpTicketActivities < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000004_activities.json")))
4
+ create_table :cloud_help_ticket_activities do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_ticket_activities, :cloud_help_tickets, foreign_key: true
14
+ end
15
+ end
@@ -0,0 +1,16 @@
1
+ class CreateCloudHelpTicketFiles < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000006_files.json")))
4
+ create_table :cloud_help_ticket_files do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_ticket_files, :users, foreign_key: true
14
+ add_reference :cloud_help_ticket_files, :cloud_help_tickets, foreign_key: true
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ class CreateCloudHelpTicketSubscribers < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000007_subscribers.json")))
4
+ create_table :cloud_help_ticket_subscribers do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_ticket_subscribers, :cloud_help_tickets, foreign_key: true, index: { name: "help_ticket_subscribers_tickets" }
14
+ add_reference :cloud_help_ticket_subscribers, :users, foreign_key: true, index: { name: "help_ticket_subscribers_users" }
15
+ end
16
+ end
@@ -0,0 +1,14 @@
1
+ class CreateCloudHelpTicketTimelines < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :cloud_help_ticket_timelines do |t|
4
+ t.string :action
5
+ t.string :description
6
+
7
+ # acts_as_paranoid
8
+ t.datetime :deleted_at, index: true
9
+
10
+ t.timestamps
11
+ end
12
+ add_reference :cloud_help_ticket_timelines, :cloud_help_tickets, foreign_key: true
13
+ end
14
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCloudHelpTicketAssignments < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :cloud_help_ticket_assignments do |t|
4
+ t.bigint :team_id
5
+ t.string :assignment_type
6
+
7
+ # acts_as_paranoid
8
+ t.datetime :deleted_at, index: true
9
+
10
+ t.timestamps
11
+ end
12
+ add_reference(:cloud_help_ticket_assignments, :ticket, foreign_key: { to_table: :cloud_help_tickets })
13
+ add_reference(:cloud_help_ticket_assignments, :users, foreign_key: { to_table: :users })
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ class CreateCloudHelpTicketHistories < ActiveRecord::Migration[6.1]
2
+ def change
3
+ create_table :cloud_help_ticket_histories do |t|
4
+ t.text :content
5
+
6
+ # acts_as_paranoid
7
+ t.datetime :deleted_at, index: true
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_reference :cloud_help_ticket_histories, :cloud_help_tickets, foreign_key: true
13
+ add_reference :cloud_help_ticket_histories, :users, foreign_key: true, index: { name: "help_ticket_histories_users" }
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ class CreateCloudHelpSlaActions < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000003_actions.json")))
4
+ create_table :cloud_help_sla_actions do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_sla_actions, :users, foreign_key: true
14
+ add_reference :cloud_help_sla_actions, :cloud_help_slas, foreign_key: true, index: { name: "help_sla_actions_slas" }
15
+ end
16
+ end
17
+
@@ -0,0 +1,15 @@
1
+ class CreateCloudHelpSlaActivities < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000004_activities.json")))
4
+ create_table :cloud_help_sla_activities do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_sla_activities, :cloud_help_slas, foreign_key: true
14
+ end
15
+ end
@@ -0,0 +1,17 @@
1
+ class CreateCloudHelpSlaDiscussions < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000005_discussions.json")))
4
+ create_table :cloud_help_sla_discussions do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_sla_discussions, :cloud_help_sla_discussions, foreign_key: true, index: { name: "help_sla_discussions_discussions" }
14
+ add_reference :cloud_help_sla_discussions, :users, foreign_key: true, index: { name: "help_sla_discussions_users" }
15
+ add_reference :cloud_help_sla_discussions, :cloud_help_slas, foreign_key: true, index: { name: "help_sla_discussions_slas" }
16
+ end
17
+ end
@@ -0,0 +1,16 @@
1
+ class CreateCloudHelpSlaFiles < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000006_files.json")))
4
+ create_table :cloud_help_sla_files do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_sla_files, :users, foreign_key: true
14
+ add_reference :cloud_help_sla_files, :cloud_help_slas, foreign_key: true
15
+ end
16
+ end
@@ -0,0 +1,16 @@
1
+ class CreateCloudHelpSlaSubscribers < ActiveRecord::Migration[6.0]
2
+ def change
3
+ table_base_structure = JSON.parse(File.read(Rails.root.join("db","structure","00000007_subscribers.json")))
4
+ create_table :cloud_help_sla_subscribers do |t|
5
+ table_base_structure.each do |column|
6
+ t.send(
7
+ column["type"].parameterize.underscore.to_sym,
8
+ column["name"].parameterize.underscore.to_sym
9
+ )
10
+ end
11
+ t.timestamps
12
+ end
13
+ add_reference :cloud_help_sla_subscribers, :cloud_help_slas, foreign_key: true, index: { name: "help_sla_subscribers_slas" }
14
+ add_reference :cloud_help_sla_subscribers, :users, foreign_key: true, index: { name: "help_sla_subscribers_users" }
15
+ end
16
+ end
@@ -0,0 +1,13 @@
1
+ class CreateCloudHelpSlaAssociations < ActiveRecord::Migration[6.0]
2
+ def change
3
+ create_table :cloud_help_sla_associations do |t|
4
+ # acts_as_paranoid
5
+ t.datetime :deleted_at, index: true
6
+
7
+ t.timestamps
8
+ end
9
+
10
+ add_reference :cloud_help_sla_associations, :cloud_help_catalog_ticket_types, foreign_key: true, index: {name: "help_sla_associations_catalog_ticket_types"}
11
+ add_reference :cloud_help_sla_associations, :cloud_help_slas, foreign_key: true, index: {name: "help_sla_associations_slas"}
12
+ end
13
+ end
@@ -0,0 +1,50 @@
1
+ =begin
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 · Ruby on Rails SaaS Development Framework.
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://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ =end
32
+
33
+ module LesliSupport
34
+ class Engine < ::Rails::Engine
35
+ isolate_namespace LesliSupport
36
+
37
+ initializer :lesli_support do |app|
38
+
39
+ # register assets manifest
40
+ config.assets.precompile += %w[lesli_support_manifest.js]
41
+
42
+ # register engine migrations path
43
+ unless app.root.to_s.match root.to_s
44
+ config.paths["db/migrate"].expanded.each do |expanded_path|
45
+ app.config.paths["db/migrate"] << expanded_path
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
@@ -0,0 +1,4 @@
1
+ module LesliSupport
2
+ VERSION = "0.1.0"
3
+ BUILD = "1713121383"
4
+ end
@@ -0,0 +1,6 @@
1
+ require "lesli_support/version"
2
+ require "lesli_support/engine"
3
+
4
+ module LesliSupport
5
+ # Your code goes here...
6
+ end
@@ -0,0 +1,11 @@
1
+
2
+
3
+ .lesli-support-tickets {
4
+ .lesli-form > fieldset {
5
+ padding: 3rem 6rem;
6
+
7
+ fieldset {
8
+ margin-bottom: 1.5rem;
9
+ }
10
+ }
11
+ }
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :lesli_support do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,93 @@
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.tech
26
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
27
+
28
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
29
+ // ·
30
+ */
31
+
32
+
33
+ // · Import Lesli builders
34
+ import application from "Lesli/vue/application"
35
+ import translation from "Lesli/vue/translation"
36
+
37
+
38
+ // · Import engine translations
39
+ import translations from "LesliSupport/vue/stores/translations.json"
40
+
41
+
42
+ // · Dashboard apps
43
+ import dashboardShow from "Lesli/vue/shared/dashboards/apps/show.vue"
44
+ import dashboardEdit from "Lesli/vue/shared/dashboards/apps/edit.vue"
45
+
46
+
47
+ // · Ticket apps
48
+ import ticketIndex from "LesliSupport/vue/apps/tickets/index.vue"
49
+ import ticketNew from "LesliSupport/vue/apps/tickets/new.vue"
50
+ import ticketShow from "LesliSupport/vue/apps/tickets/show.vue"
51
+
52
+
53
+ // ·
54
+ import componentDashboardEngineVersion from "LesliSupport/vue/apps/dashboard/components/engine-version.vue"
55
+ import componentDashboardMyTasks from "LesliSupport/vue/apps/dashboard/components/my-tasks.vue"
56
+
57
+
58
+ // ·
59
+ const dashboardProps = {
60
+ components: {
61
+ "engine-version": componentDashboardEngineVersion,
62
+ "my-tasks": componentDashboardMyTasks
63
+ }
64
+ }
65
+
66
+
67
+ // · Buil Lesli translations
68
+ translation(translations)
69
+
70
+
71
+ // · Build a new Lesli application
72
+ application("LesliSupport", [{
73
+ path: "/dashboard",
74
+ component: dashboardShow,
75
+ props: dashboardProps
76
+ }, {
77
+ path: "/dashboards/:id/edit",
78
+ component: dashboardEdit,
79
+ props: dashboardProps
80
+ }, {
81
+ path: "/tickets",
82
+ component: ticketIndex
83
+ }, {
84
+ path: "/tickets/new",
85
+ component: ticketNew
86
+ }, {
87
+ path: "/tickets/:id",
88
+ component: ticketShow
89
+ }, {
90
+ path: "/tickets/:id/edit",
91
+ component: ticketShow,
92
+ props: { editable: true }
93
+ }])
@@ -0,0 +1,71 @@
1
+ <script setup>
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 · Ruby on Rails SaaS Development Framework.
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://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ */
32
+
33
+
34
+ // ·
35
+ import { onMounted, inject, ref } from "vue"
36
+
37
+
38
+ // ·
39
+ const url = inject("url")
40
+ const http = inject("http")
41
+
42
+
43
+ // ·
44
+ const lesliVersion = ref({
45
+ name: "",
46
+ code: "",
47
+ path: "",
48
+ version: "",
49
+ build: ""
50
+ })
51
+
52
+
53
+ // ·
54
+ onMounted(() => {
55
+ http.get(url.lesli("about")).then(result => {
56
+ lesliVersion.value = result.find(engine => engine.name == "Lesli")
57
+ }).catch(error => {
58
+ console.log(error)
59
+ })
60
+ })
61
+ </script>
62
+ <template>
63
+ <lesli-card>
64
+ <h6 class="title is-6 mb-2">
65
+ {{ lesliVersion.name }}
66
+ </h6>
67
+ <p class="p-0 m-0">version: {{ lesliVersion.version }}</p>
68
+ <p class="p-0 m-0">buid: {{ lesliVersion.build }}</p>
69
+ <p class="p-0 m-0">path: {{ lesliVersion.path }}</p>
70
+ </lesli-card>
71
+ </template>
@@ -0,0 +1,77 @@
1
+ <script setup>
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 · Ruby on Rails SaaS Development Framework.
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://www.lesli.tech
27
+ @license GPLv3 http://www.gnu.org/licenses/gpl-3.0.en.html
28
+
29
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
30
+ // ·
31
+ */
32
+
33
+
34
+ // ·
35
+ import { onMounted, inject, ref } from "vue"
36
+
37
+
38
+ // ·
39
+ import { lesliChartBar } from "lesli-vue/components"
40
+
41
+
42
+ // ·
43
+ const url = inject("url")
44
+ const http = inject("http")
45
+
46
+
47
+ // ·
48
+ const lesliVersion = ref({
49
+ name: "",
50
+ code: "",
51
+ path: "",
52
+ version: "",
53
+ build: ""
54
+ })
55
+
56
+
57
+ // ·
58
+ onMounted(() => {
59
+ console.log("component works")
60
+ // http.get(url.lesli("about")).then(result => {
61
+ // lesliVersion.value = result.find(engine => engine.name == "Lesli")
62
+ // }).catch(error => {
63
+ // console.log(error)
64
+ // })
65
+ })
66
+ </script>
67
+ <template>
68
+ <lesli-card>
69
+ <h6 class="title is-6 mb-2">
70
+ hola
71
+ </h6>
72
+ <lesli-chart-bar
73
+ :labels="['hola1', 'hola2', 'hola3', 'hola4', 'hola5']"
74
+ :series="[{ data:[4, 1, 4, 2, 5] }]">
75
+ </lesli-chart-bar>
76
+ </lesli-card>
77
+ </template>
@@ -0,0 +1,93 @@
1
+ <script setup>
2
+ /*
3
+ Copyright (c) 2022, all rights reserved.
4
+
5
+ All the information provided by this platform is protected by international laws related to
6
+ industrial property, intellectual property, copyright and relative international laws.
7
+ All intellectual or industrial property rights of the code, texts, trade mark, design,
8
+ pictures and any other information belongs to the owner of this platform.
9
+
10
+ Without the written permission of the owner, any replication, modification,
11
+ transmission, publication is strictly forbidden.
12
+
13
+ For more information read the license file including with this software.
14
+
15
+ // · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
16
+ // ·
17
+ */
18
+
19
+
20
+ // · import vue tools
21
+ import { onMounted } from "vue"
22
+
23
+ // · import lesli stores
24
+ import { useAssignments } from "LesliSupport/vue/stores/tickets/assignment"
25
+
26
+ // · import vue router composable
27
+ import { useRoute } from "vue-router"
28
+
29
+ // · implement stores
30
+ const storeAssignments = useAssignments()
31
+
32
+ // · initialize/inject plugins
33
+ const route = useRoute()
34
+
35
+ // ·
36
+ const translations = {
37
+ users: I18n.t("core.users"),
38
+ shared: I18n.t("core.shared"),
39
+ sla: I18n.t('help.slas'),
40
+ main: I18n.t('help.tickets')
41
+ }
42
+
43
+ const columns = [{
44
+ field: "name",
45
+ label: translations.users.view_table_header_name
46
+ }, {
47
+ field: "email",
48
+ label: translations.users.view_table_header_email
49
+ }, {
50
+ field: "roles",
51
+ label: translations.users.view_table_header_role
52
+ }, {
53
+ field: "assigned",
54
+ label: ""
55
+ }]
56
+
57
+
58
+ onMounted(() => {
59
+ storeAssignments.ticket_id = route.params.id
60
+ storeAssignments.fetchTicket(route.params.id)
61
+ })
62
+
63
+ /**
64
+ * @description This action is used to verify if a user is assigned or unassigned
65
+ * @param {Object} user The user to be checked
66
+ */
67
+ function submitAssignment(user){
68
+ if(!user.checked){
69
+ storeAssignments.postAssignment(user)
70
+ }else{
71
+ storeAssignments.deleteAssignment(user.assignment_id)
72
+ }
73
+ }
74
+
75
+ </script>
76
+ <template>
77
+ <h5 class="title is-5">{{translations.main.view_tab_title_assignments}}</h5>
78
+ <lesli-table
79
+ :records="storeAssignments.users"
80
+ :columns="columns">
81
+ <template #roles="{ column, value }">
82
+ <span
83
+ v-for="role in value"
84
+ :key="role.id"
85
+ class="tag is-success is-small is-rounded mr-1">
86
+ {{ role.name }}
87
+ </span>
88
+ </template>
89
+ <template #assigned="{ record, value }">
90
+ <input type="checkbox" v-model="record.checked" @input="submitAssignment(record)">
91
+ </template>
92
+ </lesli-table>
93
+ </template>