//import * as jsClasses from './jsClasses.js'; //import moment from 'moment'; /* globals userRole, Logger, ConsumptionValue, accountPrivilegesDefault, Account, OEMeasurements, ElementOuCombi, MeasurementCSRD, MeasureStructure, Helper, ElementSet, ElementSetCSRD, AccountPrivilegesDefault, DFLCriteriaSet, Measurement, ConsumptionEntityCategory */ /* globals moment */ // eslint-disable-next-line no-redeclare /* globals Elemnt */ // Init global variables var userObj=null; var jwtToken; var apiHost=""; var environment=""; //var websiteUrl=""; var zipData; var settingsObj=null; var externalCallFlag=false; var mediaQueryMatchMDmaxWidth = window.matchMedia('(max-width: 991.98px)'); //var doNotLoadDefaultPage=false; var nrGlobalDataPreloaded=0; //moment.tz.setDefault('Europe/Berlin'); //console.log('MOMENT GUESS', moment.tz.guess(true), moment.tz.name); var dataTableObj; //var dummy123="xyz"; // Tmp test // ### DOCUMENT READY FUNCTIONS $(document).ready(function() { // Identify environment and adjust configuration settings accordingly if ($("#env").val()=="dev") { $('#headerEnvironment').addClass('visible').removeClass('invisible'); environment="dev"; //websiteUrl="https://www.estate-insights.com"+window.location.pathname.substring(0,window.location.pathname.lastIndexOf('/')+1); } else if ($("#env").val()=="prod_staging") { $('#headerEnvironment').addClass('visible').removeClass('invisible'); environment="prod_staging"; //websiteUrl="https://www.estate-insights.com"+window.location.pathname.substring(0,window.location.pathname.lastIndexOf('/')+1); } else { $('#headerEnvironment').addClass('visible').removeClass('invisible'); environment="prod"; //websiteUrl="https://www.estate-insights.com"+window.location.pathname.substring(0,window.location.pathname.lastIndexOf('/')+1); } if ($("#env").val()===null || $("#env").val()=='') $("#headerEnvironment").html("#"+$("#env").val().toString().toUpperCase()); apiHost=$("#apihost").val().toString(); if (userObj!==null) { // User specific frontend appearance $('#subtitleUserRole').empty().text(userRole[userObj.role]); $('#subtitleAccountName').empty().text((userObj.accountObj!==null ? userObj.accountObj.name : '')); let apiUrl='php/getAccountLogo.php?accountId='+(userObj.accountObj!==null ? userObj.accountObj.id : 'null'); $('#accountAvatar').empty(); const tsStartApi=Date.now(); //$.ajax({type:'GET', url:apiUrl, contentType: "application/json; charset=utf-8", dataType: 'JSON', headers: { 'Authorization': 'Bearer '+jwtToken }, $.ajax({type:'GET', url:apiUrl, contentType: "application/json; charset=utf-8", dataType: 'JSON', success: function (data) { Logger.log('FRONTEND_CLIENT_API_ACCOUNTLOGO', 'OK', { apiUrl: apiUrl, requestDurationMs: Date.now()-tsStartApi, data: data, id: 1 }); //$('#accountAvatar').html('Account-Logo'); if (data.dummy===true) $('#accountAvatar').html('Account-Logo'); else $('#accountAvatar').html('Account-Logo'); //changeLogoInTool((userObj.accountObj!==null ? userObj.accountObj.id : null)); } }).fail(function(xhr, status, error){ handleFailedApiCall('FRONTEND_CLIENT_API_ACCOUNTLOGO', apiUrl, xhr, status, error, 'ERROR_SYSTEM_APIREQUEST'); }); } // Show spinner & block user interaction with a backdrop until global data load is finished $("div.header h1.header-title").text(''); $("#contentLoad").html('
Loading...
'); if ($('#loginSuccessful').length) { // HTML element from index.html exists //console.log(userObj); // Log userPlatform here (always called after login or when website is reloaded in browser) Logger.log('FRONTEND_CLIENT_PLATFORM', 'OK', { userPlatform: Logger.getUserPlatformObj() }); // If no account exists and user is master-admin: show modal to select and set account if (userObj.role==3 && userObj.accountObj===null) { changeAccount(); } else { //setAccountPrivilegesInFrontend(); loadGlobalData(); } } //doNotLoadDefaultPage=false; // Fix multiple-modal behavior (when 1 modal is closed, the modal thereunder is not scrollable anymore: https://stackoverflow.com/questions/28077066/bootstrap-modal-issue-scrolling-gets-disabled) //$('div.modal').on('hidden.bs.modal', 'body', function(e) { // A modal is closed $('body').on('hidden.bs.modal', 'div.modal', function(e) { // A modal is closed //console.log('Modal hidden'); if ($('div.modal.show').length) { // Another modal is still open //console.log('Other Modal still shown'); $('body').addClass('modal-open'); } }); //$('[data-toggle="tooltip"]').tooltip({ boundary: 'window' }); }); /* function changeLogoInTool(accountId) { // Temporary solution to show other logo and formatting for a specific Account console.log(accountId, $('img.logoInTool')); let newLogoSet=false; if (accountId!==null) { if (environment=='prod' && accountId==56) { // 56 is Demo-Account on PROD1 $('img.logoInTool').attr('src', 'img/SustainGoals_Logo.svg'); $('img.logoInTool').attr('style', 'width: 170px;'); newLogoSet=true; } else if (environment=='dev' && (accountId==147 || accountId==72)) { // Account 147=Test CSRD Janky, 72=Dekobe ESG Demo $('img.logoInTool').attr('src', 'img/SustainGoals_Logo.svg'); $('img.logoInTool').attr('style', 'width: 170px;'); newLogoSet=true; } } if (newLogoSet===false) { $('img.logoInTool').attr('src', 'img/DeKoBeESG_Logo_108x30.png'); $('img.logoInTool').attr('style', ''); } } */ function setAccountPrivilegesInFrontend() { // Set account privileges if ('accountPrivilegesObj' in userObj.accountObj && userObj.accountObj.accountPrivilegesObj!==null ) { //console.log(userObj.accountObj.accountPrivilegesObj); // MODULE ESG Measurements if (accountPrivilegesDefault.timestamp_deactivated_measurementsModule===null /*&& userObj.role!=3*/) { if ('measurementsModule' in userObj.accountObj.accountPrivilegesObj && userObj.accountObj.accountPrivilegesObj.measurementsModule===true) { //console.log('esg > measurement > ACTIVE'); // Complete module is active $('#dashboard_measurements, #measurement_my, #measurement_measurement, #measurement_approval, #admin_elements, #admin_oes, #admin_elementsoes').removeClass('d-none'); $('#dashboard_measurements_disabled, #measurement_my_disabled, #measurement_measurement_disabled, #measurement_approval_disabled, #admin_elements_disabled, #admin_oes_disabled, #admin_elementsoes_disabled').addClass('d-none'); } else { //console.log('esg > measurement > INACTIVE'); // Complete module is inactive $('#dashboard_measurements, #measurement_my, #measurement_measurement, #measurement_approval, #admin_elements, #admin_oes, #admin_elementsoes').addClass('d-none'); $('#dashboard_measurements_disabled, #measurement_my_disabled, #measurement_measurement_disabled, #measurement_approval_disabled, #admin_elements_disabled, #admin_oes_disabled, #admin_elementsoes_disabled').removeClass('d-none'); } } // MODULE ESG Measures if (accountPrivilegesDefault.timestamp_deactivated_measuresModule===null /*&& userObj.role!=3*/) { if ('measuresModule' in userObj.accountObj.accountPrivilegesObj && userObj.accountObj.accountPrivilegesObj.measuresModule===true) { // Complete module is active $('#dashboard_measures, #measures_my, #measures_archive, #admin_measures').removeClass('d-none'); $('#dashboard_measures_disabled, #measures_my_disabled, #measures_archive_disabled, #admin_measures_disabled').addClass('d-none'); } else { // Complete module is inactive $('#dashboard_measures, #measures_my, #measures_archive, #admin_measures').addClass('d-none'); $('#dashboard_measures_disabled, #measures_my_disabled, #measures_archive_disabled, #admin_measures_disabled').removeClass('d-none'); } } // MODULE Consumption if (accountPrivilegesDefault.timestamp_deactivated_consumptionModule===null /*&& userObj.role!=3*/) { if ('consumptionModule' in userObj.accountObj.accountPrivilegesObj && userObj.accountObj.accountPrivilegesObj.consumptionModule===true) { // Complete module is active $('#consumption_title, #consumption_values, #consumption_values_archive, #consumption_dashboard, #consumption_transfer, #consumption_approval, #admin_consumption').removeClass('d-none'); $('#consumption_title_disabled, #consumption_values_disabled, #consumption_values_archive_disabled, #consumption_dashboard_disabled, #consumption_transfer_disabled, #consumption_approval_disabled, #admin_consumption_disabled').addClass('d-none'); } else { // Complete module is inactive $('#consumption_title, #consumption_values, #consumption_values_archive, #consumption_dashboard, #consumption_transfer, #consumption_approval, #admin_consumption').addClass('d-none'); $('#consumption_title_disabled, #consumption_values_disabled, #consumption_values_archive_disabled, #consumption_dashboard_disabled, #consumption_transfer_disabled, #consumption_approval_disabled, #admin_consumption_disabled').removeClass('d-none'); } } // MODULE CSRD Measurements if (accountPrivilegesDefault.timestamp_deactivated_csrdMeasurementsModule===null /*&& userObj.role!=3*/) { if ('csrdMeasurementsModule' in userObj.accountObj.accountPrivilegesObj && userObj.accountObj.accountPrivilegesObj.csrdMeasurementsModule===true) { // Complete module is active $('#nav1_csrd_measurements_dashboard, #nav1_csrd_measurements_my, #nav1_csrd_measurements_measurement, #nav1_csrd_measurements_approval, #nav1_csrd_masterdata_elements, #nav1_csrd_masterdata_oes, #nav1_csrd_masterdata_elementsoes').removeClass('d-none'); $('#nav1_csrd_measurements_dashboard_disabled, #nav1_csrd_measurements_my_disabled, #nav1_csrd_measurements_measurement_disabled, #nav1_csrd_measurements_approval_disabled, #nav1_csrd_masterdata_elements_disabled, #nav1_csrd_masterdata_oes_disabled, #nav1_csrd_masterdata_elementsoes_disabled').addClass('d-none'); } else { // Complete module is inactive $('#nav1_csrd_measurements_dashboard, #nav1_csrd_measurements_my, #nav1_csrd_measurements_measurement, #nav1_csrd_measurements_approval, #nav1_csrd_masterdata_elements, #nav1_csrd_masterdata_oes, #nav1_csrd_masterdata_elementsoes').addClass('d-none'); $('#nav1_csrd_measurements_dashboard_disabled, #nav1_csrd_measurements_my_disabled, #nav1_csrd_measurements_measurement_disabled, #nav1_csrd_measurements_approval_disabled, #nav1_csrd_masterdata_elements_disabled, #nav1_csrd_masterdata_oes_disabled, #nav1_csrd_masterdata_elementsoes_disabled').removeClass('d-none'); } } // MODULE CSRD Measures if (accountPrivilegesDefault.timestamp_deactivated_csrdMeasuresModule===null /*&& userObj.role!=3*/) { if ('csrdMeasuresModule' in userObj.accountObj.accountPrivilegesObj && userObj.accountObj.accountPrivilegesObj.csrdMeasuresModule===true) { // Complete module is active $('#nav1_csrd_measures_dashboard, #nav1_csrd_measures_measures, #nav1_csrd_measures_archive, #nav1_csrd_masterdata_measures').removeClass('d-none'); $('#nav1_csrd_measures_dashboard_disabled, #nav1_csrd_measures_measures_disabled, #nav1_csrd_measures_archive_disabled, #nav1_csrd_masterdata_measures_disabled').addClass('d-none'); } else { // Complete module is inactive $('#nav1_csrd_measures_dashboard, #nav1_csrd_measures_measures, #nav1_csrd_measures_archive, #nav1_csrd_masterdata_measures').addClass('d-none'); $('#nav1_csrd_measures_dashboard_disabled, #nav1_csrd_measures_measures_disabled, #nav1_csrd_measures_archive_disabled, #nav1_csrd_masterdata_measures_disabled').removeClass('d-none'); } } // ### AGGREGATION // ESG // If all child entries of nav entry 'ESG > Messwerte' are deactivated, deactivate also the parent nav entry if ($('#dashboard_measurements').hasClass('d-none') && $('#measurement_my').hasClass('d-none') && $('#measurement_measurement').hasClass('d-none') && $('#measurement_approval').hasClass('d-none')) { $('#nav1_esg_measurements').addClass('d-none'); $('#nav1_esg_measurements_disabled').removeClass('d-none'); } else { $('#nav1_esg_measurements').removeClass('d-none'); $('#nav1_esg_measurements_disabled').addClass('d-none'); } // If all child entries of nav entry 'ESG > Maßnahmen' are deactivated, deactivate also the parent nav entry if ($('#dashboard_measures').hasClass('d-none') && $('#measures_my').hasClass('d-none') && $('#measures_archive').hasClass('d-none')) { $('#nav1_esg_measures').addClass('d-none'); $('#nav1_esg_measures_disabled').removeClass('d-none'); } else { $('#nav1_esg_measures').removeClass('d-none'); $('#nav1_esg_measures_disabled').addClass('d-none'); } // If all child entries of nav entry 'ESG > Stammdaten' are deactivated, deactivate also the parent nav entry if ($('#admin_elements').hasClass('d-none') && $('#admin_oes').hasClass('d-none') && $('#admin_elementsoes').hasClass('d-none') && $('#admin_measures').hasClass('d-none')) { $('#nav1_esg_masterdata').addClass('d-none'); $('#nav1_esg_masterdata_disabled').removeClass('d-none'); } else { $('#nav1_esg_masterdata').removeClass('d-none'); $('#nav1_esg_masterdata_disableds').addClass('d-none'); } // If all child entries of nav entry 'ESG' are deactivated, deactivate also the parent nav entry if ($('#nav1_esg_measurements').hasClass('d-none') && $('#nav1_esg_measures').hasClass('d-none') && $('#nav1_esg_masterdata').hasClass('d-none')) { $('#nav1_esg_title').addClass('d-none'); $('#nav1_esg_title_disabled').removeClass('d-none'); } else { $('#nav1_esg_title').removeClass('d-none'); $('#nav1_esg_title_disabled').addClass('d-none'); } // CSRD // If all child entries of nav entry 'ESG > Messwerte' are deactivated, deactivate also the parent nav entry if ($('#nav1_csrd_measurements_dashboard').hasClass('d-none') && $('#nav1_csrd_measurements_my').hasClass('d-none') && $('#nav1_csrd_measurements_measurement').hasClass('d-none') && $('#nav1_csrd_measurements_approval').hasClass('d-none')) { $('#nav1_csrd_measurements').addClass('d-none'); $('#nav1_csrd_measurements_disabled').removeClass('d-none'); } else { $('#nav1_csrd_measurements').removeClass('d-none'); $('#nav1_csrd_measurements_disabled').addClass('d-none'); } // If all child entries of nav entry 'ESG > Maßnahmen' are deactivated, deactivate also the parent nav entry if ($('#nav1_csrd_measures_dashboard').hasClass('d-none') && $('#nav1_csrd_measures_measures').hasClass('d-none') && $('#nav1_csrd_measures_archive').hasClass('d-none')) { $('#nav1_csrd_measures').addClass('d-none'); $('#nav1_csrd_measures_disabled').removeClass('d-none'); } else { $('#nav1_csrd_measures').removeClass('d-none'); $('#nav1_csrd_measures_disabled').addClass('d-none'); } // If all child entries of nav entry 'ESG > Stammdaten' are deactivated, deactivate also the parent nav entry if ($('#nav1_csrd_masterdata_elements').hasClass('d-none') && $('#nav1_csrd_masterdata_oes').hasClass('d-none') && $('#nav1_csrd_masterdata_elementsoes').hasClass('d-none') && $('#nav1_csrd_masterdata_measures').hasClass('d-none')) { $('#nav1_csrd_masterdata').addClass('d-none'); $('#nav1_csrd_masterdata_disabled').removeClass('d-none'); } else { $('#nav1_csrd_masterdata').removeClass('d-none'); $('#nav1_csrd_masterdata_disableds').addClass('d-none'); } // If all child entries of nav entry 'ESG' are deactivated, deactivate also the parent nav entry if ($('#nav1_csrd_measurements').hasClass('d-none') && $('#nav1_csrd_measures').hasClass('d-none') && $('#nav1_csrd_masterdata').hasClass('d-none')) { $('#nav1_csrd_title').addClass('d-none'); $('#nav1_csrd_title_disabled').removeClass('d-none'); } else { $('#nav1_csrd_title').removeClass('d-none'); $('#nav1_csrd_title_disabled').addClass('d-none'); } } // @ts-ignore $('[data-toggle="tooltip"]').tooltip({ boundary: 'window' }); } function loadGlobalData() { var tsStartLoadGlobalData=moment().valueOf(); $('body').append(''); // Load global data nrGlobalDataPreloaded=0; var nrGlobalDataToBeLoaded=8; //7 var loadedGlobalData=''; // @ts-ignore Elemnt.loadElementStructureFromApi([function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ElementStructure'; }]); OEMeasurements.loadOUStructureFromApi([function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'OUStructure'; }]); ElementOuCombi.loadElementOUCombisFromApi(function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ElementOUCombis'; }); if (userObj.role==3) ElementSet.getAllActiveElementSets(function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ActiveElementSets'; }); else { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ActiveElementSets_NOT_REQUIRED'; } if (userObj.role==3) ElementSetCSRD.getAllActiveElementSets(function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ActiveCSRDElementSets'; }); else { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ActiveCSRDElementSets_NOT_REQUIRED'; } MeasureStructure.getAllMeasures(function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'Measures'; }); AccountPrivilegesDefault.loadDefaultAccountPrivilegesFromApi(function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'AccountPrivilegesDefault'; }); if (userObj.accountObj.isDFLCriteriaActive()) DFLCriteriaSet.loadDFLCriteriaStructureFromApi([function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'DFLCriterias'; }]); else { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'DFLCriterias_NOT_REQUIRED'; } //if (userObj.accountObj.accountPrivilegesObj.isConsumptionModuleActive()) ConsumptionEntityCategory.loadActiveCategories([function() { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ConsumptionEntityCategory'; }]); //else { nrGlobalDataPreloaded++; loadedGlobalData+=(loadedGlobalData=='' ? '' : ', ')+'ConsumptionEntityCategory_NOT_REQUIRED'; } // Wait until global preload data are loaded Helper.wait(100 , 100 , function() { // Check if all global preload data were loaded (100 loops * 100ms = 10sec max waiting time) //console.log('loop check'); if (nrGlobalDataPreloaded>=nrGlobalDataToBeLoaded) return true; else return false; }, function() { //console.log('MilliSec required to load global data: '+(moment().valueOf()-tsStartLoadGlobalData)+'ms'); $('#backdropDataLoad').remove(); setAccountPrivilegesInFrontend(); // Check if an external call is supposed to be shown OR Load default page //if (!doNotLoadDefaultPage) //console.log('AAA'); if (!handleExternalCalls()) { //console.log('BBB'); clickOnNav1Item(['dashboard'], null, true); } //console.log('CCC'); //handleExternalCalls(); }, function() { //console.log('error', nrGlobalDataPreloaded); $("div.header h1.header-title").text('Seite bitte neu laden'); $("#contentLoad").html(''); Helper.showToastr('Fehler', 'Globale Daten konnten nicht geladen werden. Seite bitte neu laden.', 'error'); Logger.log('FRONTEND_CLIENT_API_GLOBALDATA', 'ERROR_SYSTEM', { nrGlobalDataPreloaded: nrGlobalDataPreloaded, loadedGlobalData: loadedGlobalData }); } ); } function changeAccount() { // Fill modal with accounts Account.getAllAccounts(function(dataFromApi) { $('#modalSelectAccountBody').empty(); //console.log(dataFromApi); //if (dataFromApi!==null && 'data' in dataFromApi && Array.isArray(dataFromApi.data)) { if (dataFromApi!==null && Array.isArray(dataFromApi)) { // Sort accounts alphabetically dataFromApi.sort(function(a,b) { if (a.name > b.name) return 1; else if (a.name < b.name) return -1; else return 0; }); for (let accountObj of dataFromApi) { if (accountObj.timestamp_deactivated===null) { let $div=$('
') .addClass('col-3 mb-3 pretendLink') .append($('').text(accountObj.name).click(function() { // Assign account to current user //console.log(accountObj); userObj.accountObj=Account.createAccountObjByApiData(accountObj); // Adjust frontend $('#subtitleAccountName').empty().text(userObj.accountObj.name); let apiUrl='php/getAccountLogo.php?accountId='+userObj.accountObj.id; $('#accountAvatar').empty(); const tsStartApi=Date.now(); //$.ajax({type:'GET', url:apiUrl, contentType: "application/json; charset=utf-8", dataType: 'JSON', headers: { 'Authorization': 'Bearer '+jwtToken }, $.ajax({type:'GET', url:apiUrl, contentType: "application/json; charset=utf-8", dataType: 'JSON', success: function (data) { Logger.log('FRONTEND_CLIENT_API_ACCOUNTLOGO', 'OK', { apiUrl: apiUrl, requestDurationMs: Date.now()-tsStartApi, data: data, id: 2 }); if (data.dummy===true) $('#accountAvatar').html('Account-Logo'); else $('#accountAvatar').html('Account-Logo'); //changeLogoInTool(accountObj.pk_accounts); } }).fail(function(xhr, status, error){ handleFailedApiCall('FRONTEND_CLIENT_API_ACCOUNTLOGO', apiUrl, xhr, status, error, 'ERROR_SYSTEM_APIREQUEST'); }); // TODO: Error handling // Load global data //setAccountPrivilegesInFrontend(); loadGlobalData(); // Hide modal $('#modalSelectAccount').modal('hide'); })) ; $('#modalSelectAccountBody').append($div); } } } /* $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX YYYYYYY ZZZZZZZZ QQQQQQQQQ')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); $('#modalSelectAccountBody').append($('
').addClass('col-3 mb-3').text('XXXXX')); */ $('#modalSelectAccountBodySpinner').removeClass('d-none').addClass('d-none'); $('#modalSelectAccountBody').removeClass('d-none'); }); $('#modalSelectAccount').modal('show'); } // Clicking on a menu/nav1 item // nav1ElementIds: IDs of the html nav elements to be put on "active" var currentPage=null; var tour=null; function clickOnNav1Item(nav1ElementIds, callback=null, nonUserClickCallOfThisFunction=false, extCallFlag=false) { currentPage=nav1ElementIds[nav1ElementIds.length-1]; //console.log(currentPage, nav1ElementIds); externalCallFlag=extCallFlag; // The JS datatable object (including triggers and events) is not destroyed only because of content area is loaded with new content. // The HTML table is deleted, but not the JS datatable object. And it still triggers on other pages - problem. // This code here is used to handle these "orphaned" datatables and destroyes them. // (see ticket EI-680) // Simply destroy all still existing datatable objects since last clickOnNav1Item() //destroyAllDataTableObjects(); // Remove active class from all nav elements $("#sidebar ul.sidebar-nav li.sidebar-item").removeClass('active'); // Add active class to relevant nav elements nav1ElementIds.forEach(function(item, index, array) { $("#"+item).addClass("active"); }); // Destroy all data tables var datatablesAry=$.fn.dataTable.tables(); if (Array.isArray(datatablesAry) && datatablesAry.length>0) { for (var i=0; i
Loading...
'); $("#contentLoad").load(pathToIncludeFile, function(response, status, xhr) { if(status == "success") { if (callback !== null) callback(); // can be used to execute some additional code on loaded page } else if(status == "error") { var errorMsg=((xhr!==null && 'responseJSON' in xhr && xhr.responseJSON!==null && xhr.responseJSON!==undefined && 'message' in xhr.responseJSON) ? xhr.responseJSON.message : ''); Logger.log('FRONTEND_CLIENT_LOADCONTENTPAGE', 'ERROR_SYSTEM_DATALOAD', { status: status, errorMsg: errorMsg, pathToIncludeFile: pathToIncludeFile }); //console.log("Error: " + xhr.status + ": " + xhr.statusText); } }); } if (!nonUserClickCallOfThisFunction) Logger.log('FRONTEND_CLIENT_CLICK', 'OK', { pathToFile: (pathToIncludeFile!==null ? pathToIncludeFile : pathToLoadFile), targetPageId: nav1ElementIds[nav1ElementIds.length-1]}); } function waitForCssElement(selector, callback) { if (jQuery(selector).length) { callback(); } else { //console.log('Wait for element '+selector); setTimeout(function() { waitForCssElement(selector, callback); }, 100); } } function waitForVariableInitalized(variableName, callback) { if (window[variableName]) { callback(); } else { //console.log('Wait for variable '+variableName+' being initalized.'); setTimeout(function() { waitForVariableInitalized(variableName, callback); }, 100); } } function wait(ms){ var start = new Date().getTime(); var end = start; while(end < start + ms) { end = new Date().getTime(); } } /* function destroyAllDataTableObjects() { // TODO NOT USED ANYMORE // The JS datatable object (including triggers and events) is not destroyed only because of content area is loaded with new content. // The HTML table is deleted, but not the JS datatable object. And it still triggers on other pages - problem. // This code here is used to handle these "orphaned" datatables and destroyes them. // (see ticket EI-680) // Simply destroy all still existing datatable objects since last clickOnNav1Item() for (dataTableObjX of dataTableObjAry) { if (dataTableObjX!==null && dataTableObjX!==undefined) dataTableObjX.destroy(true); // Destroy existing table } dataTableObjAry=[]; // Also delete all now destroyed datatable objects from the array } */ function getTimestampWithRandomSuffix() { var ts=new Date(); return ts.getFullYear().toString()+'_'+(ts.getMonth()+1).toString()+'_'+ts.getDate().toString()+'_'+ts.getHours().toString()+'_'+ts.getMinutes().toString()+'_'+ts.getSeconds().toString()+'_'+ts.getMilliseconds().toString()+'_'+Math.round(Math.random()*1000000000); } function handleExternalCalls() { let externalCallHandled=false; const queryString = window.location.search; const urlParams = new URLSearchParams(queryString); // ### Handles external calls to Measurements /* Example: https://www.dekobe-esg-dev.de/esg-tool/?measurementId=123456789?utm_source=email_alert&utm_medium=email */ const measurementId = urlParams.get('measurementId'); const consumptionValueId = urlParams.get('consumptionValueId'); const csrdMeasurementId = urlParams.get('csrdMeasurementId'); if (measurementId!==null) { Logger.log('FRONTEND_CLIENT_EXTERNALCALL', 'OK', { measurementId: measurementId }); externalCallHandled=true; Measurement.showMeasurementFromExternal(measurementId); } else if (csrdMeasurementId!==null) { Logger.log('FRONTEND_CLIENT_EXTERNALCALL', 'OK', { csrdMeasurementId: csrdMeasurementId }); externalCallHandled=true; MeasurementCSRD.showMeasurementFromExternal(csrdMeasurementId); } else if (consumptionValueId!==null) { Logger.log('FRONTEND_CLIENT_EXTERNALCALL', 'OK', { consumptionValueId: consumptionValueId }); externalCallHandled=true; ConsumptionValue.showConsumptionValueFromExternal(consumptionValueId); } return externalCallHandled; } function handleFailedApiCall(event, apiUrl, xhr, status, error, eventStatus=null, additionalEventDetails=null) { console.log(xhr); console.log(status); console.log(error); var errorMsg=( (xhr!==null && 'responseJSON' in xhr && xhr.responseJSON!==null && xhr.responseJSON!==undefined && 'message' in xhr.responseJSON) ? xhr.responseJSON.message : // '' null ); if (errorMsg=='No message available') { // Default error message from Spring API errorMsg=null; } var errorMsgLog=null; if (xhr!==null) { if ('responseJSON' in xhr && xhr.responseText!==null) { errorMsgLog=xhr.responseText; } } var errorHttpCode=null; if (xhr!==null && 'status' in xhr) errorHttpCode=xhr.status; else if (xhr!==null && 'responseJSON' in xhr && xhr.responseJSON!==null && xhr.responseJSON!==undefined && 'status' in xhr.responseJSON) errorHttpCode=xhr.responseJSON.status; var eventDetails={ apiUrl: apiUrl, errorMsg: errorMsgLog, httpStatusCode: errorHttpCode }; if (additionalEventDetails!==null) { for (var prop in additionalEventDetails) { eventDetails[prop]=additionalEventDetails[prop]; } } Logger.log(event , (eventStatus!==null ? eventStatus : (errorHttpCode==501 ? 'ERROR_USER_APIREQUEST' : 'ERROR_SYSTEM_APIREQUEST') ) , eventDetails ); if (errorHttpCode==401) { // User is not authenticated (from Spring Security) // Log out and send load prompt window.location.href='?action=clear_login&msg=Bitte logge Dich erneut ein'; } else if (errorHttpCode==403) { // User is authenticated, but privileges are insufficient (i.e. call to resource is forbidden) (from Spring Security) //Helper.showToastr('Warnung', 'Die Benutzerrechte sind nicht ausreichend für diese Aktion.', 'warning'); Helper.showToastr('Fehler', (errorMsg===null ? 'Die Benutzerrechte sind nicht ausreichend für diese Aktion' : errorMsg)+' (403)', 'error'); } else if (errorHttpCode==429) { // User exeeded the rate limit quota //Helper.showToastr('Warnung', 'Die Benutzerrechte sind nicht ausreichend für diese Aktion.', 'warning'); Helper.showToastr('Fehler', 'Du hast im aktuellen Zeitraum zu viele Anfragen gestellt.', 'error'); } else if (errorHttpCode==500) { // From Controller in case of an exception //Helper.showToastr('Fehler', 'Es ist ein Fehler aufgetreten beim Aufrufen der API. (500)', 'error'); Helper.showToastr('Fehler', (errorMsg===null ? 'Es ist ein System-Fehler im Backend aufgetreten' : errorMsg)+' (500)', 'error'); } else if (errorHttpCode==501) { // From Controller in case of a user exception //Helper.showToastr('Fehler', 'Es ist ein Fehler aufgetreten beim Aufrufen der API. (501)', 'error'); Helper.showToastr('Fehler', (errorMsg===null ? 'Es ist ein User-Fehler im Backend aufgetreten' : errorMsg)+' (501)', 'error'); } else if (errorHttpCode==503) { // From Plesk/Webserver in case API daemon is not available window.location.href='?action=clear_login&msg=Die Anwendung ist zurzeit nicht erreichbar'; } else { //Helper.showToastr('Fehler', 'Es ist ein Fehler aufgetreten beim Aufrufen der API. (-)', 'error'); Helper.showToastr('Fehler', (errorMsg===null ? 'Es ist ein Fehler aufgetreten' : errorMsg)+' ('+errorHttpCode+')', 'error'); } }