Source: models/assetsparametershelper.js

/*
//
//  Class offers helper functions for 
//  rendering and organization of assets parameters
//
*/

const AssetsGroups = require('./assetsgroups');

/**
 * Class for handling of assets parameters for assets groups and their tabs and orders
 * @class
 */
class assetsparametershelper {

    /**
     * @constructor
     */
    constructor() {
        // always initialize all instance properties
    }

    /**
     * reads defined tabs for assets parameters from database
     * @param {integer} assetGroup id of asset group, asset parameter tabs shall be returned for
     * @param {function} callback rows or null
     */
    getAssetsParametersTabs(assetGroup, callback) {

        let query = "SELECT * FROM assets_parameters_tabs WHERE assetsGroup = ? AND state = 1 ORDER BY `order` ASC";
        console.log(`SELECT * FROM assets_parameters_tabs WHERE assetsGroup = ${assetGroup} AND state = 1 ORDER BY \`order\` ASC`)
        global.coreDb.all(query, [
            assetGroup
        ], (err, rows) => {
            if (err) {
                return null;
            } else {
                console.log('getAssetsParametersTab Count Tabs: ' + rows.length);
                return callback(rows);
            }
        });
    }

    /**
     * returns list of assets parameters for given assetGroup id
     * @param {integer} assetGroup id of assets group, parameters shall be returned for
     * @param {function} callback rows or null
     */
    getAssetsParametersForAssetGroup(assetGroup, callback) {
        console.log('getAssetsParametersForAssetGroup');
        let query = "SELECT assets_parameters.*, " +
            "`assets_parameters_tabs`.`order` AS taborder " +
            "FROM assets_parameters " +
            "LEFT JOIN assets_parameters_tabs ON assets_parameters.assetsParametersTab = assets_Parameters_tabs.id " +
            "WHERE assets_parameters.assetsGroup = ? AND assets_parameters.state = 1 " +
            "ORDER BY `assets_parameters_tabs`.`order` ASC";

        global.coreDb.all(query, [
            assetGroup
        ], (err, rows) => {
            if (err) {
                console.log('getAssetsParametersForAssetGroup: Error reading parameters: ' + err.message);
                return null;
            } else {
                console.log('getAssetsParametersForAssetGroup: found ' + rows.length + ' Parameters');
                return callback(rows);
            }
        });
    }



    /**
     * checks weather a value for the given assetsparameter exists in assets_parameters_store
     * @param {integer} assetsId id of asset the check shall be run for
     * @param {integer} assetsParametersId id of asset parameter the check shall be run for
     * @param {function} callback id of asstets_parameter_store if found, or false if not found
     */
    doesParameterExistInStore(assetsId, assetsParametersId, callback) {
        let query = "SELECT * FROM assets_parameters_store WHERE assetsId = ? AND assetsParametersId = ?";
        global.coreDb.all(query, [
            assetsId,
            assetsParametersId
        ], (err, rows) => {
            if (err) {
                return null;
            } else {
                if (rows.length > 0) {
                    console.log('Parameter to be updated exists in core database');
                    return callback(rows[0].id);
                } else {
                    console.log('Parameter to be updated DOES NOT exist in core database');
                    return callback(false);
                }
            }
        });
    }



    /**
     * updates Value in parameters Store
     * @param {integer} storeId id of object in table assets_parameters_store
     * @param {string} newValue new value as string
     * @param {string} interpretAs type of value as string
     * @param {function} callback callback function, success (true or false)
     */
    updateParameterInStore(storeId, fieldType, newValue, callback) {

        let query = '';
        switch (fieldType) {
            case 'string':
                query = "UPDATE assets_parameters_store SET valueStr = ? WHERE id = ?";
                break;
            case 'select':
                query = "UPDATE assets_parameters_store SET valueSelect = ? WHERE id = ?";
                break;
            case 'date':
                query = "UPDATE assets_parameters_store SET valueDate = ? WHERE id = ?";
                break;
            case 'integer':
                query = "UPDATE assets_parameters_store SET valueInt = ? WHERE id = ?";
                break;
            default:
                break;
        }

        global.coreDb.run(query,
            [
                newValue,
                storeId
            ],
            function (err) {
                if (err) {
                    console.log('ERROR updating asset parameter in core database: ' + err.message);
                    callback(false);
                } else {
                    callback(true);
                }
            });

    }

