my $class = 'rrf';
$class = 'rtf' if $type eq 'template';
+ $class = 'rof' if $type eq 'output';
my $flesh = {flesh => 1,flesh_fields => { $class => ['owner', 'share_with']}};
my $meth = "search_reporter_${type}_folder";
api_name => 'open-ils.reporter.report.create',
method => 'create_report');
sub create_report {
- my( $self, $conn, $auth, $report ) = @_;
+ my( $self, $conn, $auth, $report, $schedule ) = @_;
my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
return $e->die_event unless $e->checkauth;
return $e->die_event unless $e->allowed('RUN_REPORTS');
$report->owner($e->requestor->id);
- my $tmpl = $e->create_reporter_report($report)
+ my $rpt = $e->create_reporter_report($report)
or return $e->die_event;
+ $schedule->report($rpt->id);
+ $schedule->runner($e->requestor->id);
+ $e->create_reporter_schedule($schedule) or return $e->die_event;
$e->commit;
- return $tmpl;
+ return $rpt;
}
__PACKAGE__->register_method(
+ api_name => 'open-ils.scheduleer.schedule.create',
+ method => 'create_schedule');
+sub create_schedule {
+ my( $self, $conn, $auth, $schedule ) = @_;
+ my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
+ return $e->die_event unless $e->checkauth;
+ return $e->die_event unless $e->allowed('RUN_REPORTS');
+ my $sched = $e->create_reporter_schedule($schedule)
+ or return $e->die_event;
+ $e->commit;
+ return $sched;
+}
+
+__PACKAGE__->register_method(
api_name => 'open-ils.reporter.template.retrieve',
method => 'retrieve_template');
sub retrieve_template {
__PACKAGE__->register_method(
+ api_name => 'open-ils.reporter.report.update',
+ method => 'update_report');
+sub update_report {
+ my( $self, $conn, $auth, $report ) = @_;
+ my $e = new_rstore_editor(authtoken=>$auth, xact=>1);
+ return $e->die_event unless $e->checkauth;
+ return $e->die_event unless $e->allowed('RUN_REPORTS');
+ my $r = $e->retrieve_reporter_report($report->id)
+ or return $e->die_event;
+ if( $r->owner ne $e->requestor->id ) {
+ $e->rollback;
+ return 0;
+ }
+ $e->update_reporter_report($report)
+ or return $e->die_event;
+ $e->commit;
+ return 1;
+}
+
+
+__PACKAGE__->register_method(
api_name => 'open-ils.reporter.folder.update',
method => 'update_folder');
sub update_folder {
<tr>
<th>Run on:</th>
<td>
- <input name="sched_start_date" type="text" size="10"/>
+ <input id="oils_rpt_param_editor_sched_start_date" type="text" size="10"/>
at
- <select name="sched_start_hour">
+ <select id='oils_rpt_param_editor_sched_start_hour'>
<option value="00:00">Midnight</option>
<option value="01:00">1 AM</option>
<option value="02:00">2 AM</option>
</tr>
<tr>
<th>Send completion notification to this Email address:</th>
- <td><input name="sched_email" type="text" size="25"/></td>
+ <td><input id="oils_rpt_param_editor_sched_email" type="text" size="25"/></td>
</tr>
<tr>
<th>Choose a folder to store this report's output: </th>
<option value='create_sub_folder'>Create a new sub-folder</option>
<option id='oils_rpt_folder_manager_share_opt' value='share'>Share this folder</option>
<option id='oils_rpt_folder_manager_unshare_opt' value='unshare'>Hide (un-share) this folder</option>
+
+ <option class='hide_me'>Disable recurrance</option><!-- XXX -->
+
</select>
<input id='oils_rpt_folder_manager_actions_submit' type='submit' value='Go'/>
oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
function oilsRptFolderWindow(type, folderId) {
this.init();
- _debug("initted folderwindow with id "+this.id);
var node = oilsRptCurrentFolderManager.findNode(type, folderId);
this.selector = DOM.oils_rpt_folder_contents_selector;
this.folderNode = node;
oilsRptFolderWindow.prototype.draw = function() {
+
+ _debug(this.folderNode.folder.owner().id() + ' : ' + USER.id());
+
+ if( this.folderNode.folder.owner().id() != USER.id() )
+ hideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
+ else unHideMe(DOM.oils_rpt_folder_window_contents_new_template.parentNode);
+
unHideMe(DOM.oils_rpt_folder_window_contents_div);
hideMe(DOM.oils_rpt_folder_manager_div);
hideMe(DOM.oils_rpt_top_folder);
if( folder.shared() == 't' )
folder.share_with( obj.myOrgSelector.getValue() );
- _debug("Creating new folder: " + js2JSON(folder));
-
if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
oilsRptCreateFolder(folder, obj.type,
function(success) {
var node = { folder : folder, treeId : id };
oilsRptFolderNodeCache[type][folder.id()] = node;
node.folderWindow = new oilsRptFolderWindow(type, folder.id())
+ /*
_debug("creating folder node for "+folder.name()+" : id = "+
folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
+ */
}
}
var action = 'javascript:oilsRptObject.find('+node.folderWindow.id+').draw();';
+ /*
_debug('adding node '+fname+' id = ' + id + ' pid = '
+pid + ' parent = ' + folder.parent() + ' folder-window = ' + node.folderWindow.id );
+ */
tree.addNode(id, pid, fname, action);
tree.close(pid);
}
+oilsRptParamEditor.prototype.recur = function() {
+ var cb = $n(DOM.oils_rpt_recur_editor_table,'oils_rpt_recur');
+ return (cb.checked) ? 't' : 'f';
+}
+
+oilsRptParamEditor.prototype.recurInterval = function() {
+ var count = getSelectorVal($n(DOM.oils_rpt_recur_editor_table,'oils_rpt_recur_count'));
+ var intvl = getSelectorVal($n(DOM.oils_rpt_recur_editor_table,'oils_rpt_recur_interval_type'));
+ return count+''+intvl;
+}
+
oilsRptParamEditor.prototype.draw = function() {
var params = this.report.gatherParams();
this.params = params;
switch(param.op) {
case 'in':
case 'not in':
-
/* we have to special case org selection for now,
until we have generic object fetch support */
if( cls == 'aou' ) {
return new oilsRptOrgMultiSelect({node:node});
} else {
- return new oilsRptOrgMultiSelect({node:node});
+ return new oilsRptInputMultiWidget({node:node});
}
default:
<option>24</option>
</select>
<select name="oils_rpt_recur_interval_type">
+ <!--
<option value="hours">Hour(s)</option>
+ -->
<option value="days">Day(s)</option>
<option value="weeks">Week(s)</option>
<option value="months">Month(s)</option>
obj.selectedFolder = node; });
+ oilsRptBuildFolder(
+ 'output',
+ DOM.oils_rpt_output_dest_folder,
+ 'oilsRptReportEditorOutputTree',
+ 'Output Folders',
+ function(node) {
+ appendClear(DOM.oils_rpt_output_selected_folder, node.folder.name());
+ obj.selectedOutputFolder = node; });
+
+
var obj = this;
DOM.oils_rpt_report_editor_save.onclick = function(){obj.save();}
+ DOM.oils_rpt_param_editor_sched_email.value = USER.email();
+ DOM.oils_rpt_param_editor_sched_start_date.value = mkYearMonDay();
}
oilsRptReportEditor.prototype.save = function() {
var report = new rr();
+
report.owner( USER.id() );
report.template( this.template.id() );
report.folder( this.selectedFolder.folder.id() );
report.name( DOM.oils_rpt_report_editor_name.value );
report.description( DOM.oils_rpt_report_editor_desc.value );
+ report.recur(this.paramEditor.recur());
+ report.recurance(this.paramEditor.recurInterval());
- report.recur('f');
+ /* collect the param data */
var data = {};
-
for( var p in this.paramEditor.params ) {
var par = this.paramEditor.params[p];
_debug("adding report param "+par.key+" to report data");
data[par.key] = par.widget.getValue();
}
- data = js2JSON(data);
+ data = js2JSON(data);
_debug("complete report data = "+data);
report.data(data);
- debug("Built report:\n"+js2JSON(report));
+ _debug("Built report:\n"+js2JSON(report));
+
+
+ var dt = DOM.oils_rpt_param_editor_sched_start_date.value;
+ if(!dt || !dt.match(/^\d{4}-\d{2}-\d{2}$/) ) {
+ /* for now.. make this better in the future */
+ alert('invalid start date - YYYY-MM-DD');
+ return;
+ }
+ var hour = getSelectorVal(DOM.oils_rpt_param_editor_sched_start_hour);
+ var time = dt +'T'+hour+':00';
+ _debug("built run_time "+time);
- var req = new Request(OILS_RPT_CREATE_REPORT, SESSION, report );
+ var schedule = new rs();
+ schedule.folder(this.selectedOutputFolder.folder.id());
+ schedule.email(DOM.oils_rpt_param_editor_sched_email.value);
+ schedule.run_time(time);
+
+ _debug("Built schedule:\n"+js2JSON(schedule));
+
+ var req = new Request(OILS_RPT_CREATE_REPORT, SESSION, report, schedule );
req.callback(
function(r) {
var res = r.getResultObject();
req.send();
}
+
function oilsRptUpdateFolder(folder, type, callback) {
- _debug("updating folder " + folder.id() + ' : ' + folder.name());
+ _debug("updating folder " + js2JSON(folder));
var req = new Request(OILS_RPT_UPDATE_FOLDER, SESSION, type, folder);
if( callback ) {
}
function oilsRptCreateFolder(folder, type, callback) {
- _debug("creating folder "+ folder.name());
+ _debug("creating folder "+ js2JSON(folder));
var req = new Request(OILS_RPT_CREATE_FOLDER, SESSION, type, folder);
if( callback ) {
req.callback(
var OILS_RPT_TEMPLATE_HAS_RPTS = 'open-ils.reporter:open-ils.reporter.template_has_reports';
var OILS_RPT_CREATE_REPORT = 'open-ils.reporter:open-ils.reporter.report.create';
var OILS_RPT_CREATE_TEMPLATE = 'open-ils.reporter:open-ils.reporter.template.create';
+var OILS_RPT_CREATE_SCHEDULE = 'open-ils.reporter:open-ils.reporter.schedule.create';
+var OILS_RPT_UPDATE_REPORT = 'open-ils.reporter:open-ils.reporter.report.update';
+var OILS_RPT_UPDATE_TEMPLATE = 'open-ils.reporter:open-ils.reporter.template.update';
var oilsRptCurrentFolderManager;
/* ----------------------------------------------------------- */
+/* multiple input boxes */
oilsRptSetSubClass('oilsRptMultiInputWidget', 'oilsRptWidget');
function oilsRptMultiInputWidget(args) {
this.initInputWidget(args);
if( this.dest.options[i].value == val )
return;
}
-
insertSelectorVal(this.dest, -1, name, val);
}
this.setSource(elem('input',{type:'text'}));
}
-/*
-oilsRptInputMultiWidget.prototype.addItem = function(name, val) {
- //this.addItem(name, val);
- this.source.value = "";
- this.source.focus();
+oilsRptInputMultiWidget.prototype.draw = function() {
+ this.drawMultiWidget();
}
-*/
oilsRptInputMultiWidget.prototype.getSourceCollector = function() {
var obj = this;
}
}
+
/* ----------------------------------------------------------- */
oilsRptSetSubClass('oilsRptSelectorMultiWidget', 'oilsRptMultiWidget');
this.drawMultiWidget();
}
-/*
-oilsRptOrgMultiSelectWidget.prototype.getSourceCollector = function() {
- var obj = this;
- return function() {
- for( var i = 0; i < obj.source.options.length; i++ )
- obj.addItem(obj.source.options.name, obj.source.options.value);
- }
-}
-*/
-/*
-oilsRptOrgMultiSelect.prototype.getValue = function() {
- return getSelectedList(this.select);
-}
-*/