]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_folder_window.js
ever more toil
[working/Evergreen.git] / Open-ILS / web / reports / oils_rpt_folder_window.js
1 var oilsRptTemplateCache = {};
2 var oilsRptReportCache = {};
3
4 /* utility method to find and build the correct folder window object */
5 function oilsRptBuildFolderWindow( type, folderId ) {
6         var node = oilsRptCurrentFolderManager.findNode(type, folderId);
7         _debug('drawing folder window for folder ' + node.folder.name());
8         switch(type) {
9                 case 'template': 
10                         return new oilsRptTemplateFolderWindow(node);
11                 case 'report':
12                         return new oilsRptReportFolderWindow(node);
13                 case 'output':
14                         return new oilsRptOutputFolderWindow(node);
15         }
16 }
17
18 function oilsRptFetchTemplate(id) {
19         if( oilsRptTemplateCache[id] )
20                 return oilsRptTemplateCache[id];
21         var r = new Request(OILS_RPT_FETCH_TEMPLATE, SESSION, id);
22         r.send(true);
23         return oilsRptTemplateCache[id] = r.result();
24 }
25
26
27
28 /* generic folder window class */
29 oilsRptFolderWindow.prototype = new oilsRptObject();
30 oilsRptFolderWindow.prototype.constructor = oilsRptFolderWindow;
31 oilsRptFolderWindow.baseClass = oilsRptObject.prototype.constructor;
32 function oilsRptFolderWindow() { }
33 oilsRptFolderWindow.prototype.init2 = function(node, type) {
34         this.folderNode = node;
35         this.type = type;
36         this.init();
37 }
38
39 oilsRptFolderWindow.prototype.openWindow = function(node) {
40         hideMe(DOM.oils_rpt_template_folder_window_contents_div);       
41         hideMe(DOM.oils_rpt_report_folder_window_contents_div);
42         unHideMe(DOM.oils_rpt_folder_table_right_td);
43         unHideMe(node);
44 }
45
46 oilsRptFolderWindow.prototype.fetchFolderData = function(type, selector, cache, callback) {
47         removeChildren(selector);
48         var req = new Request(OILS_RPT_FETCH_FOLDER_DATA, 
49                 SESSION, type, this.folderNode.folder.id());
50         req.callback(
51                 function(r) {
52                         var ts = r.getResultObject();
53                         if(!ts) return;
54                         for( var i = 0; i < ts.length; i++ )  {
55                                 var name = ts[i].name();
56                                 if( type == 'report' ) 
57                                         name = oilsRptFetchTemplate(ts[i].template()).name() + ' : ' + name;
58                                 
59                                 insertSelectorVal(selector, -1, name, ts[i].id());
60                                 cache[ts[i].id()] = ts[i];
61                         }
62                         if(callback) callback();
63                 }
64         );
65         req.send();
66 }
67
68
69 oilsRptTemplateFolderWindow.prototype = new oilsRptFolderWindow();
70 oilsRptTemplateFolderWindow.prototype.constructor = oilsRptTemplateFolderWindow;
71 oilsRptTemplateFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
72 function oilsRptTemplateFolderWindow(node) { this.init2(node, 'template'); }
73
74 oilsRptTemplateFolderWindow.prototype.draw = function() {
75         this.openWindow(DOM.oils_rpt_template_folder_window_contents_div);      
76         this.fetchFolderData('template', DOM.oils_rpt_template_selector, oilsRptTemplateCache);
77         var obj = this;
78
79         DOM.oils_rpt_template_action_selector.onchange = function() {
80                 var action = getSelectVal(DOM.oils_rpt_template_action_selector.onchange);
81                 switch(action) {
82                         case 'create_report':
83                                 obj.createReport();
84                                 break;
85                 }
86         }
87 }
88
89
90 oilsRptTemplateFolderWindow.prototype.createReport = function() {
91 }
92
93
94
95 oilsRptReportFolderWindow.prototype = new oilsRptFolderWindow();
96 oilsRptReportFolderWindow.prototype.constructor = oilsRptReportFolderWindow;
97 oilsRptReportFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
98 function oilsRptReportFolderWindow(node) { this.init2(node, 'report'); }
99
100 oilsRptReportFolderWindow.prototype.draw = function() {
101         this.openWindow(DOM.oils_rpt_report_folder_window_contents_div);
102         var obj = this;
103         this.fetchFolderData('report', 
104                 DOM.oils_rpt_report_selector, oilsRptReportCache, 
105                         function() {
106                                 appendClear(DOM.oils_rpt_report_description, 
107                                         text(obj.getSelectedReport().description()));
108                         }
109         );
110
111         DOM.oils_rpt_report_folder_window_go.onclick = function() {
112                 var rpt = obj.getSelectedReport();
113                 var tmpl = oilsRptFetchTemplate(rpt.template());
114                 obj.oilsReport = new oilsReport( tmpl, rpt );
115                 var params = obj.oilsReport.gatherParams();
116                 obj.drawParamEditor(params);
117         };
118 }
119
120 oilsRptReportFolderWindow.prototype.drawParamEditor = function(params) {
121         _debug('drawing params: \n' + formatJSON(js2JSON(params)));
122         this.drawSelectParamEditor(grep(params,
123                 function(p) { return (p.type == 'select')}));
124         this.drawWhereParamEditor(grep(params,
125                 function(p) { return (p.type == 'where')}));
126         this.drawHavingParamEditor(grep(params,
127                 function(p) { return (p.type == 'having')}));
128 }
129
130
131 var oilsRptReportFolderSelectParamRow;
132 oilsRptReportFolderWindow.prototype.drawSelectParamEditor = function(params) {
133         if(params.length == 0) return;
134         unHideMe(DOM.oils_rpt_report_folder_window_display_params_table);
135
136         var tbody = $n(DOM.oils_rpt_report_folder_window_display_params_table,'tbody');
137         if(!oilsRptReportFolderSelectParamRow)
138                 oilsRptReportFolderSelectParamRow = tbody.removeChild($n(tbody,'tr'));
139
140         for( var p = 0; p < params.length; p++ ) {
141
142                 var row = oilsRptReportFolderSelectParamRow.cloneNode(true);
143                 var par = params[p];
144                 $n(row, 'column').appendChild(text(par.column.colname));
145                 $n(row, 'transform').appendChild(text(par.column.transform));
146
147                 if( typeof par.value == 'string' ) {
148                         unHideMe($n(row, 'param'));
149                         $n(row, 'param').value = par.value;
150                 } else {
151                         switch(par.transform) {
152                                 case 'substring':
153                                         unHideMe($n(row,'string_substring_widget'));
154                                         break;
155                         }
156                 }
157                 tbody.appendChild(row);
158         }
159 }
160
161 oilsRptReportFolderWindow.prototype.drawWhereParamEditor = function(params) {
162 }
163
164 oilsRptReportFolderWindow.prototype.drawHavingParamEditor = function(params) {
165 }
166
167
168
169 oilsRptReportFolderWindow.prototype.getSelectedReport = function() {
170         return oilsRptReportCache[getSelectorVal(DOM.oils_rpt_report_selector)];
171 }
172
173 oilsRptReportFolderWindow.prototype.getSelectedAction = function() {
174         return getSelectorVal(DOM.oils_rpt_report_selector, force);
175 }
176
177
178
179
180
181 oilsRptOutputFolderWindow.prototype = new oilsRptFolderWindow();
182 oilsRptOutputFolderWindow.prototype.constructor = oilsRptOutputFolderWindow;
183 oilsRptOutputFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
184 function oilsRptOutputFolderWindow(node) { this.init2(node, 'output'); }
185
186 oilsRptOutputFolderWindow.prototype.draw = function() {
187         this.hideWindows();
188         this.openWindow(null);
189 }
190
191
192
193