]> git.evergreen-ils.org Git - Evergreen.git/blob - Open-ILS/web/reports/oils_rpt_report_editor.js
added double-click action to template builder selector items to see details. other...
[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         appendClear(DOM.oils_rpt_report_editor_cols,' | ');
17         iterate(rptObject.def.select, 
18                 function(i) {
19                         if(i)
20                                 DOM.oils_rpt_report_editor_cols.appendChild(text(i.alias +' | '));
21                 }
22         );
23
24         if( rpt ) {
25                 DOM.oils_rpt_report_editor_name.value = rpt.name();
26                 DOM.oils_rpt_report_editor_description.value = rpt.description();
27         }
28
29         this.paramEditor = new oilsRptParamEditor(
30                 rptObject, DOM.oils_rpt_param_editor_tbody);
31         this.paramEditor.draw();
32
33         removeChildren(DOM.oils_rpt_report_editor_selected_folder);
34         removeChildren(DOM.oils_rpt_output_selected_folder);
35
36         var obj = this;
37         oilsRptBuildFolder(
38                 'report',
39                 DOM.oils_rpt_report_editor_dest_folder,
40                 'oilsRptReportEditorFolderTree',
41                 'Report Folders',
42                 function(node) { 
43                         appendClear(DOM.oils_rpt_report_editor_selected_folder, node.folder.name());
44                         obj.selectedFolder = node; });
45
46
47         oilsRptBuildFolder(
48                 'output',
49                 DOM.oils_rpt_output_dest_folder,
50                 'oilsRptReportEditorOutputTree',
51                 'Output Folders',
52                 function(node) { 
53                         appendClear(DOM.oils_rpt_output_selected_folder, node.folder.name());
54                         obj.selectedOutputFolder = node; });
55
56
57         var obj = this;
58         DOM.oils_rpt_report_editor_save.onclick = function(){obj.save();}
59         DOM.oils_rpt_param_editor_sched_email.value = USER.email();
60         DOM.oils_rpt_param_editor_sched_start_date.value = mkYearMonDay();
61
62         _debug("fleshing template:\n" + tmpl.name() + '\n' + formatJSON(tmpl.data()));
63 }
64
65
66 oilsRptReportEditor.prototype.save = function() {
67         var report = new rr();
68
69         if(!this.selectedFolder) 
70                 return alert('Please provide a report folder');
71
72         if(!DOM.oils_rpt_report_editor_name.value)
73                 return alert('Please enter a report name');
74
75         report.owner( USER.id() );
76         report.template( this.template.id() );
77         report.folder( this.selectedFolder.folder.id() );
78         report.name( DOM.oils_rpt_report_editor_name.value );
79         report.description( DOM.oils_rpt_report_editor_desc.value );
80         report.recur(this.paramEditor.recur());
81         report.recurance(this.paramEditor.recurInterval());
82
83
84         /* collect the param data */
85         var data = {};
86         for( var p in this.paramEditor.params ) {
87                 var par = this.paramEditor.params[p];
88                 _debug("adding report param "+par.key+" to report data");
89                 var val = par.widget.getValue();
90
91                 if(!val || val.length == 0 )
92                         return alertId('oils_rpt_empty_param');
93
94                 if( typeof val == 'object') {
95                         for( var i = i; i < val.length; i++ ) {
96                                 _debug("looking at widget value" + val[i]);
97                                 if( val[i] == '' || val[i] == null ) 
98                                         return alertId('oils_rpt_empty_param');
99                         }
100                 }
101
102                 data[par.key] = val;
103         }
104
105         data = js2JSON(data);
106         _debug("complete report data = "+data);
107         report.data(data);
108
109         _debug("Built report:\n"+js2JSON(report));
110
111
112         var time;
113         if( DOM.oils_rpt_report_editor_run_now.checked ) {
114                 DOM.oils_rpt_report_editor_run_now.checked = false;
115                 time = 'now';
116
117         } else {
118
119                 var dt = DOM.oils_rpt_param_editor_sched_start_date.value;
120                 if(!dt || !dt.match(/^\d{4}-\d{2}-\d{2}$/) ) {
121                         /* for now.. make this better in the future */
122                         alert('invalid start date -  YYYY-MM-DD');
123                         return;
124                 }
125                 var hour = getSelectorVal(DOM.oils_rpt_param_editor_sched_start_hour);
126                 time = dt +'T'+hour+':00';
127                 _debug("built run_time "+time);
128         }
129
130         if(!this.selectedOutputFolder) 
131                 return alert('Please provide an output folder');
132
133         var schedule = new rs();
134         schedule.folder(this.selectedOutputFolder.folder.id());
135         schedule.email(DOM.oils_rpt_param_editor_sched_email.value);
136         schedule.run_time(time);
137         schedule.runner(USER.id());
138
139         schedule.excel_format((DOM.oils_rpt_format_excel.checked) ? 't' : 'f');
140         schedule.html_format((DOM.oils_rpt_format_html.checked) ? 't' : 'f');
141         schedule.csv_format((DOM.oils_rpt_format_csv.checked) ? 't' : 'f');
142         //schedule.chart_pie((DOM.oils_rpt_format_chart_pie.checked) ? 't' : 'f');
143         schedule.chart_bar((DOM.oils_rpt_format_chart_bar.checked) ? 't' : 'f');
144         schedule.chart_line((DOM.oils_rpt_format_chart_line.checked) ? 't' : 'f');
145
146
147         debugFMObject(report);
148         debugFMObject(schedule);
149
150         //return;
151
152         var obj = this;
153         var req = new Request(OILS_RPT_CREATE_REPORT, SESSION, report, schedule );
154         req.callback(
155                 function(r) {
156                         var res = r.getResultObject();
157                         if(checkILSEvent(res)) {
158                                 alertILSEvent(res);
159                         } else {
160                                 if( res && res != '0' ) {
161                                         oilsRptAlertSuccess();
162                                         oilsRptCurrentFolderManager.draw();
163                                         obj.folderWindow.draw();
164                                 }
165                         }
166                 }
167         );
168         req.send();
169 }
170
171