]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folder_window.js
added some folder actions and framework, more to come
[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         var node = oilsRptCurrentFolderManager.findNode(type, folderId);
18         this.init2(node, type);
19         this.selector = DOM.oils_rpt_folder_contents_selector;
20 }
21
22
23 oilsRptFolderWindow.prototype.init2 = function(node, type) {
24         this.folderNode = node;
25         this.type = type;
26         this.init();
27 }
28
29
30 oilsRptFolderWindow.prototype.draw = 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_manage_tab.onclick = function() {
35                 unHideMe(DOM.oils_rpt_folder_window_contents_div);
36                 hideMe(DOM.oils_rpt_folder_manager_div);
37         }
38         DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
39                 hideMe(DOM.oils_rpt_folder_window_contents_div);
40                 unHideMe(DOM.oils_rpt_folder_manager_div);
41         }
42
43         this.setFolderEditActions();
44
45         hideMe(DOM.oils_rpt_template_folder_new_report);
46         unHideMe(DOM.oils_rpt_folder_table_right_td);
47         hideMe(DOM.oils_rpt_folder_table_alt_td);
48         this.drawFolderDetails();
49
50         var obj = this;
51         DOM.oils_rpt_folder_content_action_go.onclick = 
52                 function() {obj.doFolderAction()}
53
54         this.fetchFolderData();
55
56         var sel = DOM.oils_rpt_folder_contents_action_selector;
57         for( var i = 0; i < sel.options.length; i++ ) {
58                 var opt = sel.options[i];
59                 if( opt.getAttribute('type') == this.type )
60                         unHideMe(opt);
61                 else hideMe(opt);
62         }
63
64         this.drawEditActions();
65
66 }
67
68 oilsRptFolderWindow.prototype.drawEditActions = function() {
69         if( this.folderNode.folder.owner().id() != USER.id() )
70                 hideMe(DOM.oils_rpt_folder_manager_tab_table);
71         else
72                 unHideMe(DOM.oils_rpt_folder_manager_tab_table);
73
74         if( isTrue(this.folderNode.folder.shared())) {
75                 DOM.oils_rpt_folder_manager_share_opt.disabled = true;
76                 DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
77         } else {
78                 DOM.oils_rpt_folder_manager_share_opt.disabled = false;
79                 DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
80         }
81
82         this.hideFolderActions();
83         var obj = this;
84
85         DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
86                 var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
87                 _debug("doing folder action: " + act);
88                 obj.hideFolderActions();
89                 switch(act) {
90                         case 'change_name':
91                                 unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
92                                 break;
93                         case 'create_sub_folder':
94                                 unHideMe(DOM.oils_rpt_folder_manager_create_sub);
95                                 obj.myOrgSelector = new oilsRptMyOrgsWidget(
96                                         DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou());
97                                 obj.myOrgSelector.draw();
98                                 break;
99                 }
100         }
101
102 }
103
104
105 oilsRptFolderWindow.prototype.hideFolderActions = function() {
106         hideMe(DOM.oils_rpt_folder_manager_change_name_div);
107         hideMe(DOM.oils_rpt_folder_manager_create_sub);
108 }
109
110
111 oilsRptFolderWindow.prototype.doFolderAction = function() {
112         var objs = this.fmTable.getSelected();
113         if( objs.length == 0 ) 
114                 return alert('Please select an item from the list');
115         var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
116
117         switch(action) {
118                 case 'create_report' :
119                         hideMe(DOM.oils_rpt_folder_table_right_td);
120                         unHideMe(DOM.oils_rpt_folder_table_alt_td);
121                         new oilsRptReportEditor(new oilsReport(objs[0]), this);
122                         break;
123         }
124 }
125
126
127 oilsRptFolderWindow.prototype.drawFolderDetails = function() {
128         appendClear(DOM.oils_rpt_folder_creator_label, 
129                 text(this.folderNode.folder.owner().usrname()));
130         appendClear(DOM.oils_rpt_folder_name_label, 
131                 text(this.folderNode.folder.name()));
132 }
133
134
135 oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
136         removeChildren(this.selector);
137         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
138                 SESSION, this.type, this.folderNode.folder.id());
139         var obj = this;
140         req.callback(
141                 function(r) {
142                         obj.fmTable = drawFMObjectTable( 
143                                 { 
144                                         dest : obj.selector, 
145                                         obj : r.getResultObject(),
146                                         selectCol : true,
147                                         selectColName : 'Select Row'    
148                                 }
149                         );
150                         //sortables_init();
151                         if(callback) callback();
152                 }
153         );
154         req.send();
155 }
156
157
158 oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
159         this.selectedFolder = folderNode;
160 }
161
162 oilsRptFolderWindow.prototype.setFolderEditActions = function() {
163         var folder = this.folderNode.folder;
164
165         var obj = this;
166         DOM.oils_rpt_folder_manager_name_input.value = folder.name();
167         DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
168                 var name = DOM.oils_rpt_folder_manager_name_input.value;
169                 if(name) {
170                         folder.name( name );
171                         if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
172                                 oilsRptUpdateFolder(folder, obj.type,
173                                         function(success) {
174                                                 if(success) oilsRptAlertSuccess();
175                                         }
176                                 );
177                         }
178                 }
179         }
180
181         DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
182                 var folder;
183
184                 if( obj.type == 'report' ) folder = new rrf();
185                 if( obj.type == 'template' ) folder = new rtf();
186                 if( obj.type == 'output' ) folder = new rof();
187
188                 folder.owner(USER.id());
189                 folder.parent(obj.folderNode.folder.id());
190                 folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
191                 var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
192                 folder.shared( (shared == 'yes') ? 't' : 'f');
193                 if( folder.shared() == 't' )
194                         folder.share_with( obj.myOrgSelector.getValue() );
195
196                 _debug("Creating new folder: " + js2JSON(folder));
197
198                 if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
199                         oilsRptCreateFolder(folder, obj.type,
200                                 function(success) {
201                                         if(success) oilsRptAlertSuccess();
202                                 }
203                         );
204                 }
205         }
206
207 }
208
209
210
211