]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folder_window.js
added report description creation at run-time and so much more
[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() ) 
30                 hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
31         else unHideMe(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         for( var i = 0; i < sel.options.length; i++ ) {
61                 var opt = sel.options[i];
62                 if( opt.getAttribute('type') == this.type )
63                         unHideMe(opt);
64                 else hideMe(opt);
65         }
66
67         this.drawEditActions();
68
69 }
70
71 oilsRptFolderWindow.prototype.drawEditActions = function() {
72
73         DOM.oils_rpt_folder_window_contents_new_template.onclick = function() {
74                 var s = location.search+'';
75                 s = s.replace(/\&folder=\d+/,'');
76                 goTo( 'oils_rpt_builder.xhtml'+s+'&folder='+obj.folderNode.folder.id());
77         }
78
79         if( this.type == 'template' )
80                 unHideMe(DOM.oils_rpt_folder_window_contents_new_template)
81         else
82                 hideMe(DOM.oils_rpt_folder_window_contents_new_template)
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
151         }
152 }
153
154
155 oilsRptFolderWindow.prototype.deleteReport = function(report) {
156         if(!confirmId('oils_rpt_folder_contents_confirm_report_delete')) return;
157         var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
158         req.callback(
159                 function(r) {
160                         var res = r.getResultObject();
161                         if( res == 1 ) {
162                                 oilsRptAlertSuccess();
163                                 oilsRptCurrentFolderManager.draw();
164                         }
165                 }
166         );
167         req.send();
168 }
169
170 oilsRptFolderWindow.prototype.deleteTemplate = function(tmpl) {
171         var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
172         req0.callback(
173                 function(r0) {
174                         var resp = r0.getResultObject();
175                         if( resp != '0' )
176                                 return alertId('oils_rpt_folder_contents_template_no_delete');
177                         if(!confirmId('oils_rpt_folder_contents_confirm_template_delete')) return;
178                         var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
179                         req.callback(
180                                 function(r) {
181                                         var res = r.getResultObject();
182                                         if( res == 1 ) {
183                                                 oilsRptAlertSuccess();
184                                                 oilsRptCurrentFolderManager.draw();
185                                         }
186                                 }
187                         );
188                         req.send();
189                 }
190         );
191         req0.send();
192 }
193
194
195
196 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
197         appendClear(DOM.oils_rpt_folder_creator_label, 
198                 text(this.folderNode.folder.owner().usrname()));
199         appendClear(DOM.oils_rpt_folder_name_label, 
200                 text(this.folderNode.folder.name()));
201 }
202
203
204 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
205         removeChildren(this.selector);
206         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
207                 SESSION, this.type, this.folderNode.folder.id());
208         var obj = this;
209         removeChildren(obj.selector);
210         req.callback(
211                 function(r) {
212                         obj.fmTable = drawFMObjectTable( 
213                                 { 
214                                         dest : obj.selector, 
215                                         obj : r.getResultObject(),
216                                         selectCol : true,
217                                         selectColName : 'Select Row'    
218                                 }
219                         );
220                         //sortables_init();
221                         if(callback) callback();
222                 }
223         );
224         req.send();
225 }
226
227
228 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
229         this.selectedFolder = folderNode;
230 }
231
232 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
233         var folder = this.folderNode.folder;
234
235         var obj = this;
236         DOM.oils_rpt_folder_manager_name_input.value = folder.name();
237         DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
238                 var name = DOM.oils_rpt_folder_manager_name_input.value;
239                 if(name) {
240                         folder.name( name );
241                         if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
242                                 oilsRptUpdateFolder(folder, obj.type,
243                                         function(success) {
244                                                 if(success) {
245                                                         oilsRptAlertSuccess();
246                                                         oilsRptCurrentFolderManager.draw();
247                                                 }
248                                         }
249                                 );
250                         }
251                 }
252         }
253
254         DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
255                 var folder;
256
257                 if( obj.type == 'report' ) folder = new rrf();
258                 if( obj.type == 'template' ) folder = new rtf();
259                 if( obj.type == 'output' ) folder = new rof();
260
261                 folder.owner(USER.id());
262                 folder.parent(obj.folderNode.folder.id());
263                 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
264                 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
265                 folder.shared( (shared == 'yes') ? 't' : 'f');
266                 if( folder.shared() == 't' )
267                         folder.share_with( obj.myOrgSelector.getValue() );
268
269                 if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
270                         oilsRptCreateFolder(folder, obj.type,
271                                 function(success) {
272                                         if(success) {
273                                                 oilsRptAlertSuccess();
274                                                 oilsRptCurrentFolderManager.draw();
275                                         }
276                                 }
277                         );
278                 }
279         }
280 }
281
282
283 oilsRptFolderWindow.prototype.doFolderDelete = function() {
284         
285         var cache = oilsRptFolderNodeCache[this.type];
286         /* let's see if this folder has any children */
287         for( var c in cache ) 
288                 if( cache[c].folder.parent() == this.folderNode.folder.id() )
289                         return alertId('oils_rpt_folder_cannot_delete');
290
291         /* lets see if the folder has contents */
292         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
293                 SESSION, this.type, this.folderNode.folder.id());
294         var obj = this;
295         req.send();
296
297         req.callback( 
298                 function(r) {
299
300                         var contents = r.getResultObject();
301                         if( contents.length > 0 ) 
302                                 return alertId('oils_rpt_folder_cannot_delete');
303
304                         if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
305                                 var req2 = new Request(OILS_RPT_DELETE_FOLDER, 
306                                         SESSION, obj.type, obj.folderNode.folder.id());
307         
308                                 req2.callback( 
309                                         function(r2) {
310                                                 var res = r2.getResultObject();
311                                                 if( res == 1 ) {
312                                                         oilsRptAlertSuccess();
313                                                         oilsRptCurrentFolderManager.draw();
314                                                 }
315                                                 else alert('error: '+js2JSON(res));
316                                         }
317                                 );
318
319                                 req2.send();
320                         }
321                 }
322         );
323 }
324
325