lesli_support 0.1.0 → 1.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 +4 -4
- data/app/assets/images/lesli_support/support-logo.svg +1 -9
- data/app/assets/javascripts/lesli_support/application.js +1 -4998
- data/app/assets/stylesheets/lesli_support/application.css +3 -3
- data/app/controllers/lesli_support/catalog/items_controller.rb +60 -0
- data/app/controllers/lesli_support/item/discussions_controller.rb +6 -0
- data/app/controllers/lesli_support/item/tasks_controller.rb +6 -0
- data/app/controllers/lesli_support/ticket/activities_controller.rb +60 -0
- data/app/controllers/lesli_support/ticket/discussions_controller.rb +1 -2
- data/app/controllers/lesli_support/tickets_controller.rb +37 -56
- data/app/helpers/lesli_support/{options_helper.rb → catalog/items_helper.rb} +1 -1
- data/app/helpers/lesli_support/ticket/activities_helper.rb +4 -0
- data/app/models/lesli_support/account.rb +5 -8
- data/app/models/lesli_support/catalog/item.rb +4 -0
- data/app/models/lesli_support/catalog.rb +3 -12
- data/app/models/lesli_support/dashboard.rb +6 -10
- data/app/models/lesli_support/item/activity.rb +4 -0
- data/app/models/lesli_support/item/discussion.rb +6 -0
- data/app/models/lesli_support/item/task.rb +6 -0
- data/app/models/lesli_support/ticket/activity.rb +4 -0
- data/app/models/lesli_support/ticket/discussion.rb +3 -4
- data/app/models/lesli_support/ticket.rb +66 -7
- data/app/services/lesli_support/ticket_service.rb +37 -55
- data/app/views/lesli_support/catalog/items/_form.html.erb +17 -0
- data/app/views/lesli_support/catalog/items/_item.html.erb +2 -0
- data/app/views/lesli_support/catalog/items/edit.html.erb +12 -0
- data/app/views/lesli_support/catalog/items/index.html.erb +16 -0
- data/app/views/lesli_support/catalog/items/new.html.erb +11 -0
- data/app/views/lesli_support/catalog/items/show.html.erb +10 -0
- data/app/views/lesli_support/dashboards/_component-latest-tickets.html.erb +34 -0
- data/app/views/lesli_support/dashboards/_component-tickets-by-category.html.erb +17 -0
- data/app/views/lesli_support/dashboards/_component-tickets-created.html.erb +10 -0
- data/app/views/lesli_support/dashboards/_component-tickets-open.html.erb +5 -0
- data/app/views/lesli_support/tickets/_form.html.erb +27 -0
- data/app/views/lesli_support/tickets/index.html.erb +35 -4
- data/app/views/lesli_support/tickets/new.html.erb +31 -14
- data/app/views/lesli_support/tickets/show.html.erb +30 -15
- data/config/locales/translations.en.yml +1 -42
- data/config/locales/translations.es.yml +1 -42
- data/config/locales/translations.fr.yml +1 -42
- data/config/locales/translations.it.yml +1 -42
- data/config/locales/translations.pt.yml +1 -42
- data/config/routes.rb +5 -25
- data/db/migrate/v1/0702000110_create_lesli_support_accounts.rb +10 -8
- data/db/migrate/v1/0702002010_create_lesli_support_catalogs.rb +37 -0
- data/db/migrate/v1/0702100110_create_lesli_support_slas.rb +2 -6
- data/db/migrate/v1/0702110110_create_lesli_support_tickets.rb +18 -49
- data/db/seed/development.rb +43 -22
- data/db/seed/production.rb +7 -2
- data/db/seed/seeds.json +64 -0
- data/db/seed/test.rb +2 -2
- data/db/seeds.rb +6 -13
- data/db/{migrate/v1/0702000210_create_lesli_support_account_settings.rb → tables/0010009010_create_feedbacks.rb} +21 -11
- data/db/{migrate/v1 → tables}/0702010110_create_lesli_support_catalog_workspaces.rb +7 -7
- data/db/{migrate/v1 → tables}/0702010210_create_lesli_support_catalog_types.rb +6 -6
- data/db/{migrate/v1 → tables}/0702010310_create_lesli_support_catalog_categories.rb +7 -7
- data/db/{migrate/v1 → tables}/0702010410_create_lesli_support_catalog_priorities.rb +7 -7
- data/lib/lesli_support/version.rb +2 -2
- data/readme.md +77 -25
- metadata +37 -91
- data/app/controllers/lesli_support/catalog_categories_controller.rb +0 -60
- data/app/controllers/lesli_support/catalog_priorities_controller.rb +0 -60
- data/app/controllers/lesli_support/catalog_types_controller.rb +0 -60
- data/app/controllers/lesli_support/catalog_workspaces_controller.rb +0 -60
- data/app/controllers/lesli_support/dashboard/components_controller.rb +0 -92
- data/app/controllers/lesli_support/options_controller.rb +0 -23
- data/app/helpers/lesli_support/catalog_categories_helper.rb +0 -4
- data/app/helpers/lesli_support/catalog_priorities_helper.rb +0 -4
- data/app/helpers/lesli_support/catalog_types_helper.rb +0 -4
- data/app/helpers/lesli_support/catalog_workspaces_helper.rb +0 -4
- data/app/models/lesli_support/catalog_category.rb +0 -5
- data/app/models/lesli_support/catalog_priority.rb +0 -5
- data/app/models/lesli_support/catalog_type.rb +0 -5
- data/app/models/lesli_support/catalog_workspace.rb +0 -5
- data/app/models/lesli_support/dashboard/component.rb +0 -18
- data/app/models/lesli_support/option.rb +0 -4
- data/app/views/layouts/lesli_support/application.html.erb +0 -15
- data/app/views/lesli_support/catalog_categories/_catalog_category.html.erb +0 -2
- data/app/views/lesli_support/catalog_categories/_form.html.erb +0 -17
- data/app/views/lesli_support/catalog_categories/edit.html.erb +0 -10
- data/app/views/lesli_support/catalog_categories/index.html.erb +0 -14
- data/app/views/lesli_support/catalog_categories/new.html.erb +0 -9
- data/app/views/lesli_support/catalog_categories/show.html.erb +0 -10
- data/app/views/lesli_support/catalog_priorities/_catalog_priority.html.erb +0 -2
- data/app/views/lesli_support/catalog_priorities/_form.html.erb +0 -17
- data/app/views/lesli_support/catalog_priorities/edit.html.erb +0 -10
- data/app/views/lesli_support/catalog_priorities/index.html.erb +0 -14
- data/app/views/lesli_support/catalog_priorities/new.html.erb +0 -9
- data/app/views/lesli_support/catalog_priorities/show.html.erb +0 -10
- data/app/views/lesli_support/catalog_types/_catalog_type.html.erb +0 -2
- data/app/views/lesli_support/catalog_types/_form.html.erb +0 -17
- data/app/views/lesli_support/catalog_types/edit.html.erb +0 -10
- data/app/views/lesli_support/catalog_types/index.html.erb +0 -14
- data/app/views/lesli_support/catalog_types/new.html.erb +0 -9
- data/app/views/lesli_support/catalog_types/show.html.erb +0 -10
- data/app/views/lesli_support/catalog_workspaces/_catalog_workspace.html.erb +0 -2
- data/app/views/lesli_support/catalog_workspaces/_form.html.erb +0 -17
- data/app/views/lesli_support/catalog_workspaces/edit.html.erb +0 -10
- data/app/views/lesli_support/catalog_workspaces/index.html.erb +0 -14
- data/app/views/lesli_support/catalog_workspaces/new.html.erb +0 -9
- data/app/views/lesli_support/catalog_workspaces/show.html.erb +0 -10
- data/app/views/lesli_support/dashboards/edit.html.erb +0 -1
- data/app/views/lesli_support/dashboards/index.html.erb +0 -1
- data/app/views/lesli_support/dashboards/new.html.erb +0 -1
- data/app/views/lesli_support/dashboards/show.html.erb +0 -1
- data/app/views/lesli_support/options/_form.html.erb +0 -17
- data/app/views/lesli_support/options/_option.html.erb +0 -2
- data/app/views/lesli_support/options/edit.html.erb +0 -10
- data/app/views/lesli_support/options/index.html.erb +0 -14
- data/app/views/lesli_support/options/new.html.erb +0 -9
- data/app/views/lesli_support/options/show.html.erb +0 -10
- data/app/views/lesli_support/ticket/discussions/_discussion.html.erb +0 -2
- data/app/views/lesli_support/ticket/discussions/_form.html.erb +0 -17
- data/app/views/lesli_support/ticket/discussions/edit.html.erb +0 -10
- data/app/views/lesli_support/ticket/discussions/index.html.erb +0 -14
- data/app/views/lesli_support/ticket/discussions/new.html.erb +0 -9
- data/app/views/lesli_support/ticket/discussions/show.html.erb +0 -10
- data/app/views/lesli_support/tickets/edit.html.erb +0 -20
- data/db/migrate/v1/0702050110_create_lesli_support_dashboards.rb +0 -50
- data/db/migrate/v1/0702050210_create_lesli_support_dashboard_components.rb +0 -50
- data/db/migrate/v1/0702110510_create_lesli_support_ticket_discussions.rb +0 -52
- data/lib/scss/application.scss +0 -11
- data/lib/vue/application.js +0 -93
- data/lib/vue/apps/dashboard/components/engine-version.vue +0 -71
- data/lib/vue/apps/dashboard/components/my-tasks.vue +0 -77
- data/lib/vue/apps/tickets/components/assignments.vue +0 -93
- data/lib/vue/apps/tickets/components/form.vue +0 -305
- data/lib/vue/apps/tickets/components/internal-comments.vue +0 -107
- data/lib/vue/apps/tickets/components/sla-info.vue +0 -115
- data/lib/vue/apps/tickets/index.vue +0 -145
- data/lib/vue/apps/tickets/new.vue +0 -78
- data/lib/vue/apps/tickets/show.vue +0 -183
- data/lib/vue/stores/tickets.js +0 -276
- data/lib/vue/stores/translations.json +0 -272
- /data/app/views/lesli_support/partials/{_engine-navigation.html.erb → _navigation.html.erb} +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
!*** css ./node_modules/css-loader/dist/cjs.js??
|
|
3
|
-
|
|
1
|
+
/*!**************************************************************************************************************************************************************!*\
|
|
2
|
+
!*** css ./node_modules/css-loader/dist/cjs.js??ruleSet[1].rules[0].use[1]!./node_modules/sass-loader/dist/cjs.js!../LesliSupport/lib/scss/application.scss ***!
|
|
3
|
+
\**************************************************************************************************************************************************************/
|
|
4
4
|
.lesli-support-tickets .lesli-form > fieldset {
|
|
5
5
|
padding: 3rem 6rem;
|
|
6
6
|
}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class Catalog::ItemsController < ApplicationController
|
|
3
|
+
before_action :set_catalog_item, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /catalog/items
|
|
6
|
+
def index
|
|
7
|
+
@catalog_items = Catalog::Item.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /catalog/items/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /catalog/items/new
|
|
15
|
+
def new
|
|
16
|
+
@catalog_item = Catalog::Item.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /catalog/items/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /catalog/items
|
|
24
|
+
def create
|
|
25
|
+
@catalog_item = Catalog::Item.new(catalog_item_params)
|
|
26
|
+
|
|
27
|
+
if @catalog_item.save
|
|
28
|
+
redirect_to @catalog_item, notice: "Item was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /catalog/items/1
|
|
35
|
+
def update
|
|
36
|
+
if @catalog_item.update(catalog_item_params)
|
|
37
|
+
redirect_to @catalog_item, notice: "Item was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /catalog/items/1
|
|
44
|
+
def destroy
|
|
45
|
+
@catalog_item.destroy!
|
|
46
|
+
redirect_to catalog_items_url, notice: "Item 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_item
|
|
52
|
+
@catalog_item = Catalog::Item.find(params[:id])
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def catalog_item_params
|
|
57
|
+
params.fetch(:catalog_item, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
module LesliSupport
|
|
2
|
+
class Ticket::ActivitiesController < ApplicationController
|
|
3
|
+
before_action :set_ticket_activity, only: %i[ show edit update destroy ]
|
|
4
|
+
|
|
5
|
+
# GET /ticket/activities
|
|
6
|
+
def index
|
|
7
|
+
@ticket_activities = Ticket::Activity.all
|
|
8
|
+
end
|
|
9
|
+
|
|
10
|
+
# GET /ticket/activities/1
|
|
11
|
+
def show
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
# GET /ticket/activities/new
|
|
15
|
+
def new
|
|
16
|
+
@ticket_activity = Ticket::Activity.new
|
|
17
|
+
end
|
|
18
|
+
|
|
19
|
+
# GET /ticket/activities/1/edit
|
|
20
|
+
def edit
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
# POST /ticket/activities
|
|
24
|
+
def create
|
|
25
|
+
@ticket_activity = Ticket::Activity.new(ticket_activity_params)
|
|
26
|
+
|
|
27
|
+
if @ticket_activity.save
|
|
28
|
+
redirect_to @ticket_activity, notice: "Activity was successfully created."
|
|
29
|
+
else
|
|
30
|
+
render :new, status: :unprocessable_entity
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# PATCH/PUT /ticket/activities/1
|
|
35
|
+
def update
|
|
36
|
+
if @ticket_activity.update(ticket_activity_params)
|
|
37
|
+
redirect_to @ticket_activity, notice: "Activity was successfully updated.", status: :see_other
|
|
38
|
+
else
|
|
39
|
+
render :edit, status: :unprocessable_entity
|
|
40
|
+
end
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
# DELETE /ticket/activities/1
|
|
44
|
+
def destroy
|
|
45
|
+
@ticket_activity.destroy!
|
|
46
|
+
redirect_to ticket_activities_path, notice: "Activity 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_ticket_activity
|
|
52
|
+
@ticket_activity = Ticket::Activity.find(params.expect(:id))
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
# Only allow a list of trusted parameters through.
|
|
56
|
+
def ticket_activity_params
|
|
57
|
+
params.fetch(:ticket_activity, {})
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Lesli
|
|
4
4
|
|
|
5
|
-
Copyright (c)
|
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
|
6
6
|
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
|
8
8
|
it under the terms of the GNU General Public License as published by
|
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
|
19
19
|
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
|
21
21
|
|
|
22
|
-
Made with ♥ by
|
|
22
|
+
Made with ♥ by LesliTech
|
|
23
23
|
Building a better future, one line of code at a time.
|
|
24
24
|
|
|
25
25
|
@contact hello@lesli.tech
|
|
@@ -35,25 +35,15 @@ module LesliSupport
|
|
|
35
35
|
before_action :set_ticket, only: [:show, :update, :destroy, :images]
|
|
36
36
|
|
|
37
37
|
def index
|
|
38
|
-
|
|
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
|
|
38
|
+
@tickets = respond_with_pagination(TicketService.new(current_user, query).index)
|
|
45
39
|
end
|
|
46
40
|
|
|
47
41
|
def show
|
|
48
|
-
|
|
49
|
-
format.html { }
|
|
50
|
-
format.json do
|
|
51
|
-
respond_with_successful(@ticket.show)
|
|
52
|
-
end
|
|
53
|
-
end
|
|
42
|
+
@ticket = @ticket.show
|
|
54
43
|
end
|
|
55
44
|
|
|
56
45
|
def new
|
|
46
|
+
@ticket = Ticket.new
|
|
57
47
|
end
|
|
58
48
|
|
|
59
49
|
def edit
|
|
@@ -62,38 +52,36 @@ module LesliSupport
|
|
|
62
52
|
def create
|
|
63
53
|
ticket = TicketService.new(current_user, query).create(ticket_params)
|
|
64
54
|
|
|
55
|
+
@ticket = ticket.result
|
|
65
56
|
if ticket.successful?
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
57
|
+
success('ticket creado de forma exitosass')
|
|
58
|
+
respond_with_lesli(
|
|
59
|
+
#:html => redirect_to(ticket_path(@ticket.id)),
|
|
60
|
+
:turbo => stream_redirection(ticket_path(@ticket.id))
|
|
61
|
+
)
|
|
62
|
+
else
|
|
63
|
+
respond_with_lesli(
|
|
64
|
+
:turbo => ticket.errors_as_sentence
|
|
65
|
+
)
|
|
69
66
|
end
|
|
70
67
|
end
|
|
71
68
|
|
|
72
69
|
def update
|
|
73
70
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
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
|
|
71
|
+
if @ticket.update(ticket_params)
|
|
72
|
+
# log(
|
|
73
|
+
# subject: @invite,
|
|
74
|
+
# description: "Ticket updated successfully"
|
|
75
|
+
# )
|
|
76
|
+
respond_with_lesli(
|
|
77
|
+
:turbo => stream_notification_success("Ticket updated successfully")
|
|
78
|
+
)
|
|
79
|
+
else
|
|
80
|
+
respond_with_lesli(
|
|
81
|
+
:turbo => stream_notification_danger(@ticket.errors)
|
|
82
|
+
#:turbo => stream_notification_danger(@ticket.errors.full_messages.to_sentence)
|
|
83
|
+
)
|
|
84
|
+
end
|
|
97
85
|
end
|
|
98
86
|
|
|
99
87
|
def destroy
|
|
@@ -135,19 +123,17 @@ module LesliSupport
|
|
|
135
123
|
private
|
|
136
124
|
|
|
137
125
|
def set_ticket
|
|
138
|
-
|
|
139
|
-
ticket_id = params[:ticket_id] unless params[:ticket_id].blank?
|
|
140
|
-
@ticket = TicketService.new(current_user, query).find(ticket_id)
|
|
126
|
+
@ticket = TicketService.new(current_user, query).find(id:params[:id])
|
|
141
127
|
return respond_with_not_found unless @ticket.found?
|
|
142
128
|
end
|
|
143
129
|
|
|
144
130
|
def ticket_params
|
|
145
131
|
params.require(:ticket).permit(
|
|
146
|
-
:
|
|
147
|
-
#:
|
|
148
|
-
:
|
|
149
|
-
:
|
|
150
|
-
:
|
|
132
|
+
:type_id,
|
|
133
|
+
#:source_id,
|
|
134
|
+
:category_id,
|
|
135
|
+
:priority_id,
|
|
136
|
+
:workspace_id,
|
|
151
137
|
|
|
152
138
|
:subject,
|
|
153
139
|
:description,
|
|
@@ -156,13 +142,8 @@ module LesliSupport
|
|
|
156
142
|
:deadline,
|
|
157
143
|
:started_at,
|
|
158
144
|
: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
|
|
145
|
+
:hours_worked,
|
|
146
|
+
:owner_id
|
|
166
147
|
)
|
|
167
148
|
end
|
|
168
149
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Lesli
|
|
4
4
|
|
|
5
|
-
Copyright (c)
|
|
5
|
+
Copyright (c) 2025, Lesli Technologies, S. A.
|
|
6
6
|
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
|
8
8
|
it under the terms of the GNU General Public License as published by
|
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
|
19
19
|
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
|
21
21
|
|
|
22
|
-
Made with ♥ by
|
|
22
|
+
Made with ♥ by LesliTech
|
|
23
23
|
Building a better future, one line of code at a time.
|
|
24
24
|
|
|
25
25
|
@contact hello@lesli.tech
|
|
@@ -33,16 +33,13 @@ Building a better future, one line of code at a time.
|
|
|
33
33
|
module LesliSupport
|
|
34
34
|
class Account < ApplicationRecord
|
|
35
35
|
belongs_to :account, class_name: "Lesli::Account"
|
|
36
|
-
has_many :
|
|
37
|
-
has_many :
|
|
38
|
-
has_many :catalog_categories
|
|
39
|
-
has_many :catalog_priorities
|
|
36
|
+
has_many :dashboards
|
|
37
|
+
has_many :catalogs, class_name: "Catalog"
|
|
40
38
|
has_many :tickets
|
|
41
|
-
|
|
39
|
+
|
|
42
40
|
after_create :initialize_account
|
|
43
41
|
|
|
44
42
|
def initialize_account
|
|
45
|
-
Dashboard.initialize_dashboard(self)
|
|
46
43
|
end
|
|
47
44
|
end
|
|
48
45
|
end
|
|
@@ -1,15 +1,6 @@
|
|
|
1
1
|
module LesliSupport
|
|
2
|
-
class Catalog <
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
after_save :catalog_option_order
|
|
7
|
-
|
|
8
|
-
def catalog_option_order
|
|
9
|
-
return if self.parent_id.nil?
|
|
10
|
-
return unless self.order.nil?
|
|
11
|
-
self.order = self.id
|
|
12
|
-
self.save!
|
|
13
|
-
end
|
|
2
|
+
class Catalog < Lesli::Shared::Catalog
|
|
3
|
+
belongs_to :account
|
|
4
|
+
has_many :items
|
|
14
5
|
end
|
|
15
6
|
end
|
|
@@ -1,15 +1,11 @@
|
|
|
1
1
|
|
|
2
2
|
module LesliSupport
|
|
3
3
|
class Dashboard < Lesli::Shared::Dashboard
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
def self.initialize_dashboard(account)
|
|
12
|
-
super(self, account, [])
|
|
13
|
-
end
|
|
4
|
+
COMPONENTS = [
|
|
5
|
+
:tickets_created,
|
|
6
|
+
:tickets_by_category,
|
|
7
|
+
:tickets_open,
|
|
8
|
+
{:latest_tickets => { size: 8, position: 1 }},
|
|
9
|
+
]
|
|
14
10
|
end
|
|
15
11
|
end
|
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
module LesliSupport
|
|
2
|
-
class Ticket::Discussion < Lesli::
|
|
3
|
-
belongs_to :
|
|
4
|
-
belongs_to :
|
|
5
|
-
has_many :children, class_name: "Discussion", foreign_key: "parent_id"
|
|
2
|
+
class Ticket::Discussion < Lesli::Items::Discussion
|
|
3
|
+
belongs_to :item, class_name: "LesliSupport::Ticket", foreign_key: "ticket_id"
|
|
4
|
+
belongs_to :user, class_name: "Lesli::User"
|
|
6
5
|
end
|
|
7
6
|
end
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
|
|
3
3
|
Lesli
|
|
4
4
|
|
|
5
|
-
Copyright (c)
|
|
5
|
+
Copyright (c) 2026, Lesli Technologies, S. A.
|
|
6
6
|
|
|
7
7
|
This program is free software: you can redistribute it and/or modify
|
|
8
8
|
it under the terms of the GNU General Public License as published by
|
|
@@ -19,7 +19,7 @@ along with this program. If not, see http://www.gnu.org/licenses/.
|
|
|
19
19
|
|
|
20
20
|
Lesli · Ruby on Rails SaaS Development Framework.
|
|
21
21
|
|
|
22
|
-
Made with ♥ by
|
|
22
|
+
Made with ♥ by LesliTech
|
|
23
23
|
Building a better future, one line of code at a time.
|
|
24
24
|
|
|
25
25
|
@contact hello@lesli.tech
|
|
@@ -33,12 +33,71 @@ Building a better future, one line of code at a time.
|
|
|
33
33
|
module LesliSupport
|
|
34
34
|
class Ticket < Lesli::ApplicationLesliRecord
|
|
35
35
|
belongs_to :account
|
|
36
|
+
belongs_to :owner, class_name: "Lesli::User"
|
|
36
37
|
belongs_to :user, class_name: "Lesli::User"
|
|
37
|
-
belongs_to :creator, class_name: "Lesli::User"
|
|
38
38
|
|
|
39
|
-
|
|
40
|
-
belongs_to :
|
|
41
|
-
belongs_to :
|
|
42
|
-
belongs_to :
|
|
39
|
+
# Catalogs
|
|
40
|
+
belongs_to :type, optional: true, class_name: "Catalog::Item"
|
|
41
|
+
belongs_to :category, optional: true, class_name: "Catalog::Item"
|
|
42
|
+
belongs_to :priority, optional: true, class_name: "Catalog::Item"
|
|
43
|
+
|
|
44
|
+
# Items
|
|
45
|
+
include Lesli::Item::Tasks
|
|
46
|
+
include Lesli::Item::Activities
|
|
47
|
+
include Lesli::Item::Discussions
|
|
48
|
+
#has_many :discussions, class_name: "LesliSupport::Item::Discussion"
|
|
49
|
+
|
|
50
|
+
# include Lesli::Items::Attachments
|
|
51
|
+
# include Lesli::Items::Subscribers
|
|
52
|
+
|
|
53
|
+
# Hooks
|
|
54
|
+
before_create :before_create_ticket
|
|
55
|
+
after_save :after_save_activities
|
|
56
|
+
|
|
57
|
+
private
|
|
58
|
+
|
|
59
|
+
def before_create_ticket
|
|
60
|
+
prefix = Lesli.config.support.dig(:prefix)
|
|
61
|
+
self.subject = self.subject.titleize
|
|
62
|
+
self.uid ||= loop do
|
|
63
|
+
candidate = generate_resource_uid(prefix:prefix)
|
|
64
|
+
break candidate unless Ticket.exists?(uid: candidate)
|
|
65
|
+
end
|
|
66
|
+
end
|
|
67
|
+
|
|
68
|
+
def after_save_activities
|
|
69
|
+
|
|
70
|
+
if self.saved_change_to_owner_id?
|
|
71
|
+
self.activities_create(
|
|
72
|
+
description: "Agent assigned #{self.owner.name}",
|
|
73
|
+
activity_code: :owner_id,
|
|
74
|
+
metadata: { owner_id: self.owner.id }
|
|
75
|
+
)
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
if self.saved_change_to_type_id?
|
|
79
|
+
self.activities_create(
|
|
80
|
+
description: "Ticket type updated to #{self.type.name}",
|
|
81
|
+
activity_code: :type_id,
|
|
82
|
+
metadata: { type_id: self.type.id }
|
|
83
|
+
)
|
|
84
|
+
end
|
|
85
|
+
|
|
86
|
+
if self.saved_change_to_category_id?
|
|
87
|
+
self.activities_create(
|
|
88
|
+
description: "Ticket category updated to #{self.category.name}",
|
|
89
|
+
activity_code: :category_id,
|
|
90
|
+
metadata: { category_id: self.category.id }
|
|
91
|
+
)
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
if self.saved_change_to_priority_id?
|
|
95
|
+
self.activities_create(
|
|
96
|
+
description: "Ticket priority updated to #{self.priority.name}",
|
|
97
|
+
activity_code: :priority_id,
|
|
98
|
+
metadata: { priority_id: self.priority.id }
|
|
99
|
+
)
|
|
100
|
+
end
|
|
101
|
+
end
|
|
43
102
|
end
|
|
44
103
|
end
|