lesli_support 0.1.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 +5 -0
- data/app/assets/config/lesli_support_manifest.js +38 -0
- data/app/assets/images/lesli_support/support-logo.svg +9 -0
- data/app/assets/javascripts/lesli_support/application.js +5011 -0
- data/app/assets/stylesheets/lesli_support/application.css +9 -0
- data/app/controllers/lesli_support/accounts_controller.rb +60 -0
- data/app/controllers/lesli_support/application_controller.rb +4 -0
- data/app/controllers/lesli_support/catalog_categories_controller.rb +60 -0
- data/app/controllers/lesli_support/catalog_priorities_controller.rb +60 -0
- data/app/controllers/lesli_support/catalog_types_controller.rb +60 -0
- data/app/controllers/lesli_support/catalog_workspaces_controller.rb +60 -0
- data/app/controllers/lesli_support/catalogs_controller.rb +12 -0
- data/app/controllers/lesli_support/dashboard/components_controller.rb +92 -0
- data/app/controllers/lesli_support/dashboards_controller.rb +36 -0
- data/app/controllers/lesli_support/options_controller.rb +23 -0
- data/app/controllers/lesli_support/ticket/discussions_controller.rb +5 -0
- data/app/controllers/lesli_support/tickets_controller.rb +169 -0
- data/app/helpers/lesli_support/accounts_helper.rb +4 -0
- data/app/helpers/lesli_support/application_helper.rb +4 -0
- data/app/helpers/lesli_support/catalog_categories_helper.rb +4 -0
- data/app/helpers/lesli_support/catalog_priorities_helper.rb +4 -0
- data/app/helpers/lesli_support/catalog_types_helper.rb +4 -0
- data/app/helpers/lesli_support/catalog_workspaces_helper.rb +4 -0
- data/app/helpers/lesli_support/catalogs_helper.rb +4 -0
- data/app/helpers/lesli_support/dashboards_helper.rb +4 -0
- data/app/helpers/lesli_support/options_helper.rb +4 -0
- data/app/helpers/lesli_support/ticket/discussions_helper.rb +4 -0
- data/app/jobs/lesli_support/application_job.rb +4 -0
- data/app/mailers/lesli_support/application_mailer.rb +6 -0
- data/app/models/lesli_support/account.rb +48 -0
- data/app/models/lesli_support/application_record.rb +5 -0
- data/app/models/lesli_support/catalog.rb +15 -0
- data/app/models/lesli_support/catalog_category.rb +5 -0
- data/app/models/lesli_support/catalog_priority.rb +5 -0
- data/app/models/lesli_support/catalog_type.rb +5 -0
- data/app/models/lesli_support/catalog_workspace.rb +5 -0
- data/app/models/lesli_support/dashboard/component.rb +18 -0
- data/app/models/lesli_support/dashboard.rb +15 -0
- data/app/models/lesli_support/option.rb +4 -0
- data/app/models/lesli_support/ticket/discussion.rb +7 -0
- data/app/models/lesli_support/ticket.rb +44 -0
- data/app/services/lesli_support/catalog_service.rb +139 -0
- data/app/services/lesli_support/ticket_service.rb +147 -0
- data/app/views/layouts/lesli_support/application.html.erb +15 -0
- data/app/views/lesli_support/accounts/_account.html.erb +2 -0
- data/app/views/lesli_support/accounts/_form.html.erb +17 -0
- data/app/views/lesli_support/accounts/edit.html.erb +10 -0
- data/app/views/lesli_support/accounts/index.html.erb +14 -0
- data/app/views/lesli_support/accounts/new.html.erb +9 -0
- data/app/views/lesli_support/accounts/show.html.erb +10 -0
- data/app/views/lesli_support/catalog_categories/_catalog_category.html.erb +2 -0
- data/app/views/lesli_support/catalog_categories/_form.html.erb +17 -0
- data/app/views/lesli_support/catalog_categories/edit.html.erb +10 -0
- data/app/views/lesli_support/catalog_categories/index.html.erb +14 -0
- data/app/views/lesli_support/catalog_categories/new.html.erb +9 -0
- data/app/views/lesli_support/catalog_categories/show.html.erb +10 -0
- data/app/views/lesli_support/catalog_priorities/_catalog_priority.html.erb +2 -0
- data/app/views/lesli_support/catalog_priorities/_form.html.erb +17 -0
- data/app/views/lesli_support/catalog_priorities/edit.html.erb +10 -0
- data/app/views/lesli_support/catalog_priorities/index.html.erb +14 -0
- data/app/views/lesli_support/catalog_priorities/new.html.erb +9 -0
- data/app/views/lesli_support/catalog_priorities/show.html.erb +10 -0
- data/app/views/lesli_support/catalog_types/_catalog_type.html.erb +2 -0
- data/app/views/lesli_support/catalog_types/_form.html.erb +17 -0
- data/app/views/lesli_support/catalog_types/edit.html.erb +10 -0
- data/app/views/lesli_support/catalog_types/index.html.erb +14 -0
- data/app/views/lesli_support/catalog_types/new.html.erb +9 -0
- data/app/views/lesli_support/catalog_types/show.html.erb +10 -0
- data/app/views/lesli_support/catalog_workspaces/_catalog_workspace.html.erb +2 -0
- data/app/views/lesli_support/catalog_workspaces/_form.html.erb +17 -0
- data/app/views/lesli_support/catalog_workspaces/edit.html.erb +10 -0
- data/app/views/lesli_support/catalog_workspaces/index.html.erb +14 -0
- data/app/views/lesli_support/catalog_workspaces/new.html.erb +9 -0
- data/app/views/lesli_support/catalog_workspaces/show.html.erb +10 -0
- data/app/views/lesli_support/catalogs/_catalog.html.erb +2 -0
- data/app/views/lesli_support/catalogs/_form.html.erb +17 -0
- data/app/views/lesli_support/catalogs/edit.html.erb +10 -0
- data/app/views/lesli_support/catalogs/index.html.erb +14 -0
- data/app/views/lesli_support/catalogs/new.html.erb +9 -0
- data/app/views/lesli_support/catalogs/show.html.erb +10 -0
- data/app/views/lesli_support/dashboards/edit.html.erb +1 -0
- data/app/views/lesli_support/dashboards/index.html.erb +1 -0
- data/app/views/lesli_support/dashboards/new.html.erb +1 -0
- data/app/views/lesli_support/dashboards/show.html.erb +1 -0
- data/app/views/lesli_support/options/_form.html.erb +17 -0
- data/app/views/lesli_support/options/_option.html.erb +2 -0
- data/app/views/lesli_support/options/edit.html.erb +10 -0
- data/app/views/lesli_support/options/index.html.erb +14 -0
- data/app/views/lesli_support/options/new.html.erb +9 -0
- data/app/views/lesli_support/options/show.html.erb +10 -0
- data/app/views/lesli_support/partials/_engine-navigation.html.erb +39 -0
- data/app/views/lesli_support/ticket/discussions/_discussion.html.erb +2 -0
- data/app/views/lesli_support/ticket/discussions/_form.html.erb +17 -0
- data/app/views/lesli_support/ticket/discussions/edit.html.erb +10 -0
- data/app/views/lesli_support/ticket/discussions/index.html.erb +14 -0
- data/app/views/lesli_support/ticket/discussions/new.html.erb +9 -0
- data/app/views/lesli_support/ticket/discussions/show.html.erb +10 -0
- data/app/views/lesli_support/tickets/edit.html.erb +20 -0
- data/app/views/lesli_support/tickets/index.html.erb +34 -0
- data/app/views/lesli_support/tickets/new.html.erb +20 -0
- data/app/views/lesli_support/tickets/show.html.erb +20 -0
- data/config/locales/translations.en.yml +43 -0
- data/config/locales/translations.es.yml +43 -0
- data/config/locales/translations.fr.yml +43 -0
- data/config/locales/translations.it.yml +43 -0
- data/config/locales/translations.pt.yml +43 -0
- data/config/routes.rb +61 -0
- data/db/migrate/v1/0702000110_create_lesli_support_accounts.rb +42 -0
- data/db/migrate/v1/0702000210_create_lesli_support_account_settings.rb +46 -0
- data/db/migrate/v1/0702010110_create_lesli_support_catalog_workspaces.rb +43 -0
- data/db/migrate/v1/0702010210_create_lesli_support_catalog_types.rb +42 -0
- data/db/migrate/v1/0702010310_create_lesli_support_catalog_categories.rb +43 -0
- data/db/migrate/v1/0702010410_create_lesli_support_catalog_priorities.rb +43 -0
- data/db/migrate/v1/0702050110_create_lesli_support_dashboards.rb +50 -0
- data/db/migrate/v1/0702050210_create_lesli_support_dashboard_components.rb +50 -0
- data/db/migrate/v1/0702100110_create_lesli_support_slas.rb +59 -0
- data/db/migrate/v1/0702110110_create_lesli_support_tickets.rb +99 -0
- data/db/migrate/v1/0702110510_create_lesli_support_ticket_discussions.rb +52 -0
- data/db/seed/development.rb +62 -0
- data/db/seed/production.rb +31 -0
- data/db/seed/test.rb +31 -0
- data/db/seeds.rb +45 -0
- data/db/tables/0702010510_create_cloud_help_catalog_ticket_sources.rb +44 -0
- data/db/tables/0702020110_create_cloud_help_workflows.rb +47 -0
- data/db/tables/0702020210_create_cloud_help_workflow_statuses.rb +47 -0
- data/db/tables/0702020310_create_cloud_help_workflow_associations.rb +29 -0
- data/db/tables/0702020410_create_cloud_help_workflow_actions.rb +18 -0
- data/db/tables/0702020510_create_cloud_help_workflow_checks.rb +20 -0
- data/db/tables/0702030110_create_cloud_help_custom_fields.rb +15 -0
- data/db/tables/0702040110_create_cloud_help_custom_validations.rb +16 -0
- data/db/tables/0702040210_create_cloud_help_custom_validation_rules.rb +16 -0
- data/db/tables/0702040310_create_cloud_help_custom_validation_fields.rb +16 -0
- data/db/tables/0702100310_create_cloud_help_ticket_actions.rb +16 -0
- data/db/tables/0702100410_create_cloud_help_ticket_activities.rb +15 -0
- data/db/tables/0702100610_create_cloud_help_ticket_files.rb +16 -0
- data/db/tables/0702100710_create_cloud_help_ticket_subscribers.rb +16 -0
- data/db/tables/0702101010_create_cloud_help_ticket_timelines.rb +14 -0
- data/db/tables/0702101110_create_cloud_help_ticket_assignments.rb +15 -0
- data/db/tables/0702101210_create_cloud_help_ticket_histories.rb +15 -0
- data/db/tables/0702110310_create_cloud_help_sla_actions.rb +17 -0
- data/db/tables/0702110410_create_cloud_help_sla_activities.rb +15 -0
- data/db/tables/0702110510_create_cloud_help_sla_discussions.rb +17 -0
- data/db/tables/0702110610_create_cloud_help_sla_files.rb +16 -0
- data/db/tables/0702110710_create_cloud_help_sla_subscribers.rb +16 -0
- data/db/tables/0702111010_create_cloud_help_sla_associations.rb +13 -0
- data/lib/lesli_support/engine.rb +50 -0
- data/lib/lesli_support/version.rb +4 -0
- data/lib/lesli_support.rb +6 -0
- data/lib/scss/application.scss +11 -0
- data/lib/tasks/lesli_support_tasks.rake +4 -0
- data/lib/vue/application.js +93 -0
- data/lib/vue/apps/dashboard/components/engine-version.vue +71 -0
- data/lib/vue/apps/dashboard/components/my-tasks.vue +77 -0
- data/lib/vue/apps/tickets/components/assignments.vue +93 -0
- data/lib/vue/apps/tickets/components/form.vue +305 -0
- data/lib/vue/apps/tickets/components/internal-comments.vue +107 -0
- data/lib/vue/apps/tickets/components/sla-info.vue +115 -0
- data/lib/vue/apps/tickets/index.vue +145 -0
- data/lib/vue/apps/tickets/new.vue +78 -0
- data/lib/vue/apps/tickets/show.vue +183 -0
- data/lib/vue/stores/tickets.js +276 -0
- data/lib/vue/stores/translations.json +272 -0
- data/readme.md +72 -0
- metadata +223 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
/*!***********************************************************************************************************************************************************!*\
|
|
2
|
+
!*** css ./node_modules/css-loader/dist/cjs.js??clonedRuleSet-39.use[1]!./node_modules/sass-loader/dist/cjs.js!../LesliSupport/lib/scss/application.scss ***!
|
|
3
|
+
\***********************************************************************************************************************************************************/
|
|
4
|
+
.lesli-support-tickets .lesli-form > fieldset {
|
|
5
|
+
padding: 3rem 6rem;
|
|
6
|
+
}
|
|
7
|
+
.lesli-support-tickets .lesli-form > fieldset fieldset {
|
|
8
|
+
margin-bottom: 1.5rem;
|
|
9
|
+
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class AccountsController < ApplicationController
|
|
3
|
+
before_action :set_account, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /accounts
|
|
6
|
+
def index
|
|
7
|
+
@accounts = Account.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /accounts/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /accounts/new
|
|
15
|
+
def new
|
|
16
|
+
@account = Account.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /accounts/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /accounts
|
|
24
|
+
def create
|
|
25
|
+
@account = Account.new(account_params)
|
|
26
|
+
|
|
27
|
+
if @account.save
|
|
28
|
+
redirect_to @account, notice: "Account was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /accounts/1
|
|
35
|
+
def update
|
|
36
|
+
if @account.update(account_params)
|
|
37
|
+
redirect_to @account, notice: "Account was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /accounts/1
|
|
44
|
+
def destroy
|
|
45
|
+
@account.destroy
|
|
46
|
+
redirect_to accounts_url, notice: "Account was successfully destroyed.", status: :see_other
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
51
|
+
def set_account
|
|
52
|
+
@account = Account.find(params[:id])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def account_params
|
|
57
|
+
params.fetch(:account, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class CatalogCategoriesController < ApplicationController
|
|
3
|
+
before_action :set_catalog_category, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /catalog_categories
|
|
6
|
+
def index
|
|
7
|
+
@catalog_categories = CatalogCategory.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /catalog_categories/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /catalog_categories/new
|
|
15
|
+
def new
|
|
16
|
+
@catalog_category = CatalogCategory.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /catalog_categories/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /catalog_categories
|
|
24
|
+
def create
|
|
25
|
+
@catalog_category = CatalogCategory.new(catalog_category_params)
|
|
26
|
+
|
|
27
|
+
if @catalog_category.save
|
|
28
|
+
redirect_to @catalog_category, notice: "Catalog category was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /catalog_categories/1
|
|
35
|
+
def update
|
|
36
|
+
if @catalog_category.update(catalog_category_params)
|
|
37
|
+
redirect_to @catalog_category, notice: "Catalog category was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /catalog_categories/1
|
|
44
|
+
def destroy
|
|
45
|
+
@catalog_category.destroy
|
|
46
|
+
redirect_to catalog_categories_url, notice: "Catalog category was successfully destroyed.", status: :see_other
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
51
|
+
def set_catalog_category
|
|
52
|
+
@catalog_category = CatalogCategory.find(params[:id])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def catalog_category_params
|
|
57
|
+
params.fetch(:catalog_category, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class CatalogPrioritiesController < ApplicationController
|
|
3
|
+
before_action :set_catalog_priority, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /catalog_priorities
|
|
6
|
+
def index
|
|
7
|
+
@catalog_priorities = CatalogPriority.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /catalog_priorities/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /catalog_priorities/new
|
|
15
|
+
def new
|
|
16
|
+
@catalog_priority = CatalogPriority.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /catalog_priorities/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /catalog_priorities
|
|
24
|
+
def create
|
|
25
|
+
@catalog_priority = CatalogPriority.new(catalog_priority_params)
|
|
26
|
+
|
|
27
|
+
if @catalog_priority.save
|
|
28
|
+
redirect_to @catalog_priority, notice: "Catalog priority was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /catalog_priorities/1
|
|
35
|
+
def update
|
|
36
|
+
if @catalog_priority.update(catalog_priority_params)
|
|
37
|
+
redirect_to @catalog_priority, notice: "Catalog priority was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /catalog_priorities/1
|
|
44
|
+
def destroy
|
|
45
|
+
@catalog_priority.destroy
|
|
46
|
+
redirect_to catalog_priorities_url, notice: "Catalog priority was successfully destroyed.", status: :see_other
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
51
|
+
def set_catalog_priority
|
|
52
|
+
@catalog_priority = CatalogPriority.find(params[:id])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def catalog_priority_params
|
|
57
|
+
params.fetch(:catalog_priority, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class CatalogTypesController < ApplicationController
|
|
3
|
+
before_action :set_catalog_type, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /catalog_types
|
|
6
|
+
def index
|
|
7
|
+
@catalog_types = CatalogType.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /catalog_types/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /catalog_types/new
|
|
15
|
+
def new
|
|
16
|
+
@catalog_type = CatalogType.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /catalog_types/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /catalog_types
|
|
24
|
+
def create
|
|
25
|
+
@catalog_type = CatalogType.new(catalog_type_params)
|
|
26
|
+
|
|
27
|
+
if @catalog_type.save
|
|
28
|
+
redirect_to @catalog_type, notice: "Catalog type was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /catalog_types/1
|
|
35
|
+
def update
|
|
36
|
+
if @catalog_type.update(catalog_type_params)
|
|
37
|
+
redirect_to @catalog_type, notice: "Catalog type was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /catalog_types/1
|
|
44
|
+
def destroy
|
|
45
|
+
@catalog_type.destroy
|
|
46
|
+
redirect_to catalog_types_url, notice: "Catalog type was successfully destroyed.", status: :see_other
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
51
|
+
def set_catalog_type
|
|
52
|
+
@catalog_type = CatalogType.find(params[:id])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def catalog_type_params
|
|
57
|
+
params.fetch(:catalog_type, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class CatalogWorkspacesController < ApplicationController
|
|
3
|
+
before_action :set_catalog_workspace, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /catalog_workspaces
|
|
6
|
+
def index
|
|
7
|
+
@catalog_workspaces = CatalogWorkspace.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /catalog_workspaces/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /catalog_workspaces/new
|
|
15
|
+
def new
|
|
16
|
+
@catalog_workspace = CatalogWorkspace.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /catalog_workspaces/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /catalog_workspaces
|
|
24
|
+
def create
|
|
25
|
+
@catalog_workspace = CatalogWorkspace.new(catalog_workspace_params)
|
|
26
|
+
|
|
27
|
+
if @catalog_workspace.save
|
|
28
|
+
redirect_to @catalog_workspace, notice: "Catalog workspace was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /catalog_workspaces/1
|
|
35
|
+
def update
|
|
36
|
+
if @catalog_workspace.update(catalog_workspace_params)
|
|
37
|
+
redirect_to @catalog_workspace, notice: "Catalog workspace was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /catalog_workspaces/1
|
|
44
|
+
def destroy
|
|
45
|
+
@catalog_workspace.destroy
|
|
46
|
+
redirect_to catalog_workspaces_url, notice: "Catalog workspace was successfully destroyed.", status: :see_other
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
private
|
|
50
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
51
|
+
def set_catalog_workspace
|
|
52
|
+
@catalog_workspace = CatalogWorkspace.find(params[:id])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def catalog_workspace_params
|
|
57
|
+
params.fetch(:catalog_workspace, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,92 @@
|
|
|
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 Dashboard::ComponentsController < ApplicationController
|
|
35
|
+
before_action :set_dashboard_component, only: %i[ show edit update destroy ]
|
|
36
|
+
|
|
37
|
+
# GET /dashboard/components
|
|
38
|
+
def index
|
|
39
|
+
@dashboard_components = Dashboard::Component.all
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# GET /dashboard/components/1
|
|
43
|
+
def show
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
# GET /dashboard/components/new
|
|
47
|
+
def new
|
|
48
|
+
@dashboard_component = Dashboard::Component.new
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# GET /dashboard/components/1/edit
|
|
52
|
+
def edit
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# POST /dashboard/components
|
|
56
|
+
def create
|
|
57
|
+
@dashboard_component = Dashboard::Component.new(dashboard_component_params)
|
|
58
|
+
|
|
59
|
+
if @dashboard_component.save
|
|
60
|
+
redirect_to @dashboard_component, notice: "Component was successfully created."
|
|
61
|
+
else
|
|
62
|
+
render :new, status: :unprocessable_entity
|
|
63
|
+
end
|
|
64
|
+
end
|
|
65
|
+
|
|
66
|
+
# PATCH/PUT /dashboard/components/1
|
|
67
|
+
def update
|
|
68
|
+
if @dashboard_component.update(dashboard_component_params)
|
|
69
|
+
redirect_to @dashboard_component, notice: "Component was successfully updated.", status: :see_other
|
|
70
|
+
else
|
|
71
|
+
render :edit, status: :unprocessable_entity
|
|
72
|
+
end
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# DELETE /dashboard/components/1
|
|
76
|
+
def destroy
|
|
77
|
+
@dashboard_component.destroy
|
|
78
|
+
redirect_to dashboard_components_url, notice: "Component was successfully destroyed.", status: :see_other
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
private
|
|
82
|
+
# Use callbacks to share common setup or constraints between actions.
|
|
83
|
+
def set_dashboard_component
|
|
84
|
+
@dashboard_component = Dashboard::Component.find(params[:id])
|
|
85
|
+
end
|
|
86
|
+
|
|
87
|
+
# Only allow a list of trusted parameters through.
|
|
88
|
+
def dashboard_component_params
|
|
89
|
+
params.fetch(:dashboard_component, {})
|
|
90
|
+
end
|
|
91
|
+
end
|
|
92
|
+
end
|
|
@@ -0,0 +1,36 @@
|
|
|
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 DashboardsController < Lesli::Shared::DashboardsController
|
|
35
|
+
end
|
|
36
|
+
end
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class OptionsController < ApplicationController
|
|
3
|
+
before_action :set_option, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /options
|
|
6
|
+
def index
|
|
7
|
+
respond_to do |format|
|
|
8
|
+
format.html { }
|
|
9
|
+
format.json do
|
|
10
|
+
|
|
11
|
+
options = {
|
|
12
|
+
types: CatalogType.select(:id, :name),
|
|
13
|
+
categories: CatalogCategory.select(:id, :name),
|
|
14
|
+
priorities: CatalogPriority.select(:id, :name).order(:weight),
|
|
15
|
+
workspaces: CatalogWorkspace.select(:id, :name)
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
respond_with_successful(options)
|
|
19
|
+
end
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
23
|
+
end
|
|
@@ -0,0 +1,169 @@
|
|
|
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 TicketsController < ApplicationController
|
|
35
|
+
before_action :set_ticket, only: [:show, :update, :destroy, :images]
|
|
36
|
+
|
|
37
|
+
def index
|
|
38
|
+
respond_to do |format|
|
|
39
|
+
format.html { }
|
|
40
|
+
format.json do
|
|
41
|
+
#respond_with_successful(TicketService.new(current_user, query).index)
|
|
42
|
+
respond_with_pagination(TicketService.new(current_user, query).index)
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def show
|
|
48
|
+
respond_to do |format|
|
|
49
|
+
format.html { }
|
|
50
|
+
format.json do
|
|
51
|
+
respond_with_successful(@ticket.show)
|
|
52
|
+
end
|
|
53
|
+
end
|
|
54
|
+
end
|
|
55
|
+
|
|
56
|
+
def new
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def edit
|
|
60
|
+
end
|
|
61
|
+
|
|
62
|
+
def create
|
|
63
|
+
ticket = TicketService.new(current_user, query).create(ticket_params)
|
|
64
|
+
|
|
65
|
+
if ticket.successful?
|
|
66
|
+
respond_with_successful(ticket.result)
|
|
67
|
+
else
|
|
68
|
+
respond_with_error(ticket.errors)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
def update
|
|
73
|
+
|
|
74
|
+
respond_with_successful(@ticket.update(ticket_params))
|
|
75
|
+
|
|
76
|
+
# return respond_with_not_found unless @ticket
|
|
77
|
+
# return respond_with_unauthorized unless @ticket.is_editable_by?(current_user, bypass_status: true)
|
|
78
|
+
|
|
79
|
+
# # When the ticket is closed, the only available field for update is the status
|
|
80
|
+
# update_params = ticket_params
|
|
81
|
+
# if ["completed_successfully", "completed_unsuccessfully"].include? @ticket.status&.status_type
|
|
82
|
+
# update_params = completed_ticket_params
|
|
83
|
+
# end
|
|
84
|
+
|
|
85
|
+
# if @ticket.check_workflow_transitions(current_user, update_params)
|
|
86
|
+
# ticket_update_response = TicketServices.update(current_user, @ticket, update_params)
|
|
87
|
+
|
|
88
|
+
# @ticket = ticket_update_response.payload
|
|
89
|
+
# if ticket_update_response.successful?
|
|
90
|
+
# respond_with_successful(@ticket.show(current_user, @query))
|
|
91
|
+
# else
|
|
92
|
+
# respond_with_error(@ticket.errors.full_messages.to_sentence)
|
|
93
|
+
# end
|
|
94
|
+
# else
|
|
95
|
+
# respond_with_error(@ticket.errors.full_messages.to_sentence)
|
|
96
|
+
# end
|
|
97
|
+
end
|
|
98
|
+
|
|
99
|
+
def destroy
|
|
100
|
+
return respond_with_not_found unless @ticket
|
|
101
|
+
return respond_with_unauthorized unless @ticket.is_editable_by?(current_user)
|
|
102
|
+
|
|
103
|
+
ticket_destroy_response = TicketServices.destroy(current_user, @ticket)
|
|
104
|
+
|
|
105
|
+
if ticket_destroy_response.successful?
|
|
106
|
+
respond_with_successful
|
|
107
|
+
else
|
|
108
|
+
respond_with_error(ticket_destroy_response.payload.errors.full_messages.to_sentence)
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
|
|
112
|
+
def images
|
|
113
|
+
return respond_with_not_found unless @ticket
|
|
114
|
+
|
|
115
|
+
images = @ticket.files.filter do |file|
|
|
116
|
+
file_name = ""
|
|
117
|
+
file_name = file.attachment_s3_identifier.downcase if file.attachment_s3_identifier
|
|
118
|
+
file_name = file.attachment_identifier.downcase if file.attachment_identifier
|
|
119
|
+
|
|
120
|
+
file_name.end_with?('png') || file_name.end_with?('jpg') || file_name.end_with?('jpeg')
|
|
121
|
+
end
|
|
122
|
+
|
|
123
|
+
images = images.map do |image|
|
|
124
|
+
{
|
|
125
|
+
id: image.id,
|
|
126
|
+
name: image.name,
|
|
127
|
+
src: "/help/tickets/#{@ticket.id}/files/#{image.id}",
|
|
128
|
+
href: "/help/tickets/#{@ticket.id}/files/#{image.id}?view=true"
|
|
129
|
+
}
|
|
130
|
+
end
|
|
131
|
+
|
|
132
|
+
respond_with_successful(images)
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
private
|
|
136
|
+
|
|
137
|
+
def set_ticket
|
|
138
|
+
ticket_id = params[:id] unless params[:id].blank?
|
|
139
|
+
ticket_id = params[:ticket_id] unless params[:ticket_id].blank?
|
|
140
|
+
@ticket = TicketService.new(current_user, query).find(ticket_id)
|
|
141
|
+
return respond_with_not_found unless @ticket.found?
|
|
142
|
+
end
|
|
143
|
+
|
|
144
|
+
def ticket_params
|
|
145
|
+
params.require(:ticket).permit(
|
|
146
|
+
:catalog_type_id,
|
|
147
|
+
#:catalog_source_id,
|
|
148
|
+
:catalog_category_id,
|
|
149
|
+
:catalog_priority_id,
|
|
150
|
+
:catalog_workspace_id,
|
|
151
|
+
|
|
152
|
+
:subject,
|
|
153
|
+
:description,
|
|
154
|
+
:reference_url,
|
|
155
|
+
:tags,
|
|
156
|
+
:deadline,
|
|
157
|
+
:started_at,
|
|
158
|
+
:completed_at,
|
|
159
|
+
:hours_worked
|
|
160
|
+
)
|
|
161
|
+
end
|
|
162
|
+
|
|
163
|
+
def completed_ticket_params
|
|
164
|
+
params.require(:ticket).permit(
|
|
165
|
+
:cloud_help_workflow_statuses_id
|
|
166
|
+
)
|
|
167
|
+
end
|
|
168
|
+
end
|
|
169
|
+
end
|