    /**
     * update parameter value to database table assets_parameters_store
     * @param {integer} assetId ID of asset this value has to be stored for
     * @param {integer} parameterId ID of parameter, this value is for
     * @param {string} parameterType type of parameter (string, select, integer)
     * @param {string} value value to be stored
     * @param {function} callback callback function (false in case of error, true if successfully written)
     */
    updateParameterValuesInDatabase(assetId, formData, parameters, callback) {
        var insertValuePart = '';
        console.log('updateParameterValuesInDatabase - 1');
        var updateQueries = [];
        var inserQueries = [];

        console.log('parameters: --------------------------------------');
        console.log(parameters);
        console.log('formData:-----------------------------------------');
        console.log(formData);
        console.log('--------------------------------------------------');

        global.coreDb.serialize(() => {
            parameters.forEach((parameter, index) => {
                console.log('updateParameterValuesInDatabase - 2');
                let fieldValue = formData['ap_' + parameter.alias];
                let fieldType = parameter.type;
                var interpretAs = '';
                var valueStr = null;
                var valueSelect = null;
                var valueInt = null;
                var valueDate = null;
                console.log('interpret As: ' + interpretAs);
                switch (fieldType) {
                    case 'string':
                        interpretAs = 'valueStr';
                        valueStr = fieldValue;
                        break;
                    case 'select':
                        interpretAs = 'valueSelect';
                        valueSelect = fieldValue;
                        break;
                    case 'integer':
                        interpretAs = 'valueInt';
                        valueInt = fieldValue;
                        break;
                    case 'date':
                        interpretAs = "valueDate";
                        valueDate = fieldValue;
                        break;
                    default:
                        interpretAs = 'valueStr';
                        valueStr = fieldValue;
                        break;
                }


                let queryInsertOrReplace = "INSERT OR REPLACE INTO assets_parameters_store (id, assetsParametersId, assetsId, valueStr, valueInt, valueSelect, valueDate, interpretAs) " +
                    "VALUES (  " +
                    "(    SELECT id " +
                    "FROM assets_parameters_store " +
                    "WHERE assetsParametersId = ? " +
                    "AND assetsId = ?), " +
                    "?, " +
                    "?,  " +
                    "?, " +
                    "?, " +
                    "?, " +
                    "?, " +
                    "? " +
                    ");"

                global.coreDb.run(queryInsertOrReplace, [
                    parameter.id,
                    assetId,
                    parameter.id,
                    assetId,
                    valueStr,
                    valueInt,
                    valueSelect,
                    valueDate,
                    interpretAs
                ], (err, rows) => {
                    if (err) {
                        console.log('Error updating or inserting parameter: ' + err.message);
                        //return null;
                    } else {

                    }
                });
            })
        })
        console.log('finished Update of parameters');
        callback(true);

    }



    /**
     * writes parameter value to database table assets_parameters_store
     * @param {integer} newAssetId 
     * @param {object} formData 
     * @param {object} parameters 
     * @param {function} callback success (true or false)
     */
    persistParameterValuesInDatabase(newAssetId, formData, parameters, callback) {

        var insertValuePart = '';
        parameters.forEach((parameter, index) => {
            let fieldValue = formData['ap_' + parameter.alias];
            let fieldType = parameter.type;

            var insertStr = '';
            switch (fieldType) {
                case 'string':
                    insertStr = '(' + parameter.id + ', ' + newAssetId + ', "' + fieldValue + '", null, null, null, "string")';
                    break;
                case 'select':
                    insertStr = '(' + parameter.id + ', ' + newAssetId + ', null, null,  "' + fieldValue + '", null, "select")';
                    break;
                case 'integer':
                    insertStr = '(' + parameter.id + ', ' + newAssetId + ', null, ' + fieldValue + ',  null, null, "integer")';
                    break;
                case 'date':
                    insertStr = '(' + parameter.id + ', ' + newAssetId + ', null, null, null, "' + fieldValue + '", "date")';
                default:
                    break;
            }
            var separator = '';
            if (index > 0) {
                separator = ',';
            }
            insertValuePart = insertValuePart + separator + insertStr;
            console.log(index + ' | ' + parameter.label + ' | ' + parameter.alias + ' | ' + fieldValue + ' | ' + fieldType);
        })
        if (insertValuePart.length > 0) {
            let query = "INSERT INTO `assets_parameters_store` " +
                "( " +
                "`assetsParametersId`, " +
                "`assetsId`, " +
                "`valueStr`, " +
                "`valueInt`, " +
                "`valueSelect`, " +
                "`valueDate`, " +
                "`interpretAs`) " +
                "VALUES " + insertValuePart;

            global.coreDb.run(query,
                [],
                function (err) {
                    if (err) {
                        console.log('ERROR persisting new asset parameters to core database: ' + err.message);
                        callback(false);
                    } else {
                        callback(true);
                    }
                });
        } else {
            // No parameters to be stored
            callback(true);
        }
    }

