core report types are broken out into a top level report type dropdown
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 21 Sep 2006 19:02:22 +0000 (19:02 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Thu, 21 Sep 2006 19:02:22 +0000 (19:02 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6181 dcc99617-32d9-48b4-a31d-7c20da2025e4

Open-ILS/web/reports/oils_rpt.css
Open-ILS/web/reports/oils_rpt.js
Open-ILS/web/reports/oils_rpt_builder.js
Open-ILS/web/reports/oils_rpt_builder.xhtml
Open-ILS/web/reports/oils_rpt_tree.js
Open-ILS/web/reports/oils_rpt_utils.js
Open-ILS/web/reports/oils_rpt_vars.js

index 78a5cbc..49bf2ea 100644 (file)
@@ -8,11 +8,14 @@ body { font-size: 9pt; font-family: Helvetica, Arial, Tahoma, sans-serif; font-s
        font-size: 10pt;
 }
 
-#oils_rpt_name_div {
+#oils_rpt_name_table {
        vertical-align: middle;
-       padding: 5px;
        background: #E0F0F0; 
        margin-bottom: 20px;
+       width: 100%;
+}
+#oils_rpt_name_table td {
+       padding: 5px;
 }
 
 #oils_rpt_table {
@@ -127,6 +130,7 @@ button {
 
 .oils_rpt_tree_link_ref {
        color: #A52A2A;
+       /*color: darkblue;*/
        font-family: courier; 
 }
 
index dd3f9de..0ce14c4 100644 (file)
@@ -1,17 +1,20 @@
 
 function oilsInitReports() {
+       oilsRptIdObjects();
+
        /* tell FF to capture mouse movements */
        document.captureEvents(Event.MOUSEMOVE);
        document.onmousemove = setMousePos;
 
        var cgi = new CGI();
        fetchUser(cgi.param('ses'));
-       $('oils_rpt_user').appendChild(text(USER.usrname()));
+       DOM.oils_rpt_user.appendChild(text(USER.usrname()));
        oilsRptDebugEnabled = cgi.param('dbg');
 }
 
 function oilsCleanupReports() {
        try {oilsRptDebugWindow.close();} catch(e) {}
+       DOM = null;
 }
 
 
index 3fc3f44..d823913 100644 (file)
@@ -3,17 +3,24 @@
   */
 function oilsInitReportBuilder() {
        oilsInitReports();
-       oilsRpt = new oilsReport();
-       oilsRptDisplaySelector  = $('oils_rpt_display_selector');
-       oilsRptFilterSelector   = $('oils_rpt_filter_selector');
+       oilsReportBuilderReset();
        oilsDrawRptTree(
                function() { 
-                       hideMe($('oils_rpt_tree_loading')); 
-                       unHideMe($('oils_rpt_table')); 
+                       hideMe(DOM.oils_rpt_tree_loading); 
+                       unHideMe(DOM.oils_rpt_table); 
                }
        );
 }
 
+function oilsReportBuilderReset() {
+       oilsRpt = new oilsReport();
+       oilsRptDisplaySelector  = DOM.oils_rpt_display_selector;
+       oilsRptFilterSelector   = DOM.oils_rpt_filter_selector;
+       removeChildren(oilsRptDisplaySelector);
+       removeChildren(oilsRptFilterSelector);
+       oilsRptDebug();
+}
+
 /* returns just the column name */
 function oilsRptPathCol(path) {
        var parts = path.split(/-/);
@@ -201,9 +208,9 @@ function oilsDelSelectedItems(sel) {
 
 /* hides the different field editor tabs */
 function oilsRptHideEditorDivs() {
-       hideMe($('oils_rpt_tform_div'));
-       hideMe($('oils_rpt_filter_div'));
-       hideMe($('oils_rpt_agg_filter_div'));
+       hideMe(DOM.oils_rpt_tform_div);
+       hideMe(DOM.oils_rpt_filter_div);
+       hideMe(DOM.oils_rpt_agg_filter_div);
 }
 
 
@@ -217,43 +224,47 @@ function oilsRptDrawDataWindow(path) {
        var field = grep(oilsIDL[cls].fields, function(f){return (f.name==col);})[0];
        _debug("setting update data window for column "+col+' on class '+cls);
 
-       var div = $('oils_rpt_column_editor');
+       var div = DOM.oils_rpt_column_editor;
+       /* set a preliminary top position so the page won't bounce around */
+       div.setAttribute('style','top:'+oilsMouseX+'px');
+
+       /* unhide the div so we can determine the dimensions */
        unHideMe(div);
+
        /* don't let them see the floating div until the position is fully determined */
        div.style.visibility='hidden'; 
 
        oilsRptDrawTransformWindow(path, col, cls, field);
 
-       $('oils_rpt_column_editor_close_button').onclick = function(){hideMe(div);};
+       DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
        buildFloatingDiv(div, 600);
-       div.style.visibility='visible';
 
-       /* focus after all the shifting to make sure the div is at least visible */
-       $('oils_rpt_tform_label_input').focus();
+       /* now let them see it */
+       div.style.visibility='visible';
 
        /* give the tab links behavior */
-       $('oils_rpt_tform_tab').onclick = 
-               function(){oilsRptHideEditorDivs();unHideMe($('oils_rpt_tform_div'))};
-       $('oils_rpt_filter_tab').onclick = 
-               function(){oilsRptHideEditorDivs();unHideMe($('oils_rpt_filter_div'))};
-       $('oils_rpt_agg_filter_tab').onclick = 
-               function(){oilsRptHideEditorDivs();unHideMe($('oils_rpt_agg_filter_div'))};
+       DOM.oils_rpt_tform_tab.onclick = 
+               function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_tform_div)};
+       DOM.oils_rpt_filter_tab.onclick = 
+               function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_filter_div)};
+       DOM.oils_rpt_agg_filter_tab.onclick = 
+               function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_agg_filter_div)};
 }
 
 
 /* draws the transform window */
 function oilsRptDrawTransformWindow(path, col, cls, field) {
-       appendClear($('oils_rpt_tform_label'), text(oilsRptMakeLabel(path)));
-       $('oils_rpt_tform_label_input').value = oilsRptMakeLabel(path);
+       appendClear(DOM.oils_rpt_tform_label, text(oilsRptMakeLabel(path)));
+       DOM.oils_rpt_tform_label_input.value = oilsRptMakeLabel(path);
 
-       $('oils_rpt_tform_submit').onclick = 
-               function(){ oilsAddRptDisplayItem(path, $('oils_rpt_tform_label_input').value) };
+       DOM.oils_rpt_tform_submit.onclick = 
+               function(){ oilsAddRptDisplayItem(path, DOM.oils_rpt_tform_label_input.value) };
 
-       $('oils_rpt_tform_label_input').focus();
-       $('oils_rpt_tform_label_input').select();
+       DOM.oils_rpt_tform_label_input.focus();
+       DOM.oils_rpt_tform_label_input.select();
 
        if( field.datatype == 'timestamp' )
-               unHideMe($('oils_rpt_tform_date_div'));
+               unHideMe(DOM.oils_rpt_tform_date_div);
 }
 
 
