better management for batch folder item deletions, early thoughts on order-by handling
authorerickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 4 Oct 2006 21:02:55 +0000 (21:02 +0000)
committererickson <erickson@dcc99617-32d9-48b4-a31d-7c20da2025e4>
Wed, 4 Oct 2006 21:02:55 +0000 (21:02 +0000)
git-svn-id: svn://svn.open-ils.org/ILS/trunk@6385 dcc99617-32d9-48b4-a31d-7c20da2025e4

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

index 7374c97..dda5812 100644 (file)
@@ -196,7 +196,7 @@ button {
 
 #oils_rpt_folder_window_contents_div {
        width: 100%;
-       margin-top: 15px;
+       margin-top: 5px;
 }
 
 .oils_rpt_param_table thead td {
index ecfb417..cba0efd 100644 (file)
                        </tbody>
                </table>
                
-               <span class='hide_me' id='oils_rpt_generic_success'>
-                       Action Succeeded
-               </span>
-
-
-
-
        </body>
 </html>
 
index 87df973..53020cf 100644 (file)
@@ -22,10 +22,11 @@ function oilsReportBuilderReset() {
        oilsRpt.name = n;
        oilsRptDisplaySelector  = DOM.oils_rpt_display_selector;
        oilsRptFilterSelector   = DOM.oils_rpt_filter_selector;
-       oilsRptHavingSelector= DOM.oils_rpt_agg_filter_selector;
+       oilsRptHavingSelector   = DOM.oils_rpt_agg_filter_selector;
        removeChildren(oilsRptDisplaySelector);
        removeChildren(oilsRptFilterSelector);
        removeChildren(oilsRptHavingSelector);
+       //removeChildren(oilsRptOrderBySelector);
        oilsRptResetParams();
 }
 
@@ -523,6 +524,7 @@ function oilsRptHideEditorDivs() {
        hideMe(DOM.oils_rpt_tform_div);
        hideMe(DOM.oils_rpt_filter_div);
        hideMe(DOM.oils_rpt_agg_filter_div);
+       hideMe(DOM.oils_rpt_order_by_div);
 }
 
 
@@ -553,6 +555,7 @@ function oilsRptDrawDataWindow(path) {
        oilsRptDrawTransformWindow(path, col, cls, field);
        oilsRptDrawFilterWindow(path, col, cls, field);
        oilsRptDrawHavingWindow(path, col, cls, field);
+       oilsRptDrawOrderByWindow(path, col, cls, field);
 
        buildFloatingDiv(div, 600);
 
@@ -570,6 +573,8 @@ function oilsRptSetDataWindowActions(div) {
                function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_filter_div)};
        DOM.oils_rpt_agg_filter_tab.onclick = 
                function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_agg_filter_div)};
+       DOM.oils_rpt_order_by_tab.onclick = 
+               function(){oilsRptHideEditorDivs();unHideMe(DOM.oils_rpt_order_by_div)};
 
        DOM.oils_rpt_tform_tab.onclick();
        DOM.oils_rpt_column_editor_close_button.onclick = function(){hideMe(div);};
@@ -637,9 +642,20 @@ function oilsRptDrawTransformWindow(path, col, cls, field) {
                                DOM.oils_rpt_tform_label_input.value, tformPicker.getSelected() );
                };
 
-
        DOM.oils_rpt_tform_label_input.focus();
        DOM.oils_rpt_tform_label_input.select();
 
        _debug("Building transform window for datatype "+dtype);
 }
+
+
+function oilsRptDrawOrderByWindow(path, col, cls, field) {
+       var sel = DOM.oils_rpt_order_by_selector;
+       removeChildren(sel);
+       DOM.oils_rpt_order_by_submit.onclick = function() {
+               alert('make me work');
+       }
+}
+
+
+
index 5d1e890..0e3ac94 100644 (file)
 
                        <table id='oils_rpt_editor_tab_table' class='oils_rpt_tab_table'><tbody>
                                <tr>
-                                       <td width='33%'><a id='oils_rpt_tform_tab' href='javascript:void(0);'>Display Items</a></td>
-                                       <td width='33%'><a id='oils_rpt_filter_tab' href='javascript:void(0);'>Filters</a></td>
-                                       <td width='33%'><a id='oils_rpt_agg_filter_tab' href='javascript:void(0);'>Aggregate Filters</a></td>
+                                       <td width='25%'><a id='oils_rpt_tform_tab' href='javascript:void(0);'>Display Items</a></td>
+                                       <td width='25%'><a id='oils_rpt_filter_tab' href='javascript:void(0);'>Filters</a></td>
+                                       <td width='25%'><a id='oils_rpt_agg_filter_tab' href='javascript:void(0);'>Aggregate Filters</a></td>
+                                       <td width='25%'><a id='oils_rpt_order_by_tab' href='javascript:void(0);'>Column Sorting</a></td>
                                </tr>
                        </tbody></table>
 
                        </div>
 
 
