]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/xul/transforms.js
c901f346ec1ba976f7d4fe627df8527027c0707b
[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         /* timestamp transforms ----------------------- */
92         dow : {
93                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
94                 label : 'Day of Week',
95                 cal_format : '%w',
96                 regex : /^[0-6]$/
97         },
98         dom : {
99                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
100                 label : 'Day of Month',
101                 cal_format : '%e',
102                 regex : /^[0-9]{1,2}$/
103         },
104
105         doy : {
106                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
107                 label : 'Day of Year',
108                 cal_format : '%j',
109                 regex : /^[0-9]{1,3}$/
110         },
111
112         woy : {
113                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
114                 label : 'Week of Year',
115                 cal_format : '%U',
116                 regex : /^[0-9]{1,2}$/
117         },
118
119         moy : {
120                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
121                 label : 'Month of Year',
122                 cal_format : '%m',
123                 regex : /^\d{1,2}$/
124         },
125
126         qoy : {
127                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
128                 label : 'Quarter of Year',
129                 regex : /^[1234]$/
130         }, 
131
132         hod : {
133                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
134                 label : 'Hour of day',
135                 cal_format : '%H',
136                 regex : /^\d{1,2}$/
137         }, 
138
139         date : {
140                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
141                 label : 'Date',
142                 regex : /^\d{4}-\d{2}-\d{2}$/,
143                 hint  : 'YYYY-MM-DD',
144                 cal_format : '%Y-%m-%d',
145                 input_size : 10
146         },
147
148         month_trunc : {
149                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
150                 label : 'Year + Month',
151                 regex : /^\d{4}-\d{2}$/,
152                 hint  : 'YYYY-MM',
153                 cal_format : '%Y-%m',
154                 input_size : 7
155         },
156
157         year_trunc : {
158                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
159                 label : 'Year',
160                 regex : /^\d{4}$/,
161                 hint  : 'YYYY',
162                 cal_format : '%Y',
163                 input_size : 4
164         },
165
166         hour_trunc : {
167                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
168                 label : 'Hour',
169                 regex : /^\d{2}$/,
170                 hint  : 'HH',
171                 cal_format : '%Y-%m-$d %H',
172                 input_size : 2
173         },
174
175         day_name : {
176                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
177                 cal_format : '%A',
178                 label : 'Day Name'
179         }, 
180
181         month_name : {
182                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
183                 cal_format : '%B',
184                 label : 'Month Name'
185         },
186         age : {
187                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
188                 label : 'Age'
189         },
190
191         months_ago : {
192                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
193                 label : 'Months ago'
194         },
195
196         quarters_ago : {
197                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
198                 label : 'Quarters ago'
199         },
200
201         /* int  / float transforms ----------------------------------- */
202         sum : {
203                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT, OILS_RPT_DTYPE_MONEY ],
204                 label : 'Sum',
205                 aggregate : true
206         }, 
207
208         average : {
209                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT, OILS_RPT_DTYPE_MONEY ],
210                 label : 'Average',
211                 aggregate : true
212         },
213
214         round : {
215                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT ],
216                 label : 'Round',
217         },
218
219         'int' : {
220                 datatype : [ OILS_RPT_DTYPE_FLOAT ],
221                 label : 'Drop trailing decimals'
222         }
223 }
224
225 function getTransforms(args) {
226         var dtype = args.datatype;
227         var agg = args.aggregate;
228         var tforms = OILS_RPT_TRANSFORMS;
229         var nonagg = args.non_aggregate;
230
231         var keys = getKeys(OILS_RPT_TRANSFORMS)
232         var tforms = [];
233
234         for( var i = 0; i < keys.length; i++ ) {
235                 var key = keys[i];
236                 var obj = OILS_RPT_TRANSFORMS[key];
237                 if( agg && !nonagg && !obj.aggregate ) continue;
238                 if( !agg && nonagg && obj.aggregate ) continue;
239                 if( !dtype && obj.datatype.length > 0 ) continue;
240                 if( dtype && obj.datatype.length > 0 && transformIsForDatatype(key,dtype).length == 0 ) continue;
241                 tforms.push(key);
242         }
243
244         return tforms;
245 }
246
247
248 function transformIsForDatatype(tform, dtype) {
249         var obj = OILS_RPT_TRANSFORMS[tform];
250         return grep(function(d) { return (d == dtype) }, obj.datatype);
251 }
252
253