ReportCenter = function( options ) { let instance = this; instance.usingPopup = false; options = options ? options : {} if( options.reportCategory && ( options.reportCategory == "$SAVED" || options.reportCategory == "$SHARED" || options.reportCategory == "$AVAILABLE" )) { instance.initialReportCategory = options.reportCategory; } if( options.savedReportId ) { instance.initialSavedReportId = options.savedReportId; } let rds = Fse.Data.newDataSource( { object : "RPT.reportCenterData" }).store() instance.ready = rds.load(); instance.ready.done( function( data ) { instance.reportsArray = data.reports; instance.savedReportsArray = data.savedReports; instance.sharedReportsArray = data.sharedReports; instance.userReportGroupsArray = data.userReportGroups instance.reportCategoriesArray = data.reportCategories; // console.log( instance.reportsArray ); let savedReportsArray = []; let currentUserReportGroup = null; let sortedArray = ( new DevExpress.data.query(instance.savedReportsArray) ).sortBy( "userReportGroup").thenBy( "userReportName" ).toArray(); sortedArray.forEach( function ( reportData ) { if( reportData.userReportGroup != currentUserReportGroup ) { if( reportData.userReportGroup != "" ) { savedReportsArray.push( { type : "group", name : reportData.userReportGroup, disabled : true }) } currentUserReportGroup = reportData.userReportGroup } savedReportsArray.push( reportData ); }) instance.savedReportsArray = savedReportsArray; }) } ReportCenter.prototype.constructor = ReportCenter ReportCenter.prototype.showFull = function() { let instance = this; instance.usingPopup = false; instance.ready.done( function() { instance._createUI(); instance._refreshReportList(); }) } ReportCenter.prototype.showPopup = function( url, title ) { let instance = this; let popup = null; instance.usingPopup = true; instance.ready.done( function() { instance.runButton = $("
").dxButton( { text : "Run", type : "default", disabled : true, onClick : function( e ) { if( instance._runReport() ) { popup.hide(); } } }).dxButton( "instance" ) instance.buttonBar = $("
").dxToolbar( { items : [ { location : "after", widget : "dxButton", options : { text : "Cancel", onClick : function( e ) { popup.hide(); } } }, { location : "after", template : function() { return instance.runButton.element(); } } ] }).css( "margin-top", "5px" ).dxToolbar( "instance" ); // instance.reportTitleDisplay = $("") // instance.reportTitleContainer = $("
" ) // .css( { "font-style" : "italic", "font-size" : "18px" }) // .append( " - " ) // .append( instance.reportTitleDisplay ) // instance.titleBar = $("
").dxToolbar( { // items : [ // { location : "before", // template : function() { // return $("
").text( "Report Center" ).css( { "font-size" : "18px" } ) // } // }, // { location : "before", visible : false, // template : function() { // return instance.reportTitleContainer // } // }, // { widget: "dxButton", location: "after", options : { // type : "normal", // icon :"help", // hint : "View Help", // onClick : function( e ) { // Fse.Portal.showQuickHelp( "ReportCenter" ); // } // }} // ] // }).dxToolbar( "instance" ); // $("
").dxBox( { // direction : "col", // height : "100%", // items : [ // { baseSize: 30, name : 'titleBar' }, // { ratio: 1, name : 'mainDisplay' } // ], // itemTemplate : function( itemData ) { // if( itemData.name == "titleBar" ) { // return instance.titleBar.element(); // } else if ( itemData.name == "mainDisplay" ) { // return instance._createReportCenterUI(); // } // } // }).appendTo("#sysReportCenterDialog"); let reportFilter = null; let reportCode = null; if( url ) { let urlParts = url.split( "?" ); if( urlParts.length == 2) { let queryString = urlParts[1]; let reportParams = {}; let avps = queryString.split( "&" ); avps.forEach( function( avp ) { let tokens = avp.split( "=" ); let a = tokens[0]; let v = avp.replace( new RegExp( `^${a}=` ), '' ); if( a == "rc_report" ) { reportCode = decodeURIComponent( v ); } else if ( a.match( /^rc_/ ) ) { reportParams[ a ] = decodeURIComponent( v ); } }) if( reportCode ) { instance.reportsArray.forEach( function( report ) { if( report.reportCode == reportCode ) { report.handler = Fse.Util.updateURL( report.handler, reportParams ); } }) reportFilter = [ "reportCode", "=", reportCode ]; } } } let reportSelectDataSource = new DevExpress.data.DataSource( { filter : reportFilter, store : { type : "array", key : "reportCode", data : instance.reportsArray } } ); let popupConfig = { title : title ? title : "Report Center", width : "90vw", height : "90vh", contentTemplate : function() { let content = $("
").addClass( "sysReportCenterDialog" ).dxBox( { direction : "col", height : "100%", items : [ { baseSize : 32, template : function() { instance.reportSelect = $("
").dxSelectBox( { placeholder : "select a report", valueExpr : "reportCode", dataSource : reportSelectDataSource, displayExpr : "title", onSelectionChanged : function( e ) { let selectedReport = e.selectedItem; instance._loadReport( selectedReport ); }, width : 300 }).dxSelectBox("instance"); return instance.reportSelect.element(); } }, { ratio : 1, template : function() { return instance._createReportUI(); } } ] }) return content; }, onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); }, onShown : function( e ) { if( reportCode ) { instance.reportSelect.option( "value", reportCode ); } } } console.log( instance.reportsArray ); popup = $("
").dxPopup( popupConfig ).appendTo( $("body" )).dxPopup( "instance" ); popup.show(); }) } ReportCenter.prototype._loadReport = function( reportData ) { let instance = this; // let titleElement = $("#reportTitleDisplay" ); // let titleContent = $("#reportTitleDisplay span" ); instance.tabs.option( { "items[0].disabled" : true, "items[1].disabled" : true, "items[2].disabled" : true, "items[3].disabled" : true }) if( instance.saveButton ) instance.saveButton.option( { disabled : true }); if( instance.deleteButton ) instance.deleteButton.option( { disabled : true }); if( instance.runButton ) instance.runButton.option( { disabled : true }); if( ! reportData ) { // titleElement.addClass( "fse-hidden" ); instance.titleBar.option( { "items[1].visible" : false }) let pleaseSelectHTML = "Please select a Report"; $("#rc_helpTab").html( pleaseSelectHTML ); $("#rc_criteriaTab").html( pleaseSelectHTML ); $("#rc_outputTab").html( pleaseSelectHTML ); instance._showTab( "rc_criteria" ); // instance.tabs.option( { // "items[0].disabled" : true, // "items[1].disabled" : true, // "items[2].disabled" : true, // "items[3].disabled" : true // }) // instance.saveButton.option( { disabled : true }); // instance.deleteButton.option( { disabled : true }); // instance.runButton.option( { disabled : true }); return; } let sLoadingHTML = "Loading, Please wait..."; $("#rc_helpTab").html( sLoadingHTML ); $("#rc_criteriaTab").html( sLoadingHTML ); $("#rc_outputTab").html( sLoadingHTML ); instance._showTab( "rc_criteria" ); let title = reportData.title; if( reportData.shared == "Y" ) { title = title + ' - Shared' } // titleContent.text( title ); if( instance.reportTitleDisplay ) instance.reportTitleDisplay.text( title ); // titleElement.removeClass( "fse-hidden" ); if( instance.titleBar ) instance.titleBar.option( { "items[1].visible" : true }) let sAppHandler = reportData.handler; document.frm_reportCenter.elements.rc_handler.value = sAppHandler; let parts = sAppHandler.split( "?" ); let sBaseURL = parts[0];; document.frm_reportCenter.setAttribute( "action", sBaseURL ); document.frm_reportCenter.elements.rc_report.value = reportData.reportCode; // remove any previous parameters from the form $(document.frm_reportCenter).find( "input.rc_param" ).remove(); $(document.frm_reportCenter).find( "input[name=rc_defaults]" ).remove(); // add new parameters if( parts.length > 1 ) { let aParams = parts[1].split( "&" ); for( let x = 0; x < aParams.length; x++ ) { let aParamParts = aParams[x].split( "=" ); // output tab fields if( aParamParts[0] == "rc_format" ) continue; if( aParamParts[0] == "rc_method" ) continue; $("") .attr({ type : "hidden", name : aParamParts[0], value : aParamParts[1] }) .addClass( "rc_param" ) .appendTo( $(document.frm_reportCenter) ); } } // let ReportSelectURL = Fse.Util.updateURL( sAppHandler, { rc_action : "build", rc_part : "reportSelect" } ); let sCriteriaURL = Fse.Util.updateURL( sAppHandler, { rc_action : "build", rc_part : "criteriaFields", rc_report : reportData.reportCode } ); if( reportData.savedReportId ) { sCriteriaURL = Fse.Util.updateURL( sCriteriaURL, { rc_savedReportId : reportData.savedReportId } ); } let sHelpURL = Fse.Util.updateURL( sAppHandler, { rc_action : "build", rc_part : "helpContent", rc_report : reportData.reportCode }); let reportCenterBaseURL = $("link#PortalDocRootURL").attr( "href" ) + "/apps/RPT/index.cfm"; let sScheduleURL = Fse.Util.updateURL( reportCenterBaseURL, { ajax : "savedReportSchedule" } ); let sOutputURL = Fse.Util.updateURL( reportCenterBaseURL, { ajax : "outputTab" } ); if( reportData.savedReportId ) { if( document.getElementById( "rc_scheduleTab" )) { Fse.Ajax.updateContent( Fse.Util.updateURL( sScheduleURL, { savedReportId : reportData.savedReportId }), "rc_scheduleTab" ); } sOutputURL = Fse.Util.updateURL( sOutputURL, { savedReportId : reportData.savedReportId } ); } else { sOutputURL = Fse.Util.updateURL( sOutputURL, { rc_report : reportData.reportCode } ); } Fse.Ajax.updateContent( sHelpURL, "rc_helpTab" ); let loadPanel = $("
").dxLoadPanel( { message : "Loading, please wait...", ohHidden : function( e ) { e.component.element().remove(); e.component.dispose(); } }).appendTo( $("body") ).dxLoadPanel( "instance" ); loadPanel.show(); let reportType = instance.reportTypeSelect ? instance.reportTypeSelect.option( "value" ) : "$AVAILABLE"; let d = Fse.Ajax.updateContent( sCriteriaURL , "rc_criteriaTab", null, null, true ); d.done( function() { let d = Fse.Ajax.updateContent( sOutputURL, "rc_outputTab" ); d.done( function() { instance._criteriaChanged(); instance.tabs.option( { "items[0].disabled" : false, "items[1].disabled" : false, "items[2].disabled" : reportType != "$SAVED", "items[3].disabled" : false }) }) }).then( function() { loadPanel.hide(); }) } ReportCenter.prototype.getCurrentReport = function() { let instance = this; return instance.reportList ? instance.reportList.option( "selectedItem" ) : instance.reportSelect.option( "selectedItem" ); } ReportCenter.prototype._showTab = function( tabId ) { let instance = this; // var aTabs = YAHOO.util.Dom.getChildren( "rpt-tab-bodies" ) let aTabs = $("#rpt-tab-bodies").children(); let sBodyId = tabId + "Tab"; for( var x = 0; x < aTabs.length; x++ ) { var oTab = aTabs[x]; if( oTab.getAttribute( "id" ) == sBodyId ) { // YAHOO.util.Dom.removeClass( oTab, "fse-hidden" ); $(oTab).removeClass( "fse-hidden" ); } else { // YAHOO.util.Dom.addClass( oTab, "fse-hidden" ); $(oTab).addClass( "fse-hidden" ); } } let tabItems = instance.tabs.option( "items" ); tabItems.forEach( function( i ) { if( i.id == tabId ) { instance.tabs.option( "selectedItem", i ); } }) } ReportCenter.prototype._criteriaChanged = function() { let instance = this; Fse.DialogManager.initializePopupDateBoxes( $( document.frm_reportCenter )); // uses DevX var oMobile = document.getElementById( "rc_mobile" ); var bMobile = (oMobile.value == "true"); if( bMobile ) { if( oMobile.form.rc_method_download.checked ) { oMobile.form.setAttribute( "target", "_blank" ); } else { oMobile.form.setAttribute( "target", null ); } } let bEnableRun = true; let bEnableSave = false; let bEnableDelete = false; let currentReport = instance.getCurrentReport(); if( currentReport ) { if( currentReport.locked == "Y" ) { bLocked = true; } else { bLocked = false; } if( !bLocked && currentReport.saveable == "Y" ) { bEnableSave = true; bEnableDelete = true; } else { bEnableSave = false; bEnableDelete = false; } // no access, only allow them to delete the saved report if( currentReport.accessAllowed == "N" ) { bEnableSave = false; bEnableDelete = true; bEnableRun = false; } } else { bEnableSave = false; bEnableRun = false; bEnableDelete = false; } if( instance.saveButton ) instance.saveButton.option( { disabled : bEnableSave == false }); if( instance.deleteButton ) instance.deleteButton.option( { disabled : bEnableSave == false }); if( instance.runButton ) instance.runButton.option( { disabled : bEnableRun == false }); } ReportCenter.prototype._refreshReportList = function() { let instance = this; let value = instance.reportTypeSelect.option( "value" ); if( value == "$AVAILABLE" ) { instance.reportList.option( { "searchEnabled" : true, searchValue : null, searchExpr : "title", "dataSource" : { paginate : false, filter : null, store : { type : "array", data : instance.reportsArray, key : "reportId" } }, keyExpr : "reportId" } ) } else if( value == "$SAVED" ) { let dataStore = new DevExpress.data.ArrayStore( { data : instance.savedReportsArray, key : "savedReportId" } ); instance.reportList.option( { "searchEnabled" : true, searchValue : null, searchExpr : "userReportName", "dataSource" : { paginate : false, store : dataStore}, keyExpr : "savedReportId" } ) if( instance.initialSavedReportId ) { dataStore.byKey( instance.initialSavedReportId ).done( function( selectedItem ) { instance.initialSavedReportId = null; instance.reportList.option( { "selectedItem" : selectedItem } ); let allItems = instance.reportList.option( "items" ); for( let x = 0; x <= allItems.length; x++ ) { let item = allItems[x]; if( item === selectedItem ) { instance.reportList.scrollToItem( x ); break; } } }) } } else if( value == "$SHARED" ) { instance.reportList.option( { "searchEnabled" : true, searchValue : null, searchExpr : "userReportName", "dataSource" : { paginate : false, store : { type : "array", data : instance.sharedReportsArray, key : "savedReportId" } }, keyExpr : "savedReportId" } ) } else { instance.reportList.option( { "searchEnabled" : true, searchValue : null, searchExpr : "userReportName", "dataSource" : { paginate : false, filter : [ "categories", "contains", value ], store : { type : "array", data : instance.reportsArray, key : "reportId" } }, keyExpr : "reportId" } ) } } ReportCenter.prototype._createUI = function() { let instance = this; instance.reportList = $("
").dxList( { itemTemplate : function( itemData ) { if( itemData.type == "group") { return $("
").text( itemData.name ) } else { if( itemData.savedReportId ) { let reportNameDisplay = $("").text( itemData.userReportName ); let content = $("
"); if( itemData.displayType == "$SAVED" ) { content.css( itemData.userReportGroup ? { "padding-left" : "10px" } : {} ) let statusIndicators = []; if( itemData.scheduledDelivery == 'Y' ) statusIndicators.push( '*' ); if( itemData.shared == 'Y' ) statusIndicators.push( '+' ); if( statusIndicators.length ) { content.append( $("").text( statusIndicators.join('')).css( { "padding-right" : "5px" }) ); } } content.append( reportNameDisplay ); return content } else { return $("
").text( itemData.title ) } } }, height : "100%", width : "100%", onSelectionChanged : function( e ) { instance._loadReport( e.component.option( "selectedItem" ) ); }, selectionMode : "single", searchEnabled : false, // this get's turned on during refresh report list searchMode : "contains" }).dxList( "instance"); let reportCategories = [ { reportType : "$AVAILABLE", reportTypeDisplay : "-- Available Reports --" }, { reportType : "$SAVED", reportTypeDisplay : "-- Saved Reports --" }, { reportType : "$SHARED", reportTypeDisplay : "-- Shared Reports --" } ] instance.reportCategoriesArray.forEach( function( ae ) { reportCategories.push( $.extend( true, { reportType : ae.reportCategory, reportTypeDisplay : ae.reportCategory }, ae ) ); }) let initalReportCategory = instance.initialReportCategory ? instance.initialReportCategory : instance.savedReportsArray.length ? "$SAVED" : "$AVAILABLE" instance.reportTypeSelect = $("
").dxSelectBox( { height: 33, dataSource : { store : { type : "array", data : reportCategories, key : "reportType" } }, displayExpr : "reportTypeDisplay", valueExpr : "reportType", value : initalReportCategory, onValueChanged : function( e ) { let button = e.component.getButton( "manage" ); button.option( "visible", e.value == "$SAVED" ); instance.legendElement.css( { "display" : e.value == "$SAVED" ? "initial" : "none" } ); instance._refreshReportList(); }, buttons : [ { name: 'manage', location: 'after', options: { visible : initalReportCategory == "$SAVED" ? true : false, hint : "Manage", text : "manage", stylingMode: 'text', onClick : function( e ) { instance._manageGroups().done( function( result ) { window.location.href = window.location.href; }); }, }, }, "dropDown" ] }).dxSelectBox( "instance"); instance.initialReportCategory = null; instance.legendElement = $("
").text( "* = scheduled delivery, + = shared" ).css( { "display" : initalReportCategory == "$SAVED" ? "initial" : "none", "margin-top" : "5px", "font-style" : "italic" }); instance.deleteButton = $("
").dxButton( { text : "Delete", disabled : true, onClick : function( e ) { instance._deleteReport(); } }).dxButton( "instance" ) instance.saveButton = $("
").dxButton( { text : "Save", disabled : true, onClick : function(e) { instance._saveReport(); } }).dxButton( "instance" ) instance.runButton = $("
").dxButton( { text : "Run", type : "default", disabled : true, onClick : function( e ) { instance._runReport(); } }).dxButton( "instance" ) instance.buttonBar = $("
").dxToolbar( { items : [ { location : "after", template : function() { return instance.deleteButton.element(); } }, { location : "after", template : function() { return instance.saveButton.element(); } }, { location : "after", template : function() { return instance.runButton.element(); } } ] }).css( "margin-top", "5px" ).dxToolbar( "instance" ); instance.reportTitleDisplay = $("") instance.reportTitleContainer = $("
" ) .css( { "font-style" : "italic", "font-size" : "18px" }) .append( " - " ) .append( instance.reportTitleDisplay ) instance.titleBar = $("
").dxToolbar( { items : [ { location : "before", template : function() { return $("
").text( "Report Center" ).css( { "font-size" : "18px" } ) } }, { location : "before", visible : false, template : function() { return instance.reportTitleContainer } }, { widget: "dxButton", location: "after", options : { type : "normal", icon :"help", hint : "View Help", onClick : function( e ) { Fse.Portal.showQuickHelp( "ReportCenter" ); } }} ] }).dxToolbar( "instance" ); $("
").addClass( "sysReportCenterDialog" ).dxBox( { direction : "col", height : "100%", items : [ { baseSize: 30, name : 'titleBar' }, { ratio: 1, name : 'mainDisplay' } ], itemTemplate : function( itemData ) { if( itemData.name == "titleBar" ) { return instance.titleBar.element(); } else if ( itemData.name == "mainDisplay" ) { return instance._createReportCenterUI(); } } }).appendTo("#sysReportCenterDialog"); // $("#reportCenterDisplay").dxBox( { // direction : "row", // width : "100%", // height : "100%" // }) // $("#reportCenterDisplay").dxBox( { // direction : "row", // width : "100%", // height : "100%", // items : [ // { baseSize: 350, name : 'reportList' }, // { ratio: 1, name : 'report' } // ], // itemTemplate : function( itemData ) { // if( itemData.name == "reportList" ) { // return $("
").dxBox( { // height : "100%", // direction : "col", // items :[ // { baseSize: 37, name : 'reportTypes' }, // { ratio: 1, name : 'availableReports' }, // { baseSize: 40, name : 'legend' } // ], // itemTemplate : function( itemData ) { // if( itemData.name == "availableReports" ) { // return $("
").addClass( "dx-theme-border-color" ).css( { "height" : "100%", "border-width":"1px", "border-style":"solid"}).append( instance.reportList.element() ) // } else if ( itemData.name == "reportTypes" ) { // return instance.reportTypeSelect.element(); // } else if ( itemData.name == "legend" ) { // return instance.legendElement; // } // } // }); // } else if ( itemData.name == "report" ) { // let reportUI = instance._createReportUI(); // reportUI.css( "padding-left", "8px") // return reportUI; // } // } // }) // $("#reportList").dxBox( { // height : "100%", // direction : "col", // items :[ // { baseSize: 37, name : 'reportTypes' }, // { ratio: 1, name : 'availableReports' }, // { baseSize: 40, name : 'legend' } // ], // itemTemplate : function( itemData ) { // if( itemData.name == "availableReports" ) { // return $("
").addClass( "dx-theme-border-color" ).css( { "height" : "100%", "border-width":"1px", "border-style":"solid"}).append( instance.reportList.element() ) // } else if ( itemData.name == "reportTypes" ) { // return instance.reportTypeSelect.element(); // } else if ( itemData.name == "legend" ) { // return instance.legendElement; // } // } // }); // $("#reportFormBox").dxBox( { // height : "100%", // direction : "col", // items : [ // { baseSize : 37, name : 'tabs' }, // { ratio : 1, name : 'form' }, // { baseSize : 40, name : 'buttonBar' } // ], // itemTemplate : function( itemData ) { // if( itemData.name == "buttonBar" ) { // $("#rc_buttonBar").remove(); // return instance.buttonBar.element(); // } else if ( itemData.name == "tabs" ) { // return instance.tabs.element(); // } else if ( itemData.name == "form" ) { // let frm_reportCenter = $("
").attr( { "method" : "POST", "name" : "frm_reportCenter", "action" : "." } ) // .append( $("").attr( { type : "hidden", name : "processAs", value : "URL" } )) // .append( $("").attr( { type : "hidden", name : "rc_handler", value : "." } )) // .append( $("").attr( { type : "hidden", name : "rc_action", value : "execute" } )) // .append( $("").attr( { type : "hidden", name : "mode", value : "direct" } )) // .append( $("").attr( { type : "hidden", name : "rc_mobile", value : "false", id : "rc_mobile" } )) // .append( $("").attr( { type : "hidden", name : "rc_report", value : "", id : "rc_report" } )) // let tabBodies = $("
").attr( { id : "rpt-tab-bodies" } ) // .append( $("
").attr( { id : "rc_criteriaTab" } ).append( $("

").text("Please select a Report") ) ) // .append( $("

").attr( { id : "rc_outputTab" } )) // .append( $("
").attr( { id : "rc_scheduleTab" } )) // .append( $("
").attr( { id : "rc_helpTab" } )); // frm_reportCenter.append( tabBodies ); // // $("#rpt-form-socket").remove(); // // style="height:100%;overflow:auto;border-width:1px;border-style:solid;padding:3px;" class="dx-theme-border-color"> // return $("
").attr( { "id" : "rpt-form-socket" } ).css( { // "height" : "100%", // "overflow" : "auto", // "border-width" : "1px", // "border-style" : "solid", // "padding" : "3px" // }).addClass( "dx-theme-border-color" ).append( frm_reportCenter ); // } // } // }); } ReportCenter.prototype._createReportCenterUI = function() { let instance = this; return $("
").dxBox( { direction : "row", width : "100%", height : "100%", items : [ { baseSize: 350, name : 'reportList' }, { ratio: 1, name : 'report' } ], itemTemplate : function( itemData ) { if( itemData.name == "reportList" ) { return $("
").dxBox( { height : "100%", direction : "col", items :[ { baseSize: 37, name : 'reportTypes' }, { ratio: 1, name : 'availableReports' }, { baseSize: 40, name : 'legend' } ], itemTemplate : function( itemData ) { if( itemData.name == "availableReports" ) { return $("
").addClass( "dx-theme-border-color" ).css( { "height" : "100%", "border-width":"1px", "border-style":"solid"}).append( instance.reportList.element() ) } else if ( itemData.name == "reportTypes" ) { return instance.reportTypeSelect.element(); } else if ( itemData.name == "legend" ) { return instance.legendElement; } } }); } else if ( itemData.name == "report" ) { let reportUI = instance._createReportUI(); reportUI.css( "padding-left", "8px") return reportUI; } } }) } ReportCenter.prototype._createReportForm = function() { // let instance = this; let frm_reportCenter = $("").attr( { "method" : "POST", "name" : "frm_reportCenter", "action" : "." } ) .append( $("").attr( { type : "hidden", name : "processAs", value : "URL" } )) .append( $("").attr( { type : "hidden", name : "rc_handler", value : "." } )) .append( $("").attr( { type : "hidden", name : "rc_action", value : "execute" } )) .append( $("").attr( { type : "hidden", name : "mode", value : "direct" } )) .append( $("").attr( { type : "hidden", name : "rc_mobile", value : "false", id : "rc_mobile" } )) .append( $("").attr( { type : "hidden", name : "rc_report", value : "", id : "rc_report" } )) let tabBodies = $("
").attr( { id : "rpt-tab-bodies" } ) .append( $("
").attr( { id : "rc_criteriaTab" } ).append( $("

").text("Please select a Report") ) ) .append( $("

").attr( { id : "rc_outputTab" } )) .append( $("
").attr( { id : "rc_scheduleTab" } )) .append( $("
").attr( { id : "rc_helpTab" } )); frm_reportCenter.append( tabBodies ); return frm_reportCenter; } ReportCenter.prototype._createReportUI = function() { let instance = this; instance.tabs = $("
").dxTabs( { items : [ { id : "rc_criteria", text : "Criteria", disabled : true, visible : true }, { id : "rc_output", text : "Output", disabled : true, visible : true }, { id : "rc_schedule", text : "Schedule", disabled : true, visible : instance.usingPopup ? false : true }, { id : "rc_help", text : "Help", disabled : true, visible : true } ], onSelectionChanged : function( e ) { let selectedTab = e.component.option( "selectedItem" ); instance._showTab( selectedTab.id ) }, keyExpr : "id" }).dxTabs( "instance" ); let reportUI = $("
").dxBox( { height : "100%", direction : "col", items : [ { baseSize : 37, name : 'tabs' }, { ratio : 1, name : 'form' }, { baseSize : 40, name : 'buttonBar' } ], itemTemplate : function( itemData ) { if( itemData.name == "buttonBar" ) { $("#rc_buttonBar").remove(); return instance.buttonBar.element(); } else if ( itemData.name == "tabs" ) { return instance.tabs.element(); } else if ( itemData.name == "form" ) { let frm_reportCenter = instance._createReportForm(); return $("
").attr( { "id" : "rpt-form-socket" } ).css( { "height" : "100%", "overflow" : "auto", "border-width" : "1px", "border-style" : "solid", "padding" : "3px" }).addClass( "dx-theme-border-color" ).append( frm_reportCenter ); } } }) return reportUI; } ReportCenter.prototype._manageGroups = function() { let instance = this; let savePromise = $.Deferred(); let groupIdx = {}; let groupId = null; let treeData = [ { id : 1, groupId : null, display : "-- ungrouped --", type : "group" }, { id : 2, groupId : null, display : "-- DELETED --", type : "group" } ]; instance.savedReportsArray.forEach( function( sr ) { if( sr.type == "group" ) { groupId = treeData.length + 1; treeData.push( { id : groupId, groupId : null, display : sr.name, type : "group" } ) return; } if( sr.userReportGroup == "" ) { treeData.push( { id : treeData.length + 1, groupId : 1, display : sr.userReportName, type : "report", savedReportId : sr.savedReportId } ) } else { treeData.push( { id : treeData.length + 1, groupId : groupId, display : sr.userReportName, type : "report", savedReportId : sr.savedReportId } ) } }) let groupedData = []; let ungroupedData = []; // treeData.forEach( function( sr ) { // if( sr.groupId || sr.type == "group") { // groupedData.push( sr ); // } else { // ungroupedData.push( sr ); // } // }) groupedData = treeData; let groupedReportsStore = new DevExpress.data.ArrayStore( { data : groupedData, key : "id" } ) let ungroupedReportsStore = new DevExpress.data.ArrayStore( { data : ungroupedData, key : "id" }) let ungroupedReportsList = $("
").dxList( { width : "100%", height : "100%", dataSource : { paginate : false, store : ungroupedReportsStore, key : "id" }, displayExpr : "display" }).dxList( "instance" ); let moveReport = function( moveData ) { // console.log( "Move Data", moveData ); // let targetGroup = null; // groupedReportsStore.byKey( moveData.toGroupId ).done( function( data ) { // targetGroup = data; // }) // let report = null; // groupedReportsStore.byKey( moveData.id ).done( function( data ) { // report = data; // }) // console.log( "Target Group", targetGroup ) // console.log( "Report", report ); groupedReportsStore.push( [{ type : "update", data : { groupId : moveData.toGroupId, expanded : true }, key : moveData.id }]) if( moveData.fromGroupId && moveData.fromGroupId != 2 ) { let query = groupedReportsStore.createQuery(); let items = query.filter( ["groupId", "=", moveData.fromGroupId ]).toArray(); if( items.length == 0 ) { deleteGroup( moveData.fromGroupId ); } } if( moveData.toGroupId == 2 ) { $("
").dxToast( { message : "The report has been queued for deletion. It will be deleted when the window is saved. You can undelete it from the '-- DELETED --' group", onHidden : function( e ) { e.component.element().remove() e.component.dispose(); } }).appendTo( $("body") ).dxToast( "show" ) } } let deleteGroup = function( groupId ) { let query = groupedReportsStore.createQuery(); let items = query.filter( ["groupId", "=", groupId ]).toArray(); items.forEach( function( i ) { moveReport( { toGroupId : 1, id : i.id }) }) groupedReportsStore.push( [{ type : "remove", key : groupId }]) } let renameGroup = function( groupId ) { let group = groupedReportsStore.byKey( groupId ).done( function( group ) { let renameGroupForm = null; let renameGroupPopup = $("
").dxPopup( { title : "Rename group", width : "auto", height : "auto", hideOnOutsideClick : true, toolbarItems : [ { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Cancel", onClick : function( e ) { renameGroupPopup.hide(); } } }, { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Submit", type : "default", onClick : function( e ) { if( renameGroupForm.validate().isValid ) { let newGroupName = renameGroupForm.option( "formData").groupName; // let newGroupId = -1; // let maxId = -1; // ds.store().load().done( function( data ) { // data.forEach( function( i ) { // if( i.id > maxId ) { // maxId = i.id; // } // if( i.type == "group" && i.display == newGroupName ) { // newGroupId = i.id; // } // }) // }) // if( newGroupId == -1 ) newGroupId = maxId + 1; groupedReportsStore.push( [ { type : "update", data : { display : newGroupName }, key : group.id } ]) renameGroupPopup.hide(); } } } } ], contentTemplate : function() { renameGroupForm = $("
").dxForm( { formData : { groupName : group.display }, items : [ { dataField : "groupName", label : { visible : false }, isRequired : true, editorType : "dxTextBox", editorOptions : { placeholder : "group name", maxLength : 200, width : 200 } } ] }).dxForm( "instance" ); return renameGroupForm.element(); }, onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); renameGroupForm.dispose(); }, onShown : function( e ) { renameGroupForm.getEditor( "groupName").focus(); } }).appendTo( $("body") ).dxPopup( "instance" ) renameGroupPopup.show(); }) } let groupedReportsTreeList = $("
").dxTreeList( { width : "100%", height : "100%", scrolling : { mode : "virtual" }, autoExpandAll : true, keyExpr : "id", parentIdExpr : "groupId", showBorders : true, rowAlternationEnabled : true, showColumnHeaders : false, columns : [ { dataField : "display", caption : "Group/Report" }], dataSource : { paginate : false, reshapeOnPush : true, store : groupedReportsStore, onChanged : function( e ) { } }, onContextMenuPreparing : function( e ) { let itemData = e.row.data; let menuItems = []; if( itemData.type == "group" ) { if( !(itemData.id == 1 || itemData.id == 2 ) ) { menuItems.push( { text : "Rename this group", groupIdToRename : itemData.id, onClick : function( e ) { renameGroup ( e.itemData.groupIdToRename ) } }, { text : "Delete this group", groupIdToDelete : itemData.id, onClick : function( e ) { deleteGroup( e.itemData.groupIdToDelete ); } } ) } } else { if( itemData.groupId != 2 ) { let ds = e.component.getDataSource(); // move to menuItems.push( { text : "Move to New Group...", toGroupName : null, toGroupId : null, fromGroupId : itemData.groupId, id : itemData.id, display : itemData.display, onItemClick : function( e ) { let reportData = e.itemData; let newGroupForm = null; let newGroupPopup = $("
").dxPopup( { title : "Move to new group", width : "auto", height : "auto", hideOnOutsideClick : true, toolbarItems : [ { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Cancel", onClick : function( e ) { newGroupPopup.hide(); } } }, { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Submit", type : "default", onClick : function( e ) { if( newGroupForm.validate().isValid ) { let newGroupName = newGroupForm.option( "formData").groupName; let newGroupId = -1; let maxId = -1; ds.store().load().done( function( data ) { data.forEach( function( i ) { if( i.id > maxId ) { maxId = i.id; } if( i.type == "group" && i.display == newGroupName ) { newGroupId = i.id; } }) }) if( newGroupId == -1 ) newGroupId = maxId + 1; groupedReportsStore.push( [ { type : "insert", data : { id : newGroupId, display : newGroupName, type : "group", expanded : true } } ]) reportData.toGroupId = newGroupId; reportData.toGroupName = newGroupName; reportData.isNewGroup = true; moveReport( reportData ) newGroupPopup.hide(); } } } } ], contentTemplate : function() { newGroupForm = $("
").dxForm( { items : [ { dataField : "groupName", label : { visible : false }, isRequired : true, editorType : "dxTextBox", editorOptions : { placeholder : "group name", maxLength : 200, width : 200 } } ] }).dxForm( "instance" ); return newGroupForm.element(); }, onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); newGroupForm.dispose(); }, onShown : function( e ) { newGroupForm.getEditor( "groupName").focus(); } }).appendTo( $("body") ).dxPopup( "instance" ) newGroupPopup.show(); } } ); ds.store().load().done( function( data ) { // data.forEach( function( i ) { // if( i.type == "group" && i.id != itemData.groupId && i.id != 2 ) { // moveToItems.push( { // text : i.display, toGroupName : i.display, toGroupId : i.id, fromGroupId : itemData.groupId, id : itemData.id, display : itemData.display, // onItemClick : function( e ) { moveReport( e.itemData )} // }) // } // }) let selectItems = []; data.forEach( function( i ) { if( i.type == "group" && i.id != itemData.groupId && i.id != 2 ) { selectItems.push( { text : i.display, toGroupName : i.display, toGroupId : i.id, fromGroupId : itemData.groupId, id : itemData.id, display : itemData.display, onItemClick : function( e ) { moveReport( e.itemData )} }) } }) if( selectItems.length ) { menuItems.push( { closeMenuOnClick : false, template : function() { let cxMenu = this; return $("
").dxSelectBox( { placeholder : "Move to Existing Group...", dataSource : { paginate : false, store : { type : "array", data : selectItems, key : "toGroupId" } }, displayExpr : "toGroupName", onSelectionChanged : function( e ) { cxMenu.hide(); let selectedGroup = e.component.option( "selectedItem" ) moveReport( selectedGroup ); } }) } }) } }) // menuItems.push( { // text : "Move to", items : moveToItems // }) // remove if( !( itemData.groupId == 1 || itemData.groupId == 2 )) { menuItems.push( { text : "Remove from this group", toGroupName : null, toGroupId : 1, fromGroupId : itemData.groupId, id : itemData.id, display : itemData.display, onItemClick : function( e ) { moveReport( e.itemData )} } ) } menuItems.push( { text : "Delete this report", toGroupName : null, toGroupId : 2, fromGroupId : itemData.groupId, id : itemData.id, display : itemData.display, onItemClick : function( e ) { moveReport( e.itemData )} } ) } else { // the only option for a deleted items is to undelete menuItems.push( { text : "Undelete", toGroupName : null, toGroupId : 1, fromGroupId : itemData.groupId, id : itemData.id, display : itemData.display, onItemClick : function( e ) { moveReport( e.itemData ) } }) } } if( menuItems.length ) e.items = menuItems; } }).dxTreeList("instance") let popup = $("
").dxPopup( { height : "50vh", width : "33vw", hideOnOutsideClick : true, title : "Manage Report Groups", onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); }, toolbarItems : [ { toolbar : "bottom", location : "before", template : function() { return $("
").text( "Right click groups/reports for actions" ); } }, { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Cancel", onClick : function() { popup.hide(); } } }, { toolbar : "bottom", location : "after", widget : "dxButton", options : { type : "default", text : "Save", onClick : function() { let saveData = []; let deleteCount = 0; let store = groupedReportsTreeList.getDataSource().store(); store.load().done( function( theData ) { theData.forEach( function( report ) { if( report.type != "report") return; if( report.groupId == 1) { saveData.push( { savedReportId : report.savedReportId, userReportGroup : null } ) } else if ( report.groupId == 2 ) { saveData.push( { savedReportId : report.savedReportId, userReportGroup : null, delete : true } ) deleteCount++; } else { store.byKey( report.groupId ).done( function( group ) { saveData.push( { savedReportId : report.savedReportId, userReportGroup : group.display } ) }) } }) }) let confirmationPromise = $.Deferred() if( deleteCount ) { let confirmPopup = $("
").dxPopup( { showTitle : false, height : "auto", width : "auto", contentTemplate : function() { return $("

").text( `With these changes, ${deleteCount} report(s) will be deleted. Continue?` ) }, toolbarItems : [ { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Cancel", onClick : function( e ) { confirmPopup.hide(); confirmationPromise.reject(); } } }, { toolbar : "bottom", location : "after", widget : "dxButton", options : { text : "Continue", type : "default", onClick : function( e ) { confirmPopup.hide(); confirmationPromise.resolve(); } } } ], onHidden : function( e ) { e.component.element().remove(); e.component.dispose(); } }).appendTo( $("body") ).dxPopup( "instance" ); confirmPopup.show(); } else { confirmationPromise.resolve(); } confirmationPromise.done( function() { Fse.Ajax.performAction( { object : "RPT.saveReportGroups", data : saveData }).done( function( result ) { savePromise.resolve( result ); }) popup.hide(); }) } } } ], contentTemplate : function() { return $("

").dxBox( { height : "100%", width : "100%", direction : "row", items : [ { ratio : 1, template : function() { return groupedReportsTreeList.element(); } } // , // { // ratio : 1, // template : function() { // return ungroupedReportsList.element(); // } // } ] }) return $("

").text( "Manager User Groups Goes Here" ); } }).appendTo( $("body") ).dxPopup("instance"); popup.show(); return savePromise; } ReportCenter.prototype._runReport = function() { let instance = this; let runAccepted = false; if( Fse.FormManager.submit( document.frm_reportCenter, false )) { let oRequest; if( document.getElementById( "rc_method_email" ).checked ) { if( confirm( "Delivery method is Email. Send report to '" + document.forms.frm_reportCenter.elements.rc_recipients.value + "'?" )) { oRequest = Fse.Ajax.sendForm( document.frm_reportCenter ); } } else { /* var oSelect = document.getElementById( "reportSelect" ); var bUseVersion2 = oSelect.options[oSelect.selectedIndex].getAttribute( "fse:version" ) == "2"; // TODO: figure this out if( bUseVersion2 ) { oRequest = Fse.Ajax.sendForm( document.frm_reportCenter ); } else { document.frm_reportCenter.submit(); }*/ oRequest = Fse.Ajax.sendForm( document.frm_reportCenter ); } if( oRequest ) { runAccepted = true; instance._reportSubmitted( oRequest ); } } return runAccepted; } ReportCenter.prototype._reportSubmitted = function( oRequest ) { let instance = this; var _r = oRequest; if( _r && _r.xhRequest ) { _r = _r.xhRequest; } if( ! _r ) { return; } var nUserReportRequest = _r.getResponseHeader( "x-fse-deferred-report" ); if( nUserReportRequest ) { Fse.RPT.showWaitingForReportDialog( nUserReportRequest ); } }; ReportCenter.prototype._deleteReport = function() { let instance = this; let currentReport = instance.getCurrentReport(); if( currentReport && currentReport.savedReportId ) { if( confirm( "Are you sure you want to delete the saved report '" + currentReport.userReportName + "'?" )) { Fse.Ajax.performAction( { object : "RPT.deleteSavedReport", data : { savedReportId : currentReport.savedReportId } }).done( function( result ) { window.location.href = Fse.Util.updateURL( window.location.href, { reportCategory : "$ALL" } ); }) } } }; ReportCenter.prototype._saveReport = function() { let instance = this; if( Fse.FormManager.submit( document.frm_reportCenter, false )) { // get the savedReportId if any let _savedReportId = 0; let currentReport = instance.getCurrentReport(); if( currentReport && currentReport.savedReportId ) { _savedReportId = currentReport.savedReportId; } let srp = new SaveReportPopup( { savedReportId : _savedReportId, reportCode : document.frm_reportCenter.elements.rc_report.value, frm_reportCenter : Fse.FormManager.toQueryString( document.frm_reportCenter ) }); let savePromise = srp.show(); savePromise.done( function( saveResult ) { window.location.href = Fse.Util.updateURL( window.location.href, { reportCategory : "$SAVED", srid : saveResult.srid } ); // if( oReportSelect ) { // let oOption = oReportSelect.options[oReportSelect.selectedIndex]; // let attrVal = oOption.getAttribute( "fse:savedReportId" ); // if( attrVal && attrVal == saveResult.srid ) { // Fse.RPT.reportChanged( oReportSelect ); // } else { // window.location.href = Fse.Util.updateURL( window.location.href, { reportCategory : "$SAVED", srid : saveResult.srid } ); // } // } }) } };