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';
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) {
28 _debug('drawing folder window for ' + this.folderNode.folder.name() );
30 // always start a new folder at the first page of results
31 if (!viaPaging) oilsRptOutputOffset = 0;
33 console.log('drawing folder ' + this.folderNode.folder.name() +
34 ' ; offset=' + oilsRptOutputOffset + ' ; limit=' + oilsRptOutputLimit);
37 setSelector(DOM.oils_rpt_output_limit_selector, oilsRptOutputLimit);
38 setSelector(DOM.oils_rpt_output_limit_selector_2, oilsRptOutputLimit2);
40 DOM.oils_rpt_output_limit_selector.onchange = function() {
41 oilsRptOutputLimit = getSelectorVal(DOM.oils_rpt_output_limit_selector);
42 obj.draw(); // resets offset
45 DOM.oils_rpt_output_limit_selector_2.onchange = function() {
46 oilsRptOutputLimit2 = getSelectorVal(DOM.oils_rpt_output_limit_selector_2);
47 obj.draw(); // resets offset
50 DOM.oils_rpt_output_next_selector.onclick = function() {
51 oilsRptOutputOffset += Number(oilsRptOutputLimit);
55 // Enable / disable the Previous and Start links depending on
57 if (oilsRptOutputOffset <= 0) {
58 DOM.oils_rpt_output_prev_selector.onclick = function(){};
59 DOM.oils_rpt_output_first_selector.onclick = function(){};
60 DOM.oils_rpt_output_prev_selector.removeAttribute('href');
61 DOM.oils_rpt_output_first_selector.removeAttribute('href');
63 DOM.oils_rpt_output_prev_selector.setAttribute('href', 'javascript:');
64 DOM.oils_rpt_output_first_selector.setAttribute('href', 'javascript:');
66 DOM.oils_rpt_output_prev_selector.onclick = function() {
67 oilsRptOutputOffset -= Number(oilsRptOutputLimit);
71 DOM.oils_rpt_output_first_selector.onclick = function() {
72 obj.draw(); // resets offset
76 var mine = ( this.folderNode.folder.owner().id() == USER.id() );
78 _debug('drawing folder window with type '+this.type);
79 if(mine) _debug('folder is mine...');
81 if( mine && this.type == 'template')
82 unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
83 else hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
85 unHideMe(DOM.oils_rpt_folder_window_contents_div);
86 hideMe(DOM.oils_rpt_folder_manager_div);
87 hideMe(DOM.oils_rpt_top_folder);
89 DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
90 unHideMe(DOM.oils_rpt_folder_window_contents_div);
91 hideMe(DOM.oils_rpt_folder_manager_div);
93 DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
94 hideMe(DOM.oils_rpt_folder_window_contents_div);
95 unHideMe(DOM.oils_rpt_folder_manager_div);
98 this.setFolderEditActions();
100 hideMe(DOM.oils_rpt_template_folder_new_report);
101 unHideMe(DOM.oils_rpt_folder_table_right_td);
102 hideMe(DOM.oils_rpt_folder_table_alt_td);
103 this.drawFolderDetails();
105 DOM.oils_rpt_folder_content_action_go.onclick =
106 function() {obj.doFolderAction()}
108 this.fetchFolderData();
110 var sel = DOM.oils_rpt_folder_contents_action_selector;
112 for( var i = 0; i < sel.options.length; i++ ) {
113 var opt = sel.options[i];
115 if( !mine && opt.getAttribute('value').match(/move/) ) {
120 if( opt.getAttribute('type') == this.type ) {
121 if(x && !opt.disabled) {
129 this.drawEditActions();
131 var porg = PERMS.SHARE_REPORT_FOLDER;
133 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
136 oilsRptFolderWindow.prototype.drawEditActions = function() {
138 DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
139 var s = location.search+'';
140 s = s.replace(/\&folder=\d+/g,'');
141 s = s.replace(/\&ct=\d+/g,'');
142 if (window.IAMBROWSER) {
143 window.top.location.href = NG_NEW_TEMPLATE_INTERFACE+'/'+obj.folderNode.folder.id();
145 goTo( OILS_TEMPLATE_INTERFACE+s+'&folder='+obj.folderNode.folder.id());
150 if( this.folderNode.folder.owner().id() != USER.id() )
151 hideMe(DOM.oils_rpt_folder_manager_tab_table);
153 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
155 if( isTrue(this.folderNode.folder.shared())) {
156 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
157 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
159 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
160 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
163 this.hideFolderActions();
166 DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
167 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
168 _debug("doing folder action: " + act);
169 obj.hideFolderActions();
172 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
174 case 'create_sub_folder':
175 var porg = PERMS.SHARE_REPORT_FOLDER;
177 DOM.oils_rpt_folder_manager_sub_shared.disabled = true;
178 removeChildren(DOM.oils_rpt_folder_manager_sub_lib_picker);
179 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
180 obj.myOrgSelector = new oilsRptMyOrgsWidget(
181 DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou(), porg)
182 obj.myOrgSelector.draw();
185 obj.doFolderDelete();
199 oilsRptFolderWindow.prototype.shareFolder = function() {
200 var folder = this.folderNode.folder;
201 if(isTrue(folder.shared()))
202 return alertId('oils_rpt_folder_already_shared');
203 unHideMe(DOM.oils_rpt_folder_manager_share_div);
206 var orgsel = new oilsRptMyOrgsWidget(
207 DOM.oils_rpt_folder_manager_share_lib_picker,
208 USER.ws_ou(), PERMS.SHARE_REPORT_FOLDER);
211 var type = this.type;
212 DOM.oils_rpt_folder_manager_share_submit.onclick = function() {
214 folder.share_with(orgsel.getValue());
215 oilsRptUpdateFolder( folder, type,
218 oilsRptAlertSuccess();
219 oilsRptCurrentFolderManager.draw();
226 oilsRptFolderWindow.prototype.unShareFolder = function() {
227 var folder = this.folderNode.folder;
228 if(!isTrue(folder.shared()))
229 return alertId('oils_rpt_folder_already_unshared');
230 if(!confirmId('oils_rpt_folder_unshare_confirm')) return;
232 var type = this.type;
233 oilsRptUpdateFolder( folder, type,
236 oilsRptAlertSuccess();
237 oilsRptCurrentFolderManager.draw();
244 oilsRptFolderWindow.prototype.hideFolderActions = function() {
245 hideMe(DOM.oils_rpt_folder_manager_change_name_div);
246 hideMe(DOM.oils_rpt_folder_manager_create_sub);
247 hideMe(DOM.oils_rpt_folder_manager_share_div);
251 oilsRptFolderWindow.prototype.doFolderAction = function() {
252 var objs = (this.fmTable) ? this.fmTable.getSelected() : [];
254 if( this.type == 'output' && this.fmTable2 )
255 objs = objs.concat( this.fmTable2.getSelected() );
257 if( objs.length == 0 )
258 return alert(rpt_strings.FOLDER_WINDOW_SELECT_ITEM);
259 var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
262 var successCallback = function(errid) {
263 if(errid) alertId(errid)
264 else oilsRptAlertSuccess();
271 case 'create_report' :
272 hideMe(DOM.oils_rpt_folder_table_right_td);
273 unHideMe(DOM.oils_rpt_folder_table_alt_td);
274 unHideMe(DOM.oils_rpt_editor_div);
275 new oilsRptReportEditor(new oilsReport(objs[0]), this);
277 case 'delete_report' :
278 if(!confirmId('oils_rpt_verify_report_delete')) return;
279 this.deleteReports(objs, 0, successCallback);
282 case 'delete_template' :
283 if(!confirmId('oils_rpt_verify_template_delete')) return;
284 this.deleteTemplates(objs, 0, successCallback);
288 this.showOutput(objs[0]);
291 case 'delete_output':
292 if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
293 this.deleteOutputs(objs,0, successCallback);
296 case 'move_template':
297 this.changeBatchFolder(objs, 'template', successCallback);
301 this.changeBatchFolder(objs, 'report', successCallback);
305 this.changeBatchFolder(objs, 'output', successCallback);
308 case 'clone_template':
309 this.cloneTemplate(objs[0]);
313 oilsRptFolderWindow.prototype.changeBatchFolder = function(objs, type, callback) {
314 hideMe(DOM.oils_rpt_folder_window_contents_table);
315 unHideMe(DOM.oils_rpt_move_folder_div)
317 this.drawFolderOptions(type,
319 obj.changeFolderList(objs, type, folderid, 0, callback);
320 hideMe(DOM.oils_rpt_move_folder_div)
321 unHideMe(DOM.oils_rpt_folder_window_contents_table);
326 oilsRptFolderWindow.prototype.cloneTemplate = function(template) {
327 hideMe(DOM.oils_rpt_folder_window_contents_table);
328 unHideMe(DOM.oils_rpt_move_folder_div)
330 this.drawFolderOptions('template',
332 var s = location.search+'';
333 s = s.replace(/\&folder=\d+/g,'');
334 s = s.replace(/\&ct=\d+/g,'');
335 version = JSON2js(template.data()).version;
336 if(version && version >= 5) {
337 window.top.location.href = NG_CLONE_TEMPLATE_INTERFACE+'/'+folderid+'/'+template.id();
338 } else if(version && version >= 2) {
339 if (window.IAMBROWSER) {
340 window.top.location.href = NG_CLONE_TEMPLATE_INTERFACE+'/'+folderid+'/'+template.id();
342 _debug('entering new template building interface with template version ' + version);
343 goTo(OILS_TEMPLATE_INTERFACE+s+'&folder='+folderid+'&ct='+template.id());
346 if (window.IAMBROWSER) {
347 window.top.location.href = NG_CLONE_TEMPLATE_INTERFACE+'/'+folderid+'/'+template.id();
349 goTo(OILS_LEGACY_TEMPLATE_INTERFACE+s+'&folder='+folderid+'&ct='+template.id());
357 oilsRptFolderWindow.prototype.changeFolderList = function(list, type, folderid, idx, callback, errid) {
358 if( idx >= list.length ) return callback(errid);
359 var item = list[idx];
361 var rcback = function(){obj.changeFolderList(list,type,folderid,++idx,callback,errid)};
363 item.folder(folderid);
367 oilsRptUpdateTemplate(item,rcback);
370 oilsRptUpdateReport(item,rcback);
373 oilsRptUpdateSchedule(item,rcback);
378 oilsRptFolderWindow.prototype.drawFolderOptions = function(type, callback) {
379 //var oilsRptChangeFolderTree;
383 DOM.oils_rpt_move_folder_picker,
385 rpt_strings.FOLDER_WINDOW_CHANGE_FOLDERS,
387 appendClear(DOM.oils_rpt_move_folder_selected, node.folder.name());
388 selectedFolder = node.folder.id();
392 DOM.oils_rpt_change_folder_submit.onclick = function() {
393 if(selectedFolder) callback(selectedFolder);
396 DOM.oils_rpt_change_folder_cancel.onclick = function() {
397 hideMe(DOM.oils_rpt_move_folder_div)
398 unHideMe(DOM.oils_rpt_folder_window_contents_table);
403 oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback, errid) {
404 if( idx >= list.length ) return callback(errid);
405 var output = list[idx];
407 if( output.runner().id() != USER.id() ) {
408 this.deleteOutputs(list, ++idx,
409 callback, 'oils_rpt_folder_contents_no_delete');
412 _debug('deleting output ' + output.id());
413 var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,output.id());
415 req.callback(function(){obj.deleteOutputs(list, ++idx, callback, errid);});
420 oilsRptFolderWindow.prototype.showOutput = function(sched) {
421 oilsRptFetchReport(sched.report().id(),
423 var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
424 _debug("launching report output view at URL: " + url);
425 if(isXUL() && !window.IAMBROWSER)
426 xulG.new_tab(xulG.url_prefix('XUL_REMOTE_BROWSER?url=') + url,
427 {tab_name: dojo.string.substitute( rpt_strings.FOLDER_WINDOW_REPORT_OUTPUT, [r.name()] ), browser:false},
428 {no_xulG:false, show_nav_buttons:true, show_print_button:true});
431 var win = window.open(url,r.name(), 'resizable,width=800,height=600,scrollbars=1');
438 oilsRptFolderWindow.prototype.deleteReports = function(list, idx, callback, errid) {
439 if( idx >= list.length ) return callback(errid);
440 var report = list[idx];
443 if( report.owner().id() != USER.id() ) {
444 this.deleteReports(list, ++idx,
445 callback, 'oils_rpt_folder_contents_no_delete');
449 // var req0 = new Request(OILS_RPT_REPORT_HAS_OUTS, SESSION, report.id());
452 // var r0es = r0.getResultObject();
453 // if( r0es != '0' ) {
454 // obj.deleteReports(list, ++idx,
455 // callback, 'oils_rpt_folder_contents_report_no_delete');
457 _debug('deleting report ' + report.id());
458 var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
459 req.callback(function(r) {
460 var res = r.getResultObject();
461 if( res == 0 ) return oilsRptAlertFailure();
462 obj.deleteReports(list, ++idx, callback, errid)
473 oilsRptFolderWindow.prototype.deleteTemplates = function(list, idx, callback, errid) {
474 if( idx >= list.length ) return callback(errid);
475 var tmpl = list[idx];
478 if( tmpl.owner().id() != USER.id() ) {
479 this.deleteTemplates(list, ++idx,
480 callback, 'oils_rpt_folder_contents_no_delete');
485 // var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
488 // var resp = r0.getResultObject();
490 // if( resp != '0' ) {
491 // obj.deleteTemplates(list, ++idx,
492 // callback, 'oils_rpt_folder_contents_template_no_delete');
495 _debug('deleting template ' + tmpl.id());
496 var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
497 req.callback(function(r) {
498 var res = r.getResultObject();
499 if( res == 0 ) return oilsRptAlertFailure();
500 if( res == 1 ) errid = 'oils_rpt_folder_contents_template_no_delete';
501 obj.deleteTemplates(list, ++idx, callback, errid)
513 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
514 appendClear(DOM.oils_rpt_folder_creator_label,
515 text(this.folderNode.folder.owner().usrname()));
516 appendClear(DOM.oils_rpt_folder_name_label,
517 text(this.folderNode.folder.name()));
521 oilsRptFolderWindow.prototype.createSearchRequest = function() {
522 var field = getSelectorVal(DOM.template_search_fields_selector);
523 var fields = field ? [field] : ['name', 'description'];
526 'open-ils.reporter:open-ils.reporter.search.templates.atomic',
528 limit : oilsRptOutputLimit,
529 offset : oilsRptOutputOffset,
530 query : DOM.template_search_query.value,
531 folder : getSelectorVal(DOM.template_search_folder_selector),
537 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
539 hideMe(DOM.oils_rpt_content_count_row_2);
540 hideMe(DOM.oils_rpt_content_row_2);
542 removeChildren(this.selector);
543 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
544 SESSION, this.type, this.folderNode.folder.id(),
545 oilsRptOutputLimit, oilsRptOutputOffset);
547 hideMe(DOM.oils_rpt_pending_output);
549 if(this.type == 'output') {
550 unHideMe(DOM.oils_rpt_pending_output);
551 /* first fetch the non-complete schedules */
552 req = new Request(OILS_RPT_FETCH_OUTPUT,
553 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit, 0);
556 // Displaying the special template "Search Results" folder means
557 // starting a new search.
558 var hidableNodes = document.getElementsByClassName('hidden-for-search-results');
559 var showableNodes = document.getElementsByClassName('show-for-search-results');
560 if (this.type == 'template' &&
561 this.folderNode.folder.id() == oilsRptSearchResultFolderId) {
562 req = this.createSearchRequest();
564 // when displaying search results, hide anything that should be hidden
565 dojo.forEach(hidableNodes, function(n) { n.style.visibility = 'hidden' });
566 dojo.forEach(showableNodes, function(n) { n.style.visibility = 'visible' });
567 hideMe(DOM.real_folder_name);
568 unHideMe(DOM.search_results_folder_name);
570 dojo.forEach(hidableNodes, function(n) { n.style.visibility = 'visible' });
571 dojo.forEach(showableNodes, function(n) { n.style.visibility = 'hidden' });
572 unHideMe(DOM.real_folder_name);
573 hideMe(DOM.search_results_folder_name);
577 removeChildren(obj.selector);
580 var res = r.getResultObject();
582 if( res.length == 0 ) {
583 //hideMe(DOM.oils_rpt_content_count_row); /* this also hides the new-template link.. fix me */
584 hideMe(DOM.oils_rpt_content_row);
585 unHideMe(DOM.oils_rpt_content_row_empty);
587 unHideMe(DOM.oils_rpt_content_count_row);
588 unHideMe(DOM.oils_rpt_content_row);
589 hideMe(DOM.oils_rpt_content_row_empty);
592 if( obj.type == 'output' ) {
593 obj.fleshSchedules(res, 0, obj.selector);
597 obj.fmTable = drawFMObjectTable(
602 selectColName : rpt_strings.FOLDER_WINDOW_COLNAME_SELECT,
603 selectAllName : rpt_strings.FOLDER_WINDOW_COLNAME_ALL,
604 selectNoneName : rpt_strings.FOLDER_WINDOW_COLNAME_NONE
612 if( this.type != 'output' ) return;
615 unHideMe(DOM.oils_rpt_content_count_row_2);
616 unHideMe(DOM.oils_rpt_content_row_2);
619 /* now fetch the completed schedules */
620 req = new Request(OILS_RPT_FETCH_OUTPUT,
621 SESSION, this.folderNode.folder.id(), oilsRptOutputLimit2, 1);
623 _debug("TRYING: fleshing finished scheds with div: " + DOM.oils_rpt_folder_contents_selector_2);
624 removeChildren(DOM.oils_rpt_folder_contents_selector_2);
627 var res = r.getResultObject();
629 if( res.length == 0 ) {
630 hideMe(DOM.oils_rpt_content_count_row_2);
631 hideMe(DOM.oils_rpt_content_row_2);
633 unHideMe(DOM.oils_rpt_content_count_row_2);
634 unHideMe(DOM.oils_rpt_content_row_2);
637 _debug("fleshing finished scheds with div: " + DOM.oils_rpt_folder_contents_selector_2);
638 obj.fleshSchedules(res, 0, DOM.oils_rpt_folder_contents_selector_2, true);
645 oilsRptFolderWindow.prototype.fleshSchedules = function(list, idx, selector, isSecond) {
647 if( idx >= list.length ) return;
649 var sched = list[idx];
652 oilsRptFetchUser(sched.runner(),
656 oilsRptFetchTemplate(sched.report().template(),
659 sched.report().template(template);
661 _debug("drawing schedule with output: "+selector);
662 var t = drawFMObjectTable(
667 selectColName : rpt_strings.FOLDER_WINDOW_COLNAME_SELECT,
668 selectAllName : rpt_strings.FOLDER_WINDOW_COLNAME_ALL,
669 selectNoneName : rpt_strings.FOLDER_WINDOW_COLNAME_NONE
673 if( isSecond ) obj.fmTable2 = t;
674 else obj.fmTable = t;
677 //obj.fmTable.add(sched);
678 if( isSecond ) obj.fmTable2.add(sched);
679 else obj.fmTable.add(sched);
682 obj.fleshSchedules(list, ++idx, selector, isSecond);
690 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
691 this.selectedFolder = folderNode;
694 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
695 var folder = this.folderNode.folder;
698 DOM.oils_rpt_folder_manager_name_input.value = folder.name();
699 DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
700 var name = DOM.oils_rpt_folder_manager_name_input.value;
703 if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
704 oilsRptUpdateFolder(folder, obj.type,
707 oilsRptAlertSuccess();
708 oilsRptCurrentFolderManager.draw();
716 DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
719 if( obj.type == 'report' ) folder = new rrf();
720 if( obj.type == 'template' ) folder = new rtf();
721 if( obj.type == 'output' ) folder = new rof();
723 folder.owner(USER.id());
724 folder.parent(obj.folderNode.folder.id());
725 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
726 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
727 folder.shared( (shared == 'yes') ? 't' : 'f');
728 if( folder.shared() == 't' )
729 folder.share_with( obj.myOrgSelector.getValue() );
731 oilsRptCreateFolder(folder, obj.type,
734 oilsRptAlertSuccess();
735 oilsRptCurrentFolderManager.draw();
743 oilsRptFolderWindow.prototype.doFolderDelete = function() {
745 var cache = oilsRptFolderNodeCache[this.type];
746 /* let's see if this folder has any children */
747 for( var c in cache )
748 if( cache[c].folder.parent() == this.folderNode.folder.id() )
749 return alertId('oils_rpt_folder_cannot_delete');
751 /* lets see if the folder has contents */
752 var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
753 SESSION, this.type, this.folderNode.folder.id(), 1);
755 if(this.type == 'output') {
756 req = new Request(OILS_RPT_FETCH_OUTPUT,
757 SESSION, this.folderNode.folder.id(), 1);
766 var contents = r.getResultObject();
767 if( contents.length > 0 )
768 return alertId('oils_rpt_folder_cannot_delete');
770 if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
771 var req2 = new Request(OILS_RPT_DELETE_FOLDER,
772 SESSION, obj.type, obj.folderNode.folder.id());
776 var res = r2.getResultObject();
778 oilsRptAlertSuccess();
779 oilsRptCurrentFolderManager.draw();
781 else alert('error: '+js2JSON(res));
791 function oilsRptViewEditReport(report, readonly) {
794 var folderWindow = oilsRptFolderWindow.folderIdMap[report.folder()];
796 var req = new Request(
797 'open-ils.reporter:open-ils.reporter.report.fleshed.retrieve',
801 req.callback(function(r) {
803 hideMe(DOM.oils_rpt_folder_table_right_td);
804 unHideMe(DOM.oils_rpt_folder_table_alt_td);
805 unHideMe(DOM.oils_rpt_editor_div);
807 report = r.getResultObject();
809 new oilsRptReportEditor(
810 new oilsReport(report.template(), report), folderWindow, readonly);
816 function oilsRptViewReport(report) {
817 oilsRptViewEditReport(report, true);
820 function oilsRptEditReport(report) {
821 oilsRptViewEditReport(report);