]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/xul/transforms.js
e08e3cbf09a714f02374bf575f271a8dc0fee83b
[Evergreen.git] / Open-ILS / web / reports / xul / transforms.js
1 var OILS_RPT_DTYPE_STRING = 'text';
2 var OILS_RPT_DTYPE_MONEY = 'money';
3 var OILS_RPT_DTYPE_BOOL = 'bool';
4 var OILS_RPT_DTYPE_INT = 'int';
5 var OILS_RPT_DTYPE_ID = 'id';
6 var OILS_RPT_DTYPE_OU = 'org_unit';
7 var OILS_RPT_DTYPE_FLOAT = 'float';
8 var OILS_RPT_DTYPE_TIMESTAMP = 'timestamp';
9 var OILS_RPT_DTYPE_INTERVAL = 'interval';
10 var OILS_RPT_DTYPE_LINK = 'link';
11 var OILS_RPT_DTYPE_NONE = '';
12 var OILS_RPT_DTYPE_NULL = null;
13 var OILS_RPT_DTYPE_UNDEF;
14
15 var OILS_RPT_DTYPE_ALL = [
16         OILS_RPT_DTYPE_STRING,
17         OILS_RPT_DTYPE_MONEY,
18         OILS_RPT_DTYPE_INT,
19         OILS_RPT_DTYPE_ID,
20         OILS_RPT_DTYPE_FLOAT,
21         OILS_RPT_DTYPE_TIMESTAMP,
22         OILS_RPT_DTYPE_BOOL,
23         OILS_RPT_DTYPE_OU,
24         OILS_RPT_DTYPE_NONE,
25         OILS_RPT_DTYPE_NULL,
26         OILS_RPT_DTYPE_UNDEF,
27         OILS_RPT_DTYPE_INTERVAL,
28         OILS_RPT_DTYPE_LINK
29 ];
30 var OILS_RPT_DTYPE_NOT_ID = [OILS_RPT_DTYPE_STRING,OILS_RPT_DTYPE_MONEY,OILS_RPT_DTYPE_INT,OILS_RPT_DTYPE_FLOAT,OILS_RPT_DTYPE_TIMESTAMP];
31 var OILS_RPT_DTYPE_NOT_BOOL = [OILS_RPT_DTYPE_STRING,OILS_RPT_DTYPE_MONEY,OILS_RPT_DTYPE_INT,OILS_RPT_DTYPE_FLOAT,OILS_RPT_DTYPE_TIMESTAMP,OILS_RPT_DTYPE_ID];
32
33 var OILS_RPT_TRANSFORMS = {
34         Bare : {
35                 datatype : OILS_RPT_DTYPE_ALL,
36                 label : 'Raw Data'
37         },
38
39         first : {
40                 datatype : OILS_RPT_DTYPE_NOT_ID,
41                 label : 'First Value'
42         },
43
44         last : {
45                 datatype : OILS_RPT_DTYPE_NOT_ID,
46                 label : 'Last Value'
47         },
48
49         count : {
50                 datatype : OILS_RPT_DTYPE_NOT_BOOL,
51                 aggregate : true,
52                 label :  'Count'
53         },
54
55         count_distinct : {
56                 datatype : OILS_RPT_DTYPE_NOT_BOOL,
57                 aggregate : true,
58                 label : 'Count Distinct'
59         },
60
61         min : {
62                 datatype : OILS_RPT_DTYPE_NOT_ID,
63                 aggregate : true,
64                 label : 'Min'
65         },
66
67         max : {
68                 datatype : OILS_RPT_DTYPE_NOT_ID,
69                 aggregate : true,
70                 label : 'Max'
71         },
72
73         /* string transforms ------------------------- */
74
75         substring : {
76                 datatype : [ OILS_RPT_DTYPE_STRING ],
77                 params : 2,
78                 label : 'Substring'
79         },
80
81         lower : {
82                 datatype : [ OILS_RPT_DTYPE_STRING ],
83                 label : 'Lower case'
84         },
85
86         upper : {
87                 datatype : [ OILS_RPT_DTYPE_STRING ],
88                 label : 'Upper case'
89         },
90
91         firt5 : {
92                 datatype : [ OILS_RPT_DTYPE_STRING ],
93                 label : 'First 5 characters (for US ZIP code)'
94         },
95
96         /* timestamp transforms ----------------------- */
97         dow : {
98                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
99                 label : 'Day of Week',
100                 cal_format : '%w',
101                 regex : /^[0-6]$/
102         },
103         dom : {
104                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
105                 label : 'Day of Month',
106                 cal_format : '%e',
107                 regex : /^[0-9]{1,2}$/
108         },
109
110         doy : {
111                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
112                 label : 'Day of Year',
113                 cal_format : '%j',
114                 regex : /^[0-9]{1,3}$/
115         },
116
117         woy : {
118                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
119                 label : 'Week of Year',
120                 cal_format : '%U',
121                 regex : /^[0-9]{1,2}$/
122         },
123
124         moy : {
125                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
126                 label : 'Month of Year',
127                 cal_format : '%m',
128                 regex : /^\d{1,2}$/
129         },
130
131         qoy : {
132                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
133                 label : 'Quarter of Year',
134                 regex : /^[1234]$/
135         }, 
136
137         hod : {
138                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
139                 label : 'Hour of day',
140                 cal_format : '%H',
141                 regex : /^\d{1,2}$/
142         }, 
143
144         date : {
145                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
146                 label : 'Date',
147                 regex : /^\d{4}-\d{2}-\d{2}$/,
148                 hint  : 'YYYY-MM-DD',
149                 cal_format : '%Y-%m-%d',
150                 input_size : 10
151         },
152
153         month_trunc : {
154                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
155                 label : 'Year + Month',
156                 regex : /^\d{4}-\d{2}$/,
157                 hint  : 'YYYY-MM',
158                 cal_format : '%Y-%m',
159                 input_size : 7
160         },
161
162         year_trunc : {
163                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
164                 label : 'Year',
165                 regex : /^\d{4}$/,
166                 hint  : 'YYYY',
167                 cal_format : '%Y',
168                 input_size : 4
169         },
170
171         hour_trunc : {
172                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
173                 label : 'Hour',
174                 regex : /^\d{2}$/,
175                 hint  : 'HH',
176                 cal_format : '%Y-%m-$d %H',
177                 input_size : 2
178         },
179
180         day_name : {
181                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
182                 cal_format : '%A',
183                 label : 'Day Name'
184         }, 
185
186         month_name : {
187                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
188                 cal_format : '%B',
189                 label : 'Month Name'
190         },
191         age : {
192                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
193                 label : 'Age'
194         },
195
196         months_ago : {
197                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
198                 label : 'Months ago'
199         },
200
201         quarters_ago : {
202                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
203                 label : 'Quarters ago'
204         },
205
206         /* int  / float transforms ----------------------------------- */
207         sum : {
208                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT, OILS_RPT_DTYPE_MONEY ],
209                 label : 'Sum',
210                 aggregate : true
211         }, 
212
213         average : {
214                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT, OILS_RPT_DTYPE_MONEY ],
215                 label : 'Average',
216                 aggregate : true
217         },
218
219         round : {
220                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT ],
221                 label : 'Round',
222         },
223
224         'int' : {
225                 datatype : [ OILS_RPT_DTYPE_FLOAT ],
226                 label : 'Drop trailing decimals'
227         }
228 }
229
230 function getTransforms(args) {
231         var dtype = args.datatype;
232         var agg = args.aggregate;
233         var tforms = OILS_RPT_TRANSFORMS;
234         var nonagg = args.non_aggregate;
235
236         var keys = getKeys(OILS_RPT_TRANSFORMS)
237         var tforms = [];
238
239         for( var i = 0; i < keys.length; i++ ) {
240                 var key = keys[i];
241                 var obj = OILS_RPT_TRANSFORMS[key];
242                 if( agg && !nonagg && !obj.aggregate ) continue;
243                 if( !agg && nonagg && obj.aggregate ) continue;
244                 if( !dtype && obj.datatype.length > 0 ) continue;
245                 if( dtype && obj.datatype.length > 0 && transformIsForDatatype(key,dtype).length == 0 ) continue;
246                 tforms.push(key);
247         }
248
249         return tforms;
250 }
251
252
253 function transformIsForDatatype(tform, dtype) {
254         var obj = OILS_RPT_TRANSFORMS[tform];
255         return grep(function(d) { return (d == dtype) }, obj.datatype);
256 }
257
258