]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_utils.js
LP1642337: Reporter Boolean Filters
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_utils.js
1 var oilsRptID = 0;
2 var oilsRptID2 = 0;
3 var oilsRptID3 = 0;
4 function oilsNextId() {
5         return 'oils_'+ (oilsRptID++);
6 }
7
8 function oilsNextNumericId() {
9         return oilsRptID3++;
10 }
11
12 function oilsRptNextParam() {
13         return '::P'+ (oilsRptID2++);
14 }
15
16 function oilsRptFetchOrgTree(callback) {
17         var req = new Request(OILS_RPT_FETCH_ORG_TREE);
18         req.callback(
19                 function(r) {
20                         globalOrgTree = r.getResultObject();
21                         if( callback ) callback();
22                 }
23         );
24         req.send();
25 }
26
27
28 /*
29 function oilsRptCacheObject(obj) {
30         var id = oilsNextId();
31         oilsRptObjectCache[id] = obj;
32         return id;
33 }
34
35 function oilsRptFindObject(id) {
36         return oilsRptObjectCache[id];
37 }
38 */
39
40 function oilsRptCacheObject(type, obj, id) {
41         if( !oilsRptObjectCache[type] )
42                 oilsRptObjectCache[type] = {};
43         oilsRptObjectCache[type][id] = obj;
44 }
45
46 function oilsRptGetCache(type, id) {
47         if( !oilsRptObjectCache[type] )
48                 return null;
49         return oilsRptObjectCache[type][id];
50 }
51
52
53 /* -------------------------------------------- */
54 function oilsRptObject() {}
55 oilsRptObject.prototype.init = function(obj) {
56         if(!obj) obj = this;
57         oilsRptObject.cache(obj);
58 }
59 oilsRptObject.objectCache = {};
60 oilsRptObject.find = function(id) {
61         return oilsRptObject.objectCache[id];
62 }
63 oilsRptObject.cache = function(obj) {
64         obj.id = oilsNextNumericId();
65         oilsRptObject.objectCache[obj.id] = obj;
66         return obj.id;
67 }
68 /* -------------------------------------------- */
69
70
71 /* returns just the column name */
72 function oilsRptPathCol(path) {
73         var parts = path.split(/-/);
74         return parts.pop();
75 }
76
77 /* returns the IDL class of the selected column */
78 function oilsRptPathClass(path) {
79         var parts = path.split(/-/);
80         parts.pop();
81         return parts.pop();
82 }
83
84 /* returns everything prior to the column name */
85 function oilsRptPathRel(path) {
86         var parts = path.split(/-/);
87         parts.pop();
88         return parts.join('-');
89 }
90
91 /* creates a label "path" based on the column path */
92 function oilsRptMakeLabel(path) {
93     if (!path) return path;
94     if (path.indexOf(' ') > -1) return path
95
96         var parts = path.split(/-/);
97         var str = '';
98         for( var i = 0; i < parts.length; i++ ) {
99                 if(i%2 == 0) { // IDL class names
100                         if( i == 0 )
101                                 str += oilsIDL[parts[i]].label;
102                 } else { // Field names
103             var name = parts[i];
104             name = name.replace(/>.*/,''); // field name may be appended with >join-type
105             var f = oilsRptFindField(oilsIDL[parts[i-1]], name);
106                         str += " -> "+f.label;
107                 }
108         }
109
110         return str;
111 }
112
113
114
115
116 function oilsRptResetParams() {
117         oilsRptID2 = 0;
118 }
119
120 function nodeText(id) {
121         if($(id))
122                 return $(id).innerHTML;
123         return "";
124 }
125
126
127 function oilsRptDebug() {
128         if(!oilsRptDebugEnabled) return;
129
130         _debug("\n-------------------------------------\n");
131         _debug(oilsRpt.toString());
132         _debug("\n-------------------------------------\n");
133
134         /*
135         if(!oilsRptDebugWindow)
136                 oilsRptDebugWindow = window.open('','Debug','resizable,width=700,height=500,scrollbars=1,chrome'); 
137         oilsRptDebugWindow.document.body.innerHTML = oilsRpt.toHTMLString();
138         */
139 }
140
141
142 function print_tabs_html(t) {
143         var r = '';
144         for (var j = 0; j < t; j++ ) { r = r + "&nbsp;&nbsp;"; }
145         return r;
146 }
147
148 function formatJSONHTML(s) {
149         var r = ''; var t = 0;
150         for (var i in s) {
151                 if (s[i] == '{' || s[i] == '[') {
152                         r = r + s[i] + "<br/>" + print_tabs_html(++t);
153                 } else if (s[i] == '}' || s[i] == ']') {
154                         t--; r = r + "<br/>" + print_tabs_html(t) + s[i];
155                 } else if (s[i] == ',') {
156                         r = r + s[i];
157                         r = r + "<br/>" + print_tabs_html(t);
158                 } else {
159                         r = r + s[i];
160                 }
161         }
162         return r;
163 }
164
165 function setMousePos(e) {
166         oilsMouseX = e.pageX
167         oilsMouseY = e.pageY
168         oilsPageXMid = parseInt(window.innerHeight / 2);
169         oilsPageYMid = parseInt(window.innerWidth / 2);
170 }  
171
172 function buildFloatingDiv(div, width) {
173         var left = parseInt((window.innerWidth / 2) - (width/2));
174         var halfh = parseInt(div.clientHeight / 2);
175         var top = oilsMouseY - halfh + 50;
176         var dbot = top + halfh;
177         if( dbot > window.innerHeight ) {
178                 top = oilsMouseY - div.clientHeight - 10;
179         }
180         div.setAttribute('style', 'left:'+left+'px; top:'+top+'px; width:'+width+'px');
181         //div.setAttribute('style', 'top:'+top+'px;');
182         //alert(DOM.oils_rpt_filter_selector.style.top);
183 }
184
185
186 function mergeObjects( src, obj ) {
187         for( var i in obj ) {
188                 if( typeof obj[i] == 'string' ) {
189                         src[i] = obj[i];
190                 } else {
191                         if(src[i]) mergeObjects(src[i], obj[i]);
192                         else src[i] = obj[i];
193                 }
194         }
195 }
196
197
198 /* scours the doc for elements with IDs.  When it finds one,
199         it grabs the dom node and sets a reference to the node at DOM[id]; */
200 function oilsRptIdObjects(node) {
201         if(!node) node = document.documentElement;
202         if( node.nodeType != 1 ) return;
203         var id = node.getAttribute('id');
204         if( id ) eval("DOM."+id+"=$('"+id+"');");
205         var children = node.childNodes;
206         for( var c = 0; c < children.length; c++ ) 
207                 oilsRptIdObjects(children[c]);
208 }
209
210
211 function oilsRptObjectKeys(obj) {
212         var k = [];
213         for( var i in obj ) k.push(i);
214         return k;
215 }
216
217
218 /* makes cls a subclass of parent */
219 function oilsRptSetSubClass(cls, parent) {
220         var str = cls+'.prototype = new '+parent+'();\n';
221         str += cls+'.prototype.constructor = '+cls+';\n';
222         str += cls+'.baseClass = '+parent+'.prototype.constructor;\n';
223         str += cls+'.prototype.super = '+parent+'.prototype;\n';
224         eval(str);
225 }
226
227
228 function oilsRptUpdateFolder(folder, type, callback) {
229
230         _debug("updating folder " + js2JSON(folder));
231
232         var req = new Request(OILS_RPT_UPDATE_FOLDER, SESSION, type, folder);
233         if( callback ) {
234                 req.callback( 
235                         function(r) {
236                                 if( r.getResultObject() == 1 )
237                                         callback(true);
238                                 else callback(false);
239                         }
240                 );
241                 req.send();
242         } else {
243                 req.send(true);
244                 return req.result();
245         }
246 }
247
248 function oilsRptCreateFolder(folder, type, callback) {
249         _debug("creating folder "+ js2JSON(folder));
250         var req = new Request(OILS_RPT_CREATE_FOLDER, SESSION, type, folder);
251         if( callback ) {
252                 req.callback( 
253                         function(r) {
254                                 if( r.getResultObject() > 0 )
255                                         callback(true);
256                                 else callback(false);
257                         }
258                 );
259                 req.send();
260         } else {
261                 req.send(true);
262                 return req.result();
263         }
264 }
265
266 function oilsRptUpdateTemplate(template, callback) {
267         oilsRptDoGenericUpdate(OILS_RPT_UPDATE_TEMPLATE, template, callback);
268 }
269
270 function oilsRptUpdateReport(report, callback) {
271         oilsRptDoGenericUpdate(OILS_RPT_UPDATE_REPORT, report, callback);
272 }
273
274 function oilsRptUpdateSchedule(schedule, callback) {
275         oilsRptDoGenericUpdate(OILS_RPT_UPDATE_SCHEDULE, schedule, callback);
276 }
277
278 function oilsRptDoGenericUpdate( method, arg, callback ) {
279         _debug("generic update running: "+method);
280         var req = new Request(method, SESSION, arg);
281         req.callback(
282                 function(r) {
283                         if( r.getResultObject() > 0 )
284                                 callback(true);
285                         else callback(false);
286                 }
287         );
288         req.send();
289 }
290
291 function oilsRptFetchReport(id, callback) {
292         var r = oilsRptGetCache('rr', id);
293         if(r) return callback(r);
294         var req = new Request(OILS_RPT_FETCH_REPORT, SESSION, id);
295         req.callback( 
296                 function(res) { 
297                         var rpt = res.getResultObject();
298                         oilsRptCacheObject('rr', rpt, id);
299                         callback(rpt);
300                 }
301         );
302         req.send();
303 }
304
305 function oilsRptFetchUser(id, callback) {
306         var r = oilsRptGetCache('au', id);
307         if(r) return callback(r);
308         var req = new Request(FETCH_FLESHED_USER, SESSION, id, []);
309         req.callback( 
310                 function(res) { 
311                         var user = res.getResultObject();
312                         oilsRptCacheObject('au', user, id);
313                         callback(user);
314                 }
315         );
316         req.send();
317 }
318
319 function oilsRptFetchTemplate(id, callback) {
320         var t = oilsRptGetCache('rt', id);
321         if(t) return callback(t);
322         var r = new Request(OILS_RPT_FETCH_TEMPLATE, SESSION, id);
323         r.callback( 
324                 function(res) { 
325                         var tmpl = res.getResultObject();
326                 oilsRptCacheObject('rt', tmpl, id);
327                         callback(tmpl);
328                 }
329         );
330         r.send();
331 }
332
333 function oilsRptAlertSuccess() { alertId('oils_rpt_generic_success'); }
334 function oilsRptAlertFailure() { alertId('oils_rpt_generic_failure'); }
335
336
337 function oilsRptBuildOutputLink(tid, rid, sid) {
338         return OILS_IDL_OUTPUT_URL + tid+'/'+rid+'/'+sid+'/'+ OILS_IDL_OUTPUT_FILE;
339 }
340
341