]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_tforms.js
added is/is not NULL
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_tforms.js
1 /*
2 var OILS_RPT_DTYPE_STRING = 'string';
3 var OILS_RPT_DTYPE_NUMERIC = 'numeric';
4 var OILS_RPT_DTYPE_FLOAT = 'float';
5 var OILS_RPT_DTYPE_TIMESTAMP = 'timestamp';
6 */
7
8 var OILS_RPT_TRANSFORMS = {
9         Bare : {
10                 label : 'Raw Data'
11         },
12
13         first : {
14                 label : 'First Value'
15         },
16
17         last : {
18                 label : 'Last Value'
19         },
20
21         count : {
22                 aggregate : true,
23                 label :  'Count'
24         },
25
26         count_distinct : {
27                 aggregate : true,
28                 label : 'Count Distinct'
29         },
30
31         min : {
32                 aggregate : true,
33                 label : 'Min'
34         },
35
36         max : {
37                 aggregate : true,
38                 label : 'Max'
39         },
40
41         /* string transforms ------------------------- */
42
43         substring : {
44                 datatype : OILS_RPT_DTYPE_STRING,
45                 label : 'Substring'
46         },
47
48         lower : {
49                 datatype : OILS_RPT_DTYPE_STRING,
50                 label : 'Lower case'
51         },
52
53         upper : {
54                 datatype : OILS_RPT_DTYPE_STRING,
55                 label : 'Upper case'
56         },
57
58         /* timestamp transforms ----------------------- */
59         dow : {
60                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
61                 label : 'Day of Week',
62                 regex : /^[0-6]$/
63         },
64         dom : {
65                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
66                 label : 'Day of Month',
67                 regex : /^[0-9]{1,2}$/
68         },
69
70         doy : {
71                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
72                 label : 'Day of Year',
73                 regex : /^[0-9]{1,3}$/
74         },
75
76         woy : {
77                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
78                 label : 'Week of Year',
79                 regex : /^[0-9]{1,2}$/
80         },
81
82         moy : {
83                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
84                 label : 'Month of Year',
85                 regex : /^[0-9]{1,2}$/
86         },
87
88         qoy : {
89                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
90                 label : 'Quarter of Year',
91                 regex : /^[1234]$/
92         }, 
93
94         date : {
95                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
96                 label : 'Date',
97                 regex : /^\d{4}-\d{2}-\d{2}$/,
98                 hint  : 'YYYY-MM-DD',
99                 cal_format : '%Y-%m-%d'
100         },
101
102         month_trunc : {
103                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
104                 label : 'Year + Month',
105                 regex : /^\d{4}-\d{2}$/,
106                 hint  : 'YYYY-MM',
107                 cal_format : '%Y-%m'
108         },
109
110         year_trunc : {
111                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
112                 label : 'Year',
113                 regex : /^\d{4}$/,
114                 hint  : 'YYYY',
115                 cal_format : '%Y'
116         },
117
118         day_name : {
119                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
120                 label : 'Day Name'
121         }, 
122
123         month_name : {
124                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
125                 label : 'Month Name'
126         },
127         age : {
128                 datatype : OILS_RPT_DTYPE_TIMESTAMP,
129                 label : 'Age'
130         },
131
132
133         /* int  / float transforms ----------------------------------- */
134         sum : {
135                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT ],
136                 label : 'Sum',
137                 aggregate : true
138         }, 
139
140         average : {
141                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT ],
142                 label : 'Average',
143                 aggregate : true
144         },
145
146         round : {
147                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT ],
148                 label : 'Round',
149         },
150
151         'int' : {
152                 datatype : OILS_RPT_DTYPE_FLOAT,
153                 label : 'Drop trailing decimals'
154         }
155 }
156
157
158 function oilsRptGetTforms(args) {
159         var dtype = args.datatype;
160         var agg = args.aggregate;
161         var tforms = OILS_RPT_TRANSFORMS;
162         var nonagg = args.non_aggregate;
163
164         var keys = oilsRptObjectKeys(OILS_RPT_TRANSFORMS);
165         var tforms = [];
166
167         _debug('getting tform '+dtype+' : ' + agg + ' : ' + nonagg);
168
169         for( var i = 0; i < keys.length; i++ ) {
170                 var key = keys[i];
171                 var obj = OILS_RPT_TRANSFORMS[key];
172                 if( dtype && !oilsRptTformIsDtype(key,dtype) ) continue;
173                 if( agg && !nonagg && !obj.aggregate ) continue;
174                 if( !agg && nonagg && obj.aggregate ) continue;
175                 tforms.push(key);
176         }
177
178         return tforms;
179 }
180
181
182 function oilsRptTformIsDtype(tform, dtype) {
183         var obj = OILS_RPT_TRANSFORMS[tform];
184         if( typeof obj.datatype == 'string' )
185                 return (obj.datatype == dtype);
186         return !obj.datatype || grep(obj.datatype, function(d) { return (d == dtype) });
187 }
188
189
190
191
192 /* builds a new transform picker */
193 function oilsRptTformPicker(args) {
194         this.node = args.node;
195         this.selector = elem('select');
196         this.tforms = oilsRptGetTforms(args);
197         for( var i = 0; i < this.tforms.length; i++ ) 
198                 this.addOpt(this.tforms[i]);
199         appendClear(this.node, this.selector);
200 }
201
202 oilsRptTformPicker.prototype.addOpt = function(key) {
203         _debug("drawing tform opt with key " + key);
204         var tform = OILS_RPT_TRANSFORMS[key];           
205         var obj = this;
206         insertSelectorVal(      
207                 this.selector, -1, tform.label, key,
208                 function() {
209                         obj.setSelected(getSelectorVal(obj.selector));
210                         _debug("setting selected to " + obj.getSelected());
211                 }
212         );
213 }
214
215 oilsRptTformPicker.prototype.setSelected = function(key) {
216         this.selected = key;
217 }
218 oilsRptTformPicker.prototype.getSelected = function(key) {
219         return this.selected;
220 }
221
222
223