]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folder_window.js
added output support, more tuning
[working/Evergreen.git] / Open-ILS / web / reports / oils_rpt_folder_window.js
1
2 function oilsRptFetchTemplate(id) {
3         var t = oilsRptGetCache('rt', id);
4         if(!t) {
5                 var r = new Request(OILS_RPT_FETCH_TEMPLATE, SESSION, id);
6                 r.send(true);
7                 t = r.result();
8                 oilsRptCacheObject('rt', t, id);
9         }
10         return t;
11 }
12
13
14 /* generic folder window class */
15 oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
16 function oilsRptFolderWindow(type, folderId) { 
17         this.init();
18         var node = oilsRptCurrentFolderManager.findNode(type, folderId);
19         this.selector = DOM.oils_rpt_folder_contents_selector;
20         this.folderNode = node;
21         this.type = type;
22 }
23
24
25 oilsRptFolderWindow.prototype.draw = function() {
26
27         _debug(this.folderNode.folder.owner().id() + ' : ' + USER.id());
28
29         if( this.folderNode.folder.owner().id() == USER.id() && this.type == 'template') 
30                 unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
31         else hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
32
33         unHideMe(DOM.oils_rpt_folder_window_contents_div);
34         hideMe(DOM.oils_rpt_folder_manager_div);
35         hideMe(DOM.oils_rpt_top_folder);
36
37         DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
38                 unHideMe(DOM.oils_rpt_folder_window_contents_div);
39                 hideMe(DOM.oils_rpt_folder_manager_div);
40         }
41         DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
42                 hideMe(DOM.oils_rpt_folder_window_contents_div);
43                 unHideMe(DOM.oils_rpt_folder_manager_div);
44         }
45
46         this.setFolderEditActions();
47
48         hideMe(DOM.oils_rpt_template_folder_new_report);
49         unHideMe(DOM.oils_rpt_folder_table_right_td);
50         hideMe(DOM.oils_rpt_folder_table_alt_td);
51         this.drawFolderDetails();
52
53         var obj = this;
54         DOM.oils_rpt_folder_content_action_go.onclick = 
55                 function() {obj.doFolderAction()}
56
57         this.fetchFolderData();
58
59         var sel = DOM.oils_rpt_folder_contents_action_selector;
60         var x = true;
61         for( var i = 0; i < sel.options.length; i++ ) {
62                 var opt = sel.options[i];
63                 if( opt.getAttribute('type') == this.type ) {
64                         if(x) opt.selected = true;
65                         x = false;
66                         unHideMe(opt);
67                 }
68                 else hideMe(opt);
69         }
70         sel.options[0].selected = true;
71
72         this.drawEditActions();
73 }
74
75 oilsRptFolderWindow.prototype.drawEditActions = function() {
76
77         DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
78                 var s = location.search+'';
79                 s = s.replace(/\&folder=\d+/,'');
80                 goTo( 'oils_rpt_builder.xhtml'+s+'&folder='+obj.folderNode.folder.id());
81         }
82
83
84         if( this.folderNode.folder.owner().id() != USER.id() )
85                 hideMe(DOM.oils_rpt_folder_manager_tab_table);
86         else
87                 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
88
89         if( isTrue(this.folderNode.folder.shared())) {
90                 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
91                 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
92         } else {
93                 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
94                 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
95         }
96
97         this.hideFolderActions();
98         var obj = this;
99
100         DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
101                 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
102                 _debug("doing folder action: " + act);
103                 obj.hideFolderActions();
104                 switch(act) {
105                         case 'change_name':
106                                 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
107                                 break;
108                         case 'create_sub_folder':
109                                 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
110                                 obj.myOrgSelector = new oilsRptMyOrgsWidget(
111                                         DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou());
112                                 obj.myOrgSelector.draw();
113                                 break;
114                         case 'delete':
115                                 obj.doFolderDelete();
116                                 break;
117                 }
118         }
119
120 }
121
122
123 oilsRptFolderWindow.prototype.hideFolderActions = function() {
124         hideMe(DOM.oils_rpt_folder_manager_change_name_div);
125         hideMe(DOM.oils_rpt_folder_manager_create_sub);
126 }
127
128
129 oilsRptFolderWindow.prototype.doFolderAction = function() {
130         var objs = this.fmTable.getSelected();
131         if( objs.length == 0 ) 
132                 return alert('Please select an item from the list');
133         var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
134
135         switch(action) {
136                 case 'create_report' :
137                         hideMe(DOM.oils_rpt_folder_table_right_td);
138                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
139                         unHideMe(DOM.oils_rpt_editor_div);
140                         new oilsRptReportEditor(new oilsReport(objs[0]), this);
141                         break;
142                 case 'delete_report' :
143                         for(var r = 0; r < objs.length; r++) 
144                                 this.deleteReport(objs[r]);
145                         break;
146                 case 'delete_template' :
147                         for(var r = 0; r < objs.length; r++) 
148                                 this.deleteTemplate(objs[r]);
149                         break;
150                 case 'show_output':
151                         this.showOutput(objs[0]);
152                         break;
153
154         }
155 }
156
157
158
159 oilsRptFolderWindow.prototype.showOutput = function(sched) {
160         oilsRptFetchReport(sched.report(), 
161                 function(r) {
162                         var url = oilsRptBuildOutputLink(r.template(), r.id(), sched.id());
163                         goTo(url);
164                 }
165         );
166 }
167
168
169 oilsRptFolderWindow.prototype.deleteReport = function(report) {
170         if(!confirmId('oils_rpt_folder_contents_confirm_report_delete')) return;
171         var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
172         req.callback(
173                 function(r) {
174                         var res = r.getResultObject();
175                         if( res == 1 ) {
176                                 oilsRptAlertSuccess();
177                                 oilsRptCurrentFolderManager.draw();
178                         }
179                 }
180         );
181         req.send();
182 }
183
184 oilsRptFolderWindow.prototype.deleteTemplate = function(tmpl) {
185         var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
186         req0.callback(
187                 function(r0) {
188                         var resp = r0.getResultObject();
189                         if( resp != '0' )
190                                 return alertId('oils_rpt_folder_contents_template_no_delete');
191                         if(!confirmId('oils_rpt_folder_contents_confirm_template_delete')) return;
192                         var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
193                         req.callback(
194                                 function(r) {
195                                         var res = r.getResultObject();
196                                         if( res == 1 ) {
197                                                 oilsRptAlertSuccess();
198                                                 oilsRptCurrentFolderManager.draw();
199                                         }
200                                 }
201                         );
202                         req.send();
203                 }
204         );
205         req0.send();
206 }
207
208
209
210 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
211         appendClear(DOM.oils_rpt_folder_creator_label, 
212                 text(this.folderNode.folder.owner().usrname()));
213         appendClear(DOM.oils_rpt_folder_name_label, 
214                 text(this.folderNode.folder.name()));
215 }
216
217
218 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
219         removeChildren(this.selector);
220         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
221                 SESSION, this.type, this.folderNode.folder.id());
222
223         if(this.type == 'output') 
224                 req = new Request(OILS_RPT_FETCH_OUTPUT, SESSION, this.folderNode.folder.id());
225
226
227         var obj = this;
228         removeChildren(obj.selector);
229         req.callback(
230                 function(r) {
231                         var res = r.getResultObject();
232                         obj.fmTable = drawFMObjectTable( 
233                                 { 
234                                         dest : obj.selector, 
235                                         obj : res,
236                                         selectCol : true,
237                                         selectColName : 'Select',
238                                         selectAllName : 'All',
239                                         selectNoneName : 'None'
240                                 }
241                         );
242                         if(callback) callback();
243                 }
244         );
245         req.send();
246 }
247
248
249 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
250         this.selectedFolder = folderNode;
251 }
252
253 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
254         var folder = this.folderNode.folder;
255
256         var obj = this;
257         DOM.oils_rpt_folder_manager_name_input.value = folder.name();
258         DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
259                 var name = DOM.oils_rpt_folder_manager_name_input.value;
260                 if(name) {
261                         folder.name( name );
262                         if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
263                                 oilsRptUpdateFolder(folder, obj.type,
264                                         function(success) {
265                                                 if(success) {
266                                                         oilsRptAlertSuccess();
267                                                         oilsRptCurrentFolderManager.draw();
268                                                 }
269                                         }
270                                 );
271                         }
272                 }
273         }
274
275         DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
276                 var folder;
277
278                 if( obj.type == 'report' ) folder = new rrf();
279                 if( obj.type == 'template' ) folder = new rtf();
280                 if( obj.type == 'output' ) folder = new rof();
281
282                 folder.owner(USER.id());
283                 folder.parent(obj.folderNode.folder.id());
284                 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
285                 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
286                 folder.shared( (shared == 'yes') ? 't' : 'f');
287                 if( folder.shared() == 't' )
288                         folder.share_with( obj.myOrgSelector.getValue() );
289
290                 if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
291                         oilsRptCreateFolder(folder, obj.type,
292                                 function(success) {
293                                         if(success) {
294                                                 oilsRptAlertSuccess();
295                                                 oilsRptCurrentFolderManager.draw();
296                                         }
297                                 }
298                         );
299                 }
300         }
301 }
302
303
304 oilsRptFolderWindow.prototype.doFolderDelete = function() {
305         
306         var cache = oilsRptFolderNodeCache[this.type];
307         /* let's see if this folder has any children */
308         for( var c in cache ) 
309                 if( cache[c].folder.parent() == this.folderNode.folder.id() )
310                         return alertId('oils_rpt_folder_cannot_delete');
311
312         /* lets see if the folder has contents */
313         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
314                 SESSION, this.type, this.folderNode.folder.id());
315         var obj = this;
316         req.send();
317
318         req.callback( 
319                 function(r) {
320
321                         var contents = r.getResultObject();
322                         if( contents.length > 0 ) 
323                                 return alertId('oils_rpt_folder_cannot_delete');
324
325                         if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
326                                 var req2 = new Request(OILS_RPT_DELETE_FOLDER, 
327                                         SESSION, obj.type, obj.folderNode.folder.id());
328         
329                                 req2.callback( 
330                                         function(r2) {
331                                                 var res = r2.getResultObject();
332                                                 if( res == 1 ) {
333                                                         oilsRptAlertSuccess();
334                                                         oilsRptCurrentFolderManager.draw();
335                                                 }
336                                                 else alert('error: '+js2JSON(res));
337                                         }
338                                 );
339
340                                 req2.send();
341                         }
342                 }
343         );
344 }
345
346