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