[% PROCESS inputs; PROCESS class_manip; PROCESS widget_manip; PROCESS logic_header.ttk; INCLUDE logout.ttk; templates = DBI.tie('reporter.stage2', 'id') reports = DBI.tie('reporter.stage3', 'id') rpt = {}; tmpl = {}; IF CGI.param('id'); rid = CGI.param('id'); rpt = reports.$rid; tid = rpt.stage2; tmpl = templates.$tid; END; WRAPPER html/html; INCLUDE header.ttk + navbar.ttk title="Reports"; WRAPPER html/body; IF CGI.param('action') == 'Schedule'; PROCESS schedule_stage3; ELSIF CGI.param('action') == 'Save'; PROCESS save_stage3; ELSIF CGI.param('action') == 'Run Now'; PROCESS save_stage3; ELSIF CGI.param('id'); PROCESS view_stage3; ELSE; PROCESS list_stage3s; END; END; INCLUDE footer.ttk; END; BLOCK schedule_stage3; WRAPPER form method='POST'; 'Run Date:'; INCLUDE text name='runtime' value='yyyy-mm-dd'; '
'; 'Optional Recurrence:'; INCLUDE text name='recurrence-count' value='0'; WRAPPER select name='recurrence-interval'; INCLUDE option value='days' content='Day(s)'; INCLUDE option value='weeks' content='Week(s)'; INCLUDE option value='months' content='Month(s)'; END; FOR p = CGI.param(); NEXT IF p == 'action'; NEXT IF p == 'runtime'; INCLUDE hidden name=p value=CGI.param(p); END; '
'; INCLUDE submit name='action' value='Save'; END; END; BLOCK list_stage3s; END; BLOCK save_stage3; stage2 = CGI.param('stage2'); runtime = CGI.param('runtime') OR 'now'; pub = CGI.param('publicreport') OR 'f'; owner = user.id(); p_obj = {}; FOR p = CGI.param(); logme([p,CGI.param(p)]); parts = p.split(':'); p1 = parts.0; p2 = parts.1; p3 = parts.2; p4 = parts.3; p5 = parts.4; p6 = parts.5; IF p6; IF p_obj.$p1.$p2.$p3.$p4.$p5.$p6.defined; IF p_obj.$p1.$p2.$p3.$p4.$p5.$p6.size > 1; p_obj.$p1.$p2.$p3.$p4.$p5.$p6.push(CGI.param(p)); ELSE; tmp = [ p_obj.$p1.$p2.$p3.$p4.$p5.$p6, CGI.param(p) ]; p_obj.$p1.$p2.$p3.$p4.$p5.$p6 = tmp; END; ELSE; p_obj.$p1.$p2.$p3.$p4.$p5.$p6 = CGI.param(p); END; ELSIF p5; IF p_obj.$p1.$p2.$p3.$p4.$p5.defined; IF p_obj.$p1.$p2.$p3.$p4.$p5.size > 1; p_obj.$p1.$p2.$p3.$p4.$p5.push(CGI.param(p)); ELSE; tmp = [ p_obj.$p1.$p2.$p3.$p4.$p5, CGI.param(p) ]; p_obj.$p1.$p2.$p3.$p4.$p5 = tmp; END; ELSE; p_obj.$p1.$p2.$p3.$p4.$p5 = CGI.param(p); END; ELSIF p4; IF p_obj.$p1.$p2.$p3.$p4.defined; IF p_obj.$p1.$p2.$p3.$p4.size > 1; p_obj.$p1.$p2.$p3.$p4.push(CGI.param(p)); ELSE; tmp = [ p_obj.$p1.$p2.$p3.$p4, CGI.param(p) ]; p_obj.$p1.$p2.$p3.$p4 = tmp; END; ELSE; p_obj.$p1.$p2.$p3.$p4 = CGI.param(p); END; ELSIF p3; IF p_obj.$p1.$p2.$p3.defined; IF p_obj.$p1.$p2.$p3.size > 1; p_obj.$p1.$p2.$p3.push(CGI.param(p)); ELSE; tmp = [ p_obj.$p1.$p2.$p3, CGI.param(p) ]; p_obj.$p1.$p2.$p3 = tmp; END; ELSE; p_obj.$p1.$p2.$p3 = CGI.param(p); END; ELSIF p2; IF p_obj.$p1.$p2.defined; IF p_obj.$p1.$p2.size > 1; p_obj.$p1.$p2.push(CGI.param(p)); ELSE; tmp = [ p_obj.$p1.$p2, CGI.param(p) ]; p_obj.$p1.$p2 = tmp; END; ELSE; p_obj.$p1.$p2 = CGI.param(p); END; ELSE; p_obj.$p = CGI.param(p); END; END; params = utils.perl2JSON( p_obj ); recurrence = '0 sec'; IF CGI.param('recurrence-count') > 0; recurrence = CGI.param('recurrence-count') _ ' ' _ CGI.param('recurrence-interval'); END; logme([stage2, params, owner, pub]); q = DBI.prepare( stage3_insert ); CALL q.execute(stage2, params, owner, pub, runtime, recurrence); FOR new_s3 = DBI.query("SELECT * FROM reporter.stage3_id_seq;"); tid = new_s3.last_value; INCLUDE view_stage3 rpt = reports.$tid; END; END; BLOCK view_stage3; logme(rpt.params); params = utils.JSON2perl( rpt.params ); s2_params = utils.JSON2perl( tmpl.params ); WRAPPER html/center; WRAPPER html/table style="border-collapse:collapse"; WRAPPER html/row; INCLUDE html/cell content="Report Name" style="border:solid gray 1px;"; INCLUDE html/cell content=params.reportname style="border:solid gray 1px;"; END; WRAPPER html/row; INCLUDE html/cell content="Based on Template" style="border:solid gray 1px;"; INCLUDE html/cell content=s2_params.templatename style="border:solid gray 1px;"; END; WRAPPER html/row; INCLUDE html/cell content="Creation Time" style="border:solid gray 1px;"; INCLUDE html/cell content=rpt.create_date style="border:solid gray 1px;"; END; WRAPPER html/row; INCLUDE html/cell content="Scheduled Run Time" style="border:solid gray 1px;"; INCLUDE html/cell content=rpt.runtime style="border:solid gray 1px;"; END; WRAPPER html/row; INCLUDE html/cell content="Recurrence Interval" style="border:solid gray 1px;"; INCLUDE html/cell content=rpt.recurrence style="border:solid gray 1px;"; END; END; END; '

'; type_map = { 'csv' => 'csv', 'excel' => 'xls', 'html' => 'html' }; WRAPPER html/center; 'Report Runs:'; run_q = DBI.prepare("SELECT * FROM reporter.output WHERE stage3 = ? ORDER BY queue_time DESC"); FOR run = run_q.execute(rpt.id); WRAPPER html/table style="border-collapse:collapse"; WRAPPER html/row; INCLUDE html/cell content="Current State" style="border:solid gray 1px;" width="20%"; WRAPPER html/cell style="border:solid gray 1px;"; run.state; IF run.state == 'complete'; '
'; FOR f = params.output_format.list; h = tmpl.stage1 _ '/' _ tmpl.id _ '/' _ rpt.id _ '/' _ run.id _ '/report-data.' _ type_map.$f; link(content=f, href=h); IF !loop.last; ' | '; END; END; END; END; END; WRAPPER html/row; INCLUDE html/cell content="Queue Time" style="border:solid gray 1px;"; INCLUDE html/cell content=run.queue_time style="border:solid gray 1px;"; END; IF run.run_time; WRAPPER html/row; INCLUDE html/cell content="Run Time" style="border:solid gray 1px;"; INCLUDE html/cell content=run.run_time style="border:solid gray 1px;"; END; END; IF run.complete_time; WRAPPER html/row; INCLUDE html/cell content="Complete Time" style="border:solid gray 1px;"; INCLUDE html/cell content=run.complete_time style="border:solid gray 1px;"; END; END; IF run.query; WRAPPER html/row; INCLUDE html/cell content="Query" style="border:solid gray 1px;"; INCLUDE html/cell content=run.query style="border:solid gray 1px;"; END; END; IF run.error; WRAPPER html/row; INCLUDE html/cell content="Error" style="border:solid gray 1px;"; INCLUDE html/cell content=run.error style="border:solid gray 1px;"; END; END; IF run.error_time; WRAPPER html/row; INCLUDE html/cell content="Error Time" style="border:solid gray 1px;"; INCLUDE html/cell content=run.error_time style="border:solid gray 1px;"; END; END; END; '

'; END; END; END; %]