font-size: 8pt;
}
+.oils_rpt_small_info_selector {
+ border: 1px solid blue;
+ background: #E0F0F0;
+ height: 80px;
+ overflow: scroll;
+ font-size: 8pt;
+ width: 12em;
+}
+
+
.oils_rpt_info_div {
text-align: center;
width: 300px;
document.captureEvents(Event.MOUSEMOVE);
document.onmousemove = setMousePos;
-
var cgi = new CGI();
fetchUser(cgi.param('ses'));
DOM.oils_rpt_user.appendChild(text(USER.usrname()));
oilsRptDebugEnabled = cgi.param('dbg');
if(oilsRptDebugEnabled) DEBUG = 1;
- DEBUG = 1;
+ oilsRptCurrentOrg = USER.ws_ou();
- oilsLoadRptTree(
+ oilsRptFetchOrgTree(
function() {
- hideMe(DOM.oils_rpt_tree_loading);
- unHideMe(DOM.oils_rpt_folder_table);
+ oilsLoadRptTree(
+ function() {
+ hideMe(DOM.oils_rpt_tree_loading);
+ unHideMe(DOM.oils_rpt_folder_table);
+ }
+ )
}
- )
+ );
}
function oilsRtpInitFolders() {
</div>
<div>
- <a class='oils_rpt_main_link' href='javascript:_l("oils_rpt_builder.xhtml");'>Build a New Report</a>
+ <a class='oils_rpt_main_link' href='javascript:_l("oils_rpt_builder.xhtml");'>Build a New Report Template</a>
</div>
<div id='oils_rpt_tree_loading'>
</tr>
<tr>
<td>Report Description:</td>
- <td><input type='text' id='oils_rpt_report_editor_name'/></td>
+ <td><textarea cols='45' rows='2' id='oils_rpt_report_editor_name'/></td>
</tr>
<tr><td colspan='2'><hr/></td></tr>
<tr>
<td>Choose a report folder as the destination: </td>
- <td id='oils_rpt_report_editor_dest_folder'/>
+ <td>
+ <div style='margin-bottom: 7px;'>
+ <span>Selected Folder: </span>
+ <b id='oils_rpt_report_editor_selected_folder'/>
+ </div>
+ <span id='oils_rpt_report_editor_dest_folder'/>
+ </td>
</tr>
<tr><td colspan='2'><hr/></td></tr>
<tr>
<div id='oils_rpt_folder_manager_div' class='hide_me' style='margin-top: 10px; text-align: center;'>
<select id='oils_rpt_folder_manager_actions'>
<option value='change_name'>Change folder name</option>
+ <option value='delete' id='oils_rpt_folder_manager_delete_opt'>Delete this folder</option>
<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>
Are you sure you wish to create new subfolder
</span>
+ <span class='hide_me' id='oils_rpt_folder_manager_delete_confirm'>
+ Are you sure you wish to delete this folder?
+ </span>
+
+ <span class='hide_me' id='oils_rpt_folder_cannot_delete'>
+ This folder may not be deleted because it is not empty.
+ </span>
+
</div>
+
/* generic folder window class */
oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
function oilsRptFolderWindow(type, folderId) {
+ this.init();
+ _debug("initted folderwindow with id "+this.id);
var node = oilsRptCurrentFolderManager.findNode(type, folderId);
- this.init2(node, type);
this.selector = DOM.oils_rpt_folder_contents_selector;
-}
-
-
-oilsRptFolderWindow.prototype.init2 = function(node, type) {
this.folderNode = node;
this.type = type;
- this.init();
}
DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou());
obj.myOrgSelector.draw();
break;
+ case 'delete':
+ obj.doFolderDelete();
}
}
var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
SESSION, this.type, this.folderNode.folder.id());
var obj = this;
+ removeChildren(obj.selector);
req.callback(
function(r) {
obj.fmTable = drawFMObjectTable(
if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
oilsRptUpdateFolder(folder, obj.type,
function(success) {
- if(success) oilsRptAlertSuccess();
+ if(success) {
+ oilsRptAlertSuccess();
+ oilsRptCurrentFolderManager.draw();
+ }
}
);
}
if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
oilsRptCreateFolder(folder, obj.type,
function(success) {
- if(success) oilsRptAlertSuccess();
+ if(success) {
+ oilsRptAlertSuccess();
+ oilsRptCurrentFolderManager.draw();
+ }
}
);
}
}
-
}
+oilsRptFolderWindow.prototype.doFolderDelete = function() {
+
+ var cache = oilsRptFolderNodeCache[this.type];
+ /* let's see if this folder has any children */
+ for( var c in cache )
+ if( cache[c].folder.parent() == this.folderNode.folder.id() )
+ return alertId('oils_rpt_folder_cannot_delete');
+
+ /* lets see if the folder has contents */
+ var req = new Request(OILS_RPT_FETCH_FOLDER_DATA,
+ SESSION, this.type, this.folderNode.folder.id());
+ var obj = this;
+ req.send();
+
+ req.callback(
+ function(r) {
+
+ var contents = r.getResultObject();
+ if( contents.length > 0 )
+ return alertId('oils_rpt_folder_cannot_delete');
+
+ if( confirmId('oils_rpt_folder_manager_delete_confirm') ) {
+ var req2 = new Request(OILS_RPT_DELETE_FOLDER,
+ SESSION, obj.type, obj.folderNode.folder.id());
+
+ req2.callback(
+ function(r2) {
+ var res = r2.getResultObject();
+ if( res == 1 ) {
+ oilsRptAlertSuccess();
+ oilsRptCurrentFolderManager.draw();
+ }
+ else alert('error: '+js2JSON(res));
+ }
+ );
+
+ req2.send();
+ }
+ }
+ );
+}
oilsRptSetSubClass('oilsRptFolderManager','oilsRptObject');
-function oilsRptFolderManager() {
+function oilsRptFolderManager() { this.init(); }
+
+oilsRptFolderManager.prototype.draw = function(auth) {
+
+ if(!auth) auth = SESSION;
+
this.folderTree = {};
- this.super.init();
this.tId = oilsNextId();
this.rId = oilsNextId();
this.oId = oilsNextId();
this.ownerFolders.template = {};
this.ownerFolders.report = {};
this.ownerFolders.output = {};
-}
-oilsRptFolderManager.prototype.draw = function(auth) {
+ removeChildren(DOM.oils_rpt_template_folder_tree);
+ removeChildren(DOM.oils_rpt_report_folder_tree);
+ removeChildren(DOM.oils_rpt_output_folder_tree);
+ removeChildren(DOM.oils_rpt_template_shared_folder_tree);
+ removeChildren(DOM.oils_rpt_report_shared_folder_tree);
+ removeChildren(DOM.oils_rpt_output_shared_folder_tree);
oilsRptTemplateFolderTree =
new SlimTree(
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);
+ _debug("creating folder node for "+folder.name()+" : id = "+
+ folder.id()+' treeId = '+id + ' window id = ' + node.folderWindow.id);
}
}
}
- id = this.findNode(type, folder.id()).treeId;
+ node = this.findNode(type, folder.id());
+ id = node.treeId;
if( folder.parent() )
pid = this.findNode(type, folder.parent()).treeId;
-
/*
if(!mine) {
if(!this.orgTrail[type][folder.share_with().id()]) {
fname = folder.name() + ' ('+folder.share_with().shortname()+')';
}
- var action = 'javascript:oilsRptObject.find('+
- node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
-
- _debug('adding node '+fname+' id = ' + id + ' pid = '+pid + ' parent = ' + folder.parent() );
+ 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);
function __setFolderCB(tree, id, action, node) {
var act;
if( action )
- act = function() { tree.toggle(id); action( node ); };
+ act = function() { action( node ); };
return act;
}
oilsRptParamEditor.prototype.draw = function() {
var params = this.report.gatherParams();
+ this.params = params;
if(!oilsRptParamEditor.row)
oilsRptParamEditor.row =
DOM.oils_rpt_param_editor_tbody.removeChild(
$n(DOM.oils_rpt_param_editor_tbody, 'tr'));
+ removeChildren(this.tbody);
_debug(formatJSON(js2JSON(params)));
for( var p = 0; p < params.length; p++ ) {
var par = params[p];
var row = oilsRptParamEditor.row.cloneNode(true);
$n(row, 'object').appendChild(text(oilsRptMakeLabel(par.relation)));
- $n(row, 'column').appendChild(text(par.column.colname));
+ $n(row, 'column').appendChild(par.column.colname);
+ $n(row, 'transform').appendChild(text(par.column.transform));
$n(row, 'action').appendChild(text(par.op));
- this.buildWidget(par, $n(row, 'widget')).draw();
+ par.widget = this.buildWidget(par, $n(row, 'widget'));
+ par.widget.draw();
this.tbody.appendChild(row);
}
}
oilsRptParamEditor.prototype.buildWidget = function(param, node) {
- _debug("building widget with param op "+ param.op);
+ var cls = param.relation.split(/-/).pop();
+ _debug("building widget with param class:" + cls + ' col: '+param.column.colname + ' op: '+ param.op);
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});
+ }
+
default:
return new oilsRptWidget({node:node});
}
}
+//oilsRptParamEditor.prototype.get = function(param, node) {
+
+
<table id='oils_rpt_param_editor_table'>
<thead>
- <tr><td>Object</td><td>Column</td><td>Action</td><td>User Params</td></tr>
+ <tr>
+ <td>Object</td>
+ <td>Column</td>
+ <td>Transform</td>
+ <td>Action</td>
+ <td>User Params</td>
+ </tr>
</thead>
<tbody id='oils_rpt_param_editor_tbody'>
<tr name='tr'>
<td name='object'/>
<td name='column'/>
+ <td name='transform'/>
<td name='action'/>
<td name='widget'/>
</tr>
oilsRptSetSubClass('oilsRptReportEditor', 'oilsRptObject');
var oilsRptReportEditorFolderTree;
-function oilsRptReportEditor(rptObject) {
+function oilsRptReportEditor(rptObject, folderWindow) {
var tmpl = rptObject.templateObject;
var rpt = rptObject.reportObject;
this.folderWindow = folderWindow;
DOM.oils_rpt_report_editor_dest_folder,
'oilsRptReportEditorFolderTree',
'Report Folders',
- function(node) { obj.selectedFolder = node; });
+ function(node) {
+ appendClear(DOM.oils_rpt_report_editor_selected_folder, node.folder.name());
+ obj.selectedFolder = node; });
}
return '::PARAM'+ (oilsRptID2++);
}
+function oilsRptFetchOrgTree(callback) {
+ var req = new Request(OILS_RPT_FETCH_ORG_TREE);
+ req.callback(
+ function(r) {
+ globalOrgTree = r.getResultObject();
+ if( callback ) callback();
+ }
+ );
+ req.send();
+}
+
/*
function oilsRptCacheObject(obj) {
/* -------------------------------------------- */
function oilsRptObject() {}
-oilsRptObject.prototype.init = function() {
- oilsRptObject.cache(this);
+oilsRptObject.prototype.init = function(obj) {
+ if(!obj) obj = this;
+ oilsRptObject.cache(obj);
}
oilsRptObject.objectCache = {};
oilsRptObject.find = function(id) {
/* UI tree */
var oilsRptTree;
+var oilsRptCurrentOrg;
+
var oilsRptTemplateFolderTree;
var oilsRptReportFolderTree;
var oilsRptOutputFolderTree;
var OILS_RPT_FETCH_FOLDER_DATA = 'open-ils.reporter:open-ils.reporter.folder_data.retrieve';
var OILS_RPT_FETCH_TEMPLATE = 'open-ils.reporter:open-ils.reporter.template.retrieve';
var OILS_RPT_UPDATE_FOLDER = 'open-ils.reporter:open-ils.reporter.folder.update';
+var OILS_RPT_DELETE_FOLDER = 'open-ils.reporter:open-ils.reporter.folder.delete';
var OILS_RPT_CREATE_FOLDER = 'open-ils.reporter:open-ils.reporter.folder.create';
var OILS_RPT_FETCH_ORG_FULL_PATH = 'open-ils.reporter:open-ils.reporter.org_unit.full_path';
+var OILS_RPT_FETCH_ORG_TREE = 'open-ils.actor:open-ils.actor.org_tree.retrieve';
var oilsRptCurrentFolderManager;
oilsRptWidget.OILS_RPT_OPERATION_WIDGET = 1;
function oilsRptWidget(args) {
- this.init(args);
+ this.initWidget(args);
this.dest = elem('input',{type:'text'});
}
-oilsRptWidget.prototype.init = function(args) {
+oilsRptWidget.prototype.initWidget = function(args) {
if(!args) return;
- this.super.init();
+ this.init();
this.node = args.node;
this.type = args.type;
this.action = args.action;
oilsRptSetSubClass('oilsRptMultiInputWidget', 'oilsRptWidget');
function oilsRptMultiInputWidget(args) {
- this.init(args);
+ this.initInputWidget(args);
}
-oilsRptMultiInputWidget.prototype.init = function(args) {
+oilsRptMultiInputWidget.prototype.initInputWidget = function(args) {
if(!args) return;
- this.super.init(args);
+ this.initWidget(args);
this.count = (args.count) ? args.count : 2;
this.dest = [];
for( var i = 0; i < this.count; i++ )
oilsRptSetSubClass('oilsRptMultiWidget', 'oilsRptWidget');
function oilsRptMultiWidget(args) {
- this.init(args);
+ this.initMultiWidget(args);
}
-oilsRptMultiWidget.prototype.init = function(args) {
+oilsRptMultiWidget.prototype.initMultiWidget = function(args) {
if(!args) return;
- this.super.init(args);
+ this.initWidget(args);
this.dest = elem('select',
- {multiple:'multiple','class':'oils_rpt_info_selector'});
- this.addButton = elem('button',null, 'Add');
- this.addButton = this.getSourceCollector();
+ {multiple:'multiple','class':'oils_rpt_small_info_selector'});
+
+ var obj = this;
+
+ this.addButton = elem('input',{type:'submit',value:"Add"})
+ this.addButton.onclick = this.getSourceCollector();
+ this.delButton = elem('input',{type:'submit',value:"Del"})
+ this.delButton.onclick = function(){obj.removeSelected()};
}
oilsRptMultiWidget.prototype.getValue = function() {
}
oilsRptMultiWidget.prototype.removeSelected = function() {
- oilsDeleteSelectedItems(this.dest);
+ oilsDelSelectedItems(this.dest);
}
oilsRptMultiWidget.prototype.addItem = function(name, val) {
- for( var i = 0; i < this.dest.options.length; i++ )
+ for( var i = 0; i < this.dest.options.length; i++ ) {
if( this.dest.options[i].value == val )
return;
+ }
+
insertSelectorVal(this.dest, -1, name, val);
}
this.source = src;
}
-oilsRptMultiWidget.prototype.draw = function() {
+oilsRptMultiWidget.prototype.drawMultiWidget = function() {
appendClear(this.node, this.source);
- appendClear(this.node, this.dest);
+ this.node.appendChild(elem('br'))
+ this.node.appendChild(this.addButton);
+ this.node.appendChild(this.delButton);
+ this.node.appendChild(elem('br'))
+ this.node.appendChild(this.dest);
}
oilsRptSetSubClass('oilsRptInputMultiWidget', 'oilsRptMultiWidget');
function oilsRptInputMultiWidget(args) {
- this.init(args);
+ this.initInputMultiWidget(args);
}
-oilsRptInputMultiWidget.prototype.init = function(args) {
+oilsRptInputMultiWidget.prototype.initInputMultiWidget = function(args) {
if(!args) return;
- this.super.init(args);
+ this.initMultiWidget(args);
this.setSource(elem('input',{type:'text'}));
}
+/*
oilsRptInputMultiWidget.prototype.addItem = function(name, val) {
- this.super.addItem(name, val);
+ //this.addItem(name, val);
this.source.value = "";
this.source.focus();
}
+*/
oilsRptInputMultiWidget.prototype.getSourceCollector = function() {
var obj = this;
oilsRptSetSubClass('oilsRptSelectorMultiWidget', 'oilsRptMultiWidget');
function oilsRptSelectorMultiWidget(args) {
- this.init(args);
+ this.initSelectorMultiWidget(args);
}
-oilsRptSelectorMultiWidget.prototype.init = function(args) {
+oilsRptSelectorMultiWidget.prototype.initSelectorMultiWidget = function(args) {
if(!args) return;
- this.super.init(args);
+ this.initMultiWidget(args);
this.setSource(
- elem('select',{multiple:multiple, 'class':'oils_rpt_info_selector'}));
+ elem('select',{multiple:'multiple', 'class':'oils_rpt_small_info_selector'}));
}
oilsRptSelectorMultiWidget.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);
+ for( var i = 0; i < obj.source.options.length; i++ ) {
+ if( obj.source.options[i].selected )
+ obj.addItem(obj.source.options[i].innerHTML,
+ obj.source.options[i].value);
+ }
}
}
oilsRptSetSubClass('oilsRptRemoteWidget', 'oilsRptSelectorMultiWidget');
function oilsRptRemoteWidget(args) {
- this.init(args);
+ this.initRemoteWidget(args);
}
-oilsRptRemoteWidget.prototype.init = function(args) {
+oilsRptRemoteWidget.prototype.initRemoteWidget = function(args) {
if(!args) return;
- this.super.init(args);
+ this.initSelectorMultiWidget(args);
this.selector = args.selector;
}
oilsRptRemoteWidget.prototype.draw = function() {
this.fetch();
- this.super.draw();
+ //this.draw();
}
oilsRptRemoteWidget.prototype.setFetch = function(func) {
oilsRptMyOrgsWidget.prototype.drawWidget = function(orglist) {
var sel = this.node;
- _debug('here');
for( var i = 0; i < orglist.length; i++ ) {
var org = orglist[i];
- _debug('here + ' + org.shortname());
var opt = insertSelectorVal( this.node, -1,
org.name(), org.id(), null, findOrgDepth(org) );
if( org.id() == this.orgid )
return getSelectorVal(this.node);
}
+/* --------------------------------------------------------------------- */
+
+oilsRptSetSubClass('oilsRptOrgMultiSelect','oilsRptSelectorMultiWidget');
+function oilsRptOrgMultiSelect(args) {
+ this.initSelectorMultiWidget(args);
+}
+
+oilsRptOrgMultiSelect.prototype.draw = function(org) {
+ if(!org) org = globalOrgTree;
+ var opt = insertSelectorVal( this.source, -1,
+ org.shortname(), org.id(), null, findOrgDepth(org) );
+ if( org.id() == oilsRptCurrentOrg )
+ opt.selected = true;
+ if( org.children() ) {
+ for( var c = 0; c < org.children().length; c++ )
+ this.draw(org.children()[c]);
+ }
+ 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);
+}
+*/