    /**
     * Function loads values for asset parameters for given asset with assetId
     * @param {integer} assetId 
     * @param {function} callback rows or null
     */
    getAssetParameterValuesForAssetId(assetId, callback) {
        console.log('getAssetParameterValuesForAssetId');
        let query = "SELECT * FROM assets_parameters_store WHERE assetsId = ?";
        global.coreDb.all(query, [
            assetId
        ], (err, rows) => {
            if (err) {
                console.log('getAssetParameterValuesForAssetId: ERROR loading from core database: ' + err.message);
                return null;
            } else {
                console.log('getAssetParameterValuesForAssetId: found ' + rows.length + ' asset parameter values rows');
                if (rows.length > 0) {
                    return callback(rows);
                } else {
                    return callback(false);
                }
            }
        });
    }


    /**
     * writes parameter value to database table assets_parameters_store
     * @param {*} assetId ID of asset this value has to be stored for
     * @param {*} parameterId ID of parameter, this value is for
     * @param {*} parameterType type of parameter (string, select, integer)
     * @param {*} value value to be stored
     * @param {*} callback callback function (false in case of error, true if successfully written)
     */
    persistParameterValueInDatabase(assetId, parameterId, parameterType, value, callback) {

        var interpretAs = '';
        switch (parameterType) {
            case 'string':
                interpretAs = 'valueStr';
                break;
            case 'select':
                interpretAs = 'valueSelect';
                break;
            case 'integer':
                interpretAs = 'valueInt';
                break;
            case 'date':
                interpretAs = 'valueDate';
                break;
            default:
                interpretAs = 'valueStr';
                break;
        }

        let query = "INSERT INTO assets_parameters_store (assetsParametersId, assetsId, " + interpretAs + ") VALUES (" + parameterId + ", " + assetId + ", '" + value + "')";
        global.coreDb.run(query,
            [],
            function (err) {
                if (err) {
                    console.log('MODELS-ASSETPARAMETERSHELPER | Error writing parameter value to database: ' + err.message);
                    callback(false);
                } else {
                    callback(true);
                }
            });
    }

    /**
     * writes parameter value to database table assets_parameters_store
     * @param {*} req 
     * @param {*} res 
     * @param {*} parameterId ID of parameter, this value is for
     * @param {*} parameterType type of parameter (string, select, integer)
     * @param {*} value value to be stored
     * @param {*} callback callback function (false in case of error, true if successfully written)
     */
    updateParameterValueInDatabase(parameterStoreId, parameterType, value, callback) {

        var interpretAs = '';
        switch (parameterType) {
            case 'string':
                interpretAs = 'valueStr';
                break;
            case 'select':
                interpretAs = 'valueSelect';
                break;
            case 'integer':
                interpretAs = 'valueInt';
                break;
            case 'date':
                interpretAs = 'valueDate';
                break;
            default:
                interpretAs = 'valueStr';
                break;
        }

        let query = "UPDATE `assets_parameters_store` " +
            "SET ? = ? WHERE id = ?";

        global.coreDb.run(query,
            [
                interpretAs,
                value,
                parameterStoreId
            ],
            function (err) {
                if (err) {
                    console.log('MODELS-ASSETPARAMETERSHELPER | Error updating parameter value to database: ' + err.message);
                    callback(false);
                } else {
                    callback(true);
                }
            });
    }