index 729c5a6..527c08b 100644 (file)
                        <tbody>
                                <tr>
                                        <td id='oils_rpt_table_left_td' align='left'>
-                                               <div id='oils_rpt_name_div'>
-                                                       <span style='padding-right: 10px;'>Report Name: </span>
-                                                       <input size='32' onchange="oilsRpt.name=this.value"/>
-                                               </div>
+                                               <table id='oils_rpt_name_table'><tbody>
+                                                       <tr>
+                                                               <td width='20%'>Report Name: </td>
+                                                               <td><input size='32' onchange="oilsRpt.name=this.value"/></td>
+                                                       </tr><tr>
+                                                               <td>Report Type: </td>
+                                                               <td><select id='oils_rpt_builder_type_selector'/></td>
+                                                       </tr>
+                                               </tbody></table>
                                                <div id='oils_rpt_tree_div'>
                                                </div>
                                        </td>
                </div>
 
 
+               <span class='hide_me' id='oils_rpt_confirm_new_report'>
+                       This will destroy the report you are currently constructing.  
+                       Are you sure you wish to do this?
+               </span>
+
        </body>
 </html>
 
index 27e5a56..c053452 100644 (file)
@@ -117,24 +117,37 @@ function oilsRptParseFields( node ) {
 
 /* shoves the IDL into a UI tree */
 function oilsRenderRptTree(callback) {
+       var sel = DOM.oils_rpt_builder_type_selector;
 
-       oilsRptTree = new SlimTree( $('oils_rpt_tree_div'), 'oilsRptTree' );
-       var treeId = oilsNextId();
-       oilsRptTree.addNode( treeId, -1, nodeText('oils_rpt_tree_label'));
        for( var i in oilsIDL ) {
                var data = oilsIDL[i];
                if( !data.core ) continue;
-               var subTreeId   = oilsNextId();
-               oilsRptTree.addNode( subTreeId, treeId, data.label );
-               oilsRenderSubTree( data, subTreeId, 'Display Data', '' );
+               insertSelectorVal( sel, -1, data.label, data.name );
        }
+
+       sel.onchange = function() { 
+               if(oilsRpt.def.select.length > 0)
+                       if(!confirm(DOM.oils_rpt_confirm_new_report.innerHTML)) 
+                               return;
+               oilsRptRenderClassTree(getSelectorVal(sel)) 
+               oilsReportBuilderReset();
+       };
+
+       sel.onchange();
        if( callback ) callback();
 }
 
+function oilsRptRenderClassTree(cls) {
+       var data = oilsIDL[cls];
+       removeChildren(DOM.oils_rpt_tree_div);
+       oilsRptTree = new SlimTree( DOM.oils_rpt_tree_div, 'oilsRptTree' );
+       var treeId = oilsNextId();
+       oilsRptTree.addNode( treeId, -1, data.label );
+       oilsRenderSubTree( data, treeId, '' );
+}
 
-function oilsRenderSubTree( data, subTreeId, rootName, path ) {
 
-       _debug("rendering subtree with full path "+path);
+function oilsRenderSubTree( data, subTreeId, path ) {
 
        for( var f = 0; f < data.fields.length; f++ ) {
 
@@ -173,7 +186,7 @@ function oilsAddLinkTree( parentId, classname, fullpath ) {
 
        oilsLinkTreeCache[parentId].push(classname);
        var data = grep( oilsIDL, function(i) { return ( i.name == classname ); })[0];
-       var sid = oilsRenderSubTree( data, parentId, '', fullpath );
+       var sid = oilsRenderSubTree( data, parentId, fullpath );
        oilsRptTree.open(parentId);
 }
 
index 8fc2d7b..8f89378 100644 (file)
@@ -93,13 +93,6 @@ function buildFloatingDiv(div, width) {
 
 function mergeObjects( src, obj ) {
        for( var i in obj ) {
-               _debug("merging object element: "+i + ' : ' + src[i]);
-               if( i =='from' ) {
-                       _debug('------------------------------');
-                       _debug(formatJSON(js2JSON(src[i])));
-                       _debug(formatJSON(js2JSON(obj[i])));
-                       _debug('------------------------------');
-               }
                if( typeof obj[i] == 'string' ) {
                        src[i] = obj[i];
                } else {
@@ -109,3 +102,16 @@ function mergeObjects( src, obj ) {
        }
 }
 
+
+/* scours the doc for elements with IDs.  When it finds one,
+       it grabs the dom node and sets a reference to the node at DOM[id]; */
+function oilsRptIdObjects(node) {
+       if(!node) node = document.documentElement;
+       if( node.nodeType != 1 ) return;
+       var id = node.getAttribute('id');
+       if( id ) eval("DOM."+id+"=$('"+id+"');");
+       var children = node.childNodes;
+       for( var c = 0; c < children.length; c++ ) 
+               oilsRptIdObjects(children[c]);
+}
+
index f4e4979..9e2ed39 100644 (file)
@@ -1,3 +1,5 @@
+/* dom nodes with IDs are inserted into DOM as DOM[id] */
+var DOM = {};
 
 /* JS object version of the IDL */
 var oilsIDL;