added some folder actions and framework, more to come
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 29 Sep 2006 17:01:52 +0000 (17:01 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Fri, 29 Sep 2006 17:01:52 +0000 (17:01 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6265 dcc99617-32d9-48b4-a31d-7c20da2025e4

16 files changed:
Open-ILS/web/reports/oils_rpt.css
Open-ILS/web/reports/oils_rpt.js
Open-ILS/web/reports/oils_rpt.xhtml
Open-ILS/web/reports/oils_rpt_builder.js
Open-ILS/web/reports/oils_rpt_editor.xhtml
Open-ILS/web/reports/oils_rpt_folder_manager.xhtml [new file with mode: 0644]
Open-ILS/web/reports/oils_rpt_folder_window.js
Open-ILS/web/reports/oils_rpt_folder_window.xhtml
Open-ILS/web/reports/oils_rpt_folders.js
Open-ILS/web/reports/oils_rpt_param_editor.js
Open-ILS/web/reports/oils_rpt_param_editor.xhtml
Open-ILS/web/reports/oils_rpt_report_editor.js
Open-ILS/web/reports/oils_rpt_tree.js
Open-ILS/web/reports/oils_rpt_utils.js
Open-ILS/web/reports/oils_rpt_vars.js
Open-ILS/web/reports/oils_rpt_widget.js

index 1b3a513..c435d9f 100644 (file)
@@ -5,6 +5,9 @@ table { border-collapse: collapse; }
 .welcome_box { position:absolute; top: 5px; right: 5px; }
 
 
+/* override some slimtree settings */
+.fm_table thead tr { background: #F0F0F0; }
+
 .oils_rpt_main_link {
        padding: 5px;
        font-size: 10pt;
@@ -174,7 +177,7 @@ button {
 
 .oils_rpt_folder_window {
        border: 1px solid blue; 
-       background: #E0F0F0; 
+       background: #E6F0F0; 
        text-align: left;
 }
 
@@ -185,6 +188,7 @@ button {
 
 #oils_rpt_folder_window_contents_div {
        width: 100%;
+       margin-top: 15px;
 }
 
 .oils_rpt_param_table thead td {
@@ -216,6 +220,9 @@ button {
 
 #oils_rpt_param_editor_table {
        width: 100%;
+}
+
+#oils_rpt_param_editor_table td {
        border: 1px solid #808080;
 }
 
@@ -251,3 +258,16 @@ button {
 #oils_rpt_editor_div {
        width: 100%;
 }
+
+
+
+.oils_rpt_table_row_borders { width: 100%; }
+.oils_rpt_table_row_borders tr { border: 1px solid #808080; }
+.oils_rpt_table_row_borders td { padding: 5px; }
+
+.oils_rpt_generic_table { width: 100%; }
+.oils_rpt_generic_table td { border: 1px solid #808080; padding: 5px; }
+
+
+
+
index 8722d3a..de9d902 100644 (file)
@@ -5,12 +5,21 @@ function oilsInitReports() {
        document.captureEvents(Event.MOUSEMOVE);
        document.onmousemove = setMousePos;
 
-       DEBUG = 1;
 
        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;
+
+       oilsLoadRptTree(
+               function() {
+                       hideMe(DOM.oils_rpt_tree_loading); 
+                       unHideMe(DOM.oils_rpt_folder_table);
+               }
+       )
 }
 
 function oilsRtpInitFolders() {
@@ -22,6 +31,8 @@ function oilsRtpInitFolders() {
 function oilsCleanupReports() {
        try {oilsRptDebugWindow.close();} catch(e) {}
        DOM = null;
+       oilsRptObjectCache = null;
+       oilsRptObject.objectCache =  null;
 }
 
 
index 2385247..9db1786 100644 (file)
                        <a class='oils_rpt_main_link' href='javascript:_l("oils_rpt_builder.xhtml");'>Build a New Report</a>
                </div>
 
+               <div id='oils_rpt_tree_loading'>
+                       Loading...
+               </div>
 
-               <table id='oils_rpt_folder_table'>
+               <table id='oils_rpt_folder_table' class='hide_me'>
                        <tbody>
                                <tr>
                                        <td id='oils_rpt_folder_table_left_td'>
                                        <td id='oils_rpt_folder_table_right_td' class='hide_me'>
                                                <div class='oils_rpt_folder_window'>
 
-                                                       <table class='oils_rpt_tab_table'><tbody>
+                                                       <table class='oils_rpt_tab_table' id='oils_rpt_folder_manager_tab_table'><tbody>
                                                                <tr>
-                                                                       <td width='33%'>
+                                                                       <td width='50%'>
                                                                                <a id='oils_rpt_folder_window_manage_tab' href='javascript:void(0);'>Manage Folder Contents</a></td>
-                                                                       <td width='33%'>
-                                                                               <a id='oils_rpt_folder_window_edit_tab' href='javascript:void(0);'>Edit This Folder</a></td>
-                                                                       <td width='33%'>
-                                                                       <a id='oils_rpt_child_folders_tab' href='javascript:void(0);'>Add New Folders</a></td>
+                                                                       <td width='50%'>
+                                                                               <a id='oils_rpt_folder_window_edit_tab' href='javascript:void(0);'>Manage Folder</a></td>
                                                                </tr>
                                                        </tbody></table>
 
@@ -59,7 +60,8 @@
                                                                <tbody>
                                                                        <tr>
                                                                                <td>
-                                                                                       <span><b id='oils_rpt_folder_name_label'/>: created by </span><b id='oils_rpt_folder_creator_label'/>
+                                                                                       <span><b id='oils_rpt_folder_name_label'/>: 
+                                                                                       created by </span> <b id='oils_rpt_folder_creator_label'/>
                                                                                </td>
                                                                        </tr>
                                                                </tbody>
@@ -68,6 +70,9 @@
                                                        <div>
                                                                <!--#include virtual="oils_rpt_folder_window.xhtml"-->
                                                        </div>
+                                                       <div>
+                                                               <!--#include virtual="oils_rpt_folder_manager.xhtml"-->
+                                                       </div>
                                                </div>
                                        </td>
 
                                </tr>
                        </tbody>
                </table>
-
+               
+               <span class='hide_me' id='oils_rpt_generic_success'>
+                       Action Succeeded
+               </span>
 
        </body>
 </html>
index 791771c..7682637 100644 (file)
@@ -48,23 +48,6 @@ function oilsRptBuildCalendars() {
 */
 
 
-/* creates a label "path" based on the column path */
-function oilsRptMakeLabel(path) {
-       var parts = path.split(/-/);
-       var str = '';
-       for( var i = 0; i < parts.length; i++ ) {
-               if(i%2 == 0) {
-                       if( i == 0 )
-                               str += oilsIDL[parts[i]].label;
-               } else {
-                       var f = oilsRptFindField(oilsIDL[parts[i-1]], parts[i]);
-                       str += ":"+f.label;
-               }
-       }
-       return str;
-}
-
-
 /* adds an item to the display window */
 function oilsAddRptDisplayItem(path, name, tform, params) {
        if( ! oilsAddSelectorItem(oilsRptDisplaySelector, path, name) ) 
index 82a9fa0..9d21506 100644 (file)
@@ -1,5 +1,5 @@
 <div id='oils_rpt_editor_div'>
-       <table>
+       <table width='100%'>
                <tbody>
                        <tr>
                                <td>Template 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'/>
+                       </tr>
+                       <tr><td colspan='2'><hr/></td></tr>
+                       <tr>
                                <td colspan='2'>
                                        <!--#include virtual="oils_rpt_param_editor.xhtml"-->
                                </td>
diff --git a/Open-ILS/web/reports/oils_rpt_folder_manager.xhtml b/Open-ILS/web/reports/oils_rpt_folder_manager.xhtml
new file mode 100644 (file)
index 0000000..d608c7a
--- /dev/null
@@ -0,0 +1,55 @@
+<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='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>
+       </select>
+       <input id='oils_rpt_folder_manager_actions_submit' type='submit' value='Go'/>
+
+       <div id='oils_rpt_folder_manager_action_div' style='margin: 15px;'>
+
+               <div id='oils_rpt_folder_manager_change_name_div'>
+                       Enter new name: 
+                       <input id='oils_rpt_folder_manager_name_input' type='text'/>
+                       <input type='submit' value='Submit' id='oils_rpt_folder_manager_change_name_submit'/>
+               </div>
+
+               <div id='oils_rpt_folder_manager_create_sub'>
+                       <table class='oils_rpt_generic_table'>
+                               <tbody>
+                                       <tr>
+                                               <td>Folder Name:</td>
+                                               <td><input id='oils_rpt_folder_manager_sub_name' type='text'/></td>
+                                       </tr>
+                                       <tr>
+                                               <td>Share this folder:</td>
+                                               <td>
+                                                       <select id='oils_rpt_folder_manager_sub_shared'>
+                                                               <option value='no'>Do not share</option>
+                                                               <option value='yes'>Share</option>
+                                                       </select>
+                                               </td>
+                                       </tr>
+                                       <tr>
+                                               <td>Share with:</td>
+                                               <td><select id='oils_rpt_folder_manager_sub_lib_picker'/></td>
+                                       </tr>
+                                       <tr><td colspan='2' align='center'>
+                                               <input type='submit' value='Create Sub Folder' 
+                                                       id='oils_rpt_folder_manager_sub_lib_create'/>
+                                       </td></tr>
+                               </tbody>
+                       </table>
+               </div>
+
+       </div>
+
+       <span class='hide_me' id='oils_rpt_folder_manager_change_name_confirm'>
+               Are you sure you wish to change this folder's name?
+       </span>
+       <span class='hide_me' id='oils_rpt_folder_manager_new_confirm'>
+               Are you sure you wish to create new subfolder
+       </span>
+
+</div>
index 3fad8dd..fb50590 100644 (file)
@@ -1,5 +1,4 @@
 
-
 function oilsRptFetchTemplate(id) {
        var t = oilsRptGetCache('rt', id);
        if(!t) {
@@ -12,7 +11,6 @@ function oilsRptFetchTemplate(id) {
 }
 
 
-
 /* generic folder window class */
 oilsRptSetSubClass('oilsRptFolderWindow', 'oilsRptObject');
 function oilsRptFolderWindow(type, folderId) { 
@@ -30,6 +28,19 @@ oilsRptFolderWindow.prototype.init2 = function(node, type) {
 
 
 oilsRptFolderWindow.prototype.draw = function() {
+       unHideMe(DOM.oils_rpt_folder_window_contents_div);
+       hideMe(DOM.oils_rpt_folder_manager_div);
+
+       DOM.oils_rpt_folder_window_manage_tab.onclick = function() {
+               unHideMe(DOM.oils_rpt_folder_window_contents_div);
+               hideMe(DOM.oils_rpt_folder_manager_div);
+       }
+       DOM.oils_rpt_folder_window_edit_tab.onclick = function() {
+               hideMe(DOM.oils_rpt_folder_window_contents_div);
+               unHideMe(DOM.oils_rpt_folder_manager_div);
+       }
+
+       this.setFolderEditActions();
 
        hideMe(DOM.oils_rpt_template_folder_new_report);
        unHideMe(DOM.oils_rpt_folder_table_right_td);
@@ -49,8 +60,54 @@ oilsRptFolderWindow.prototype.draw = function() {
                        unHideMe(opt);
                else hideMe(opt);
        }
+
+       this.drawEditActions();
+
+}
+
+oilsRptFolderWindow.prototype.drawEditActions = function() {
+       if( this.folderNode.folder.owner().id() != USER.id() )
+               hideMe(DOM.oils_rpt_folder_manager_tab_table);
+       else
+               unHideMe(DOM.oils_rpt_folder_manager_tab_table);
+
+       if( isTrue(this.folderNode.folder.shared())) {
+               DOM.oils_rpt_folder_manager_share_opt.disabled = true;
+               DOM.oils_rpt_folder_manager_unshare_opt.disabled = false;
+       } else {
+               DOM.oils_rpt_folder_manager_share_opt.disabled = false;
+               DOM.oils_rpt_folder_manager_unshare_opt.disabled = true;
+       }
+
+       this.hideFolderActions();
+       var obj = this;
+
+       DOM.oils_rpt_folder_manager_actions_submit.onclick = function() {
+               var act = getSelectorVal(DOM.oils_rpt_folder_manager_actions);
+               _debug("doing folder action: " + act);
+               obj.hideFolderActions();
+               switch(act) {
+                       case 'change_name':
+                               unHideMe(DOM.oils_rpt_folder_manager_change_name_div);
+                               break;
+                       case 'create_sub_folder':
+                               unHideMe(DOM.oils_rpt_folder_manager_create_sub);
+                               obj.myOrgSelector = new oilsRptMyOrgsWidget(
+                                       DOM.oils_rpt_folder_manager_sub_lib_picker, USER.ws_ou());
+                               obj.myOrgSelector.draw();
+                               break;
+               }
+       }
+
+}
+
+
+oilsRptFolderWindow.prototype.hideFolderActions = function() {
+       hideMe(DOM.oils_rpt_folder_manager_change_name_div);
+       hideMe(DOM.oils_rpt_folder_manager_create_sub);
 }
 
+
 oilsRptFolderWindow.prototype.doFolderAction = function() {
        var objs = this.fmTable.getSelected();
        if( objs.length == 0 ) 
@@ -61,7 +118,7 @@ oilsRptFolderWindow.prototype.doFolderAction = function() {
                case 'create_report' :
                        hideMe(DOM.oils_rpt_folder_table_right_td);
                        unHideMe(DOM.oils_rpt_folder_table_alt_td);
-                       new oilsRptReportEditor(new oilsReport(objs[0]));
+                       new oilsRptReportEditor(new oilsReport(objs[0]), this);
                        break;
        }
 }
@@ -98,138 +155,56 @@ oilsRptFolderWindow.prototype.fetchFolderData = function(callback) {
 }
 
 
-/*
-oilsRptTemplateFolderWindow.prototype = new oilsRptFolderWindow();
-oilsRptTemplateFolderWindow.prototype.constructor = oilsRptTemplateFolderWindow;
-oilsRptTemplateFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
-function oilsRptTemplateFolderWindow(node) { this.init2(node, 'template'); }
-
-oilsRptTemplateFolderWindow.prototype.draw = function() {
-       this.openWindow();
-       this.fetchFolderData('template', DOM.oils_rpt_folder_contents_selector, oilsRptTemplateCache);
-       var obj = this;
-
-       DOM.oils_rpt_template_folder_window_go.onclick = function() {
-               var action = getSelectorVal(DOM.oils_rpt_template_action_selector);
-               var template = getSelectorVal(DOM.oils_rpt_template_selector);
-               switch(action) {
-                       case 'create_report':
-                               obj.createReport(template);
-                               break;
-               }
-       }
-}
-
-
-oilsRptTemplateFolderWindow.prototype.createReport = function(templateId) {
-       unHideMe(DOM.oils_rpt_template_folder_new_report);
-       DOM.oils_rpt_template_folder_new_report_next.onclick = function() {
-               var name = DOM.oils_rpt_template_folder_new_report_name.value;
-               var desc = DOM.oils_rpt_template_folder_new_report_desc.value;
-               var rpt = new rr();
-               rpt.template(templateId);
-               rpt.name(name);
-               rpt.description(desc);
-               DOM.oils_rpt_template_folder_window_contents_div.appendChild(
-                       DOM.oils_rpt_param_editor_div);
-               unHideMe(DOM.oils_rpt_param_editor_div);
-               var e = new oilsRptParamEditor(
-                       new oilsReport(oilsRptFetchTemplate(templateId), rpt),
-                       DOM.oils_rpt_param_editor_tbody);
-               e.draw();
-       }
+oilsRptFolderWindow.prototype.setSelected = function(folderNode) {
+       this.selectedFolder = folderNode;
 }
 
+oilsRptFolderWindow.prototype.setFolderEditActions = function() {
+       var folder = this.folderNode.folder;
 
-
-oilsRptReportFolderWindow.prototype = new oilsRptFolderWindow();
-oilsRptReportFolderWindow.prototype.constructor = oilsRptReportFolderWindow;
-oilsRptReportFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
-function oilsRptReportFolderWindow(node) { this.init2(node, 'report'); }
-
-oilsRptReportFolderWindow.prototype.draw = function() {
-       this.openWindow();
        var obj = this;
-       this.fetchFolderData('report', 
-               DOM.oils_rpt_report_selector, oilsRptReportCache, 
-                       function() {
-                               appendClear(DOM.oils_rpt_report_description, 
-                                       text(obj.getSelectedReport().description()));
+       DOM.oils_rpt_folder_manager_name_input.value = folder.name();
+       DOM.oils_rpt_folder_manager_change_name_submit.onclick = function() {
+               var name = DOM.oils_rpt_folder_manager_name_input.value;
+               if(name) {
+                       folder.name( name );
+                       if(confirmId('oils_rpt_folder_manager_change_name_confirm')) {
+                               oilsRptUpdateFolder(folder, obj.type,
+                                       function(success) {
+                                               if(success) oilsRptAlertSuccess();
+                                       }
+                               );
                        }
-       );
-
-       DOM.oils_rpt_report_folder_window_go.onclick = function() {
-               var rpt = obj.getSelectedReport();
-               var tmpl = oilsRptFetchTemplate(rpt.template());
-               obj.oilsReport = new oilsReport( tmpl, rpt );
-       };
-}
-
-oilsRptReportFolderWindow.prototype.drawParamEditor = function(params) {
-       _debug('drawing params: \n' + formatJSON(js2JSON(params)));
-}
-
-
-var oilsRptReportFolderSelectParamRow;
-oilsRptReportFolderWindow.prototype.drawSelectParamEditor = function(params) {
-       if(params.length == 0) return;
-       //unHideMe(DOM.oils_rpt_report_folder_window_display_params_table);
-
-       //var tbody = $n(DOM.oils_rpt_report_folder_window_display_params_table,'tbody');
-       //if(!oilsRptReportFolderSelectParamRow)
-               //oilsRptReportFolderSelectParamRow = tbody.removeChild($n(tbody,'tr'));
-//
-       //for( var p = 0; p < params.length; p++ ) {
-//
-               //var row = oilsRptReportFolderSelectParamRow.cloneNode(true);
-               //var par = params[p];
-               //$n(row, 'column').appendChild(text(par.column.colname));
-               //$n(row, 'transform').appendChild(text(par.column.transform));
-//
-               //if( typeof par.value == 'string' ) {
-                       //unHideMe($n(row, 'param'));
-                       //$n(row, 'param').value = par.value;
-               //} else {
-                       //switch(par.transform) {
-                               //case 'substring':
-                                       //unHideMe($n(row,'string_substring_widget'));
-                                       //break;
-                       //}
-               //}
-               //tbody.appendChild(row);
-       //}
-}
-
-oilsRptReportFolderWindow.prototype.drawWhereParamEditor = function(params) {
-}
-
-oilsRptReportFolderWindow.prototype.drawHavingParamEditor = function(params) {
-}
-
-
-
-oilsRptReportFolderWindow.prototype.getSelectedReport = function() {
-       return oilsRptReportCache[getSelectorVal(DOM.oils_rpt_report_selector)];
-}
-
-oilsRptReportFolderWindow.prototype.getSelectedAction = function() {
-       return getSelectorVal(DOM.oils_rpt_report_selector, force);
-}
+               }
+       }
 
+       DOM.oils_rpt_folder_manager_sub_lib_create.onclick = function() {
+               var folder;
 
+               if( obj.type == 'report' ) folder = new rrf();
+               if( obj.type == 'template' ) folder = new rtf();
+               if( obj.type == 'output' ) folder = new rof();
 
+               folder.owner(USER.id());
+               folder.parent(obj.folderNode.folder.id());
+               folder.name(DOM.oils_rpt_folder_manager_sub_name.value);
+               var shared = getSelectorVal(DOM.oils_rpt_folder_manager_sub_shared);
+               folder.shared( (shared == 'yes') ? 't' : 'f');
+               if( folder.shared() == 't' )
+                       folder.share_with( obj.myOrgSelector.getValue() );
 
+               _debug("Creating new folder: " + js2JSON(folder));
 
-oilsRptOutputFolderWindow.prototype = new oilsRptFolderWindow();
-oilsRptOutputFolderWindow.prototype.constructor = oilsRptOutputFolderWindow;
-oilsRptOutputFolderWindow.baseClass = oilsRptFolderWindow.prototype.constructor;
-function oilsRptOutputFolderWindow(node) { this.init2(node, 'output'); }
+               if(confirm(DOM.oils_rpt_folder_manager_new_confirm.innerHTML + ' "'+folder.name()+'"')) {
+                       oilsRptCreateFolder(folder, obj.type,
+                               function(success) {
+                                       if(success) oilsRptAlertSuccess();
+                               }
+                       );
+               }
+       }
 
-oilsRptOutputFolderWindow.prototype.draw = function() {
-       this.hideWindows();
-       this.openWindow(null);
 }
-*/
 
 
 
index 02cd681..a1899b4 100644 (file)
                        </tr>
                </tbody>
        </table>
-
-       <!--
-       <table id='oils_rpt_report_folder_window_display_params_table' class='hide_me oils_rpt_param_table'>
-
-               <thead>
-                       <tr><td colspan='3' align='center'>Display Transforms</td></tr>
-                       <tr><td>Column</td><td>Transform</td><td>Parameters</td></tr>
-               </thead>
-
-               <tbody name='tbody'>
-                       <tr name='tr'>
-                               <td name='column'/>
-                               <td name='transform'/>
-                               <td>
-                                       <input name='param' type='text' class='hide_me'/>
-
-                                       <div widget='1' name='string_substring_widget' class='hide_me'>
-                                               <span style='padding-left: 5px;'>Offset: </span>
-                                               <input name='string_substring_offset' size='3' value='1'/>
-                                               <span style='padding-left: 5px;'>Length: </span>
-                                       <input name='string_substring_length' size='3' value='1'/>
-                                       </div>
-
-                               </td>
-                       </tr>
-               </tbody>
-       </table>
-       -->
-
 </div>
 
index 7adeca2..6366f20 100644 (file)
@@ -14,10 +14,11 @@ function oilsRptFolderManager() {
        this.stId = oilsNextId();
        this.srId = oilsNextId();
        this.soId = oilsNextId();
-       this.orgTrail = {};
-       this.orgTrail.template = {};
-       this.orgTrail.report = {};
-       this.orgTrail.output = {};
+
+       this.ownerFolders = {};
+       this.ownerFolders.template = {};
+       this.ownerFolders.report = {};
+       this.ownerFolders.output = {};
 }
 
 oilsRptFolderManager.prototype.draw = function(auth) {
@@ -95,11 +96,11 @@ oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
 
        folders = folders.sort(
                function(a,b) {
-                       var asw = a.share_with().id();
-                       var bsw = b.share_with().id();
-                       if( asw ) asw = findOrgDepth(findOrgUnit(asw));
+                       var asw = a.share_with();
+                       var bsw = b.share_with();
+                       if( asw ) asw = findOrgDepth(findOrgUnit(asw.id()));
                        else asw = -1;
-                       if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw));
+                       if( bsw ) bsw = findOrgDepth(findOrgUnit(bsw.id()));
                        else bsw = -1;
                        if( asw < bsw ) return 1;
                        if( asw > bsw ) return -1;
@@ -114,6 +115,7 @@ oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
                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);
        }
 
 
@@ -159,10 +161,12 @@ oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
                                }
                }
 
+               id = this.findNode(type, folder.id()).treeId;
                if( folder.parent() ) 
                        pid = this.findNode(type, folder.parent()).treeId;
 
 
+               /*
                if(!mine) {
                        if(!this.orgTrail[type][folder.share_with().id()]) {
                                tree.addNode(id, pid, folder.share_with().shortname());
@@ -175,11 +179,33 @@ oilsRptFolderManager.prototype.drawFolders = function(type, folders) {
                                id = oilsNextId();
                        }
                }
+               */
+
+               var fname = folder.name();
+
+               if(!mine) {
+                       fname = folder.name() + ' ('+folder.share_with().shortname()+')';
+                       if(!this.ownerFolders[type][folder.owner().id()]) {
+                               tree.addNode(id, pid, folder.owner().usrname());
+                               tree.close(pid);
+                               pid = id;
+                               id = oilsNextId();
+                               this.ownerFolders[type][folder.owner().id()] = pid;
+                       } else {
+                               pid = this.ownerFolders[type][folder.owner().id()];
+                               id = oilsNextId();
+                       }
+               } else {
+                       if(isTrue(folder.shared()))
+                               fname = folder.name() + ' ('+folder.share_with().shortname()+')';
+               }
 
                var action = 'javascript:oilsRptObject.find('+
                        node.folderWindow.id+').draw();'+treename+'.toggle("'+id+'");';
-               _debug('adding node '+folder.name()+' pid = '+pid);
-               tree.addNode(id, pid, folder.name(), action);
+
+               _debug('adding node '+fname+' id = ' + id + ' pid = '+pid + ' parent = ' + folder.parent() );
+
+               tree.addNode(id, pid, fname, action);
                tree.close(pid);
        }
 }
@@ -194,4 +220,40 @@ oilsRptFolderManager.prototype.findNode = function(type, id) {
 
 
 
+/* this only works if the initial folder tree has been drawn 
+       if defined, "action" must be a function pointer that takes the
+       folder node as the param */
+var __someid;
+function oilsRptBuildFolder(type, node, treeVar, rootName, action) {
+       removeChildren(node);
+       var tree = new SlimTree(node, treeVar);
+       this.treeId = oilsNextId();
+       tree.addNode(this.treeId, -1, rootName);
+
+       __someid = oilsNextId();
+
+       var cache = oilsRptFolderNodeCache[type];
+
+       for( var c in cache ) {
+               var tid = cache[c].treeId + __someid;
+               var pid = this.treeId;
+               var f = cache[c].folder;
+
+               if(f.parent()) {
+                       /* find the parent's tree id so we can latch on to it */
+                       var pnode = cache[f.parent()];
+                       var pid = pnode.treeId + __someid;
+               }
+
+               tree.addNode(tid, pid, f.name(), __setFolderCB(tree, tid, action, cache[c]));
+       }
+       eval(treeVar +' = tree;');
+}
+
+function __setFolderCB(tree, id, action, node) {
+       var act;
+       if( action ) 
+               act = function() { tree.toggle(id);     action( node ); };
+       return act;
+}
 
index 833dc47..5bdc4f0 100644 (file)
@@ -18,6 +18,7 @@ oilsRptParamEditor.prototype.draw = function() {
        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, 'action').appendChild(text(par.op));
                this.buildWidget(par, $n(row, 'widget')).draw();
index 4449d4f..9012279 100644 (file)
@@ -5,10 +5,11 @@
 
        <table id='oils_rpt_param_editor_table'>
                <thead>
-                       <tr><td>Column</td><td>Action</td><td>User Params</td></tr>
+                       <tr><td>Object</td><td>Column</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='action'/>
                                <td name='widget'/>
index e9f5530..59615a5 100644 (file)
@@ -1,7 +1,9 @@
 oilsRptSetSubClass('oilsRptReportEditor', 'oilsRptObject');
+var oilsRptReportEditorFolderTree;
 function oilsRptReportEditor(rptObject) {
        var tmpl = rptObject.templateObject;
        var rpt = rptObject.reportObject;
+       this.folderWindow = folderWindow;
 
        appendClear(DOM.oils_rpt_report_editor_template_name, tmpl.name());
        appendClear(DOM.oils_rpt_report_editor_template_creator, tmpl.owner().usrname());
@@ -14,4 +16,15 @@ function oilsRptReportEditor(rptObject) {
        this.paramEditor = new oilsRptParamEditor(
                rptObject, DOM.oils_rpt_param_editor_tbody);
        this.paramEditor.draw();
+
+       var obj = this;
+       oilsRptBuildFolder(
+               'report',
+               DOM.oils_rpt_report_editor_dest_folder,
+               'oilsRptReportEditorFolderTree',
+               'Report Folders',
+               function(node) { obj.selectedFolder = node; });
 }
+
+
+
index c67e814..fe8895c 100644 (file)
@@ -2,7 +2,7 @@ var oilsIDLCache = {};
 
 /* fetchs and draws the report tree */
 function oilsDrawRptTree(callback) {
-       oilsLoadRptTree(callback);
+       oilsLoadRptTree(function(){oilsRenderRptTree(callback)});
 }
 
 /* fetches the IDL XML */
@@ -52,7 +52,8 @@ function oilsParseRptTree(IDL, callback) {
                oilsIDL[id] = obj;
        }
 
-       oilsRenderRptTree(callback);
+       if( callback ) callback();
+       //oilsRenderRptTree(callback);
 }
 
 /* parses the links and fields portion of the IDL */
index a58d24b..d3c8013 100644 (file)
@@ -14,6 +14,7 @@ function oilsRptNextParam() {
 }
 
 
+/*
 function oilsRptCacheObject(obj) {
        var id = oilsNextId();
        oilsRptObjectCache[id] = obj;
@@ -23,6 +24,7 @@ function oilsRptCacheObject(obj) {
 function oilsRptFindObject(id) {
        return oilsRptObjectCache[id];
 }
+*/
 
 function oilsRptCacheObject(type, obj, id) {
        if( !oilsRptObjectCache[type] )
@@ -74,6 +76,23 @@ function oilsRptPathRel(path) {
        return parts.join('-');
 }
 
+/* creates a label "path" based on the column path */
+function oilsRptMakeLabel(path) {
+       var parts = path.split(/-/);
+       var str = '';
+       for( var i = 0; i < parts.length; i++ ) {
+               if(i%2 == 0) {
+                       if( i == 0 )
+                               str += oilsIDL[parts[i]].label;
+               } else {
+                       var f = oilsRptFindField(oilsIDL[parts[i-1]], parts[i]);
+                       str += ":"+f.label;
+               }
+       }
+       return str;
+}
+
+
 
 
 function oilsRptResetParams() {
@@ -205,3 +224,44 @@ function oilsRptSetSubClass(cls, parent) {
        eval(str);
 }
 
+
+function oilsRptUpdateFolder(folder, type, callback) {
+
+       _debug("updating folder " + folder.id() + ' : ' + folder.name());
+
+       var req = new Request(OILS_RPT_UPDATE_FOLDER, SESSION, type, folder);
+       if( callback ) {
+               req.callback( 
+                       function(r) {
+                               if( r.getResultObject() == 1 )
+                                       callback(true);
+                               else callback(false);
+                       }
+               );
+               req.send();
+       } else {
+               req.send(true);
+               return req.result();
+       }
+}
+
+function oilsRptCreateFolder(folder, type, callback) {
+       _debug("creating folder "+ folder.name());
+       var req = new Request(OILS_RPT_CREATE_FOLDER, SESSION, type, folder);
+       if( callback ) {
+               req.callback( 
+                       function(r) {
+                               if( r.getResultObject() > 0 )
+                                       callback(true);
+                               else callback(false);
+                       }
+               );
+               req.send();
+       } else {
+               req.send(true);
+               return req.result();
+       }
+}
+
+function oilsRptAlertSuccess() { alertId('oils_rpt_generic_success'); }
+
index 48ead71..5abc46f 100644 (file)
@@ -53,6 +53,9 @@ var oilsRptCurrentFilterOpManager;
 var OILS_RPT_FETCH_FOLDERS = 'open-ils.reporter:open-ils.reporter.folder.visible.retrieve';
 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_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 oilsRptCurrentFolderManager;
 
index 4d53e89..0e910cd 100644 (file)
@@ -174,6 +174,40 @@ oilsRptRemoteWidget.prototype.setFetch = function(func) {
 }
 
 
+/* --------------------------------------------------------------------- */
+
+/* standalone org widget */
+function oilsRptMyOrgsWidget(node, orgid) {
+       this.node = node;
+       this.orgid = orgid;
+}
+
+oilsRptMyOrgsWidget.prototype.draw = function() {
+       var req = new Request(OILS_RPT_FETCH_ORG_FULL_PATH, this.orgid);
+       var obj = this;
+       req.callback(
+               function(r) { obj.drawWidget(r.getResultObject()); }
+       );
+       req.send();
+}
+
+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 )
+                       opt.selected = true;
+       }
+}
+
+oilsRptMyOrgsWidget.prototype.getValue = function() {
+       return getSelectorVal(this.node);
+}
+