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