Skip to content
This repository was archived by the owner on Sep 24, 2025. It is now read-only.

Commit 37eeb3b

Browse files
committed
report templates upload from builder added
- boolean type filter input set lookup value fix - upload report template for reports folder added (view files in folder, upload, rename and delete)
1 parent c7b77a4 commit 37eeb3b

File tree

17 files changed

+532
-89
lines changed

17 files changed

+532
-89
lines changed

builder/admin.sqlite

8 KB
Binary file not shown.

builder/index.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,13 @@
138138
</div>
139139
<div class="form-footer">
140140
<button id="delete-btn" class="btn btn-danger" type="button"><i class="bi bi-trash"></i> Delete<small class="muted">&nbsp;[Ctrl+Del]</small></button>
141-
<button type="button" id="move-btn" class="btn btn-secondary"><i class="bi bi-folder-minus"></i></button>
141+
<button type="button" id="move-btn" class="btn btn-secondary"><i class="bi bi-folder-minus"></i> Change group</button>
142142
<button type="button" id="up-btn" class="btn btn-secondary up-down-btn"><i class="bi bi-arrow-up"></i></button>
143143
<button type="button" id="down-btn" class="btn btn-secondary up-down-btn"><i class="bi bi-arrow-down"></i></button>
144-
<button id="import-btn" class="btn btn-secondary" type="button"> Import</button>
145-
<button id="copy-btn" class="btn btn-secondary" type="button"> Copy</button>
144+
<button id="import-btn" class="btn btn-secondary" type="button"><i class="bi bi-arrow-left-right"></i> Import</button>
145+
<button id="copy-btn" class="btn btn-secondary" type="button"><i class="bi bi-copy"></i> Copy</button>
146146
<button id="edit-btn" class="btn btn-secondary" type="button"><i class="bi bi-pencil-square"></i> Edit</button>
147-
<button id="new-report-group-btn" class="btn btn-secondary" type="button"> New report group</button>
147+
<button id="new-report-group-btn" class="btn btn-secondary" type="button"><i class="bi bi-folder-plus"></i> New report group</button>
148148
<button id="new-btn" class="btn btn-secondary" type="button"><i class="bi bi-plus-square"></i> New<small class="muted">&nbsp;[Ctrl+Ins]</small></button>
149149
</div>
150150
</div>

builder/jam_files/admin/builder.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from threading import Lock
55
from operator import itemgetter
66
from esprima import parseScript, nodes
7+
import shutil
78

89
from jam.admin.admin import connect_task_db
910
from jam.admin.admin import delete_item_query, update_item_query, insert_item_query
@@ -1981,6 +1982,37 @@ def prepare_files(task):
19811982
change_language(task)
19821983
return True
19831984

1985+
def read_report_folder(task):
1986+
path = os.path.join(task.work_dir, 'reports')
1987+
dir_list = os.listdir(path)
1988+
1989+
return dir_list
1990+
1991+
def upload_report_template_file(task, file_name):
1992+
path = os.path.join(task.work_dir, 'static', 'builder', file_name)
1993+
destination_path = os.path.join(task.work_dir, 'reports', file_name)
1994+
shutil.move(path, destination_path)
1995+
1996+
def rename_report_template_file(task, old_file_name, f_file_name):
1997+
old_path = os.path.join(task.work_dir, 'reports', old_file_name)
1998+
new_path = os.path.join(task.work_dir, 'reports', f_file_name)
1999+
2000+
os.rename(old_path, new_path)
2001+
2002+
def delete_report_template_file(task, f_file_name):
2003+
file_path = 'reports/' + f_file_name
2004+
os.remove(file_path)
2005+
2006+
return True
2007+
2008+
def export_report_template_file(task, f_file_name):
2009+
source_filename = f_file_name
2010+
cleaned_filename = source_filename.removesuffix(".ods")
2011+
file_path = 'reports/' + cleaned_filename + '.ods'
2012+
#file_path = '%s/reports/%s' % (url, f_file_name)
2013+
2014+
return file_path
2015+
19842016
def register_events(task):
19852017
task.register(server_check_connection)
19862018
task.register(server_set_task_name)
@@ -2017,6 +2049,13 @@ def register_events(task):
20172049
task.register(create_calc_field_index)
20182050
task.register(server_change_field_privilege)
20192051
task.register(server_move_to_group)
2052+
#report templates start
2053+
task.register(read_report_folder)
2054+
task.register(upload_report_template_file)
2055+
task.register(rename_report_template_file)
2056+
task.register(delete_report_template_file)
2057+
task.register(export_report_template_file)
2058+
#report templates end
20202059
task.on_upload = upload_file
20212060
task.sys_params.on_apply = do_on_apply_param_changes
20222061
task.sys_tasks.on_apply = do_on_apply_param_changes