+
+                       <div id='oils_rpt_order_by_div' class='hide_me'>
+                               <div class='oils_rpt_field_editor_window'>
+                                       <div style='margin-bottom: 10px;'>
+                                               Select how the columns should be sorted
+                                       </div>
+                                       <div>
+                                               <table><tbody>
+                                                       <!--
+                                                       <tr>
+                                                       <td>Choose a column: </td>
+                                                       <td>
+                                                               <select id='oils_rpt_order_by_selector'/>
+                                                       </td>
+                                               </tr>
+                                               -->
+                                               <tr>    
+                                                       <td>Choose the direction the sorting should occur: </td>
+                                                       <td>
+                                                               <select id='oils_rpt_order_by_dir'>
+                                                                       <option selected='selected'>Ascending</option>
+                                                                       <option value='descending'>Descending</option>
+                                                               </select>
+                                                       </td>
+                                               </tr></tbody></table>
+                                       </div>
+                               </div>
+                               <button id='oils_rpt_order_by_submit'>Add Sort</button>
+                       </div>
+
+
+
                        <div id='oils_rpt_column_editor_close_div'>
                                <button id='oils_rpt_column_editor_close_button'>Close Window</button>
                        </div>
index 9f1de1d..1c60da5 100644 (file)
 
 
 
