]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_param_editor.js
LP#1858114: Present proper input widget for aggregate parameters
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_param_editor.js
1 oilsRptSetSubClass('oilsRptParamEditor','oilsRptObject');
2 function oilsRptParamEditor(report, tbody, readonly) {
3         this.tbody = tbody;
4         this.report = report;
5     this.readonly = readonly;
6 }
7
8
9 oilsRptParamEditor.prototype.recur = function() {
10         //var cb = $n(DOM.oils_rpt_recur_editor_table,'oils_rpt_recur');
11         var cb = DOM.oils_rpt_recur;
12         return (cb.checked) ? 't' : 'f';
13 }
14
15 oilsRptParamEditor.prototype.recurInterval = function() {
16         /*
17         var count = getSelectorVal($n(DOM.oils_rpt_recur_editor_table,'oils_rpt_recur_count'));
18         var intvl = getSelectorVal($n(DOM.oils_rpt_recur_editor_table,'oils_rpt_recur_interval_type'));
19         */
20         var count = getSelectorVal(DOM.oils_rpt_recur_count);
21         var intvl = getSelectorVal(DOM.oils_rpt_recur_interval_type);
22         return count+''+intvl;
23 }
24
25 oilsRptParamEditor.prototype.draw = function() {
26         var params = this.report.gatherParams();
27         this.params = params;
28
29         if(!oilsRptParamEditor.row)
30                 oilsRptParamEditor.row = 
31                         DOM.oils_rpt_param_editor_tbody.removeChild(
32                         $n(DOM.oils_rpt_param_editor_tbody, 'tr'));
33
34         removeChildren(this.tbody);
35         _debug(formatJSON(js2JSON(params)));
36                         
37         for( var p = 0; p < params.length; p++ ) {
38                 var par = params[p];
39                 var row = oilsRptParamEditor.row.cloneNode(true);
40                 this.tbody.appendChild(row);
41                 var clabel = oilsRptMakeLabel(par.path) || par.label || par.alias;
42                 $n(row, 'column').appendChild(text(clabel));
43
44         if (par.field_doc) {
45                     $n(row, 'column').appendChild(
46                 elem('div', {'class':'oils_rpt_field_hint'}, par.field_doc));
47         }
48             
49                 //$n(row, 'column').appendChild(text(oilsRptMakeLabel(par.path, par.field_doc)));
50                 $n(row, 'transform').appendChild(text(OILS_RPT_TRANSFORMS[par.column.transform].label));
51                 $n(row, 'action').appendChild(text(OILS_RPT_FILTERS[par.op].label));
52                 par.widget = this.buildWidget(par, $n(row, 'widget'));
53                 par.widget.draw();
54         }
55
56     /** draw the pre-defined template params so the user will know
57         what params are already set */
58     var tparams = this.report.gatherTemplateParams();
59
60         for( var p = 0; p < tparams.length; p++ ) {
61                 var par = tparams[p];
62                 var row = oilsRptParamEditor.row.cloneNode(true);
63                 this.tbody.appendChild(row);
64                 $n(row, 'column').appendChild(text(oilsRptMakeLabel(par.path)));
65         if (par.field_doc) {
66                     $n(row, 'column').appendChild(
67                 elem('div', {'class':'oils_rpt_field_hint'}, par.field_doc));
68         }
69                 $n(row, 'transform').appendChild(text(OILS_RPT_TRANSFORMS[par.column.transform].label));
70                 $n(row, 'action').appendChild(text(OILS_RPT_FILTERS[par.op].label));
71                 par.widget = this.buildWidget(par, $n(row, 'widget'), true);
72                 par.widget.draw();
73         }
74 }
75
76 oilsRptParamEditor.prototype.buildWidget = function(param, node, fromTemplate) {
77         var transform = param.column.transform;
78         var cls = oilsRptPathClass(param.path);
79         var field = oilsRptFindField(oilsIDL[cls], oilsRptPathCol(param.path));
80         var dtype = field.datatype;
81
82         _debug("building widget with param class:" + cls + ' col: '+param.column.colname + ' op: '+ param.op);
83
84         /* get the atomic widget from the datatype */
85         var atomicWidget = oilsRptTextWidget;
86         var widgetArgs  = {node:node};
87         widgetArgs.calFormat = OILS_RPT_TRANSFORMS[transform].cal_format;
88         widgetArgs.inputSize = OILS_RPT_TRANSFORMS[transform].input_size;
89         widgetArgs.regex = OILS_RPT_TRANSFORMS[transform].regex;
90     widgetArgs.value = param.value;
91     widgetArgs.readonly = this.readonly;
92
93         switch(transform) {
94                 case 'date':
95                         widgetArgs.type = 'date';
96                         atomicWidget = oilsRptTruncPicker;
97                         break;
98                 case 'hour_trunc':
99                         widgetArgs.type = 'hour';
100                         atomicWidget = oilsRptTruncPicker;
101                         break;
102                 case 'month_trunc':
103                         widgetArgs.type = 'month';
104                         atomicWidget = oilsRptTruncPicker;
105                         break;
106                 case 'year_trunc':
107                         widgetArgs.type = 'year';
108                         atomicWidget = oilsRptTruncPicker;
109                         break;
110                 case 'date':
111                         atomicWidget = oilsRptCalWidget;
112                         break;
113                 case 'age':
114                         atomicWidget = oilsRptAgeWidget;
115                         break;
116                 case 'days_ago':        
117                         widgetArgs.size = 7;
118                         widgetArgs.start = 1;
119                         atomicWidget = oilsRptNumberWidget
120                         break;
121                 case 'months_ago':      
122                         widgetArgs.size = 12;
123                         widgetArgs.start = 1;
124                         atomicWidget = oilsRptNumberWidget
125                         break;
126                 case 'quarters_ago':    
127                         widgetArgs.size = 4;
128                         widgetArgs.start = 1;
129                         atomicWidget = oilsRptNumberWidget
130                         break;
131                 case 'years_ago':       
132                         widgetArgs.size = 20;
133                         widgetArgs.start = 1;
134                         atomicWidget = oilsRptNumberWidget
135                         break;
136                 case 'dow':
137                         widgetArgs.size = 7;
138                         widgetArgs.start = 0;
139                         atomicWidget = oilsRptNumberWidget
140                         break;
141                 case 'dom':
142                         widgetArgs.size = 31;
143                         widgetArgs.start = 1;
144                         atomicWidget = oilsRptNumberWidget
145                         break;
146                 case 'doy':
147                         widgetArgs.size = 365;
148                         widgetArgs.start = 1;
149                         atomicWidget = oilsRptNumberWidget
150                         break;
151                 case 'woy':
152                         widgetArgs.size = 52;
153                         widgetArgs.start = 1;
154                         atomicWidget = oilsRptNumberWidget
155                         break;
156                 case 'moy':
157                         widgetArgs.size = 12;
158                         widgetArgs.start = 1;
159                         atomicWidget = oilsRptNumberWidget
160                         break;
161                 case 'qoy':
162                         widgetArgs.size = 4;
163                         widgetArgs.start = 1;
164                         atomicWidget = oilsRptNumberWidget
165                         break;
166                 case 'hod':
167                         widgetArgs.size = 24;
168                         widgetArgs.start = 0;
169                         atomicWidget = oilsRptNumberWidget
170                         break;
171
172                 case 'substring':
173                         atomicWidget = oilsRptSubstrWidget
174                         break;
175         }
176
177         // aggregates like count (etc) on a pkey should not use the remote widget
178         if( !param.column.aggregate && field.selector ) {
179                 atomicWidget = oilsRptRemoteWidget;
180                 widgetArgs.class = cls;
181                 widgetArgs.field = field;
182                 widgetArgs.column = param.column.colname;
183         widgetArgs.async = true;
184         }
185
186         switch(cls) {
187                 case 'aou':
188                         atomicWidget = oilsRptOrgSelector;
189                         break;
190         }
191
192         switch(dtype) {
193                 case 'bool':
194                         atomicWidget = oilsRptBoolWidget;
195                         break;
196
197         case "org_unit":
198             atomicWidget = oilsRptOrgSelector;
199             break;
200         }
201
202     // oilsRptTemplateWidget's are pre-set read-only values
203     if(fromTemplate && widgetArgs.value != undefined) 
204         return new oilsRptTemplateWidget(widgetArgs);
205
206
207         switch(param.op) {
208                 case 'in':
209                 case 'not in':
210                         widgetArgs.inputWidget = atomicWidget;
211                         return new oilsRptSetWidget(widgetArgs);
212         case 'is':
213         case 'is not':
214         case 'is blank':
215         case 'is not blank':
216             return new oilsRptNullWidget(widgetArgs);
217                 case 'between':
218                 case 'not between':
219                         widgetArgs.startWidget = atomicWidget;
220                         widgetArgs.endWidget = atomicWidget;
221                         return new oilsRptBetweenWidget(widgetArgs);
222                 default:
223                         return new atomicWidget(widgetArgs);
224         }
225
226 }
227
228
229
230
231