]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/xul/transforms.js
LP1615805 No inputs after submit in patron search (AngularJS)
[Evergreen.git] / Open-ILS / web / reports / xul / transforms.js
1 dojo.requireLocalization("openils.reports", "reports");
2
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
4 var OILS_RPT_DTYPE_ARRAY = 'array';
5 var OILS_RPT_DTYPE_STRING = 'text';
6 var OILS_RPT_DTYPE_MONEY = 'money';
7 var OILS_RPT_DTYPE_BOOL = 'bool';
8 var OILS_RPT_DTYPE_INT = 'int';
9 var OILS_RPT_DTYPE_ID = 'id';
10 var OILS_RPT_DTYPE_OU = 'org_unit';
11 var OILS_RPT_DTYPE_FLOAT = 'float';
12 var OILS_RPT_DTYPE_TIMESTAMP = 'timestamp';
13 var OILS_RPT_DTYPE_INTERVAL = 'interval';
14 var OILS_RPT_DTYPE_LINK = 'link';
15 var OILS_RPT_DTYPE_NONE = '';
16 var OILS_RPT_DTYPE_NULL = null;
17 var OILS_RPT_DTYPE_UNDEF;
18
19 var OILS_RPT_DTYPE_ALL = [
20         OILS_RPT_DTYPE_STRING,
21         OILS_RPT_DTYPE_MONEY,
22         OILS_RPT_DTYPE_INT,
23         OILS_RPT_DTYPE_ID,
24         OILS_RPT_DTYPE_FLOAT,
25         OILS_RPT_DTYPE_TIMESTAMP,
26         OILS_RPT_DTYPE_BOOL,
27         OILS_RPT_DTYPE_OU,
28         OILS_RPT_DTYPE_NONE,
29         OILS_RPT_DTYPE_NULL,
30         OILS_RPT_DTYPE_UNDEF,
31         OILS_RPT_DTYPE_INTERVAL,
32         OILS_RPT_DTYPE_LINK
33 ];
34 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];
35 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];
36
37 var OILS_RPT_TRANSFORMS = {
38         Bare : {
39                 datatype : OILS_RPT_DTYPE_ALL,
40                 label : rpt_strings.TRANSFORMS_BARE
41         },
42
43         first : {
44                 datatype : OILS_RPT_DTYPE_NOT_ID,
45                 label : rpt_strings.TRANSFORMS_FIRST
46         },
47
48         last : {
49                 datatype : OILS_RPT_DTYPE_NOT_ID,
50                 label : rpt_strings.TRANSFORMS_LAST
51         },
52
53         count : {
54                 datatype : OILS_RPT_DTYPE_NOT_BOOL,
55                 aggregate : true,
56                 label :  rpt_strings.TRANSFORMS_COUNT
57         },
58
59         count_distinct : {
60                 datatype : OILS_RPT_DTYPE_NOT_BOOL,
61                 aggregate : true,
62                 label : rpt_strings.TRANSFORMS_COUNT_DISTINCT
63         },
64
65         min : {
66                 datatype : OILS_RPT_DTYPE_NOT_ID,
67                 aggregate : true,
68                 label : rpt_strings.TRANSFORMS_MIN
69         },
70
71         max : {
72                 datatype : OILS_RPT_DTYPE_NOT_ID,
73                 aggregate : true,
74                 label : rpt_strings.TRANSFORMS_MAX
75         },
76
77         /* string transforms ------------------------- */
78
79         substring : {
80                 datatype : [ OILS_RPT_DTYPE_STRING ],
81                 params : 2,
82                 label : rpt_strings.TRANSFORMS_SUBSTRING
83         },
84
85         lower : {
86                 datatype : [ OILS_RPT_DTYPE_STRING ],
87                 label : rpt_strings.TRANSFORMS_LOWER
88         },
89
90         upper : {
91                 datatype : [ OILS_RPT_DTYPE_STRING ],
92                 label : rpt_strings.TRANSFORMS_UPPER
93         },
94
95         first5 : {
96                 datatype : [ OILS_RPT_DTYPE_STRING ],
97                 label : rpt_strings.TRANSFORMS_FIRST5
98         },
99
100         first_word : {
101                 datatype : [OILS_RPT_DTYPE_STRING, 'text'],
102                 label : rpt_strings.TRANSFORMS_FIRST_WORD
103         },
104
105         /* timestamp transforms ----------------------- */
106         dow : {
107                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
108                 label : rpt_strings.TRANSFORMS_DOW,
109                 cal_format : '%w',
110                 regex : /^[0-6]$/
111         },
112         dom : {
113                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
114                 label : rpt_strings.TRANSFORMS_DOM,
115                 cal_format : '%e',
116                 regex : /^[0-9]{1,2}$/
117         },
118
119         doy : {
120                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
121                 label : rpt_strings.TRANSFORMS_DOY,
122                 cal_format : '%j',
123                 regex : /^[0-9]{1,3}$/
124         },
125
126         woy : {
127                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
128                 label : rpt_strings.TRANSFORMS_WOY,
129                 cal_format : '%U',
130                 regex : /^[0-9]{1,2}$/
131         },
132
133         moy : {
134                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
135                 label : rpt_strings.TRANSFORMS_MOY,
136                 cal_format : '%m',
137                 regex : /^\d{1,2}$/
138         },
139
140         qoy : {
141                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
142                 label : rpt_strings.TRANSFORMS_QOY,
143                 regex : /^[1234]$/
144         }, 
145
146         hod : {
147                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
148                 label : rpt_strings.TRANSFORMS_HOD,
149                 cal_format : '%H',
150                 regex : /^\d{1,2}$/
151         }, 
152
153         date : {
154                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
155                 label : rpt_strings.TRANSFORMS_DATE,
156                 regex : /^\d{4}-\d{2}-\d{2}$/,
157                 hint  : 'YYYY-MM-DD',
158                 cal_format : '%Y-%m-%d',
159                 input_size : 10
160         },
161
162         month_trunc : {
163                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
164                 label : rpt_strings.TRANSFORMS_MONTH_TRUNC,
165                 regex : /^\d{4}-\d{2}$/,
166                 hint  : 'YYYY-MM',
167                 cal_format : '%Y-%m',
168                 input_size : 7
169         },
170
171         year_trunc : {
172                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
173                 label : rpt_strings.TRANSFORMS_YEAR_TRUNC,
174                 regex : /^\d{4}$/,
175                 hint  : 'YYYY',
176                 cal_format : '%Y',
177                 input_size : 4
178         },
179
180         hour_trunc : {
181                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
182                 label : rpt_strings.TRANSFORMS_HOUR_TRUNC,
183                 regex : /^\d{2}$/,
184                 hint  : 'HH',
185                 cal_format : '%Y-%m-$d %H',
186                 input_size : 2
187         },
188
189         day_name : {
190                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
191                 cal_format : '%A',
192                 label : rpt_strings.TRANSFORMS_DAY_NAME
193         }, 
194
195         month_name : {
196                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
197                 cal_format : '%B',
198                 label : rpt_strings.TRANSFORMS_MONTH_NAME
199         },
200         age : {
201                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
202                 label : rpt_strings.TRANSFORMS_AGE
203         },
204
205         months_ago : {
206                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
207                 label : rpt_strings.TRANSFORMS_MONTHS_AGO
208         },
209
210         quarters_ago : {
211                 datatype : [ OILS_RPT_DTYPE_TIMESTAMP ],
212                 label : rpt_strings.TRANSFORMS_QUARTERS_AGO
213         },
214
215         /* int  / float transforms ----------------------------------- */
216         sum : {
217                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT, OILS_RPT_DTYPE_MONEY ],
218                 label : rpt_strings.TRANSFORMS_SUM,
219                 aggregate : true
220         }, 
221
222         average : {
223                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT, OILS_RPT_DTYPE_MONEY ],
224                 label : rpt_strings.TRANSFORMS_AVERAGE,
225                 aggregate : true
226         },
227
228         round : {
229                 datatype : [ OILS_RPT_DTYPE_INT, OILS_RPT_DTYPE_FLOAT ],
230                 label : rpt_strings.TRANSFORMS_ROUND,
231         },
232
233         'int' : {
234                 datatype : [ OILS_RPT_DTYPE_FLOAT ],
235                 label : rpt_strings.TRANSFORMS_INT
236         }
237 }
238
239 function getTransforms(args) {
240         var dtype = args.datatype;
241         var agg = args.aggregate;
242         var tforms = OILS_RPT_TRANSFORMS;
243         var nonagg = args.non_aggregate;
244
245         var keys = getKeys(OILS_RPT_TRANSFORMS)
246         var tforms = [];
247
248         for( var i = 0; i < keys.length; i++ ) {
249                 var key = keys[i];
250                 var obj = OILS_RPT_TRANSFORMS[key];
251                 if( agg && !nonagg && !obj.aggregate ) continue;
252                 if( !agg && nonagg && obj.aggregate ) continue;
253                 if( !dtype && obj.datatype.length > 0 ) continue;
254                 if( dtype && obj.datatype.length > 0 && transformIsForDatatype(key,dtype).length == 0 ) continue;
255                 tforms.push(key);
256         }
257
258         return tforms;
259 }
260
261
262 function transformIsForDatatype(tform, dtype) {
263         var obj = OILS_RPT_TRANSFORMS[tform];
264         return grep(function(d) { return (d == dtype) }, obj.datatype);
265 }
266
267