    /**
     * Renders HTML Code for Tab navigation for given assetGroup id
     * @param {*} assetGroups 
     * @param {*} callback 
     */
    renderTabsForAssetGroups(assetGroups, showAlarmingTab, callback) {
        console.log('renderTabsForAssetGroups');
        var returnHTML = '<nav mt-5>' +
            '<div class="nav nav-tabs" id="nav-tab" role="tablist">';
        assetGroups.forEach((group, index) => {
            var activeClass = ' active';
            if (index > 0) {
                activeClass = '';
            }
            var tabId = group.tabalias;
            returnHTML = returnHTML + '<a class="nav-item nav-link ' + activeClass + '" id="nav-' + tabId + '-tab" data-toggle="tab" href="#nav-' + tabId + '" role="tab" aria-controls="nav-' + tabId + '" aria-selected="true" style="font-size: 13px">' + group.tabtitle + '</a>';
        })
        // For Assets in a Group which is declaed as a GearGroup, show alarming tab
        if (showAlarmingTab === 1) {
            var activeClass = '';
            var tabId = 'alarming';
            returnHTML = returnHTML + '<a class="nav-item nav-link ' + activeClass + '" id="nav-' + tabId + '-tab" data-toggle="tab" href="#nav-' + tabId + '" role="tab" aria-controls="nav-' + tabId + '" aria-selected="true" style="font-size: 13px">Alarmierung</a>';
        }
        returnHTML = returnHTML + '</div>' +
            '</nav>' +
            '<div class="mb-5"></div>';
        callback(returnHTML);
    }



    /**
     * builds HTML-form for assets parameters organized in tabs
     * @param {*} req 
     * @param {*} res 
     * @param {*} assetGroup 
     * @param {*} callback 
     */
    getAssetsParametersFormHTMLForAssetGroup(req, res, assetGroup, callback) {

        this.getAssetsParametersTabs(assetGroup, (resultTabs) => {
            var assetsgroups = new AssetsGroups(req.app.logger);
            assetsgroups.getAssetGroup(assetGroup, (rowAssetGroup) => {
                this.getAssetsParametersForAssetGroup(assetGroup, (result) => {
                    if (result === false) {
                        // Error reading parameters
                        req.app.logger.error('MODELS-ASSETPARAMETERSHELPER | Error reading asset parameters from database');
                        callback('ERROR');
                    } else {

                        req.app.logger.debug('MODELS-ASSETPARAMETERSHELPER | Successfully read ' + result.length + ' asset parameters from database');
                        console.log('MODELS-ASSETPARAMETERSHELPER | Successfully read ' + result.length + ' asset parameters from database');
                        var retValHTML = '';
                        // Render Navigation Tabs
                        var showAlarming = 0;
                        if (rowAssetGroup.length > 0) {
                            showAlarming = rowAssetGroup[0].isGearGroup;
                        }
                        this.renderTabsForAssetGroups(resultTabs, showAlarming, (tabsHTML) => {
                            //console.log('getAssetsParametersForAssetsGroup: rendered Tabs for Asset Groups: ' + tabsHTML);
                            var tabId = 0;
                            retValHTML = tabsHTML;
                            retValHTML = retValHTML + '<div class="tab-content" id="nav-tabContent">';
                            resultTabs.forEach((tab, tabIndex) => {
                                var activeTab = '';
                                if (tabIndex < 1) {
                                    activeTab = 'active';
                                }
                                retValHTML = retValHTML + '<div class="tab-pane fade show ' + activeTab + '" id="nav-' + tab.tabalias + '" role="tabpanel" aria-labelledby="nav-' + tab.tabalias + '-tab"><div class="m-3">';
                                result.forEach((assetParameter, index) => {
                                    if (assetParameter.assetsParametersTab === tab.id) {
                                        var mandantory = '';
                                        if (assetParameter.mandantory === 1) { mandantory = ' required'; }
                                        switch (assetParameter.type) {
                                            case 'string':
                                                retValHTML = retValHTML +
                                                    '<div class="form-group">' +
                                                    '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                    '<input type="text" class="form-control" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '" ' + mandantory + '>' +
                                                    '</div>';
                                                break;
                                            case 'select':
                                                var options = JSON.parse(assetParameter.values);
                                                retValHTML = retValHTML + '<div class="form-group">' +
                                                    '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                    '<select class="form-control text-primary" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '" ' + mandantory + '>';
                                                options.forEach(option => {
                                                    var keys = Object.keys(option);
                                                    retValHTML = retValHTML + '<option value="' + keys[0] + '">' + option[keys[0]] + '</option>';
                                                })
                                                retValHTML = retValHTML + '</select></div>';
                                                break;
                                            case 'integer':
                                                retValHTML = retValHTML +
                                                    '<div class="form-group">' +
                                                    '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                    '<input type="text" class="form-control" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '"  onkeypress="return isNumberKey(event);" ' + mandantory + '>' +
                                                    '</div>';
                                                break;
                                            default:
                                                break;
                                        }
                                    }
                                })
                                retValHTML = retValHTML + '</div></div>';
                            })
                            if (showAlarming === 1) {
                                retValHTML = retValHTML + '<div class="tab-pane fade" id="nav-alarming" role="tabpanel" aria-labelledby="nav-alarming-tab"><div class="m-3">';
                                retValHTML = retValHTML +
                                    '<div class="form-group">' +
                                        '<div class="custom-control custom-switch ml-3 mt-3"> ' +
                                            '<input type="checkbox" class="custom-control-input" id="isGear" name="isGear" checked="">' +
                                            '<label class="custom-control-label" for="isGearGroup">alarmierbares Einsatzmittel</label>' +
                                        '</div>' +
                                    '</div>' +
                                    '<div class="form-group">' +
                                        '<label for="isAlarmableGear">Bezeichner in Alarmquellen</label>' +
                                        '<input type="text" class="form-control" id="gearname" name="gearname">' +
                                    '</div>' + 
                                    '<div class="form-group">' +
                                        '<label for="issi">ISSI für Statusausleitung</label>' +
                                        '<input type="text" class="form-control" id="issi" name="issi">' +
                                    '</div>';
                                retValHTML = retValHTML + '</div></div>';
                            }
                            callback(retValHTML);
                        })
                    }
                })
            })

        })
    }

