]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_report_editor.js
63432679c39098483cdd292de30ab805c927da93
[Evergreen.git] / Open-ILS / web / reports / oils_rpt_report_editor.js
1 oilsRptSetSubClass('oilsRptReportEditor', 'oilsRptObject');
2 var oilsRptReportEditorFolderTree;
3
4 function oilsRptReportEditor(rptObject, folderWindow) {
5         var tmpl = rptObject.templateObject;
6         var rpt = rptObject.reportObject;
7         this.folderWindow = folderWindow;
8
9         this.template = tmpl;
10         this.report = rpt;
11
12         appendClear(DOM.oils_rpt_report_editor_template_name, tmpl.name());
13         appendClear(DOM.oils_rpt_report_editor_template_creator, tmpl.owner().usrname());
14         appendClear(DOM.oils_rpt_report_editor_template_description, tmpl.description());
15
16         iterate(rptObject.def.select, 
17                 function(i) {
18                         if(i)
19                                 DOM.oils_rpt_report_editor_cols.appendChild(text(i.alias));
20                                 DOM.oils_rpt_report_editor_cols.appendChild(document.createElement('br'));
21                 }
22         );
23
24 /*
25 oils_rpt_editor_pivot_label
26 oils_rpt_editor_pivot_data
27 */
28
29     var hasAgg = false;
30     iterate(rptObject.def.select, 
31         function(i) {
32             if(OILS_RPT_TRANSFORMS[i.column.transform].aggregate) 
33                 hasAgg = true; 
34         }
35     );
36
37     while(DOM.oils_rpt_editor_pivot_label.getElementsByTagName('option').length > 1)
38         DOM.oils_rpt_editor_pivot_label.removeChild(DOM.oils_rpt_editor_pivot_label.lastChild);
39
40     while(DOM.oils_rpt_editor_pivot_data.lastChild)
41         DOM.oils_rpt_editor_pivot_data.removeChild(DOM.oils_rpt_editor_pivot_data.lastChild);
42
43     if(hasAgg) {
44         unHideMe(DOM.oils_rpt_editor_pivot_label_row);
45         unHideMe(DOM.oils_rpt_editor_pivot_data_row);
46
47         for(var i in rptObject.def.select) {
48             var col = rptObject.def.select[i];
49             if(OILS_RPT_TRANSFORMS[col.column.transform].aggregate) 
50                insertSelectorVal(DOM.oils_rpt_editor_pivot_data, -1, col.alias, parseInt(i)+1);
51             else
52                insertSelectorVal(DOM.oils_rpt_editor_pivot_label, -1, col.alias, parseInt(i)+1);
53         }
54
55     } else {
56         hideMe(DOM.oils_rpt_editor_pivot_label_row);
57         hideMe(DOM.oils_rpt_editor_pivot_data_row);
58     }
59  
60
61         if( rpt ) {
62                 DOM.oils_rpt_report_editor_name.value = rpt.name();
63                 DOM.oils_rpt_report_editor_description.value = rpt.description();
64         }
65
66         this.paramEditor = new oilsRptParamEditor(
67                 rptObject, DOM.oils_rpt_param_editor_tbody);
68         this.paramEditor.draw();
69
70         removeChildren(DOM.oils_rpt_report_editor_selected_folder);
71         removeChildren(DOM.oils_rpt_output_selected_folder);
72
73         var obj = this;
74         oilsRptBuildFolder(
75                 'report',
76                 DOM.oils_rpt_report_editor_dest_folder,
77                 'oilsRptReportEditorFolderTree',
78                 'Report Folders',
79                 function(node) { 
80                         appendClear(DOM.oils_rpt_report_editor_selected_folder, node.folder.name());
81                         obj.selectedFolder = node; });
82
83
84         oilsRptBuildFolder(
85                 'output',
86                 DOM.oils_rpt_output_dest_folder,
87                 'oilsRptReportEditorOutputTree',
88                 'Output Folders',
89                 function(node) { 
90                         appendClear(DOM.oils_rpt_output_selected_folder, node.folder.name());
91                         obj.selectedOutputFolder = node; });
92
93
94         var obj = this;
95         DOM.oils_rpt_report_editor_save.onclick = function(){obj.save();}
96         DOM.oils_rpt_param_editor_sched_email.value = USER.email();
97         DOM.oils_rpt_param_editor_sched_start_date.value = mkYearMonDay();
98
99         _debug("fleshing template:\n" + tmpl.name() + '\n' + formatJSON(tmpl.data()));
100 }
101
102
103 oilsRptReportEditor.prototype.save = function() {
104         var report = new rr();
105
106         if(!this.selectedFolder) 
107                 return alert('Please provide a report folder');
108
109         if(!DOM.oils_rpt_report_editor_name.value)
110                 return alert('Please enter a report name');
111
112         report.owner( USER.id() );
113         report.template( this.template.id() );
114         report.folder( this.selectedFolder.folder.id() );
115         report.name( DOM.oils_rpt_report_editor_name.value );
116         report.description( DOM.oils_rpt_report_editor_desc.value );
117         report.recur(this.paramEditor.recur());
118         report.recurance(this.paramEditor.recurInterval());
119
120
121         /* collect the param data */
122         var data = {};
123         for( var p in this.paramEditor.params ) {
124                 var par = this.paramEditor.params[p];
125                 _debug("adding report param "+par.key+" to report data");
126                 var val = par.widget.getValue();
127
128                 if(!val || val.length == 0 )
129                         return alertId('oils_rpt_empty_param');
130
131                 if( typeof val == 'object') {
132                         for( var i = i; i < val.length; i++ ) {
133                                 _debug("looking at widget value" + val[i]);
134                                 if( val[i] == '' || val[i] == null ) 
135                                         return alertId('oils_rpt_empty_param');
136                         }
137                 }
138
139                 data[par.key] = val;
140         }
141
142     if(getSelectorVal(DOM.oils_rpt_editor_pivot_data)) {
143         data.__pivot_label = getSelectorVal(DOM.oils_rpt_editor_pivot_label);
144         data.__pivot_data = getSelectorVal(DOM.oils_rpt_editor_pivot_data);
145     }
146
147
148         data = js2JSON(data);
149         _debug("complete report data = "+data);
150         report.data(data);
151
152         _debug("Built report:\n"+js2JSON(report));
153
154
155         var time;
156         if( DOM.oils_rpt_report_editor_run_now.checked ) {
157                 DOM.oils_rpt_report_editor_run_now.checked = false;
158                 time = 'now';
159
160         } else {
161
162                 var dt = DOM.oils_rpt_param_editor_sched_start_date.value;
163                 if(!dt || !dt.match(/^\d{4}-\d{2}-\d{2}$/) ) {
164                         /* for now.. make this better in the future */
165                         alert('invalid start date -  YYYY-MM-DD');
166                         return;
167                 }
168                 var hour = getSelectorVal(DOM.oils_rpt_param_editor_sched_start_hour);
169                 time = dt +'T'+hour+':00';
170                 _debug("built run_time "+time);
171         }
172
173         if(!this.selectedOutputFolder) 
174                 return alert('Please provide an output folder');
175
176         var schedule = new rs();
177         schedule.folder(this.selectedOutputFolder.folder.id());
178         schedule.email(DOM.oils_rpt_param_editor_sched_email.value);
179         schedule.run_time(time);
180         schedule.runner(USER.id());
181
182         schedule.excel_format((DOM.oils_rpt_format_excel.checked) ? 't' : 'f');
183         schedule.html_format((DOM.oils_rpt_format_html.checked) ? 't' : 'f');
184         schedule.csv_format((DOM.oils_rpt_format_csv.checked) ? 't' : 'f');
185         //schedule.chart_pie((DOM.oils_rpt_format_chart_pie.checked) ? 't' : 'f');
186         schedule.chart_bar((DOM.oils_rpt_format_chart_bar.checked) ? 't' : 'f');
187         schedule.chart_line((DOM.oils_rpt_format_chart_line.checked) ? 't' : 'f');
188
189
190         debugFMObject(report);
191         debugFMObject(schedule);
192
193         //return;
194
195         var obj = this;
196     var folderReq = new Request(OILS_RPT_REPORT_EXISTS, SESSION, report);
197     folderReq.callback(
198         function(r1) {
199             if(r1.getResultObject() == 1) {
200                 alertId('oils_rpt_report_exists');
201                 return;
202             } else {
203                 var req = new Request(OILS_RPT_CREATE_REPORT, SESSION, report, schedule );
204                 req.callback(
205                     function(r) {
206                         var res = r.getResultObject();
207                         if(checkILSEvent(res)) {
208                             alertILSEvent(res);
209                         } else {
210                             if( res && res != '0' ) {
211                                 oilsRptAlertSuccess();
212                                 oilsRptCurrentFolderManager.draw();
213                                 obj.folderWindow.draw();
214                             }
215                         }
216                     }
217                 );
218                 req.send();
219             }
220         }
221     );
222     folderReq.send();
223 }
224
225