]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folders.js
made the folder window more generic, showing contents via fm_table objects
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_folders.js
1 var oilsRptFolderNodeCache = {};
2 oilsRptFolderNodeCache.template = {};
3 oilsRptFolderNodeCache.report  = {};
4 oilsRptFolderNodeCache.output  = {};
5
6 oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
7
8 function oilsRptFolderManager() {
9         this.folderTree = {};
10         this.super.init();
11         this.tId = oilsNextId();
12         this.rId = oilsNextId();
13         this.oId = oilsNextId();
14         this.stId = oilsNextId();
15         this.srId = oilsNextId();
16         this.soId = oilsNextId();
17         this.orgTrail = {};
18         this.orgTrail.template = {};
19         this.orgTrail.report = {};
20         this.orgTrail.output = {};
21 }
22
23 oilsRptFolderManager.prototype.draw = function(auth) {
24         oilsRptTemplateFolderTree = new SlimTree(DOM.oils_rpt_template_folder_tree, 'oilsRptTemplateFolderTree');
25         oilsRptTemplateFolderTree.addNode(this.tId, -1, 'Templates')
26
27         oilsRptReportFolderTree = new SlimTree(DOM.oils_rpt_report_folder_tree, 'oilsRptReportFolderTree');
28         oilsRptReportFolderTree.addNode(this.rId, -1, 'Reports')
29
30         oilsRptOutputFolderTree = new SlimTree(DOM.oils_rpt_output_folder_tree, 'oilsRptOutputFolderTree');
31         oilsRptOutputFolderTree.addNode(this.oId, -1, 'Output')
32
33         oilsRptSharedTemplateFolderTree = new SlimTree(DOM.oils_rpt_template_shared_folder_tree, 'oilsRptSharedTemplateFolderTree');
34         oilsRptSharedTemplateFolderTree.addNode(this.stId, -1, 'Templates')
35
36         oilsRptSharedReportFolderTree = new SlimTree(DOM.oils_rpt_report_shared_folder_tree, 'oilsRptSharedReportFolderTree');
37         oilsRptSharedReportFolderTree.addNode(this.srId, -1, 'Reports')
38
39         oilsRptSharedOutputFolderTree = new SlimTree(DOM.oils_rpt_output_shared_folder_tree, 'oilsRptSharedOutputFolderTree');
40         oilsRptSharedOutputFolderTree.addNode(this.soId, -1, 'Output')
41
42         this.fetchFolders(auth);
43 }
44
45 oilsRptFolderManager.prototype.fetchFolders = function(auth) {
46         var obj = this;
47         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'template');
48         req.callback( function(r) { obj.drawFolders('template', r.getResultObject()); } );
49         req.send();
50
51         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'report');
52         req.callback( function(r) { obj.drawFolders('report', r.getResultObject()); } );
53         req.send();
54
55         var req = new Request(OILS_RPT_FETCH_FOLDERS, auth, 'output');
56         req.callback( function(r) { obj.drawFolders('output', r.getResultObject()); } );
57         req.send();
58 }
59
60
61 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
62         var tree;
63
64         folders = folders.sort(
65                 function(a,b) {
66                         var asw = a.share_with().id();
67                         var bsw = b.share_with().id();
68                         if( asw ) asw = findOrgDepth(findOrgUnit(asw));
69                         else asw = -1;
70                         if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw));
71                         else bsw = -1;
72                         if( asw < bsw ) return 1;
73                         if( asw > bsw ) return -1;
74                         return 0;
75                 }
76         );
77
78
79         for( var i = 0; i < folders.length; i++ ) {
80                 var folder = folders[i];
81                 var id = oilsNextId();
82                 var node = { folder : folder, treeId : id };
83                 oilsRptFolderNodeCache[type][folder.id()] = node;
84                 node.folderWindow = new oilsRptFolderWindow(type, folder.id())
85         }
86
87
88         for( var i = 0; i < folders.length; i++ ) {
89
90                 var folder = folders[i];
91                 _debug(js2JSON(folder));
92                 var mine = (folder.owner().id() == USER.id());
93                 var pid;
94                 var treename;
95
96                 switch(type) {
97                         case 'template': 
98                                 if(mine) {
99                                         tree = oilsRptTemplateFolderTree;
100                                         treename = 'oilsRptTemplateFolderTree';
101                                         pid = this.tId;
102                                 } else {
103                                         tree = oilsRptSharedTemplateFolderTree;
104                                         treename = 'oilsRptSharedTemplateFolderTree';
105                                         pid = this.stId;
106                                 }
107                                 break;
108                         case 'report': 
109                                 if(mine) {
110                                         tree = oilsRptTemplateFolderTree;
111                                         treename = 'oilsRptTemplateFolderTree';
112                                         pid = this.rId;
113                                 } else {
114                                         tree = oilsRptSharedTemplateFolderTree;
115                                         treename = 'oilsRptSharedTemplateFolderTree';
116                                         pid = this.srId;
117                                 }
118                                 break;
119                         case 'output': 
120                                 if(mine) {
121                                         tree = oilsRptTemplateFolderTree;
122                                         treename = 'oilsRptTemplateFolderTree';
123                                         pid = this.oId;
124                                 } else {
125                                         tree = oilsRptSharedTemplateFolderTree;
126                                         treename = 'oilsRptSharedTemplateFolderTree';
127                                         pid = this.soId;
128                                 }
129                 }
130
131                 if(!mine) {
132                         if(!this.orgTrail[type][folder.share_with().id()]) {
133                                 tree.addNode(id, pid, folder.share_with().shortname());
134                                 tree.close(pid);
135                                 pid = id;
136                                 id = oilsNextId();
137                                 this.orgTrail[type][folder.share_with().id()] = pid;
138                         } else {
139                                 pid = this.orgTrail[type][folder.share_with().id()];
140                                 id = oilsNextId();
141                         }
142                 }
143
144                 if( folder.parent() ) 
145                         pid = this.findNode(type, folder.parent()).treeId;
146
147                 var action = 'javascript:oilsRptObject.find('+
148                         node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
149                 _debug('adding node '+folder.name()+' pid = '+pid);
150                 tree.addNode(id, pid, folder.name(), action);
151                 tree.close(pid);
152         }
153 }
154
155
156 /*
157 oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
158         this.folderTree[type] = { children : [] };
159         this.makeTree(type, folders, this.folderTree[type], -1 );
160 }
161 oilsRptFolderManager.prototype.makeTree = function(type, folders, node, parentId, tree) {
162         if(!node) return;
163         var id = parentId;
164         var childNodes;
165
166         if( ! node.folder ) {
167                 childNodes = grep(folders, function(f){return (!f.parent())});
168
169         } else {
170                 _debug("making subtree with folder "+node.folder.name());
171
172                 var c = oilsRptFolderNodeCache;
173                 if(!c[type]) c[type] = {};
174                 c[type][node.folder.id()] = node;
175
176                 id = oilsNextId();
177
178                 node.folderWindow = oilsRptBuildFolderWindow(type, node.folder.id());
179
180                 var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();'+
181                         'oilsRptFolderTree.toggle("'+id+'");';
182
183                 oilsRptFolderTree.addNode(id, parentId, node.folder.name(), action);
184                 node.treeId = id;
185                 node.children = [];
186                 childNodes = grep(folders, 
187                         function(i){return (i.parent() == node.folder.id())});
188         } 
189
190         if(!childNodes) return;
191         for( var i = 0; i < childNodes.length; i++ ) 
192                 this.makeTree( type, folders, { folder : childNodes[i] }, id );
193 }
194 */
195
196
197 oilsRptFolderManager.prototype.findNode = function(type, id) {
198                 _debug('finding : type = ' + type + ' : ' + id);
199         return oilsRptFolderNodeCache[type][id];
200 }
201
202
203
204
205
206
207