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