1 dojo.requireLocalization("openils.reports", "reports");
3 var rpt_strings = dojo.i18n.getLocalization("openils.reports", "reports");
5 oilsRptSetSubClass('oilsRptReportEditor', 'oilsRptObject');
6 var oilsRptReportEditorFolderTree;
8 function oilsRptReportEditor(rptObject, folderWindow) {
9 var tmpl = rptObject.templateObject;
10 var rpt = rptObject.reportObject;
11 this.folderWindow = folderWindow;
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());
20 hideMe(DOM.oils_rpt_report_editor_template_doc_url_row);
21 if (rptObject.def.version >= 4) {
22 if (URL = rptObject.def.doc_url) {
23 var link = DOM.oils_rpt_report_editor_template_doc_url;
25 if (typeof xulG == 'undefined') {
26 link.setAttribute('href', URL);
27 link.setAttribute('target', '_blank');
29 link.onclick = function() {xulG.new_tab(URL); return false}
31 unHideMe(DOM.oils_rpt_report_editor_template_doc_url_row);
35 appendClear(DOM.oils_rpt_report_editor_cols,'');
36 iterate(rptObject.def.select,
39 DOM.oils_rpt_report_editor_cols.appendChild(text(i.alias));
41 DOM.oils_rpt_report_editor_cols.appendChild(
42 elem('span', {'class':'oils_rpt_field_hint'}, i.field_doc));
44 DOM.oils_rpt_report_editor_cols.appendChild(document.createElement('br'));
49 oils_rpt_editor_pivot_label
50 oils_rpt_editor_pivot_data
54 iterate(rptObject.def.select,
56 if(OILS_RPT_TRANSFORMS[i.column.transform].aggregate)
61 while(DOM.oils_rpt_editor_pivot_label.getElementsByTagName('option').length > 1)
62 DOM.oils_rpt_editor_pivot_label.removeChild(DOM.oils_rpt_editor_pivot_label.lastChild);
64 while(DOM.oils_rpt_editor_pivot_data.lastChild)
65 DOM.oils_rpt_editor_pivot_data.removeChild(DOM.oils_rpt_editor_pivot_data.lastChild);
68 unHideMe(DOM.oils_rpt_editor_pivot_label_row);
69 unHideMe(DOM.oils_rpt_editor_pivot_data_row);
71 for(var i in rptObject.def.select) {
72 var col = rptObject.def.select[i];
73 if(OILS_RPT_TRANSFORMS[col.column.transform].aggregate)
74 insertSelectorVal(DOM.oils_rpt_editor_pivot_data, -1, col.alias, parseInt(i)+1);
76 insertSelectorVal(DOM.oils_rpt_editor_pivot_label, -1, col.alias, parseInt(i)+1);
80 hideMe(DOM.oils_rpt_editor_pivot_label_row);
81 hideMe(DOM.oils_rpt_editor_pivot_data_row);
86 DOM.oils_rpt_report_editor_name.value = rpt.name();
87 DOM.oils_rpt_report_editor_description.value = rpt.description();
90 this.paramEditor = new oilsRptParamEditor(
91 rptObject, DOM.oils_rpt_param_editor_tbody);
92 this.paramEditor.draw();
94 removeChildren(DOM.oils_rpt_report_editor_selected_folder);
95 removeChildren(DOM.oils_rpt_output_selected_folder);
100 DOM.oils_rpt_report_editor_dest_folder,
101 'oilsRptReportEditorFolderTree',
102 rpt_strings.REPORT_EDITOR_REPORT_FOLDERS,
104 appendClear(DOM.oils_rpt_report_editor_selected_folder, node.folder.name());
105 obj.selectedFolder = node; });
110 DOM.oils_rpt_output_dest_folder,
111 'oilsRptReportEditorOutputTree',
112 rpt_strings.REPORT_EDITOR_OUTPUT_FOLDERS,
114 appendClear(DOM.oils_rpt_output_selected_folder, node.folder.name());
115 obj.selectedOutputFolder = node; });
119 DOM.oils_rpt_report_editor_save.onclick = function(){obj.save();}
120 DOM.oils_rpt_param_editor_sched_email.value = USER.email();
121 DOM.oils_rpt_param_editor_sched_start_date.value = mkYearMonDay();
123 _debug("fleshing template:\n" + tmpl.name() + '\n' + formatJSON(tmpl.data()));
127 oilsRptReportEditor.prototype.save = function() {
128 var report = new rr();
130 if(!this.selectedFolder)
131 return alert(rpt_strings.REPORT_EDITOR_PROVIDE_FOLDER_ALERT);
133 if(!DOM.oils_rpt_report_editor_name.value)
134 return alert(rpt_strings.REPORT_EDITOR_ENTER_NAME_ALERT);
136 report.owner( USER.id() );
137 report.template( this.template.id() );
138 report.folder( this.selectedFolder.folder.id() );
139 report.name( DOM.oils_rpt_report_editor_name.value );
140 report.description( DOM.oils_rpt_report_editor_desc.value );
141 report.recur(this.paramEditor.recur());
142 report.recurrence(this.paramEditor.recurInterval());
145 /* collect the param data */
147 for( var p in this.paramEditor.params ) {
148 var par = this.paramEditor.params[p];
149 _debug("adding report param "+par.key+" to report data");
150 var val = par.widget.getValue();
152 if(!val || val.length == 0 )
153 return alertId('oils_rpt_empty_param');
155 if( typeof val == 'object') {
156 for( var i = i; i < val.length; i++ ) {
157 _debug("looking at widget value" + val[i]);
158 if( val[i] == '' || val[i] == null )
159 return alertId('oils_rpt_empty_param');
166 if(getSelectorVal(DOM.oils_rpt_editor_pivot_data)) {
167 data.__pivot_label = getSelectorVal(DOM.oils_rpt_editor_pivot_label);
168 data.__pivot_data = getSelectorVal(DOM.oils_rpt_editor_pivot_data);
172 data = js2JSON(data);
173 _debug("complete report data = "+data);
176 _debug("Built report:\n"+js2JSON(report));
180 if( DOM.oils_rpt_report_editor_run_now.checked ) {
181 DOM.oils_rpt_report_editor_run_now.checked = false;
186 var dt = DOM.oils_rpt_param_editor_sched_start_date.value;
187 if(!dt || !dt.match(/^\d{4}-\d{2}-\d{2}$/) ) {
188 /* for now.. make this better in the future */
189 alert(rpt_strings.REPORT_EDITOR_INVALID_DATE_ALERT);
192 var hour = getSelectorVal(DOM.oils_rpt_param_editor_sched_start_hour);
193 time = dt +'T'+hour+':00';
194 _debug("built run_time "+time);
197 if(!this.selectedOutputFolder)
198 return alert(rpt_strings.REPORT_EDITOR_PROVIDE_OUTPUT_ALERT);
200 var schedule = new rs();
201 schedule.folder(this.selectedOutputFolder.folder.id());
202 schedule.email(DOM.oils_rpt_param_editor_sched_email.value);
203 schedule.run_time(time);
204 schedule.runner(USER.id());
206 schedule.excel_format((DOM.oils_rpt_format_excel.checked) ? 't' : 'f');
207 schedule.html_format((DOM.oils_rpt_format_html.checked) ? 't' : 'f');
208 schedule.csv_format((DOM.oils_rpt_format_csv.checked) ? 't' : 'f');
209 //schedule.chart_pie((DOM.oils_rpt_format_chart_pie.checked) ? 't' : 'f');
210 schedule.chart_bar((DOM.oils_rpt_format_chart_bar.checked) ? 't' : 'f');
211 schedule.chart_line((DOM.oils_rpt_format_chart_line.checked) ? 't' : 'f');
214 debugFMObject(report);
215 debugFMObject(schedule);
220 var folderReq = new Request(OILS_RPT_REPORT_EXISTS, SESSION, report);
223 if(r1.getResultObject() == 1) {
224 alertId('oils_rpt_report_exists');
227 var req = new Request(OILS_RPT_CREATE_REPORT, SESSION, report, schedule );
230 var res = r.getResultObject();
231 if(checkILSEvent(res)) {
234 if( res && res != '0' ) {
235 oilsRptAlertSuccess();
236 oilsRptCurrentFolderManager.draw();
237 obj.folderWindow.draw();