[%
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')
output = DBI.tie('reporter.output', 'id')
rpt = {};
tmpl = {};
IF CGI.param('output');
oid = CGI.param('output');
out = output.$oid;
rid = out.stage3;
rpt = reports.$rid;
tid = rpt.stage2;
tmpl = templates.$tid;
END;
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') == 'delete_stage3';
PROCESS delete_stage3;
ELSIF CGI.param('action') == 'delete_output';
PROCESS delete_output;
ELSIF CGI.param('action') == 'rerun';
PROCESS rerun;
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='minutes' content='Minutes(s)'; # for testing
INCLUDE option value='hours' content='Hours(s)'; # for testing
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';
FOR pval = CGI.param(p);
INCLUDE hidden name=p value=pval;
END;
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;");
rid = new_s3.last_value;
rpt = reports.$rid;
tid = rpt.stage2;
tmpl = templates.$tid;
INCLUDE view_stage3;
END;
END;
BLOCK delete_stage3;
q = DBI.prepare( 'DELETE FROM reporter.stage3 WHERE id = ?' );
CALL q.execute(rpt.id);
END;
BLOCK delete_output;
q = DBI.prepare( 'DELETE FROM reporter.output WHERE id = ?' );
CALL q.execute(out.id);
INCLUDE view_stage3;
END;
BLOCK rerun;
q = DBI.prepare( 'UPDATE reporter.stage3 SET rerun = TRUE WHERE id = ?' );
CALL q.execute(rpt.id);
INCLUDE view_stage3;
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;
WRAPPER html/row;
INCLUDE html/cell content="Actions" style="border:solid gray 1px;";
WRAPPER html/cell style="border:solid gray 1px;";
INCLUDE anchor content='Refresh' href=CGI.url('-path', 1) _ '?id=' _ rpt.id;
' ';
IF user.id == rpt.owner;
INCLUDE anchor content='Run again' href=CGI.url('-path', 1) _ '?action=rerun&id=' _ rpt.id;
' ';
INCLUDE anchor content='Delete' href=CGI.url('-path', 1) _ '?action=delete_stage3&id=' _ rpt.id;
' ';
END;
END;
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;
IF run.complete_time || run.error_time;
WRAPPER html/row;
INCLUDE html/cell content="Actions" style="border:solid gray 1px;";
WRAPPER html/cell style="border:solid gray 1px;";
IF user.id == rpt.owner;
INCLUDE anchor content='Delete' href=CGI.url('-path', 1) _ '?action=delete_output&output=' _ run.id;
' ';
END;
END;
END;
END;
END;
'
';
END;
END;
END;
%]