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
|
@@ -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,58 +33,40 @@ Building a better future, one line of code at a time.
|
|
|
33
33
|
module LesliSupport
|
|
34
34
|
class TicketService < Lesli::ApplicationLesliService
|
|
35
35
|
|
|
36
|
-
def find
|
|
37
|
-
|
|
36
|
+
def find(id: nil, uid: nil)
|
|
37
|
+
scope = current_user.account.support.tickets
|
|
38
|
+
|
|
39
|
+
# Use a hash to filter out nil values and find the record
|
|
40
|
+
params = { id: id, uid: uid }.compact
|
|
41
|
+
|
|
42
|
+
# Search and assign the resource if search params exist
|
|
43
|
+
super(scope.find_by(params)) if params.any?
|
|
38
44
|
end
|
|
39
45
|
|
|
40
46
|
def index
|
|
41
47
|
|
|
42
48
|
return current_user.account.support.tickets.left_joins(
|
|
43
49
|
:user,
|
|
44
|
-
:
|
|
45
|
-
:
|
|
50
|
+
:owner,
|
|
51
|
+
:priority
|
|
46
52
|
).select(
|
|
47
53
|
:id,
|
|
54
|
+
:uid,
|
|
48
55
|
:subject,
|
|
49
|
-
:
|
|
50
|
-
:creator_id,
|
|
51
|
-
:user_id,
|
|
56
|
+
Date2.new.db_column(:deadline_at),
|
|
52
57
|
"CONCAT_WS(' ', lesli_users.first_name, lesli_users.last_name) as user_name",
|
|
53
|
-
"CONCAT_WS(' ',
|
|
54
|
-
"
|
|
55
|
-
"lesli_support_tickets.created_at",
|
|
56
|
-
"lesli_support_catalog_priorities.name as priority_name"
|
|
58
|
+
"CONCAT_WS(' ', owners_lesli_support_tickets.first_name, owners_lesli_support_tickets.last_name) as agent_name",
|
|
59
|
+
"lesli_support_catalog_items.name as priority_name"
|
|
57
60
|
).order(id: :desc)
|
|
58
61
|
.page(query[:pagination][:page])
|
|
59
62
|
.per(query[:pagination][:perPage])
|
|
60
|
-
|
|
61
|
-
current_user.account.help.tickets.left_joins(
|
|
62
|
-
:priority,
|
|
63
|
-
:type,
|
|
64
|
-
:workspace,
|
|
65
|
-
:category,
|
|
66
|
-
:status,
|
|
67
|
-
:assignments,
|
|
68
|
-
:assigned,
|
|
69
|
-
:user
|
|
70
|
-
).select(
|
|
71
|
-
:id,
|
|
72
|
-
:subject,
|
|
73
|
-
:deadline,
|
|
74
|
-
:assigned_id,
|
|
75
|
-
:user_id,
|
|
76
|
-
"CONCAT_WS(' ', users.first_name, users.last_name) as assigned_name",
|
|
77
|
-
"CONCAT_WS(' ', users_cloud_help_tickets.first_name, users_cloud_help_tickets.last_name) as user_name",
|
|
78
|
-
"cloud_help_tickets.updated_at",
|
|
79
|
-
"cloud_help_tickets.created_at"
|
|
80
|
-
)
|
|
81
63
|
end
|
|
82
64
|
|
|
83
65
|
def create(ticket_params)
|
|
84
66
|
|
|
85
67
|
ticket = current_user.account.support.tickets.new(ticket_params)
|
|
86
68
|
#ticket.source = Catalog::TicketSource.cloud_help_source(current_user.account.help)
|
|
87
|
-
ticket.
|
|
69
|
+
ticket.owner = current_user
|
|
88
70
|
ticket.user = current_user
|
|
89
71
|
|
|
90
72
|
unless ticket_params.dig(:started_at)
|
|
@@ -106,26 +88,26 @@ module LesliSupport
|
|
|
106
88
|
|
|
107
89
|
def show()
|
|
108
90
|
return current_user.account.support.tickets.left_joins(
|
|
109
|
-
:user, :
|
|
110
|
-
).select(
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
:reference_url,
|
|
115
|
-
:deadline,
|
|
116
|
-
:started_at,
|
|
117
|
-
:completed_at,
|
|
118
|
-
:hours_worked,
|
|
119
|
-
:creator_id,
|
|
120
|
-
:user_id,
|
|
121
|
-
:catalog_workspace_id,
|
|
122
|
-
:catalog_type_id,
|
|
123
|
-
:catalog_category_id,
|
|
124
|
-
:catalog_priority_id,
|
|
125
|
-
"CONCAT_WS(' ', lesli_users.first_name, lesli_users.last_name) as user_name",
|
|
126
|
-
"CONCAT_WS(' ', creators_lesli_support_tickets.first_name, creators_lesli_support_tickets.last_name) as creator_name",
|
|
127
|
-
"lesli_support_tickets.updated_at",
|
|
128
|
-
"lesli_support_tickets.created_at"
|
|
91
|
+
:user, :owner
|
|
92
|
+
# ).select(
|
|
93
|
+
# :id,
|
|
94
|
+
# :subject,
|
|
95
|
+
# :description,
|
|
96
|
+
# :reference_url,
|
|
97
|
+
# :deadline,
|
|
98
|
+
# :started_at,
|
|
99
|
+
# :completed_at,
|
|
100
|
+
# :hours_worked,
|
|
101
|
+
# :creator_id,
|
|
102
|
+
# :user_id,
|
|
103
|
+
# :catalog_workspace_id,
|
|
104
|
+
# :catalog_type_id,
|
|
105
|
+
# :catalog_category_id,
|
|
106
|
+
# :catalog_priority_id,
|
|
107
|
+
# "CONCAT_WS(' ', lesli_users.first_name, lesli_users.last_name) as user_name",
|
|
108
|
+
# "CONCAT_WS(' ', creators_lesli_support_tickets.first_name, creators_lesli_support_tickets.last_name) as creator_name",
|
|
109
|
+
# "lesli_support_tickets.updated_at",
|
|
110
|
+
# "lesli_support_tickets.created_at"
|
|
129
111
|
).where("lesli_support_tickets.id = ?", self.resource.id).first
|
|
130
112
|
end
|
|
131
113
|
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
<%= form_with(model: catalog_item) do |form| %>
|
|
2
|
+
<% if catalog_item.errors.any? %>
|
|
3
|
+
<div style="color: red">
|
|
4
|
+
<h2><%= pluralize(catalog_item.errors.count, "error") %> prohibited this catalog_item from being saved:</h2>
|
|
5
|
+
|
|
6
|
+
<ul>
|
|
7
|
+
<% catalog_item.errors.each do |error| %>
|
|
8
|
+
<li><%= error.full_message %></li>
|
|
9
|
+
<% end %>
|
|
10
|
+
</ul>
|
|
11
|
+
</div>
|
|
12
|
+
<% end %>
|
|
13
|
+
|
|
14
|
+
<div>
|
|
15
|
+
<%= form.submit %>
|
|
16
|
+
</div>
|
|
17
|
+
<% end %>
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
<p style="color: green"><%= notice %></p>
|
|
2
|
+
|
|
3
|
+
<% content_for :title, "Items" %>
|
|
4
|
+
|
|
5
|
+
<h1>Items</h1>
|
|
6
|
+
|
|
7
|
+
<div id="catalog_items">
|
|
8
|
+
<% @catalog_items.each do |catalog_item| %>
|
|
9
|
+
<%= render catalog_item %>
|
|
10
|
+
<p>
|
|
11
|
+
<%= link_to "Show this item", catalog_item %>
|
|
12
|
+
</p>
|
|
13
|
+
<% end %>
|
|
14
|
+
</div>
|
|
15
|
+
|
|
16
|
+
<%= link_to "New item", new_catalog_item_path %>
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<p style="color: green"><%= notice %></p>
|
|
2
|
+
|
|
3
|
+
<%= render @catalog_item %>
|
|
4
|
+
|
|
5
|
+
<div>
|
|
6
|
+
<%= link_to "Edit this item", edit_catalog_item_path(@catalog_item) %> |
|
|
7
|
+
<%= link_to "Back to items", catalog_items_path %>
|
|
8
|
+
|
|
9
|
+
<%= button_to "Destroy this item", @catalog_item, method: :delete %>
|
|
10
|
+
</div>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
<%
|
|
2
|
+
tickets = current_user.account.support.tickets.left_joins(
|
|
3
|
+
:user,
|
|
4
|
+
:owner,
|
|
5
|
+
:priority
|
|
6
|
+
).select(
|
|
7
|
+
:uid,
|
|
8
|
+
:subject,
|
|
9
|
+
Date2.new.db_column(:deadline_at),
|
|
10
|
+
"CONCAT_WS(' ', lesli_users.first_name, lesli_users.last_name) as user_name",
|
|
11
|
+
"CONCAT_WS(' ', owners_lesli_support_tickets.first_name, owners_lesli_support_tickets.last_name) as agent_name",
|
|
12
|
+
"lesli_support_catalog_items.name as priority_name"
|
|
13
|
+
).order(id: :desc)
|
|
14
|
+
.limit(5)
|
|
15
|
+
%>
|
|
16
|
+
|
|
17
|
+
<%
|
|
18
|
+
columns = [{
|
|
19
|
+
label: "ID",
|
|
20
|
+
field: "uid"
|
|
21
|
+
}, {
|
|
22
|
+
label: "Subject",
|
|
23
|
+
field: "subject"
|
|
24
|
+
}, {
|
|
25
|
+
label: "Priority",
|
|
26
|
+
field: "priority_name"
|
|
27
|
+
}]
|
|
28
|
+
%>
|
|
29
|
+
|
|
30
|
+
<%= render(LesliView::Elements::Table.new(
|
|
31
|
+
:columns => columns,
|
|
32
|
+
:records => tickets,
|
|
33
|
+
#link: -> (ticket) { ticket_path(ticket.id) }
|
|
34
|
+
)) %>
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
|
|
2
|
+
<%
|
|
3
|
+
tickets = current_user.account.support.tickets
|
|
4
|
+
.joins(:priority)
|
|
5
|
+
.group('lesli_support_catalog_items.name')
|
|
6
|
+
.count
|
|
7
|
+
%>
|
|
8
|
+
|
|
9
|
+
<%= render(LesliView::Widgets::Chart.new('Priorities', tickets))%>
|
|
10
|
+
|
|
11
|
+
<%
|
|
12
|
+
tickets = current_user.account.support.tickets
|
|
13
|
+
.joins(:category)
|
|
14
|
+
.group('lesli_support_catalog_items.name')
|
|
15
|
+
.count
|
|
16
|
+
%>
|
|
17
|
+
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
<%
|
|
2
|
+
group = Date2.new.date.db_column(:created_at)
|
|
3
|
+
tickets = current_user.account.support.tickets
|
|
4
|
+
.group(group.sub('as created_at_string',''))
|
|
5
|
+
.order(created_at: :asc)
|
|
6
|
+
.limit(10)
|
|
7
|
+
.count
|
|
8
|
+
%>
|
|
9
|
+
|
|
10
|
+
<%= render(LesliView::Widgets::Chart.new('Tickets by date', tickets, type: :line)) %>
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
|
|
2
|
+
<%= form_with(model: @ticket, builder: LesliView::Forms::Builder) do |form| %>
|
|
3
|
+
<%= form.fieldset do %>
|
|
4
|
+
<%= form.field_control(:subject) %>
|
|
5
|
+
<div class="columns">
|
|
6
|
+
<div class="column">
|
|
7
|
+
<%= form.field_control_select(:type_id, current_user.account.support.catalogs.items_for("Ticket Types").pluck(:name, :id)) %>
|
|
8
|
+
</div>
|
|
9
|
+
<div class="column">
|
|
10
|
+
<%= form.field_control_select(:category_id, current_user.account.support.catalogs.items_for("Ticket Categories").pluck(:name, :id)) %>
|
|
11
|
+
</div>
|
|
12
|
+
<div class="column">
|
|
13
|
+
<%= form.field_control_select(:priority_id, current_user.account.support.catalogs.items_for("Ticket Priorities").pluck(:name, :id)) %>
|
|
14
|
+
</div>
|
|
15
|
+
</div>
|
|
16
|
+
|
|
17
|
+
<div class="columns">
|
|
18
|
+
<div class="column">
|
|
19
|
+
<%= form.field_control_select(:owner_id, current_user.account.users.pluck(:first_name, :id)) %>
|
|
20
|
+
</div>
|
|
21
|
+
</div>
|
|
22
|
+
|
|
23
|
+
<%= form.field_control_textarea(:description, label:false) %>
|
|
24
|
+
<hr/>
|
|
25
|
+
<%= form.field_control_submit %>
|
|
26
|
+
<% end %>
|
|
27
|
+
<% end %>
|
|
@@ -1,5 +1,4 @@
|
|
|
1
|
-
|
|
2
|
-
=begin
|
|
1
|
+
<%#
|
|
3
2
|
|
|
4
3
|
Lesli
|
|
5
4
|
|
|
@@ -29,6 +28,38 @@ Building a better future, one line of code at a time.
|
|
|
29
28
|
|
|
30
29
|
// · ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~ ~·~
|
|
31
30
|
// ·
|
|
32
|
-
=end
|
|
33
31
|
%>
|
|
34
|
-
|
|
32
|
+
|
|
33
|
+
<%
|
|
34
|
+
columns = [{
|
|
35
|
+
label: "ID",
|
|
36
|
+
field: "uid"
|
|
37
|
+
}, {
|
|
38
|
+
label: "Subject",
|
|
39
|
+
field: "subject"
|
|
40
|
+
}, {
|
|
41
|
+
label: "User",
|
|
42
|
+
field: "user_name"
|
|
43
|
+
}, {
|
|
44
|
+
label: "Agent",
|
|
45
|
+
field: "agent_name"
|
|
46
|
+
}, {
|
|
47
|
+
label: "Priority",
|
|
48
|
+
field: "priority_name"
|
|
49
|
+
}, {
|
|
50
|
+
label: "Deadline",
|
|
51
|
+
field: "deadline_at_string"
|
|
52
|
+
}]
|
|
53
|
+
%>
|
|
54
|
+
|
|
55
|
+
<%= render(LesliView::Layout::Container.new("support-tickets")) do %>
|
|
56
|
+
|
|
57
|
+
<%= render(LesliView::Components::Header.new("Tickets", new_path:new_ticket_path)) %>
|
|
58
|
+
<%= render(LesliView::Components::Toolbar.new()) %>
|
|
59
|
+
|
|
60
|
+
<%= render(LesliView::Elements::Table.new(
|
|
61
|
+
:columns => columns,
|
|
62
|
+
:records => @tickets.dig(:records),
|
|
63
|
+
link: -> (ticket) { ticket_path(ticket.id) }
|
|
64
|
+
)) %>
|
|
65
|
+
<% end %>
|
|
@@ -1,20 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
=begin
|
|
3
|
-
Copyright (c) 2020, all rights reserved.
|
|
1
|
+
<%#
|
|
4
2
|
|
|
5
|
-
|
|
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.
|
|
3
|
+
Lesli
|
|
9
4
|
|
|
10
|
-
|
|
11
|
-
transmission, publication is strictly forbidden.
|
|
5
|
+
Copyright (c) 2023, Lesli Technologies, S. A.
|
|
12
6
|
|
|
13
|
-
|
|
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.
|
|
14
11
|
|
|
15
|
-
|
|
16
|
-
|
|
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.
|
|
17
24
|
|
|
18
|
-
|
|
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
|
+
// ·
|
|
19
31
|
%>
|
|
20
|
-
|
|
32
|
+
|
|
33
|
+
<%= render(LesliView::Layout::Container.new("support-tickets")) do %>
|
|
34
|
+
|
|
35
|
+
<%= render(LesliView::Components::Header.new("Create ticket")) %>
|
|
36
|
+
<%= render("form") %>
|
|
37
|
+
<% end %>
|
|
@@ -1,20 +1,35 @@
|
|
|
1
|
-
|
|
2
|
-
=begin
|
|
3
|
-
Copyright (c) 2020, all rights reserved.
|
|
1
|
+
<%= render(LesliView::Layout::Container.new("support-tickets-#{@ticket.id}")) do %>
|
|
4
2
|
|
|
5
|
-
|
|
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.
|
|
3
|
+
<%= render(LesliView::Components::Header.new("#{@ticket.uid} - #{@ticket.subject}")) %>
|
|
9
4
|
|
|
10
|
-
|
|
11
|
-
transmission, publication is strictly forbidden.
|
|
5
|
+
<%= render LesliView::Components::Tabs.new(active_tab: "ticket-information") do |tabs| %>
|
|
12
6
|
|
|
13
|
-
|
|
7
|
+
<% tabs.with_tab(id:"ticket-information", title:"information", icon:"info") do %>
|
|
8
|
+
<%= render("form") %>
|
|
9
|
+
<% end %>
|
|
14
10
|
|
|
15
|
-
|
|
16
|
-
|
|
11
|
+
<% tabs.with_tab(id:"ticket-discussions", title:"Discussions", icon:"forum") do %>
|
|
12
|
+
<%= render(LesliView::Items::Discussions.new(@ticket)) %>
|
|
13
|
+
<% end %>
|
|
17
14
|
|
|
18
|
-
|
|
19
|
-
%>
|
|
20
|
-
|
|
15
|
+
<% tabs.with_tab(id:"ticket-tasks", title:"Tasks", icon:"checklist") do %>
|
|
16
|
+
<%= render(LesliView::Items::Tasks.new(@ticket)) %>
|
|
17
|
+
<% end %>
|
|
18
|
+
|
|
19
|
+
<% tabs.with_tab(id:"ticket-activities", title:"Activities", icon:"search_activity") do %>
|
|
20
|
+
<%= render(LesliView::Items::Activities.new(@ticket, icons: {
|
|
21
|
+
type_id: 'star',
|
|
22
|
+
owner_id: 'favorite',
|
|
23
|
+
priority_id: 'sunny',
|
|
24
|
+
category_id: 'search'
|
|
25
|
+
})) %>
|
|
26
|
+
<% end %>
|
|
27
|
+
|
|
28
|
+
<% tabs.with_tab(id:"ticket-attachments", title:"Attachments", icon:"attach_file") do %>
|
|
29
|
+
<%#= render(LesliView::Items::Attachments.new(@ticket,
|
|
30
|
+
path_to_create:ticket_actions_path(@ticket),
|
|
31
|
+
path_to_update:->(action) {ticket_action_path(@ticket, action)}
|
|
32
|
+
)) %>
|
|
33
|
+
<% end %>
|
|
34
|
+
<% end %>
|
|
35
|
+
<% end %>
|
|
@@ -1,43 +1,2 @@
|
|
|
1
1
|
---
|
|
2
|
-
:en:
|
|
3
|
-
lesli_support:
|
|
4
|
-
tickets:
|
|
5
|
-
column_started_at: Started At
|
|
6
|
-
column_completed_at: Completed At
|
|
7
|
-
column_tags: Tags
|
|
8
|
-
column_reference_url: Reference URL
|
|
9
|
-
column_type: Type
|
|
10
|
-
column_id: ID
|
|
11
|
-
column_subject: Subject
|
|
12
|
-
column_workspace: Workspace
|
|
13
|
-
column_hours_worked: Hours Worked
|
|
14
|
-
column_category: Category
|
|
15
|
-
column_priority: Priority
|
|
16
|
-
column_creator: Creator
|
|
17
|
-
column_status: Status
|
|
18
|
-
view_all_tickets: All tickets
|
|
19
|
-
view_active_tickets: Active tickets
|
|
20
|
-
view_inactive_tickets: Inactive tickets
|
|
21
|
-
tab_information: Information
|
|
22
|
-
column_description: Description
|
|
23
|
-
column_deadline: Deadline
|
|
24
|
-
view_own_tickets: Own tickets
|
|
25
|
-
lesli:
|
|
26
|
-
shared:
|
|
27
|
-
view_discussions: Discussions
|
|
28
|
-
button_add_new: Add new
|
|
29
|
-
button_reload: Reload
|
|
30
|
-
view_files: Files
|
|
31
|
-
view_quick_actions: Quick actions
|
|
32
|
-
button_list: List
|
|
33
|
-
button_save: Save
|
|
34
|
-
button_delete: Delete
|
|
35
|
-
button_edit: Edit
|
|
36
|
-
view_status_active: Active
|
|
37
|
-
view_status_inactive: Inactive
|
|
38
|
-
button_settings: Settings
|
|
39
|
-
button_show: Show
|
|
40
|
-
toolbar_search: Search...
|
|
41
|
-
application:
|
|
42
|
-
navigation_logout: Logout
|
|
43
|
-
navigation_my_profile: My profile
|
|
2
|
+
:en: {}
|
|
@@ -1,43 +1,2 @@
|
|
|
1
1
|
---
|
|
2
|
-
:es:
|
|
3
|
-
lesli_support:
|
|
4
|
-
tickets:
|
|
5
|
-
column_started_at: Fecha inicio
|
|
6
|
-
column_completed_at: Fecha completado
|
|
7
|
-
column_tags: Etiquetas
|
|
8
|
-
column_reference_url: URL de referencia
|
|
9
|
-
column_type: Tipo
|
|
10
|
-
column_id: ID
|
|
11
|
-
column_subject: Asunto
|
|
12
|
-
column_workspace: Workspace
|
|
13
|
-
column_hours_worked: Horas trabajadas
|
|
14
|
-
column_category: Categoria
|
|
15
|
-
column_priority: Prioridad
|
|
16
|
-
column_creator: Creador
|
|
17
|
-
column_status: Estado
|
|
18
|
-
view_all_tickets: Todos los tickets
|
|
19
|
-
view_active_tickets: Tickets activos
|
|
20
|
-
view_inactive_tickets: Tickets inactivos
|
|
21
|
-
tab_information: Información
|
|
22
|
-
column_description: Descripción
|
|
23
|
-
column_deadline: Fecha limite
|
|
24
|
-
view_own_tickets: Mis tickets
|
|
25
|
-
lesli:
|
|
26
|
-
shared:
|
|
27
|
-
view_discussions: Discusiones
|
|
28
|
-
button_add_new: Agregar nuevo
|
|
29
|
-
button_reload: Recargar
|
|
30
|
-
view_files: Archivos
|
|
31
|
-
view_quick_actions: Acciones rapidas
|
|
32
|
-
button_list: Lista
|
|
33
|
-
button_save: Guardar
|
|
34
|
-
button_delete: Eliminar
|
|
35
|
-
button_edit: Editar
|
|
36
|
-
view_status_active: Activo
|
|
37
|
-
view_status_inactive: Inactivo
|
|
38
|
-
button_settings: Configuración
|
|
39
|
-
button_show: Ver
|
|
40
|
-
toolbar_search: Buscar...
|
|
41
|
-
application:
|
|
42
|
-
navigation_logout: Cerrar sesión
|
|
43
|
-
navigation_my_profile: Mi perfil
|
|
2
|
+
:es: {}
|
|
@@ -1,43 +1,2 @@
|
|
|
1
1
|
---
|
|
2
|
-
:fr:
|
|
3
|
-
lesli_support:
|
|
4
|
-
tickets:
|
|
5
|
-
column_started_at: ":lesli_support.tickets.column_started_at:"
|
|
6
|
-
column_completed_at: ":lesli_support.tickets.column_completed_at:"
|
|
7
|
-
column_tags: ":lesli_support.tickets.column_tags:"
|
|
8
|
-
column_reference_url: ":lesli_support.tickets.column_reference_url:"
|
|
9
|
-
column_type: ":lesli_support.tickets.column_type:"
|
|
10
|
-
column_id: ":lesli_support.tickets.column_id:"
|
|
11
|
-
column_subject: ":lesli_support.tickets.column_subject:"
|
|
12
|
-
column_workspace: ":lesli_support.tickets.column_workspace:"
|
|
13
|
-
column_hours_worked: ":lesli_support.tickets.column_hours_worked:"
|
|
14
|
-
column_category: ":lesli_support.tickets.column_category:"
|
|
15
|
-
column_priority: ":lesli_support.tickets.column_priority:"
|
|
16
|
-
column_creator: ":lesli_support.tickets.column_creator:"
|
|
17
|
-
column_status: ":lesli_support.tickets.column_status:"
|
|
18
|
-
view_all_tickets: ":lesli_support.tickets.view_all_tickets:"
|
|
19
|
-
view_active_tickets: ":lesli_support.tickets.view_active_tickets:"
|
|
20
|
-
view_inactive_tickets: ":lesli_support.tickets.view_inactive_tickets:"
|
|
21
|
-
tab_information: ":lesli_support.tickets.tab_information:"
|
|
22
|
-
column_description: ":lesli_support.tickets.column_description:"
|
|
23
|
-
column_deadline: ":lesli_support.tickets.column_deadline:"
|
|
24
|
-
view_own_tickets: ":lesli_support.tickets.view_own_tickets:"
|
|
25
|
-
lesli:
|
|
26
|
-
shared:
|
|
27
|
-
view_discussions: ":lesli.shared.view_discussions:"
|
|
28
|
-
button_add_new: ":lesli.shared.button_add_new:"
|
|
29
|
-
button_reload: ":lesli.shared.button_reload:"
|
|
30
|
-
view_files: ":lesli.shared.view_files:"
|
|
31
|
-
view_quick_actions: ":lesli.shared.view_quick_actions:"
|
|
32
|
-
button_list: ":lesli.shared.button_list:"
|
|
33
|
-
button_save: ":lesli.shared.button_save:"
|
|
34
|
-
button_delete: ":lesli.shared.button_delete:"
|
|
35
|
-
button_edit: ":lesli.shared.button_edit:"
|
|
36
|
-
view_status_active: ":lesli.shared.view_status_active:"
|
|
37
|
-
view_status_inactive: ":lesli.shared.view_status_inactive:"
|
|
38
|
-
button_settings: ":lesli.shared.button_settings:"
|
|
39
|
-
button_show: ":lesli.shared.button_show:"
|
|
40
|
-
toolbar_search: ":lesli.shared.toolbar_search:"
|
|
41
|
-
application:
|
|
42
|
-
navigation_logout: ":lesli.application.navigation_logout:"
|
|
43
|
-
navigation_my_profile: ":lesli.application.navigation_my_profile:"
|
|
2
|
+
:fr: {}
|
|
@@ -1,43 +1,2 @@
|
|
|
1
1
|
---
|
|
2
|
-
:it:
|
|
3
|
-
lesli_support:
|
|
4
|
-
tickets:
|
|
5
|
-
column_started_at: ":lesli_support.tickets.column_started_at:"
|
|
6
|
-
column_completed_at: ":lesli_support.tickets.column_completed_at:"
|
|
7
|
-
column_tags: ":lesli_support.tickets.column_tags:"
|
|
8
|
-
column_reference_url: ":lesli_support.tickets.column_reference_url:"
|
|
9
|
-
column_type: ":lesli_support.tickets.column_type:"
|
|
10
|
-
column_id: ":lesli_support.tickets.column_id:"
|
|
11
|
-
column_subject: ":lesli_support.tickets.column_subject:"
|
|
12
|
-
column_workspace: ":lesli_support.tickets.column_workspace:"
|
|
13
|
-
column_hours_worked: ":lesli_support.tickets.column_hours_worked:"
|
|
14
|
-
column_category: ":lesli_support.tickets.column_category:"
|
|
15
|
-
column_priority: ":lesli_support.tickets.column_priority:"
|
|
16
|
-
column_creator: ":lesli_support.tickets.column_creator:"
|
|
17
|
-
column_status: ":lesli_support.tickets.column_status:"
|
|
18
|
-
view_all_tickets: ":lesli_support.tickets.view_all_tickets:"
|
|
19
|
-
view_active_tickets: ":lesli_support.tickets.view_active_tickets:"
|
|
20
|
-
view_inactive_tickets: ":lesli_support.tickets.view_inactive_tickets:"
|
|
21
|
-
tab_information: ":lesli_support.tickets.tab_information:"
|
|
22
|
-
column_description: ":lesli_support.tickets.column_description:"
|
|
23
|
-
column_deadline: ":lesli_support.tickets.column_deadline:"
|
|
24
|
-
view_own_tickets: ":lesli_support.tickets.view_own_tickets:"
|
|
25
|
-
lesli:
|
|
26
|
-
shared:
|
|
27
|
-
view_discussions: ":lesli.shared.view_discussions:"
|
|
28
|
-
button_add_new: ":lesli.shared.button_add_new:"
|
|
29
|
-
button_reload: ":lesli.shared.button_reload:"
|
|
30
|
-
view_files: ":lesli.shared.view_files:"
|
|
31
|
-
view_quick_actions: ":lesli.shared.view_quick_actions:"
|
|
32
|
-
button_list: ":lesli.shared.button_list:"
|
|
33
|
-
button_save: ":lesli.shared.button_save:"
|
|
34
|
-
button_delete: ":lesli.shared.button_delete:"
|
|
35
|
-
button_edit: ":lesli.shared.button_edit:"
|
|
36
|
-
view_status_active: ":lesli.shared.view_status_active:"
|
|
37
|
-
view_status_inactive: ":lesli.shared.view_status_inactive:"
|
|
38
|
-
button_settings: ":lesli.shared.button_settings:"
|
|
39
|
-
button_show: ":lesli.shared.button_show:"
|
|
40
|
-
toolbar_search: ":lesli.shared.toolbar_search:"
|
|
41
|
-
application:
|
|
42
|
-
navigation_logout: ":lesli.application.navigation_logout:"
|
|
43
|
-
navigation_my_profile: ":lesli.application.navigation_my_profile:"
|
|
2
|
+
:it: {}
|