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