1 dojo.requireLocalization("openils.reports", "reports");
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
4 var NG_NEW_TEMPLATE_INTERFACE = '/eg/staff/reporter/template/new';
5 var NG_CLONE_TEMPLATE_INTERFACE = '/eg/staff/reporter/template/clone';
6 var OILS_TEMPLATE_INTERFACE = 'xul/template_builder.xul';
7 var OILS_LEGACY_TEMPLATE_INTERFACE = 'oils_rpt_builder.xhtml';
8 var currentlyLoading = false;
10 /* generic folder window class */
11 oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
12 function oilsRptFolderWindow(type, folderId) {
14 var node = oilsRptCurrentFolderManager.findNode(type, folderId);
15 this.selector = DOM.oils_rpt_folder_contents_selector;
16 this.folderNode = node;
18 this.folderId = folderId;
19 oilsRptFolderWindow.folderIdMap[folderId] = this;
22 // maps folder IDs to their containing oilsRptFolderWindow objects
23 oilsRptFolderWindow.folderIdMap = {};
25 // Here lie the contents of a specific folder
26 oilsRptFolderWindow.prototype.draw = function(viaPaging) {
27 if (currentlyLoading) return; // avoids loading same data repeatedly
28 currentlyLoading=true;
30 _debug('drawing folder window for ' + this.folderNode.folder.name() );
32 // always start a new folder at the first page of results
33 if (!viaPaging) oilsRptOutputOffset = 0;
35 console.log('drawing folder ' + this.folderNode.folder.name() +
36 ' ; offset=' + oilsRptOutputOffset + ' ; limit=' + oilsRptOutputLimit);
39 setSelector(DOM.oils_rpt_output_limit_selector, oilsRptOutputLimit);
40 setSelector(DOM.oils_rpt_output_limit_selector_2, oilsRptOutputLimit2);
42 DOM.oils_rpt_output_limit_selector.onchange = function() {
43 oilsRptOutputLimit = getSelectorVal(DOM.oils_rpt_output_limit_selector);
44 obj.draw(); // resets offset
47 DOM.oils_rpt_output_limit_selector_2.onchange = function() {
48 oilsRptOutputLimit2 = getSelectorVal(DOM.oils_rpt_output_limit_selector_2);
49 obj.draw(); // resets offset
52 DOM.oils_rpt_output_next_selector.onclick = function() {
53 oilsRptOutputOffset += Number(oilsRptOutputLimit);
57 // Enable / disable the Previous and Start links depending on
59 if (oilsRptOutputOffset <= 0) {
60 DOM.oils_rpt_output_prev_selector.onclick = function(){};
61 DOM.oils_rpt_output_first_selector.onclick = function(){};
62 DOM.oils_rpt_output_prev_selector.removeAttribute('href');
63 DOM.oils_rpt_output_first_selector.removeAttribute('href');
65 DOM.oils_rpt_output_prev_selector.setAttribute('href', 'javascript:');
66 DOM.oils_rpt_output_first_selector.setAttribute('href', 'javascript:');
68 DOM.oils_rpt_output_prev_selector.onclick = function() {
69 oilsRptOutputOffset -= Number(oilsRptOutputLimit);
73 DOM.oils_rpt_output_first_selector.onclick = function() {
74 obj.draw(); // resets offset
78 var mine = ( this.folderNode.folder.owner().id() == USER.id() );
80 _debug('drawing folder window with type '+this.type);
81 if(mine) _debug('folder is mine...');
83 if( mine && this.type == 'template')
84 unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
85 else hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
87 unHideMe(DOM.oils_rpt_folder_window_contents_div);
88 hideMe(DOM.oils_rpt_folder_manager_div);
89 hideMe(DOM.oils_rpt_top_folder);
91 DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
92 unHideMe(DOM.oils_rpt_folder_window_contents_div);
93 hideMe(DOM.oils_rpt_folder_manager_div);
95 DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
96 hideMe(DOM.oils_rpt_folder_window_contents_div);
97 unHideMe(DOM.oils_rpt_folder_manager_div);
100 this.setFolderEditActions();
102 hideMe(DOM.oils_rpt_template_folder_new_report);
103 unHideMe(DOM.oils_rpt_folder_table_right_td);
104 hideMe(DOM.oils_rpt_folder_table_alt_td);
105 this.drawFolderDetails();
107 DOM.oils_rpt_folder_content_action_go.onclick =
108 function() {obj.doFolderAction()}
110 this.fetchFolderData();
112 var sel = DOM.oils_rpt_folder_contents_action_selector;
114 for( var i = 0; i < sel.options.length; i++ ) {
115 var opt = sel.options[i];
117 if( !mine && opt.getAttribute('value').match(/move/) ) {
122 if( opt.getAttribute('type') == this.type ) {
123 if(x && !opt.disabled) {
131 this.drawEditActions();
133 var porg = PERMS.SHARE_REPORT_FOLDER;
135 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
138 oilsRptFolderWindow.prototype.drawEditActions = function() {
140 DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
141 var s = location.search+'';
142 s = s.replace(/\&folder=\d+/g,'');
143 s = s.replace(/\&ct=\d+/g,'');
144 if (window.IAMBROWSER) {
145 window.top.location.href = NG_NEW_TEMPLATE_INTERFACE+'/'+obj.folderNode.folder.id();
147 goTo( OILS_TEMPLATE_INTERFACE+s+'&folder='+obj.folderNode.folder.id());
152 if( this.folderNode.folder.owner().id() != USER.id() )
153 hideMe(DOM.oils_rpt_folder_manager_tab_table);
155 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
157 if( isTrue(this.folderNode.folder.shared())) {
158 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
159 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
161 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
162 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
165 this.hideFolderActions();
168 DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
169 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
170 _debug("doing folder action: " + act);
171 obj.hideFolderActions();
174 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
176 case 'create_sub_folder':
177 var porg = PERMS.SHARE_REPORT_FOLDER;
179 DOM.oils_rpt_folder_manager_sub_shared.disabled = true;
180 removeChildren(DOM.oils_rpt_folder_manager_sub_lib_picker);
181 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
182 obj.myOrgSelector = new oilsRptMyOrgsWidget(
183 DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou(), porg)
184 obj.myOrgSelector.draw();
187 obj.doFolderDelete();
201 oilsRptFolderWindow.prototype.shareFolder = function() {
202 var folder = this.folderNode.folder;
203 if(isTrue(folder.shared()))
204 return alertId('oils_rpt_folder_already_shared');
205 unHideMe(DOM.oils_rpt_folder_manager_share_div);
208 var orgsel = new oilsRptMyOrgsWidget(
209 DOM.oils_rpt_folder_manager_share_lib_picker,
210 USER.ws_ou(), PERMS.SHARE_REPORT_FOLDER);
213 var type = this.type;
214 DOM.oils_rpt_folder_manager_share_submit.onclick = function() {
216 folder.share_with(orgsel.getValue());
217 oilsRptUpdateFolder( folder, type,
220 oilsRptAlertSuccess();
221 oilsRptCurrentFolderManager.draw();
228 oilsRptFolderWindow.prototype.unShareFolder = function() {
229 var folder = this.folderNode.folder;
230 if(!isTrue(folder.shared()))
231 return alertId('oils_rpt_folder_already_unshared');
232 if(!confirmId('oils_rpt_folder_unshare_confirm')) return;
234 var type = this.type;
235 oilsRptUpdateFolder( folder, type,
238 oilsRptAlertSuccess();
239 oilsRptCurrentFolderManager.draw();
246 oilsRptFolderWindow.prototype.hideFolderActions = function() {
247 hideMe(DOM.oils_rpt_folder_manager_change_name_div);
248 hideMe(DOM.oils_rpt_folder_manager_create_sub);
249 hideMe(DOM.oils_rpt_folder_manager_share_div);
253 oilsRptFolderWindow.prototype.doFolderAction = function() {
254 var objs = (this.fmTable) ? this.fmTable.getSelected() : [];
256 if( this.type == 'output' && this.fmTable2 )
257 objs = objs.concat( this.fmTable2.getSelected() );
259 if( objs.length == 0 )
260 return alert(rpt_strings.FOLDER_WINDOW_SELECT_ITEM);
261 var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
264 var successCallback = function(errid) {
265 if(errid) alertId(errid)
266 else oilsRptAlertSuccess();
273 case 'create_report' :
274 hideMe(DOM.oils_rpt_folder_table_right_td);
275 unHideMe(DOM.oils_rpt_folder_table_alt_td);
276 unHideMe(DOM.oils_rpt_editor_div);
277 new oilsRptReportEditor(new oilsReport(objs[0]), this);
279 case 'delete_report' :
280 if(!confirmId('oils_rpt_verify_report_delete')) return;
281 this.deleteReports(objs, 0, successCallback);
284 case 'delete_template' :
285 if(!confirmId('oils_rpt_verify_template_delete')) return;
286 this.deleteTemplates(objs, 0, successCallback);
290 this.showOutput(objs[0]);
293 case 'delete_output':
294 if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
295 this.deleteOutputs(objs,0, successCallback);
298 case 'move_template':
299 this.changeBatchFolder(objs, 'template', successCallback);
303 this.changeBatchFolder(objs, 'report', successCallback);
307 this.changeBatchFolder(objs, 'output', successCallback);
310 case 'clone_template':
311 this.cloneTemplate(objs[0]);
315 oilsRptFolderWindow.prototype.changeBatchFolder = function(objs, type, callback) {
316 hideMe(DOM.oils_rpt_folder_window_contents_table);
317 unHideMe(DOM.oils_rpt_move_folder_div)
319 this.drawFolderOptions(type,
321 obj.changeFolderList(objs, type, folderid, 0, callback);
322 hideMe(DOM.oils_rpt_move_folder_div)
323 unHideMe(DOM.oils_rpt_folder_window_contents_table);
328 oilsRptFolderWindow.prototype.cloneTemplate = function(template) {
329 hideMe(DOM.oils_rpt_folder_window_contents_table);
330 unHideMe(DOM.oils_rpt_move_folder_div)
332 this.drawFolderOptions('template',
334 var s = location.search+'';
335 s = s.replace(/\&folder=\d+/g,'');
336 s = s.replace(/\&ct=\d+/g,'');
337 version = JSON2js(template.data()).version;
338 if(version && version >= 5) {
339 window.top.location.href = NG_CLONE_TEMPLATE_INTERFACE+'/'+folderid+'/'+template.id();
340 } else if(version && version >= 2) {
341 if (window.IAMBROWSER) {
342 window.top.location.href = NG_CLONE_TEMPLATE_INTERFACE+'/'+folderid+'/'+template.id();
344 _debug('entering new template building interface with template version ' + version);
345 goTo(OILS_TEMPLATE_INTERFACE+s+'&folder='+folderid+'&ct='+template.id());
348 if (window.IAMBROWSER) {
349 window.top.location.href = NG_CLONE_TEMPLATE_INTERFACE+'/'+folderid+'/'+template.id();
351 goTo(OILS_LEGACY_TEMPLATE_INTERFACE+s+'&folder='+folderid+'&ct='+template.id());
359 oilsRptFolderWindow.prototype.changeFolderList = function(list, type, folderid, idx, callback, errid) {
360 if( idx >= list.length ) return callback(errid);
361 var item = list[idx];
363 var rcback = function(){obj.changeFolderList(list,type,folderid,++idx,callback,errid)};
365 item.folder(folderid);
369 oilsRptUpdateTemplate(item,rcback);
372 oilsRptUpdateReport(item,rcback);
375 oilsRptUpdateSchedule(item,rcback);
380 oilsRptFolderWindow.prototype.drawFolderOptions = function(type, callback) {
381 //var oilsRptChangeFolderTree;
385 DOM.oils_rpt_move_folder_picker,
387 rpt_strings.FOLDER_WINDOW_CHANGE_FOLDERS,
389 appendClear(DOM.oils_rpt_move_folder_selected, node.folder.name());
390 selectedFolder = node.folder.id();
394 DOM.oils_rpt_change_folder_submit.onclick = function() {
395 if(selectedFolder) callback(selectedFolder);
398 DOM.oils_rpt_change_folder_cancel.onclick = function() {
399 hideMe(DOM.oils_rpt_move_folder_div)
400 unHideMe(DOM.oils_rpt_folder_window_contents_table);
405 oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback, errid) {
406 if( idx >= list.length ) return callback(errid);
407 var output = list[idx];
409 if( output.runner().id() != USER.id() ) {
410 this.deleteOutputs(list, ++idx,
411 callback, 'oils_rpt_folder_contents_no_delete');
414 _debug('deleting output ' + output.id());
415 var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,output.id());
417 req.callback(function(){obj.deleteOutputs(list, ++idx, callback, errid);});
422 oilsRptFolderWindow.prototype.showOutput = function(sched) {
423 oilsRptFetchReport(sched.report().id(),
425 var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
426 _debug("launching report output view at URL: " + url);
427 if(isXUL() && !window.IAMBROWSER)
428 xulG.new_tab(xulG.url_prefix('XUL_REMOTE_BROWSER?url=') + url,
429 {tab_name: dojo.string.substitute( rpt_strings.FOLDER_WINDOW_REPORT_OUTPUT, [r.name()] ), browser:false},
430 {no_xulG:false, show_nav_buttons:true, show_print_button:true});
433 var win = window.open(url,r.name(), 'resizable,width=800,height=600,scrollbars=1');
440 oilsRptFolderWindow.prototype.deleteReports = function(list, idx, callback, errid) {
441 if( idx >= list.length ) return callback(errid);
442 var report = list[idx];
445 if( report.owner().id() != USER.id() ) {
446 this.deleteReports(list, ++idx,
447 callback, 'oils_rpt_folder_contents_no_delete');
451 // var req0 = new Request(OILS_RPT_REPORT_HAS_OUTS, SESSION, report.id());
454 // var r0es = r0.getResultObject();
455 // if( r0es != '0' ) {
456 // obj.deleteReports(list, ++idx,
457 // callback, 'oils_rpt_folder_contents_report_no_delete');
459 _debug('deleting report ' + report.id());
460 var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
461 req.callback(function(r) {
462 var res = r.getResultObject();
463 if( res == 0 ) return oilsRptAlertFailure();
464 obj.deleteReports(list, ++idx, callback, errid)
475 oilsRptFolderWindow.prototype.deleteTemplates = function(list, idx, callback, errid) {
476 if( idx >= list.length ) return callback(errid);
477 var tmpl = list[idx];
480 if( tmpl.owner().id() != USER.id() ) {
481 this.deleteTemplates(list, ++idx,
482 callback, 'oils_rpt_folder_contents_no_delete');
487 // var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
490 // var resp = r0.getResultObject();
492 // if( resp != '0' ) {
493 // obj.deleteTemplates(list, ++idx,
494 // callback, 'oils_rpt_folder_contents_template_no_delete');
497 _debug('deleting template ' + tmpl.id());
498 var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
499 req.callback(function(r) {
500 var res = r.getResultObject();
501 if( res == 0 ) return oilsRptAlertFailure();
502 if( res == 1 ) errid = 'oils_rpt_folder_contents_template_no_delete';
503 obj.deleteTemplates(list, ++idx, callback, errid)
515 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
516 appendClear(DOM.oils_rpt_folder_creator_label,
517 text(this.folderNode.folder.owner().usrname()));
518 appendClear(DOM.oils_rpt_folder_name_label,
519 text(this.folderNode.folder.name()));
523 oilsRptFolderWindow.prototype.createSearchRequest = function() {
524 var field = getSelectorVal(DOM.template_search_fields_selector);
525 var fields = field ? [field] : ['name', 'description'];
528 'open-ils.reporter:open-ils.reporter.search.templates.atomic',
530 limit : oilsRptOutputLimit,
531 offset : oilsRptOutputOffset,
532 query : DOM.template_search_query.value,
533 folder : getSelectorVal(DOM.template_search_folder_selector),
539 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
540 hideMe(DOM.oils_rpt_content_count_row_2);
541 hideMe(DOM.oils_rpt_content_row_2);
543 removeChildren(this.selector);
544 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
545 SESSION, this.type, this.folderNode.folder.id(),
546 oilsRptOutputLimit, oilsRptOutputOffset);
548 hideMe(DOM.oils_rpt_pending_output);
550 if(this.type == 'output') {
551 unHideMe(DOM.oils_rpt_pending_output);
552 /* first fetch the non-complete schedules */
553 req = new Request(OILS_RPT_FETCH_OUTPUT,
554 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit, 0);
557 // Displaying the special template "Search Results" folder means
558 // starting a new search.
559 var hidableNodes = document.getElementsByClassName('hidden-for-search-results');
560 var showableNodes = document.getElementsByClassName('show-for-search-results');
561 if (this.type == 'template' &&
562 this.folderNode.folder.id() == oilsRptSearchResultFolderId) {
563 req = this.createSearchRequest();
565 // when displaying search results, hide anything that should be hidden
566 dojo.forEach(hidableNodes, function(n) { n.style.visibility = 'hidden' });
567 dojo.forEach(showableNodes, function(n) { n.style.visibility = 'visible' });
568 hideMe(DOM.real_folder_name);
569 unHideMe(DOM.search_results_folder_name);
571 dojo.forEach(hidableNodes, function(n) { n.style.visibility = 'visible' });
572 dojo.forEach(showableNodes, function(n) { n.style.visibility = 'hidden' });
573 unHideMe(DOM.real_folder_name);
574 hideMe(DOM.search_results_folder_name);
578 removeChildren(obj.selector);
581 var res = r.getResultObject();
583 if( res.length == 0 ) {
584 //hideMe(DOM.oils_rpt_content_count_row); /* this also hides the new-template link.. fix me */
585 hideMe(DOM.oils_rpt_content_row);
586 unHideMe(DOM.oils_rpt_content_row_empty);
588 unHideMe(DOM.oils_rpt_content_count_row);
589 unHideMe(DOM.oils_rpt_content_row);
590 hideMe(DOM.oils_rpt_content_row_empty);
593 if( obj.type == 'output' ) {
594 obj.fleshSchedules(res, 0, obj.selector);
598 obj.fmTable = drawFMObjectTable(
603 selectColName : rpt_strings.FOLDER_WINDOW_COLNAME_SELECT,
604 selectAllName : rpt_strings.FOLDER_WINDOW_COLNAME_ALL,
605 selectNoneName : rpt_strings.FOLDER_WINDOW_COLNAME_NONE
609 currentlyLoading=false;
614 if( this.type != 'output' ) return;
617 unHideMe(DOM.oils_rpt_content_count_row_2);
618 unHideMe(DOM.oils_rpt_content_row_2);
621 /* now fetch the completed schedules */
622 req = new Request(OILS_RPT_FETCH_OUTPUT,
623 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit2, 1);
625 _debug("TRYING: fleshing finished scheds with div: " + DOM.oils_rpt_folder_contents_selector_2);
626 removeChildren(DOM.oils_rpt_folder_contents_selector_2);
629 var res = r.getResultObject();
631 if( res.length == 0 ) {
632 hideMe(DOM.oils_rpt_content_count_row_2);
633 hideMe(DOM.oils_rpt_content_row_2);
635 unHideMe(DOM.oils_rpt_content_count_row_2);
636 unHideMe(DOM.oils_rpt_content_row_2);
639 _debug("fleshing finished scheds with div: " + DOM.oils_rpt_folder_contents_selector_2);
640 obj.fleshSchedules(res, 0, DOM.oils_rpt_folder_contents_selector_2, true);
647 oilsRptFolderWindow.prototype.fleshSchedules = function(list, idx, selector, isSecond) {
649 if( idx >= list.length ) return;
651 var sched = list[idx];
654 oilsRptFetchUser(sched.runner(),
658 oilsRptFetchTemplate(sched.report().template(),
661 sched.report().template(template);
663 _debug("drawing schedule with output: "+selector);
664 var t = drawFMObjectTable(
669 selectColName : rpt_strings.FOLDER_WINDOW_COLNAME_SELECT,
670 selectAllName : rpt_strings.FOLDER_WINDOW_COLNAME_ALL,
671 selectNoneName : rpt_strings.FOLDER_WINDOW_COLNAME_NONE
675 if( isSecond ) obj.fmTable2 = t;
676 else obj.fmTable = t;
679 //obj.fmTable.add(sched);
680 if( isSecond ) obj.fmTable2.add(sched);
681 else obj.fmTable.add(sched);
684 obj.fleshSchedules(list, ++idx, selector, isSecond);
692 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
693 this.selectedFolder = folderNode;
696 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
697 var folder = this.folderNode.folder;
700 DOM.oils_rpt_folder_manager_name_input.value = folder.name();
701 DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
702 var name = DOM.oils_rpt_folder_manager_name_input.value;
705 if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
706 oilsRptUpdateFolder(folder, obj.type,
709 oilsRptAlertSuccess();
710 oilsRptCurrentFolderManager.draw();
718 DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
721 if( obj.type == 'report' ) folder = new rrf();
722 if( obj.type == 'template' ) folder = new rtf();
723 if( obj.type == 'output' ) folder = new rof();
725 folder.owner(USER.id());
726 folder.parent(obj.folderNode.folder.id());
727 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
728 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
729 folder.shared( (shared == 'yes') ? 't' : 'f');
730 if( folder.shared() == 't' )
731 folder.share_with( obj.myOrgSelector.getValue() );
733 oilsRptCreateFolder(folder, obj.type,
736 oilsRptAlertSuccess();
737 oilsRptCurrentFolderManager.draw();
745 oilsRptFolderWindow.prototype.doFolderDelete = function() {
747 var cache = oilsRptFolderNodeCache[this.type];
748 /* let's see if this folder has any children */
749 for( var c in cache )
750 if( cache[c].folder.parent() == this.folderNode.folder.id() )
751 return alertId('oils_rpt_folder_cannot_delete');
753 /* lets see if the folder has contents */
754 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
755 SESSION, this.type, this.folderNode.folder.id(), 1);
757 if(this.type == 'output') {
758 req = new Request(OILS_RPT_FETCH_OUTPUT,
759 SESSION, this.folderNode.folder.id(), 1);
768 var contents = r.getResultObject();
769 if( contents.length > 0 )
770 return alertId('oils_rpt_folder_cannot_delete');
772 if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
773 var req2 = new Request(OILS_RPT_DELETE_FOLDER,
774 SESSION, obj.type, obj.folderNode.folder.id());
778 var res = r2.getResultObject();
780 oilsRptAlertSuccess();
781 oilsRptCurrentFolderManager.draw();
783 else alert('error: '+js2JSON(res));
793 function oilsRptViewEditReport(report, readonly) {
796 var folderWindow = oilsRptFolderWindow.folderIdMap[report.folder()];
798 var req = new Request(
799 'open-ils.reporter:open-ils.reporter.report.fleshed.retrieve',
803 req.callback(function(r) {
805 hideMe(DOM.oils_rpt_folder_table_right_td);
806 unHideMe(DOM.oils_rpt_folder_table_alt_td);
807 unHideMe(DOM.oils_rpt_editor_div);
809 report = r.getResultObject();
811 new oilsRptReportEditor(
812 new oilsReport(report.template(), report), folderWindow, readonly);
818 function oilsRptViewReport(report) {
819 oilsRptViewEditReport(report, true);
822 function oilsRptEditReport(report) {
823 oilsRptViewEditReport(report);