builder/jam_files/admin/builder_structure.info

Lines changed: 1 addition & 1 deletion
Large diffs are not rendered by default.

builder/jam_files/html/builder.html

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -138,13 +138,13 @@
138138
</div>
139139
<div class="form-footer">
140140
<button id="delete-btn" class="btn btn-danger" type="button"><i class="bi bi-trash"></i> Delete<small class="muted">&nbsp;[Ctrl+Del]</small></button>
141-
<button type="button" id="move-btn" class="btn btn-secondary"><i class="bi bi-folder-minus"></i></button>
141+
<button type="button" id="move-btn" class="btn btn-secondary"><i class="bi bi-folder-minus"></i> Change group</button>
142142
<button type="button" id="up-btn" class="btn btn-secondary up-down-btn"><i class="bi bi-arrow-up"></i></button>
143143
<button type="button" id="down-btn" class="btn btn-secondary up-down-btn"><i class="bi bi-arrow-down"></i></button>
144-
<button id="import-btn" class="btn btn-secondary" type="button"> Import</button>
145-
<button id="copy-btn" class="btn btn-secondary" type="button"> Copy</button>
144+
<button id="import-btn" class="btn btn-secondary" type="button"><i class="bi bi-arrow-left-right"></i> Import</button>
145+
<button id="copy-btn" class="btn btn-secondary" type="button"><i class="bi bi-copy"></i> Copy</button>
146146
<button id="edit-btn" class="btn btn-secondary" type="button"><i class="bi bi-pencil-square"></i> Edit</button>
147-
<button id="new-report-group-btn" class="btn btn-secondary" type="button"> New report group</button>
147+
<button id="new-report-group-btn" class="btn btn-secondary" type="button"><i class="bi bi-folder-plus"></i> New report group</button>
148148
<button id="new-btn" class="btn btn-secondary" type="button"><i class="bi bi-plus-square"></i> New<small class="muted">&nbsp;[Ctrl+Ins]</small></button>
149149
</div>
150150
</div>

builder/jam_files/js/admin.js