    /**
     * builds HTML-form for assets parameters organized in tabs for editing mode
     * @param {object} req Request object
     * @param {object} res Response object
     * @param {integer} assetGroup if of asset group of asset
     * @param {integer} assetId  if of asset in core database
     * @param {integer} isGear 1 if its an alarmable asset, 0 if not
     * @param {string} gearname name of gear in alarmings
     * @param {function} callback string if HTML form
     */
    getAssetsParametersFormHTMLForAssetGroupAndAsset(req, res, assetGroup, assetId, isGear, gearname, issi, callback) {
        req.app.logger.debug('MODELS-ASSETPARAMETERSHELPER | start rendering HTML SubForm for Editing for asset with id ' + assetId + ' and asset group with id ' + assetGroup);
        this.getAssetsParametersTabs(assetGroup, (resultTabs) => {
            var assetsgroups = new AssetsGroups(req.app.logger);
            assetsgroups.getAssetGroup(assetGroup, (rowAssetGroup) => {
                console.log('... now get assets parameters');
                this.getAssetsParametersForAssetGroup(assetGroup, (resultAssetParameters) => {
                    console.log('... got assets parameters');
                    if (resultAssetParameters === false) {
                        // Error reading parameters
                        req.app.logger.error('MODELS-ASSETPARAMETERSHELPER | Error reading asset parameters from database');
                        callback('ERROR');
                    } else {
                        console.log('... now get assets parameters values for asset');
                        this.getAssetParameterValuesForAssetId(assetId, (resultAssetParametersValues) => {
                            console.log('... got assets parameters values');
                            var showAlarming = 0;
                            if (rowAssetGroup.length > 0) {
                                showAlarming = rowAssetGroup[0].isGearGroup;
                            }
                            this.renderTabsForAssetGroups(resultTabs, showAlarming, (tabsHTML) => {
                                console.log('... got tabs HTML');
                                var retValHTML = tabsHTML;
                                retValHTML = retValHTML + '<div class="tab-content" id="nav-tabContent">';
                                resultTabs.forEach((tab, index) => {
                                    var activeTab = '';
                                    if (index < 1) {
                                        activeTab = 'active';
                                    }
                                    retValHTML = retValHTML + '<div class="tab-pane fade show ' + activeTab + '" id="nav-' + tab.tabalias + '" role="tabpanel" aria-labelledby="nav-' + tab.tabalias + '-tab"><div class="m-3">';
                                    // Now iterate through parameters in tab
                                    var tabId = 0;
                                    resultAssetParameters.forEach((assetParameter, index) => {
                                        var theParameter = null;
                                        resultAssetParametersValues.forEach(theValue => {
                                            if (theValue.assetsParametersId === assetParameter.id) {
                                                theParameter = theValue;
                                            }
                                        })
                                        if (assetParameter.assetsParametersTab === tab.id) {
                                            // AssetParameter belongs to currently rendered Tab
                                            var mandantory = '';
                                            if (assetParameter.mandantory === 1) { mandantory = ' required'; }
                                            switch (assetParameter.type) {
                                                case 'string':
                                                    var value = '';
                                                    if (theParameter !== null) {
                                                        value = theParameter.valueStr;
                                                    }

                                                    retValHTML = retValHTML +
                                                        '<div class="form-group">' +
                                                        '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                        '<input type="text" class="form-control" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '" value="' + value + '" ' + mandantory + '>' +
                                                        '</div>';
                                                    break;
                                                case 'select':
                                                    var value = '';
                                                    if (theParameter !== null) {
                                                        value = theParameter.valueSelect;
                                                    }
                                                    var options = JSON.parse(assetParameter.values);
                                                    retValHTML = retValHTML + '<div class="form-group">' +
                                                        '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                        '<select class="form-control text-primary" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '" ' + mandantory + '>';
                                                    options.forEach(option => {
                                                        var keys = Object.keys(option);
                                                        var selectedState = '';
                                                        if (parseInt(keys[0]) === parseInt(value)) {
                                                            selectedState = ' selected ';
                                                        }
                                                        retValHTML = retValHTML + '<option value="' + keys[0] + '" ' + selectedState + '>' + option[keys[0]] + '</option>';
                                                    })
                                                    retValHTML = retValHTML + '</select></div>';
                                                    break;
                                                case 'integer':
                                                    var value = '';
                                                    if (theParameter !== null) {
                                                        value = theParameter.valueInt;
                                                    }
                                                    retValHTML = retValHTML +
                                                        '<div class="form-group">' +
                                                        '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                        '<input type="text" class="form-control" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '" value="' + value + '" onkeypress="return isNumberKey(event);" ' + mandantory + '>' +
                                                        '</div>';
                                                    break;
                                                case 'date':
                                                    var value = '';
                                                    if (theParameter !== null) {
                                                        value = theParameter.valueDate;
                                                    }
                                                    retValHTML = retValHTML +
                                                        '<div class="form-group">' +
                                                        '<label for="ap_' + assetParameter.alias + '">' + assetParameter.label + '</label>' +
                                                        '<input type="date" class="form-control" id="ap_' + assetParameter.alias + '" name="ap_' + assetParameter.alias + '" value="' + value + '" ' + mandantory + '>' +
                                                        '</div>';
                                                    break;
                                                default:
                                                    break;
                                            }
                                        }
                                    })
                                    retValHTML = retValHTML + '</div></div>';
                                })
                                if (showAlarming === 1) {
                                    var valIsGear = '';
                                    if (isGear === 1) { 
                                        valIsGear = ' checked'; 
                                    }
                                    if (issi === null) {
                                        issi = '';
                                    }

                                    retValHTML = retValHTML + '<div class="tab-pane fade" id="nav-alarming" role="tabpanel" aria-labelledby="nav-alarming-tab"><div class="m-3">';
                                    retValHTML = retValHTML +
                                        '<div class="form-group">' +
                                        '<div class="custom-control custom-switch ml-3 mt-3"> ' +
                                        '<input type="checkbox" class="custom-control-input" id="isGear" name="isGear" ' + valIsGear + '>' +
                                        '<label class="custom-control-label" for="isGear">alarmierbares Einsatzmittel</label>' +
                                        '</div>' +
                                        '</div>' +
                                        '<div class="form-group">' +
                                        '<label for="gername">Bezeichner in Alarmquellen</label>' +
                                        '<input type="text" class="form-control" id="gearname" name="gearname" value="' + gearname + '">' +
                                        '</div>' + 
                                        '<div class="form-group">' +
                                            '<label for="issi">ISSI für Statusausleitung</label>' +
                                            '<input type="text" class="form-control" id="issi" name="issi" value="' + issi + '">' +
                                        '</div>';
                                    retValHTML = retValHTML + '</div></div>';
                                    retValHTML = retValHTML + '</div></div>';
                                }
                                req.app.logger.debug('MODELS-ASSETPARAMETERSHELPER | Successfully read ' + resultAssetParameters.length + ' asset parameters from database');

                                callback(retValHTML);
                            });
                        })
                    }
                })
            })
        })


    }


}
// export the class
module.exports = assetsparametershelper;