rails_db_admin 3.0.0 → 3.2.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/{public → app/assets}/images/icons/rails_db_admin/rails_db_admin_16x16.png +0 -0
- data/{public → app/assets}/images/icons/rails_db_admin/rails_db_admin_24x24.png +0 -0
- data/{public → app/assets}/images/icons/rails_db_admin/rails_db_admin_32x32.png +0 -0
- data/{public → app/assets}/images/icons/rails_db_admin/rails_db_admin_64x64.png +0 -0
- data/{public → app/assets}/images/icons/rails_db_admin/rails_db_admin_light_16x16.png +0 -0
- data/app/assets/images/splash/db_admin_splash.png +0 -0
- data/{public → app/assets}/images/splash/images/console-icon.png +0 -0
- data/{public → app/assets}/images/splash/images/data-model-icon.png +0 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/app.js +20 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/rails_db_admin/database_combo.js +1 -1
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/rails_db_admin/module.js +227 -135
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/rails_db_admin/queries_tree_menu.js +6 -6
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/query_panel.js +383 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/rails_db_admin/readonly_table_data_grid.js +0 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/reports/ParamWindow.js +426 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/reports/ParamsManager.js +177 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/reports/RolesPanel.js +95 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/reports/SetDefaultWindow.js +244 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/reports/Settings.js +155 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/reports/TreePanel.js +391 -0
- data/app/assets/javascripts/erp_app/desktop/applications/rails_db_admin/splash_screen.js +163 -0
- data/{public → app/assets}/javascripts/erp_app/desktop/applications/rails_db_admin/tables_tree_menu.js +5 -3
- data/app/assets/javascripts/erp_app/shared/MultiOption.js +151 -0
- data/app/assets/javascripts/erp_app/shared/ReportsParams.js +289 -0
- data/app/assets/javascripts/erp_app/shared/rails_db_admin_shared.js +13 -0
- data/{public/stylesheets/erp_app/desktop/applications/rails_db_admin/rails_db_admin.css → app/assets/stylesheets/erp_app/shared/rails_db_admin_shared.css} +5 -10
- data/app/controllers/rails_db_admin/erp_app/desktop/base_controller.rb +7 -6
- data/app/controllers/rails_db_admin/erp_app/desktop/queries_controller.rb +88 -74
- data/app/controllers/rails_db_admin/erp_app/desktop/reports_controller.rb +361 -30
- data/app/controllers/rails_db_admin/reports/base_controller.rb +105 -22
- data/app/mailers/report_mailer.rb +15 -0
- data/app/models/report.rb +227 -14
- data/app/views/rails_db_admin/reports/base/error_report.erb +27 -0
- data/app/views/report_mailer/email_report.html.erb +255 -0
- data/config/routes.rb +2 -1
- data/db/data_migrations/20110816005525_rails_db_admin_application.rb +6 -14
- data/db/data_migrations/20151015093724_add_report_role_type.rb +15 -0
- data/db/migrate/20121210160131_add_reports.rb +2 -0
- data/db/migrate/20150926061259_add_meta_data_to_reports.rb +9 -0
- data/lib/rails_db_admin.rb +4 -2
- data/lib/rails_db_admin/engine.rb +12 -4
- data/lib/rails_db_admin/erp_string_parser.rb +26 -0
- data/lib/rails_db_admin/extensions/railties/action_view/helpers/report_helper.rb +167 -10
- data/lib/rails_db_admin/extjs/json_data_builder.rb +36 -20
- data/lib/rails_db_admin/query_params.rb +14 -0
- data/lib/rails_db_admin/query_support.rb +56 -46
- data/lib/rails_db_admin/services/report_helper.rb +241 -0
- data/lib/rails_db_admin/version.rb +1 -1
- metadata +41 -30
- data/app/assets/javascripts/rails_db_admin/application.js +0 -9
- data/app/assets/stylesheets/rails_db_admin/application.css +0 -7
- data/app/views/rails_db_admin/reports/base/show_report.erb +0 -11
- data/db/migrate/20131112013053_add_rails_db_admin_missing_indexes.rb +0 -17
- data/lib/rails_db_admin/report_support.rb +0 -52
- data/public/images/splash/splash.png +0 -0
- data/public/javascripts/erp_app/desktop/applications/rails_db_admin/query_panel.js +0 -223
- data/public/javascripts/erp_app/desktop/applications/rails_db_admin/report_panel.js +0 -78
- data/public/javascripts/erp_app/desktop/applications/rails_db_admin/reports_tree_panel.js +0 -237
- data/public/javascripts/erp_app/desktop/applications/rails_db_admin/splash_screen.js +0 -136
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
// This is a manifest file that'll be compiled into application.js, which will include all the files
|
|
2
|
+
// listed below.
|
|
3
|
+
//
|
|
4
|
+
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
|
|
5
|
+
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
|
|
6
|
+
//
|
|
7
|
+
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
|
|
8
|
+
// the compiled file.
|
|
9
|
+
//
|
|
10
|
+
// WARNING: THE FIRST BLANK LINE MARKS THE END OF WHAT'S TO BE PROCESSED, ANY BLANK LINE SHOULD
|
|
11
|
+
// GO AFTER THE REQUIRES BELOW.
|
|
12
|
+
//
|
|
13
|
+
//= require_tree .
|
|
@@ -1,14 +1,9 @@
|
|
|
1
1
|
.icon-rails_db_admin {
|
|
2
|
-
background-image:url( /
|
|
3
|
-
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/
|
|
2
|
+
background-image:url( /assets/icons/rails_db_admin/rails_db_admin_16x16.png ) !important;
|
|
3
|
+
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/icons/rails_db_admin/rails_db_admin_16x16.png', sizingMethod='crop');
|
|
4
4
|
}
|
|
5
5
|
|
|
6
6
|
.icon-rails_db_admin-light {
|
|
7
|
-
background-image:url( /
|
|
8
|
-
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/
|
|
9
|
-
}
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
7
|
+
background-image:url( /assets/icons/rails_db_admin/rails_db_admin_light_16x16.png ) !important;
|
|
8
|
+
filter:progid:DXImageTransform.Microsoft.AlphaImageLoader(src='/assets/icons/rails_db_admin/rails_db_admin_16x16.png', sizingMethod='crop');
|
|
9
|
+
}
|
|
@@ -93,6 +93,7 @@ module RailsDbAdmin
|
|
|
93
93
|
start = params[:start] || 0
|
|
94
94
|
limit = params[:limit] || 30
|
|
95
95
|
table = params[:table]
|
|
96
|
+
query_filter = params[:query_filter] || ''
|
|
96
97
|
|
|
97
98
|
order = nil
|
|
98
99
|
|
|
@@ -102,7 +103,7 @@ module RailsDbAdmin
|
|
|
102
103
|
order = 'created_at desc'
|
|
103
104
|
end
|
|
104
105
|
|
|
105
|
-
@json_data_builder.build_json_data(:table => table, :limit => limit, :offset => start, :order => order)
|
|
106
|
+
@json_data_builder.build_json_data(:table => table, :limit => limit, :offset => start, :order => order, :query_filter => query_filter)
|
|
106
107
|
end
|
|
107
108
|
|
|
108
109
|
def create_table_row
|
|
@@ -129,15 +130,15 @@ module RailsDbAdmin
|
|
|
129
130
|
|
|
130
131
|
if @table_support.primary_key?(table)
|
|
131
132
|
id = @table_support.primary_key(table)
|
|
132
|
-
id[1] = params[:data][
|
|
133
|
-
params[:data]
|
|
133
|
+
id[1] = params[:data]['id']
|
|
134
|
+
params[:data].delete('id')
|
|
134
135
|
|
|
135
|
-
@table_support.update_table(table, id, params[:data]
|
|
136
|
+
@table_support.update_table(table, id, params[:data])
|
|
136
137
|
record = @json_data_builder.get_row_data(table, id)
|
|
137
138
|
else
|
|
138
|
-
fake_id = params[:data][
|
|
139
|
+
fake_id = params[:data]['fake_id']
|
|
139
140
|
@table_support.update_table_without_id(table, params[:data])
|
|
140
|
-
record = @json_data_builder.get_row_data_no_id(table, params[:data]
|
|
141
|
+
record = @json_data_builder.get_row_data_no_id(table, params[:data])
|
|
141
142
|
record['fake_id'] = fake_id
|
|
142
143
|
end
|
|
143
144
|
|
|
@@ -5,7 +5,7 @@ module RailsDbAdmin
|
|
|
5
5
|
|
|
6
6
|
def save_query
|
|
7
7
|
query = params[:query]
|
|
8
|
-
query_name
|
|
8
|
+
query_name = params[:query_name]
|
|
9
9
|
|
|
10
10
|
@query_support.save_query(query, query_name)
|
|
11
11
|
|
|
@@ -25,7 +25,7 @@ module RailsDbAdmin
|
|
|
25
25
|
end
|
|
26
26
|
|
|
27
27
|
def delete_query
|
|
28
|
-
query_name
|
|
28
|
+
query_name = params[:query_name]
|
|
29
29
|
@query_support.delete_query(query_name)
|
|
30
30
|
|
|
31
31
|
render :json => {:success => true}
|
|
@@ -51,16 +51,12 @@ module RailsDbAdmin
|
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def open_and_execute_query
|
|
54
|
-
result = {}
|
|
55
54
|
query_name = params[:query_name]
|
|
56
55
|
|
|
57
56
|
query = @query_support.get_query(query_name)
|
|
58
57
|
columns, values, exception = @query_support.execute_sql(query)
|
|
59
58
|
|
|
60
|
-
if
|
|
61
|
-
result = {:success => false, :query => query,
|
|
62
|
-
:exception => "Empty result set"}
|
|
63
|
-
elsif exception.nil?
|
|
59
|
+
if exception.nil?
|
|
64
60
|
|
|
65
61
|
columns_array = columns.collect do |column|
|
|
66
62
|
RailsDbAdmin::Extjs::JsonColumnBuilder.build_readonly_column(column)
|
|
@@ -71,11 +67,11 @@ module RailsDbAdmin
|
|
|
71
67
|
end
|
|
72
68
|
|
|
73
69
|
result = {:success => true, :query => query,
|
|
74
|
-
|
|
75
|
-
|
|
70
|
+
:columns => columns_array,
|
|
71
|
+
:fields => fields_array, :data => values}
|
|
76
72
|
else
|
|
77
73
|
result = {:success => false, :query => query,
|
|
78
|
-
|
|
74
|
+
:exception => exception.gsub("\n", " ")}
|
|
79
75
|
end
|
|
80
76
|
|
|
81
77
|
render :json => result
|
|
@@ -88,85 +84,103 @@ module RailsDbAdmin
|
|
|
88
84
|
columns = @database_connection_class.connection.columns(table)
|
|
89
85
|
|
|
90
86
|
render :json => {:success => true,
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
87
|
+
:sql => sql,
|
|
88
|
+
:columns => RailsDbAdmin::Extjs::JsonColumnBuilder.build_grid_columns(columns),
|
|
89
|
+
:fields => RailsDbAdmin::Extjs::JsonColumnBuilder.build_store_fields(columns),
|
|
90
|
+
:data => results}
|
|
95
91
|
end
|
|
96
92
|
|
|
97
93
|
def execute_query
|
|
98
|
-
|
|
99
|
-
selection = params[:selected_sql]
|
|
100
|
-
sql = sql.rstrip
|
|
101
|
-
cursor_pos = params[:cursor_pos].to_i
|
|
102
|
-
|
|
103
|
-
#append a semicolon as the last character if the
|
|
104
|
-
#user forgot
|
|
105
|
-
if !sql.end_with?(";")
|
|
106
|
-
sql << ";"
|
|
107
|
-
end
|
|
94
|
+
begin
|
|
108
95
|
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
last_stmt_end = idx
|
|
121
|
-
end
|
|
96
|
+
sql = params[:sql]
|
|
97
|
+
selection = params[:selected_sql]
|
|
98
|
+
sql = sql.rstrip
|
|
99
|
+
cursor_pos = params[:cursor_pos].to_i
|
|
100
|
+
|
|
101
|
+
# if we have report params process them
|
|
102
|
+
if params[:report_params]
|
|
103
|
+
# add current_user to locals
|
|
104
|
+
params[:report_params][:current_user] = current_user
|
|
105
|
+
|
|
106
|
+
sql = RailsDbAdmin::ErbStringParser.render(sql, locals: params[:report_params])
|
|
122
107
|
end
|
|
123
108
|
|
|
124
|
-
|
|
125
|
-
#
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
if
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
sql_stmt.fetch(:end)).join(" ")
|
|
109
|
+
# append a semicolon as the last character if the
|
|
110
|
+
# user forgot
|
|
111
|
+
if !sql.end_with?(";")
|
|
112
|
+
sql << ";"
|
|
113
|
+
end
|
|
114
|
+
|
|
115
|
+
sql_arr = sql.split("\n")
|
|
116
|
+
sql_stmt_arry = []
|
|
117
|
+
sql_str = ""
|
|
118
|
+
|
|
119
|
+
#search for the query to run based on cursor position if there
|
|
120
|
+
#was nothing selected by the user
|
|
121
|
+
if (selection == nil || selection == "")
|
|
122
|
+
last_stmt_end = 0
|
|
123
|
+
sql_arr.each_with_index do |val, idx|
|
|
124
|
+
if val.match(';')
|
|
125
|
+
sql_stmt_arry << {:begin => (sql_stmt_arry.length > 0) ? last_stmt_end +1 : 0, :end => idx}
|
|
126
|
+
last_stmt_end = idx
|
|
143
127
|
end
|
|
144
128
|
end
|
|
129
|
+
|
|
130
|
+
last_sql_stmt = sql_stmt_arry.length-1
|
|
131
|
+
#run the first complete query if we're in whitespace
|
|
132
|
+
#at the beginning of the text area
|
|
133
|
+
if cursor_pos <= sql_stmt_arry[0].fetch(:begin)
|
|
134
|
+
sql_str = sql_arr.values_at(sql_stmt_arry[0].fetch(:begin)..
|
|
135
|
+
sql_stmt_arry[0].fetch(:end)).join(" ")
|
|
136
|
+
#run the last query if we're in whitespace at the end of the
|
|
137
|
+
#textarea
|
|
138
|
+
elsif cursor_pos > sql_stmt_arry[last_sql_stmt].fetch(:begin)
|
|
139
|
+
sql_str = sql_arr.values_at(
|
|
140
|
+
sql_stmt_arry[last_sql_stmt].fetch(:begin)..
|
|
141
|
+
sql_stmt_arry[last_sql_stmt].fetch(:end)).join(" ")
|
|
142
|
+
#run query based on cursor position
|
|
143
|
+
else
|
|
144
|
+
sql_stmt_arry.each do |sql_stmt|
|
|
145
|
+
if cursor_pos >= sql_stmt.fetch(:begin) &&
|
|
146
|
+
cursor_pos <= sql_stmt.fetch(:end)
|
|
147
|
+
sql_str = sql_arr.values_at(sql_stmt.fetch(:begin)..
|
|
148
|
+
sql_stmt.fetch(:end)).join(" ")
|
|
149
|
+
end
|
|
150
|
+
end
|
|
151
|
+
end
|
|
152
|
+
else
|
|
153
|
+
sql_str = selection
|
|
145
154
|
end
|
|
146
|
-
else
|
|
147
|
-
sql_str = selection
|
|
148
|
-
end
|
|
149
155
|
|
|
150
|
-
|
|
156
|
+
columns, values, exception = @query_support.execute_sql(sql_str)
|
|
151
157
|
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
end
|
|
158
|
+
if !exception.nil?
|
|
159
|
+
result = {:success => false, :message => exception.gsub("\n", " ")}
|
|
160
|
+
else
|
|
161
|
+
exception.nil?
|
|
162
|
+
columns_array = columns.collect do |column|
|
|
163
|
+
RailsDbAdmin::Extjs::JsonColumnBuilder.build_readonly_column(column)
|
|
164
|
+
end
|
|
160
165
|
|
|
161
|
-
|
|
162
|
-
|
|
166
|
+
fields_array = columns.collect do |column|
|
|
167
|
+
{:name => column}
|
|
168
|
+
end
|
|
169
|
+
|
|
170
|
+
result = {:success => true, :sql => sql,
|
|
171
|
+
:columns => columns_array,
|
|
172
|
+
:fields => fields_array, :data => values}
|
|
163
173
|
end
|
|
174
|
+
render :json => result
|
|
175
|
+
rescue StandardError => ex
|
|
176
|
+
Rails.logger.error ex.message
|
|
177
|
+
Rails.logger.error ex.backtrace.join("\n")
|
|
178
|
+
|
|
179
|
+
# email notification
|
|
180
|
+
ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
|
|
164
181
|
|
|
165
|
-
|
|
166
|
-
:columns => columns_array,
|
|
167
|
-
:fields => fields_array, :data => values}
|
|
182
|
+
render :json => {success: false, message: ex.message}
|
|
168
183
|
end
|
|
169
|
-
render :json => result
|
|
170
184
|
end
|
|
171
185
|
|
|
172
186
|
end #QueriesController
|
|
@@ -3,43 +3,121 @@ module RailsDbAdmin
|
|
|
3
3
|
module Desktop
|
|
4
4
|
class ReportsController < QueriesController
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
reports = Report.all.collect{ |report|{:text => report.name, :id => report.id,
|
|
8
|
-
:uniqueName => report.internal_identifier,
|
|
9
|
-
:iconCls => 'icon-document', :leaf => true} }
|
|
6
|
+
before_filter :set_file_support
|
|
10
7
|
|
|
11
|
-
|
|
8
|
+
def index
|
|
9
|
+
if params[:node] == 'root_node'
|
|
10
|
+
setup_tree
|
|
11
|
+
else
|
|
12
|
+
node = File.join(@file_support.root, params[:node])
|
|
13
|
+
report = get_report(params[:node])
|
|
14
|
+
unless report.nil?
|
|
15
|
+
render :json => @file_support.build_tree(node, :file_asset_holder => report, :preload => true)
|
|
16
|
+
else
|
|
17
|
+
render :json => {:success => false, :message => 'Could not find report'}
|
|
18
|
+
end
|
|
19
|
+
end
|
|
12
20
|
end
|
|
13
21
|
|
|
14
22
|
def create
|
|
15
|
-
|
|
16
|
-
|
|
23
|
+
begin
|
|
24
|
+
ActiveRecord::Base.transaction do
|
|
25
|
+
|
|
26
|
+
if params[:report_data].present?
|
|
27
|
+
Report.import(params[:report_data])
|
|
28
|
+
render :inline => {:success => true}.to_json
|
|
29
|
+
else
|
|
30
|
+
name = params[:name]
|
|
31
|
+
internal_identifier = params[:internal_identifier]
|
|
32
|
+
report = Report.new(:name => name, :internal_identifier => internal_identifier)
|
|
33
|
+
|
|
34
|
+
report.save!
|
|
35
|
+
|
|
36
|
+
render :json => {:success => true}
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
end
|
|
40
|
+
rescue ActiveRecord::RecordInvalid => invalid
|
|
41
|
+
Rails.logger.error invalid.record.errors.full_messages
|
|
42
|
+
|
|
43
|
+
render json: {success: false, message: invalid.record.errors.full_messages.join('</br>')}
|
|
44
|
+
|
|
45
|
+
rescue StandardError => ex
|
|
46
|
+
Rails.logger.error ex.message
|
|
47
|
+
Rails.logger.error ex.backtrace.join("\n")
|
|
48
|
+
|
|
49
|
+
ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
|
|
50
|
+
|
|
51
|
+
render json: {success: false, message: 'Error creating report'}
|
|
17
52
|
|
|
18
|
-
report = Report.new(:name => name, :internal_identifier => internal_identifier)
|
|
19
|
-
if report.save
|
|
20
|
-
render :json => {:success => true}
|
|
21
|
-
else
|
|
22
|
-
render :json => {:success => false, :msg => 'Error creating report'}
|
|
23
53
|
end
|
|
24
54
|
end
|
|
25
55
|
|
|
26
|
-
def
|
|
27
|
-
|
|
56
|
+
def query
|
|
57
|
+
render :json => {success: true, query: Report.find(params[:id]).query}
|
|
58
|
+
end
|
|
28
59
|
|
|
29
|
-
|
|
60
|
+
def update
|
|
61
|
+
begin
|
|
62
|
+
ActiveRecord::Base.transaction do
|
|
63
|
+
report = Report.find(params[:id])
|
|
64
|
+
|
|
65
|
+
report.meta_data['print_page_size'] = params[:print_page_size].strip if params[:print_page_size]
|
|
66
|
+
report.meta_data['print_margin_top'] = params[:print_margin_top].strip if params[:print_margin_top]
|
|
67
|
+
report.meta_data['print_margin_right'] = params[:print_margin_right].strip if params[:print_margin_right]
|
|
68
|
+
report.meta_data['print_margin_bottom'] = params[:print_margin_bottom].strip if params[:print_margin_bottom]
|
|
69
|
+
report.meta_data['print_margin_left'] = params[:print_margin_left].strip if params[:print_margin_left]
|
|
70
|
+
report.meta_data['print_orientation'] = params[:print_orientation].strip if params[:print_orientation]
|
|
71
|
+
report.meta_data['auto_execute'] = params['auto_execute'] == 'on'
|
|
72
|
+
|
|
73
|
+
unless params[:report_name].blank?
|
|
74
|
+
report.name = params[:report_name].squish
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
unless params[:report_iid].blank?
|
|
78
|
+
report.internal_identifier = params[:report_iid].squish
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
if params.key?(:report_params)
|
|
82
|
+
report.meta_data['params'] = params[:report_params].nil? ? [] : params[:report_params]
|
|
83
|
+
end
|
|
84
|
+
|
|
85
|
+
report_roles = params[:report_roles]
|
|
86
|
+
if report_roles
|
|
87
|
+
available_role_types = report.role_types.pluck(:internal_identifier)
|
|
88
|
+
# delete all roles associated with the report
|
|
89
|
+
report.entity_party_roles.destroy_all
|
|
90
|
+
|
|
91
|
+
# assign report roles
|
|
92
|
+
report_roles.split(',').each do |role_type|
|
|
93
|
+
report.add_party_with_role(
|
|
94
|
+
current_user.party,
|
|
95
|
+
RoleType.iid(role_type)
|
|
96
|
+
) unless available_role_types.include?(role_type.to_sym)
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
render json: {success: report.save!}
|
|
101
|
+
|
|
102
|
+
end
|
|
103
|
+
rescue ActiveRecord::RecordInvalid => invalid
|
|
104
|
+
Rails.logger.error invalid.record.errors.full_messages
|
|
105
|
+
|
|
106
|
+
render json: {success: false, message: invalid.record.errors.full_messages.join('</br>')}
|
|
107
|
+
|
|
108
|
+
rescue StandardError => ex
|
|
109
|
+
Rails.logger.error ex.message
|
|
110
|
+
Rails.logger.error ex.backtrace.join("\n")
|
|
111
|
+
|
|
112
|
+
ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
|
|
113
|
+
|
|
114
|
+
render json: {success: false, message: 'Could not save report'}
|
|
30
115
|
|
|
31
|
-
if report
|
|
32
|
-
render :json => {:success => true, :report =>
|
|
33
|
-
{:title => report.name, :id => report.id, :query => report.query,
|
|
34
|
-
:internalIdentifier => report.internal_identifier, :template => report.template}
|
|
35
|
-
}
|
|
36
|
-
else
|
|
37
|
-
render :json => {:success => false}
|
|
38
116
|
end
|
|
39
117
|
end
|
|
40
118
|
|
|
41
119
|
def save
|
|
42
|
-
id
|
|
120
|
+
id = params[:id]
|
|
43
121
|
query = params[:query]
|
|
44
122
|
template = params[:template]
|
|
45
123
|
|
|
@@ -55,16 +133,199 @@ module RailsDbAdmin
|
|
|
55
133
|
end
|
|
56
134
|
end
|
|
57
135
|
|
|
58
|
-
def
|
|
59
|
-
id
|
|
136
|
+
def save_query
|
|
137
|
+
id = params[:id]
|
|
138
|
+
query = params[:query]
|
|
139
|
+
|
|
140
|
+
report = Report.find(id)
|
|
141
|
+
|
|
142
|
+
report.query = query
|
|
143
|
+
|
|
144
|
+
if report.save
|
|
145
|
+
render :json => {:success => true}
|
|
146
|
+
else
|
|
147
|
+
render :json => {:success => false}
|
|
148
|
+
end
|
|
149
|
+
end
|
|
60
150
|
|
|
61
|
-
|
|
151
|
+
def delete
|
|
152
|
+
report = Report.find(params[:id])
|
|
153
|
+
if report.destroy
|
|
62
154
|
render :json => {:success => true}
|
|
63
155
|
else
|
|
64
156
|
render :json => {:success => false}
|
|
65
157
|
end
|
|
66
158
|
end
|
|
67
159
|
|
|
160
|
+
def export
|
|
161
|
+
report = Report.find(params[:id])
|
|
162
|
+
zip_path = report.export
|
|
163
|
+
send_file(zip_path.to_s, :stream => false) rescue raise "Error sending #{zip_path} file"
|
|
164
|
+
end
|
|
165
|
+
|
|
166
|
+
def create_file
|
|
167
|
+
begin
|
|
168
|
+
path = File.join(@file_support.root, params[:path])
|
|
169
|
+
name = params[:name]
|
|
170
|
+
|
|
171
|
+
report = get_report(path)
|
|
172
|
+
report.add_file('#Empty File', File.join(path, name))
|
|
173
|
+
|
|
174
|
+
render :json => {:success => true, :node => @file_support.find_node(File.join(path, name), {:file_asset_holder => report})}
|
|
175
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
176
|
+
render :json => {:success => false, :message => ex.message}
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
|
|
180
|
+
def create_folder
|
|
181
|
+
begin
|
|
182
|
+
path = File.join(@file_support.root, params[:path])
|
|
183
|
+
name = params[:name]
|
|
184
|
+
@file_support.create_folder(path, name)
|
|
185
|
+
render :json => {:success => true, :node => @file_support.find_node(File.join(path, name), {keep_full_path: false})}
|
|
186
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
187
|
+
render :json => {:success => false, :message => ex.message}
|
|
188
|
+
end
|
|
189
|
+
end
|
|
190
|
+
|
|
191
|
+
def update_file
|
|
192
|
+
begin
|
|
193
|
+
path = File.join(@file_support.root, params[:node])
|
|
194
|
+
content = params[:content]
|
|
195
|
+
@file_support.update_file(path, content)
|
|
196
|
+
nodes = params[:node].split('/')
|
|
197
|
+
if nodes.last == 'base.html.erb'
|
|
198
|
+
report = Report.iid(nodes[nodes.index("compass_ae_reports") + 1])
|
|
199
|
+
report.template = content
|
|
200
|
+
report.save
|
|
201
|
+
end
|
|
202
|
+
render :json => {:success => true}
|
|
203
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
204
|
+
render :json => {:success => false, :message => ex.message}
|
|
205
|
+
end
|
|
206
|
+
end
|
|
207
|
+
|
|
208
|
+
def save_move
|
|
209
|
+
result = {}
|
|
210
|
+
nodes_to_move = (params[:selected_nodes] ? JSON(params[:selected_nodes]) : [params[:node]])
|
|
211
|
+
begin
|
|
212
|
+
nodes_to_move.each do |node|
|
|
213
|
+
path = File.join(@file_support.root, node)
|
|
214
|
+
new_parent_path = File.join(@file_support.root, params[:parent_node])
|
|
215
|
+
|
|
216
|
+
unless @file_support.exists? path
|
|
217
|
+
result = {:success => false, :msg => 'File does not exist.'}
|
|
218
|
+
else
|
|
219
|
+
report_file = get_report_file(path)
|
|
220
|
+
report_file.move(params[:parent_node])
|
|
221
|
+
result = {:success => true, :msg => "#{File.basename(path)} was moved to #{new_parent_path} successfully"}
|
|
222
|
+
end
|
|
223
|
+
end
|
|
224
|
+
render :json => result
|
|
225
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
226
|
+
render :json => {:success => false, :message => ex.message}
|
|
227
|
+
end
|
|
228
|
+
end
|
|
229
|
+
|
|
230
|
+
def get_contents
|
|
231
|
+
path = File.join(@file_support.root, params[:node])
|
|
232
|
+
contents, message = @file_support.get_contents(path)
|
|
233
|
+
|
|
234
|
+
if contents.nil?
|
|
235
|
+
render :text => message
|
|
236
|
+
else
|
|
237
|
+
render :text => contents
|
|
238
|
+
end
|
|
239
|
+
end
|
|
240
|
+
|
|
241
|
+
def download_file
|
|
242
|
+
begin
|
|
243
|
+
path = File.join(@file_support.root, params[:path])
|
|
244
|
+
contents, message = @file_support.get_contents(path)
|
|
245
|
+
|
|
246
|
+
send_data contents, :filename => File.basename(path)
|
|
247
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
248
|
+
render :json => {:success => false, :message => ex.message}
|
|
249
|
+
end
|
|
250
|
+
end
|
|
251
|
+
|
|
252
|
+
def upload_file
|
|
253
|
+
begin
|
|
254
|
+
result = {}
|
|
255
|
+
upload_path = params[:directory]
|
|
256
|
+
name = params[:name]
|
|
257
|
+
data = request.raw_post
|
|
258
|
+
|
|
259
|
+
report = get_report(upload_path)
|
|
260
|
+
name = File.join(@file_support.root, upload_path, name)
|
|
261
|
+
|
|
262
|
+
begin
|
|
263
|
+
report.add_file(data, name)
|
|
264
|
+
result = {:success => true, :node => @file_support.find_node(name, {:file_asset_holder => report})}
|
|
265
|
+
rescue => ex
|
|
266
|
+
logger.error ex.message
|
|
267
|
+
logger.error ex.backtrace.join("\n")
|
|
268
|
+
result = {:success => false, :error => "Error uploading #{name}"}
|
|
269
|
+
end
|
|
270
|
+
|
|
271
|
+
render :inline => result.to_json
|
|
272
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
273
|
+
render :json => {:success => false, :message => ex.message}
|
|
274
|
+
end
|
|
275
|
+
end
|
|
276
|
+
|
|
277
|
+
def delete_file
|
|
278
|
+
messages = []
|
|
279
|
+
nodes_to_delete = (params[:selected_nodes] ? JSON(params[:selected_nodes]) : [params[:node]])
|
|
280
|
+
begin
|
|
281
|
+
result = false
|
|
282
|
+
nodes_to_delete.each do |path|
|
|
283
|
+
begin
|
|
284
|
+
name = File.basename(path)
|
|
285
|
+
result, message, is_folder = @file_support.delete_file(File.join(@file_support.root, path), {force: true})
|
|
286
|
+
if result && !is_folder
|
|
287
|
+
report_file = get_report_file(path)
|
|
288
|
+
report_file.destroy
|
|
289
|
+
end
|
|
290
|
+
messages << message
|
|
291
|
+
rescue StandardError => ex
|
|
292
|
+
Rails.logger.error ex.message
|
|
293
|
+
Rails.logger.error ex.backtrace.join("\n")
|
|
294
|
+
|
|
295
|
+
ExceptionNotifier.notify_exception(ex) if defined? ExceptionNotifier
|
|
296
|
+
|
|
297
|
+
render :json => {:success => false, :error => "Error deleting #{name}"} and return
|
|
298
|
+
end
|
|
299
|
+
end # end nodes_to_delete.each
|
|
300
|
+
if result
|
|
301
|
+
render :json => {:success => true, :message => messages.join(',')}
|
|
302
|
+
else
|
|
303
|
+
render :json => {:success => false, :error => messages.join(',')}
|
|
304
|
+
end
|
|
305
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
306
|
+
render :json => {:success => false, :message => ex.message}
|
|
307
|
+
end
|
|
308
|
+
end
|
|
309
|
+
|
|
310
|
+
def rename_file
|
|
311
|
+
begin
|
|
312
|
+
result = {:success => true, :data => {:success => true}}
|
|
313
|
+
path = params[:node]
|
|
314
|
+
name = params[:file_name]
|
|
315
|
+
|
|
316
|
+
result, message = @file_support.rename_file(File.join(@file_support.root, path), name)
|
|
317
|
+
if result
|
|
318
|
+
report_file = get_report_file(path)
|
|
319
|
+
report_file.name = name
|
|
320
|
+
report_file.save
|
|
321
|
+
end
|
|
322
|
+
|
|
323
|
+
render :json => {:success => true, :message => message}
|
|
324
|
+
rescue ErpTechSvcs::Utils::CompassAccessNegotiator::Errors::UserDoesNotHaveCapability => ex
|
|
325
|
+
render :json => {:success => false, :message => ex.message}
|
|
326
|
+
end
|
|
327
|
+
end
|
|
328
|
+
|
|
68
329
|
def open_query
|
|
69
330
|
query_name = params[:query_name]
|
|
70
331
|
query = @query_support.get_query(query_name)
|
|
@@ -72,7 +333,77 @@ module RailsDbAdmin
|
|
|
72
333
|
render :json => {:success => true, :query => query}
|
|
73
334
|
end
|
|
74
335
|
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
336
|
+
def setup_tree
|
|
337
|
+
tree = []
|
|
338
|
+
Report.all.collect do |report|
|
|
339
|
+
report_data = build_report_data(report)
|
|
340
|
+
|
|
341
|
+
['stylesheets', 'images', 'templates', 'javascripts', 'query'].each do |resource_folder|
|
|
342
|
+
report_data[:children] << {
|
|
343
|
+
:reportId => report.id,
|
|
344
|
+
:reportName => report.name,
|
|
345
|
+
:reportIid => report.internal_identifier,
|
|
346
|
+
:text => resource_folder.titleize,
|
|
347
|
+
:iconCls => case resource_folder
|
|
348
|
+
when 'query'
|
|
349
|
+
'icon-query'
|
|
350
|
+
else
|
|
351
|
+
'icon-content'
|
|
352
|
+
end,
|
|
353
|
+
:id => "#{report.url}/#{resource_folder}",
|
|
354
|
+
:leaf => (resource_folder == 'query'),
|
|
355
|
+
:handleContextMenu => (resource_folder == 'query') || (resource_folder == 'preview_report')
|
|
356
|
+
}
|
|
357
|
+
end
|
|
358
|
+
|
|
359
|
+
tree << report_data
|
|
360
|
+
end
|
|
361
|
+
|
|
362
|
+
render :json => tree
|
|
363
|
+
end
|
|
364
|
+
|
|
365
|
+
def get_report(path)
|
|
366
|
+
reports_index = path.index('reports')
|
|
367
|
+
path = path[reports_index..path.length]
|
|
368
|
+
report_name = path.split('/')[1]
|
|
369
|
+
@report = Report.iid(report_name)
|
|
370
|
+
|
|
371
|
+
@report
|
|
372
|
+
end
|
|
373
|
+
|
|
374
|
+
def get_report_file(path)
|
|
375
|
+
report = get_report(path)
|
|
376
|
+
file_dir = ::File.dirname(path).gsub(Regexp.new(Rails.root.to_s), '')
|
|
377
|
+
report.files.where('name = ? and directory = ?', ::File.basename(path), file_dir).first
|
|
378
|
+
end
|
|
379
|
+
|
|
380
|
+
def set_file_support
|
|
381
|
+
@file_support = ErpTechSvcs::FileSupport::Base.new(:storage => ErpTechSvcs::Config.file_storage)
|
|
382
|
+
end
|
|
383
|
+
|
|
384
|
+
private
|
|
385
|
+
|
|
386
|
+
def build_report_data(report)
|
|
387
|
+
meta_data = report.meta_data || {}
|
|
388
|
+
meta_data.merge!({
|
|
389
|
+
params: report.meta_data['params'] || [],
|
|
390
|
+
roles: report.role_types.pluck(:internal_identifier).join(','),
|
|
391
|
+
})
|
|
392
|
+
|
|
393
|
+
{
|
|
394
|
+
text: report.name,
|
|
395
|
+
reportName: report.name,
|
|
396
|
+
reportId: report.id,
|
|
397
|
+
internalIdentifier: report.internal_identifier,
|
|
398
|
+
iconCls: 'icon-content',
|
|
399
|
+
isReport: true,
|
|
400
|
+
handleContextMenu: true,
|
|
401
|
+
children: [],
|
|
402
|
+
reportMetaData: meta_data
|
|
403
|
+
}
|
|
404
|
+
end
|
|
405
|
+
|
|
406
|
+
end # ReportsController
|
|
407
|
+
end # Desktop
|
|
408
|
+
end # ErpApp
|
|
409
|
+
end # RailsDbAdmin
|