+<span class='hide_me' id='oils_rpt_generic_success'>
+       Action Succeeded
+</span>
+
+<span class='hide_me' id='oils_rpt_generic_failure'>
+       Action Failed
+</span>
+
index b552697..6d107cb 100644 (file)
@@ -15,7 +15,7 @@ function oilsRptFolderWindow(type, folderId) {
 
 oilsRptFolderWindow.prototype.draw = function() {
 
-       _debug(this.folderNode.folder.owner().id() + ' : ' + USER.id());
+       _debug('drawing folder window for ' + this.folderNode.folder.name() );
 
        var obj = this;
        setSelector(DOM.oils_rpt_output_limit_selector, oilsRptOutputLimit);
@@ -188,6 +188,13 @@ oilsRptFolderWindow.prototype.doFolderAction = function() {
        var action = getSelectorVal(DOM.oils_rpt_folder_contents_action_selector);
 
        var obj = this;
+       var successCallback = function(errid) {
+               if(errid) alertId(errid)
+               else oilsRptAlertSuccess();
+               obj.draw();
+       };
+
+       var obj = this;
        switch(action) {
                case 'create_report' :
                        hideMe(DOM.oils_rpt_folder_table_right_td);
@@ -196,39 +203,43 @@ oilsRptFolderWindow.prototype.doFolderAction = function() {
                        new oilsRptReportEditor(new oilsReport(objs[0]), this);
                        break;
                case 'delete_report' :
-                       for(var r = 0; r < objs.length; r++) 
-                               this.deleteReport(objs[r]);
+                       if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
+                       this.deleteReports(objs, 0, successCallback);
                        break;
+
                case 'delete_template' :
-                       for(var r = 0; r < objs.length; r++) 
-                               this.deleteTemplate(objs[r]);
+                       if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
+                       this.deleteTemplates(objs, 0, successCallback);
                        break;
+
                case 'show_output':
                        this.showOutput(objs[0]);
                        break;
+
                case 'delete_output':
-                       for( var i = 0; i < objs.length; i++ ) {
-                               if( objs[i].runner().id()  != USER.id() )
-                                       return alertId('oils_rpt_folder_contents_no_delete');
-                       }
-                       this.deleteOutputs(objs,0, 
-                               function(){
-                                       oilsRptAlertSuccess();
-                                       obj.draw();
-                               }
-                       );
+                       if(!confirmId('oils_rpt_folder_contents_confirm_delete')) return;
+                       this.deleteOutputs(objs,0, successCallback);
                        break;
 
        }
 }
 
 
-oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback) {
-       if( idx >= list.length ) return callback();
-       var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,list[idx].id());
-       var obj = this;
-       req.callback(function(){obj.deleteOutputs(list, ++idx, callback);});
-       req.send();
+oilsRptFolderWindow.prototype.deleteOutputs = function(list, idx, callback, errid) {
+       if( idx >= list.length ) return callback(errid);
+       var output = list[idx];
+
+       if( list.runner().id()  != USER.id() ) {
+               this.deleteOutputs(list, ++idx, 
+                       callback, 'oils_rpt_folder_contents_no_delete');
+
+       } else {
+               _debug('deleting output ' + output.id());
+               var req = new Request(OILS_RPT_DELETE_SCHEDULE,SESSION,output.id());
+               var obj = this;
+               req.callback(function(){obj.deleteOutputs(list, ++idx, callback, errid);});
+               req.send();
+       }
 }
 
 oilsRptFolderWindow.prototype.showOutput = function(sched) {
@@ -241,47 +252,75 @@ oilsRptFolderWindow.prototype.showOutput = function(sched) {
 }
 
 
-oilsRptFolderWindow.prototype.deleteReport = function(report) {
-       if( report.owner().id() != USER.id() )
-               return alertId('oils_rpt_folder_contents_no_delete');
-       if(!confirmId('oils_rpt_folder_contents_confirm_report_delete')) return;
-       var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
-       req.callback(
-               function(r) {
-                       var res = r.getResultObject();
-                       if( res == 1 ) {
-                               oilsRptAlertSuccess();
-                               oilsRptCurrentFolderManager.draw();
+oilsRptFolderWindow.prototype.deleteReports = function(list, idx, callback, errid) {
+       if( idx >= list.length ) return callback(errid);
+       var report = list[idx];
+
+       if( report.owner().id() != USER.id() ) {
+               this.deleteReports(list, ++idx, 
+                       callback, 'oils_rpt_folder_contents_no_delete');
+
+       } else {
+
+               var obj = this;
+               var req0 = new Request(OILS_RPT_REPORT_HAS_OUTS, SESSION, report.id());
+               req0.callback(
+                       function(r0) {
+                               var r0es = r0.getResultObject();
+                               if( r0es != '0' ) {
+                                       obj.deleteReports(list, ++idx, 
+                                               callback, 'oils_rpt_folder_contents_report_no_delete');
+                               } else {
+                                       _debug('deleting report ' + report.id());
+                                       var req = new Request(OILS_RPT_DELETE_REPORT, SESSION, report.id());
+                                       req.callback(function(r) { 
+                                               var res = r.getResultObject();
+                                               if( res != 1 ) return oilsRptAlertFailure();
+                                               obj.deleteReports(list, ++idx, callback, errid)
+                                       });
+                                       req.send();
+                               }
                        }
-               }
-       );
-       req.send();
+               );
+
+               req0.send();
+       }
 }
 
-oilsRptFolderWindow.prototype.deleteTemplate = function(tmpl) {
-       if( tmpl.owner().id() != USER.id() )
-               return alertId('oils_rpt_folder_contents_no_delete');
-       var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
-       req0.callback(
-               function(r0) {
-                       var resp = r0.getResultObject();
-                       if( resp != '0' )
-                               return alertId('oils_rpt_folder_contents_template_no_delete');
-                       if(!confirmId('oils_rpt_folder_contents_confirm_template_delete')) return;
-                       var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
-                       req.callback(
-                               function(r) {
-                                       var res = r.getResultObject();
-                                       if( res == 1 ) {
-                                               oilsRptAlertSuccess();
-                                               oilsRptCurrentFolderManager.draw();
-                                       }
+oilsRptFolderWindow.prototype.deleteTemplates = function(list, idx, callback, errid) {
+       if( idx >= list.length ) return callback(errid);
+       var tmpl = list[idx];
+
+       var obj = this;
+       if( tmpl.owner().id() != USER.id() ) {
+               this.deleteTemplates(list, ++idx, 
+                       callback, 'oils_rpt_folder_contents_no_delete');
+
+       } else {
+
+               var req0 = new Request( OILS_RPT_TEMPLATE_HAS_RPTS, SESSION, tmpl.id() );
+               req0.callback(
+                       function(r0) {
+                               var resp = r0.getResultObject();
+
+                               if( resp != '0' ) {
+                                       obj.deleteTemplates(list, ++idx, 
+                                               callback, 'oils_rpt_folder_contents_template_no_delete');
+
+                               } else {
+                                       _debug('deleting template ' + tmpl.id());
+                                       var req = new Request(OILS_RPT_DELETE_TEMPLATE, SESSION, tmpl.id());
+                                       req.callback(function(r) {
+                                               var res = r.getResultObject();
+                                               if( res != 1 ) return oilsRptAlertFailure();
+                                               obj.deleteTemplates(list, ++idx, callback, errid)
+                                       });
+                                       req.send();
                                }
-                       );
-                       req.send();
-               }
-       );
-       req0.send();
+                       }
+               );
+               req0.send();
+       }
 }
 
 
index 9ec7c19..629f12f 100644 (file)
@@ -1,11 +1,15 @@
 <div id='oils_rpt_folder_window_contents_div'>
-       <div style='width:100%;text-align: center; margin: 10px;'>
+
+
+       <!--
+       <div style='width:100%;text-align: right; margin: 10px; vertical-align: top'>
                <a id='oils_rpt_folder_window_contents_new_template' href='javascript:void(0);'><b>Create a new Template for this folder</b></a>
        </div>
+       -->
        <table id='oils_rpt_folder_window_contents_table'>
                <tbody>
                        <tr>
-                               <td> 
+                               <td colspan='2'
                                        <span>
                                                <select id='oils_rpt_folder_contents_action_selector' style='width: auto;'>
                                                        <option type='template' value='create_report'>Create a new report from selected template</option>
                                                </select>
                                        </div>
                                </td>
+                               <td style='text-align:right;'>
+                                       <a id='oils_rpt_folder_window_contents_new_template' 
+                                               href='javascript:void(0);'><b>Create a new Template for this folder</b></a>
+                               </td>
                        </tr>
 
                        <tr class='oils_rpt_folder_window_contents_row'>
-                               <td width='100%'>
+                               <td colspan='2'>
                                        <div id='oils_rpt_folder_contents_selector'/>
                                </td>
                        </tr>
                </tbody>
        </table>
 
-       <span class='hide_me' id='oils_rpt_folder_contents_confirm_report_delete'>
-               Are you sure you wish to delete the selected report(s)?
+       <span class='hide_me' id='oils_rpt_folder_contents_confirm_delete'>
+               Are you sure you wish to delete the selected item(s)?
        </span>
 
-       <span class='hide_me' id='oils_rpt_folder_contents_confirm_template_delete'>
-               Are you sure you wish to delete the selected template(s)?
+       <span class='hide_me' id='oils_rpt_folder_contents_template_no_delete'>
+               One or more of the selected templates could not be deleted because 
+               there are reports that depend on them.
        </span>
 
-       <span class='hide_me' id='oils_rpt_folder_contents_template_no_delete'>
-               The selected template could not be deleted because there are reports
-               that depend on it.
+       <span class='hide_me' id='oils_rpt_folder_contents_report_no_delete'>
+               One or more of The selected reports could not be deleted because 
+               there are outputs that depend on them.
        </span>
 
+
        <span class='hide_me' id='oils_rpt_folder_contents_no_delete'>
                You may not delete another user's items
        </span>
index 71f3199..0e75523 100644 (file)
@@ -333,6 +333,7 @@ function oilsRptFetchTemplate(id, callback) {
 
 
 function oilsRptAlertSuccess() { alertId('oils_rpt_generic_success'); }
+function oilsRptAlertFailure() { alertId('oils_rpt_generic_failure'); }
 
 
 function oilsRptBuildOutputLink(tid, rid, sid) {
index 031026f..237ec0c 100644 (file)
@@ -38,7 +38,7 @@ var oilsRptFilterSelector;
 
 var oilsRptHavingSelector;
 
-var oilsRptOrderBySelector;
+//var oilsRptOrderBySelector;
 
 /* display the currently building report object in an external window */
 var oilsRptDebugWindow;
@@ -77,6 +77,7 @@ var OILS_RPT_DELETE_TEMPLATE          = 'open-ils.reporter:open-ils.reporter.template.de
 var OILS_RPT_DELETE_REPORT                     = 'open-ils.reporter:open-ils.reporter.report.delete';
 var OILS_RPT_DELETE_SCHEDULE           = 'open-ils.reporter:open-ils.reporter.schedule.delete';
 var OILS_RPT_TEMPLATE_HAS_RPTS = 'open-ils.reporter:open-ils.reporter.template_has_reports';
+var OILS_RPT_REPORT_HAS_OUTS           = 'open-ils.reporter:open-ils.reporter.report_has_output';
 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';