Lines changed: 140 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -119,29 +119,30 @@ function Events0() { // app_builder
119119

120120
task.buttons_info = {
121121
divider: {},
122-
project_params: {handler: set_project_params, short_cut: 'F2', key_code: 113, editor: true},
123-
db: {handler: edit_database, short_cut: 'F4', key_code: 115, editor: true},
124-
'export': {handler: export_task, short_cut: 'Ctrl-E', key_code: 69, key_ctrl: true},
125-
'import': {handler: import_task, short_cut: 'Ctrl-I', key_code: 73, key_ctrl: true},
126-
find: {handler: find_in_task, short_cut: 'Alt-F', key_code: 70, key_alt: true},
127-
print: {handler: print_code},
128-
client_module: {handler: task.sys_items.edit_client, item: task.sys_items, short_cut: 'F7', key_code: 118, editor: true},
129-
server_module: {handler: task.sys_items.edit_server, item: task.sys_items, short_cut: 'F8', key_code: 119, editor: true},
130-
templates: {handler: task.sys_items.edit_templates, item: task.sys_items, short_cut: 'F9', key_code: 120, editor: true},
131-
'index.html': {handler: task.sys_items.edit_index_html, item: task.sys_items, short_cut: 'F10', key_code: 121, editor: true},
132-
'project.css': {handler: task.sys_items.edit_project_css, item: task.sys_items, short_cut: 'F11', key_code: 122, editor: true},
133-
'Lookup lists': {handler: show_lookup_lists, editor: true},
134-
viewing: {handler: task.sys_items.view_setup, item: task.sys_items, editor: true},
135-
editing: {handler: task.sys_items.edit_setup, item: task.sys_items, editor: true},
136-
filters: {handler: task.sys_items.filters_setup, item: task.sys_items, editor: true},
137-
details: {handler: task.sys_items.details_setup, item: task.sys_items, editor: true},
138-
order: {handler: task.sys_items.order_setup, item: task.sys_items, editor: true},
139-
indices: {handler: task.sys_items.indices_setup, item: task.sys_items, editor: true},
140-
foreign_keys: {handler: task.sys_items.foreign_keys_setup, item: task.sys_items, editor: true},
141-
reports: {handler: task.sys_items.reports_setup, item: task.sys_items, editor: true},
142-
report_params: {handler: task.sys_items.report_params_setup, item: task.sys_items, editor: true, short_cut: 'F7', key_code: 118, editor: true},
143-
privileges: {handler: task.sys_items.privileges_setup, item: task.sys_items, editor: true},
144-
'Prepare files': {handler: task.prepare_files}
122+
project_params: {handler: set_project_params, short_cut: 'F2', key_code: 113, icon: 'bi bi-gear', editor: true},
123+
db: {handler: edit_database, short_cut: 'F4', key_code: 115, icon: 'bi bi-database-gear', editor: true},
124+
'export': {handler: export_task, short_cut: 'Ctrl-E', key_code: 69, key_ctrl: true, icon: 'bi bi-file-earmark-zip'},
125+
'import': {handler: import_task, short_cut: 'Ctrl-I', key_code: 73, key_ctrl: true, icon: 'bi bi-upload'},
126+
find: {handler: find_in_task, short_cut: 'Alt-F', key_code: 70, key_alt: true, icon: 'bi bi-search'},
127+
print: {handler: print_code, icon: 'bi bi-printer'},
128+
client_module: {handler: task.sys_items.edit_client, item: task.sys_items, short_cut: 'F7', key_code: 118, icon: 'bi bi-filetype-js', editor: true},
129+
server_module: {handler: task.sys_items.edit_server, item: task.sys_items, short_cut: 'F8', key_code: 119, icon: 'bi bi-filetype-py', editor: true},
130+
templates: {handler: task.sys_items.edit_templates, item: task.sys_items, short_cut: 'F9', key_code: 120, icon: 'bi bi-filetype-txt', editor: true},
131+
'index.html': {handler: task.sys_items.edit_index_html, item: task.sys_items, short_cut: 'F10', key_code: 121, icon: 'bi bi-filetype-html', editor: true},
132+
'project.css': {handler: task.sys_items.edit_project_css, item: task.sys_items, short_cut: 'F11', key_code: 122, icon: 'bi bi-filetype-css', editor: true},
133+
'Lookup lists': {handler: show_lookup_lists, icon: 'bi bi-card-list', editor: true},
134+
viewing: {handler: task.sys_items.view_setup, item: task.sys_items, icon: 'bi bi-window', editor: true},
135+
editing: {handler: task.sys_items.edit_setup, item: task.sys_items, icon: 'bi bi-file-ruled', editor: true},
136+
filters: {handler: task.sys_items.filters_setup, item: task.sys_items, icon: 'bi bi-funnel', editor: true},
137+
details: {handler: task.sys_items.details_setup, item: task.sys_items, icon: 'bi bi-window-sidebar', editor: true},
138+
order: {handler: task.sys_items.order_setup, item: task.sys_items, icon: 'bi bi-sort-alpha-up', editor: true},
139+
indices: {handler: task.sys_items.indices_setup, item: task.sys_items, icon: 'bi bi-table', editor: true},
140+
foreign_keys: {handler: task.sys_items.foreign_keys_setup, item: task.sys_items, icon: 'bi bi-arrow-left-right', editor: true},
141+
reports: {handler: task.sys_items.reports_setup, item: task.sys_items, icon: 'bi bi-file-earmark-pdf', editor: true},
142+
report_params: {handler: task.sys_items.report_params_setup, item: task.sys_items, editor: true, short_cut: 'F7', key_code: 118, icon: 'bi bi-card-checklist', editor: true},
143+
privileges: {handler: task.sys_items.privileges_setup, item: task.sys_items, icon: 'bi bi-person-lock', editor: true},
144+
report_templates: {handler: task.sys_items.read_report_folder, item: task.sys_items, icon: 'bi bi-file-earmark-excel', editor: true},
145+
'Prepare files': {handler: task.prepare_files, icon: 'bi bi-folder-check'}
145146
};
146147

147148
$("#content").show();
@@ -1209,6 +1210,7 @@ function Events3() { // sys_items
12091210
'server_module',
12101211
'divider',
12111212
'report_params',
1213+
'report_templates',
12121214
'divider',
12131215
'privileges'
12141216
]);
@@ -2866,6 +2868,12 @@ function Events3() { // sys_items
28662868
function on_edit_form_closed(item) {
28672869
item._import_info = undefined;
28682870
}
2871+
2872+
function read_report_folder(item) {
2873+
task.report_templates.view_options.template_class = 'import-tables-view';
2874+
task.report_templates.view_options.title = 'Upload, rename and download report templates';
2875+
task.report_templates.view();
2876+
}
28692877
this.init_fields = init_fields;
28702878
this.init_buttons = init_buttons;
28712879
this.tree_changed = tree_changed;
@@ -2929,6 +2937,7 @@ function Events3() { // sys_items
29292937
this.on_before_post = on_before_post;
29302938
this.move_to_group = move_to_group;
29312939
this.on_edit_form_closed = on_edit_form_closed;
2940+
this.read_report_folder = read_report_folder;
29322941
}
29332942

29342943
task.events.events3 = new Events3();
@@ -6623,4 +6632,112 @@ function Events26() { // app_builder.catalogs.sys_items.sys_fields
66236632

66246633
task.events.events26 = new Events26();
66256634

6635+
function Events32() { // app_builder.catalogs.report_templates
6636+
6637+
let old_file_name;
6638+
6639+
function on_view_form_created(item) {
6640+
item.add_view_button('Download', {type: 'primary', image: 'bi bi-download', btn_id: 'download-btn'});
6641+
item.add_view_button('Rename', {type: 'primary', image: 'bi bi-pencil-square', btn_id: 'edit-btn'});
6642+
item.add_view_button('Delete', {type: 'danger', image: 'bi bi-trash', btn_id: 'delete-btn', btn_class: 'float-left'});
6643+
6644+
item.view_form.find('#download-btn').click(function() {
6645+
export_report_template_file(item, item.f_file_name.value);
6646+
});
6647+
6648+
item.view_form.find('#edit-btn').click(function() {
6649+
item.edit_record();
6650+
});
6651+
6652+
item.view_form.find('#delete-btn').click(function() {
6653+
delete_report_template_file(item, item.f_file_name.value);
6654+
});
6655+
6656+
6657+
item.view_form.find('#import-btn').html('<i class="bi bi-upload"></i> Upload').click(function() {
6658+
task.upload('static/files', {accept: '.ods', callback: function(file_name) {
6659+
task.server('upload_report_template_file', [file_name], function(res, error) {
6660+
if (error) {
6661+
item.refresh_page();
6662+
item.warning(error);
6663+
} else {
6664+
item.refresh_page();
6665+
item.warning('Report template has successfully uploaded!');
6666+
}
6667+
});
6668+
}});
6669+
});
6670+
}
6671+
6672+
function on_after_open(item) {
6673+
task.server('read_report_folder', function(table_names) {
6674+
for (var i = 0; i < table_names.length; i++) {
6675+
item.append();
6676+
item.f_file_name.value = table_names[i];
6677+
item.post();
6678+
}
6679+
item.first();
6680+
});
6681+
}
6682+
6683+
function on_edit_form_created(item) {
6684+
old_file_name = item.f_file_name.value;
6685+
6686+
item.edit_options.title = 'Rename report template';
6687+
6688+
item.edit_form.find('#ok-btn').click(function(e) {
6689+
e.preventDefault();
6690+
6691+
if (item.f_file_name.value !== old_file_name) {
6692+
task.server('rename_report_template_file', [old_file_name, item.f_file_name.value], function(res, error) {
6693+
if (error) {
6694+
item.warning(error);
6695+
item.close_edit_form();
6696+
} else {
6697+
item.close_edit_form();
6698+
item.refresh_page();
6699+
}
6700+
});
6701+
}
6702+
});
6703+
}
6704+
6705+
function export_report_template_file(item, f_file_name) {
6706+
task.question('Do you want to download report template file: ' + f_file_name + '?',
6707+
function() {
6708+
let file_name = task.server('export_report_template_file', [f_file_name]),
6709+
url = [location.protocol, '//', location.host, location.pathname].join('');
6710+
url += file_name;
6711+
window.open(encodeURI(url));
6712+
/*var link,
6713+
host = location.protocol + '/' + '/' + location.hostname + (location.port ? ':' + location.port: ''),
6714+
url = task.server('export_report_template_file', [f_file_name, host]);
6715+
window.open(encodeURI(url));*/
6716+
}
6717+
);
6718+
}
6719+
6720+
function delete_report_template_file(item, f_file_name) {
6721+
task.question('Do you want to delete report template file: ' + f_file_name + '?',
6722+
function() {
6723+
task.server('delete_report_template_file', [f_file_name], function(res, error) {
6724+
if (error) {
6725+
item.warning(error);
6726+
} else {
6727+
item.alert_success('Successfully deleted report template!');
6728+
item.refresh_page();
6729+
}
6730+
});
6731+
}
6732+
);
6733+
}
6734+
this.on_view_form_created = on_view_form_created;
6735+
this.on_after_open = on_after_open;
6736+
this.on_edit_form_created = on_edit_form_created;
6737+
this.export_report_template_file = export_report_template_file;
6738+
this.delete_report_template_file = delete_report_template_file;
6739+
}
6740+
6741+
task.events.events32 = new Events32();
6742+
66266743
})(jQuery, task)

0 commit comments

Comments
 (0)