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