const assetsparameterhelper = require('./assetsparametershelper');
let momentHelperObj = require('./momenthelper');
let momenthelper = new momentHelperObj();
/**
* Class handles all assets related methods and also accessing assets in core database
* @class
*/
class assets {
/**
* @constructor
* @param {object} alogger Logger to be used in class methods (usually req.app.logger)
*/
constructor(alogger) {
// always initialize all instance properties
this.logger = alogger;
}
/**
* Returns list of assets in given warehouse
* @param {integer} wId id of warehouse assets shall be loaded for
* @param {function} callback rows or null
*/
getAssetsForWarehouse(wId, callback) {
let query = "SELECT * FROM assets WHERE warehouseId = ?";
global.coreDb.all(query, [
wId
], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Returns all assets for display in UI view
* @param {function} callback rows or null
*/
getListOfAssets(callback) {
this.logger.debug('MODELS-ASSETS | Reading assets');
let query = "SELECT assets.*, " +
"assets_groups.name AS groupname, " +
"assets_states.name AS statename, " +
"assets_warehouses.name AS warehousename, " +
"assets_warehouses.wareHousePath AS warehousepath, " +
"assets_warehouses.description AS warehouseDescription, " +
"assets_states.usable AS usable, " +
"assets_states.maintenance AS maintenance " +
"FROM `assets` " +
"LEFT JOIN assets_groups ON assets.assetGroupId = assets_groups.id " +
"LEFT JOIN assets_states ON assets.state = assets_states.id " +
"LEFT JOIN assets_warehouses ON assets.warehouseId = assets_warehouses.id";
global.coreDb.all(query, [], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Returns list of asset states from core database
* @param {function} callback rows or null
*/
getListOfAssetsStates(callback) {
let query = "SELECT * FROM assets_states WHERE state = 1";
global.coreDb.all(query, [], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Returns a single asset from core database
* @param {integer} assetId id of asset to be returned out of core database
* @param {*} callback row or null
*/
getAssetwithId(assetId, callback) {
let query = "SELECT * FROM assets WHERE id = ?";
global.coreDb.all(query, [
assetId
], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Returns a single asset from core database for given issi - number
* @param {integer} issi issi to look for
* @param {function} callback rows or null
*/
getAssetForISSI(issi, callback) {
let query = "SELECT * FROM assets WHERE issi = ?";
global.coreDb.all(query, [
issi
], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Returns all assets which can be alarmed (isGear === 1)
* @param {function} callback rows or null
*/
getAllAssetsWhichCanBeAlarmed(callback) {
// let query = "SELECT id, title, state, isGear, gearname, issi FROM assets WHERE isGear = 1";
let query = "SELECT assets.*, " +
"assets_groups.name AS groupname, " +
"assets_states.name AS statename, " +
"assets_warehouses.name AS warehousename, " +
"assets_warehouses.wareHousePath AS warehousepath, " +
"assets_warehouses.description AS warehouseDescription, " +
"assets_states.usable AS usable, " +
"assets_states.maintenance AS maintenance " +
"FROM `assets` " +
"LEFT JOIN assets_groups ON assets.assetGroupId = assets_groups.id " +
"LEFT JOIN assets_states ON assets.state = assets_states.id " +
"LEFT JOIN assets_warehouses ON assets.warehouseId = assets_warehouses.id " +
"WHERE isGear = 1";
global.coreDb.all(query, [
], (err, rows) => {
if (err) {
return null;
} else {
return callback(rows);
}
});
}
/**
* Adds a new asset to core database
* @param {object} reqBody form data (usually req.body)
* @param {function} callback success (true / false)
*/
addAsset(reqBody, callback) {
let assetGroupId = reqBody.assetgroupid;
let assetTitle = reqBody.title;
let assetState = reqBody.state;
let assetWarehouse = reqBody.warehouse;
let assetIsGear = reqBody.isGear; // is Asset an alarmable gear
let assetGearName = reqBody.gearname; // name of asset in alarmings
let assetIssi = reqBody.issi; // ISSI for alarmable assets
if (assetIsGear === 'on') {
assetIsGear = 1;
} else {
assetIsGear = 0;
}
let assetsparameters = new assetsparameterhelper(this.logger);
// Transform date for mysql query
let assetDateBought = reqBody.date_bought;
if (assetDateBought != '') {
assetDateBought = momenthelper.formDateToMysql(assetDateBought);
}
let query = "INSERT INTO assets " +
"(title, " +
"assetGroupId, " +
"warehouseId, " +
"date_bought, " +
"isGear, " +
"issi, " +
"gearname, " +
"state " +
") VALUES (?, ?, ?, ?, ?, ?, ?, ?)";
global.coreDb.run(query, [
assetTitle,
assetGroupId,
assetWarehouse,
assetDateBought,
assetIsGear,
assetIssi,
assetGearName,
assetState
], function (err) {
if (err) {
console.log('ROUTES-ASSETS | Error writing new asset to database: ' + err.message);
req.app.logger.error('ROUTES-ASSETS | Error writing new asset to database: ' + err.message);
return callback(false);
} else {
var newAssetId = this.lastID;
assetsparameters.getAssetsParametersForAssetGroup(assetGroupId, (resultAssetParameters) => {
if (resultAssetParameters === false) {
// Error reading asset parameters from database
req.app.logger.error('ROUTES-ASSETS | Error reading asset parameters.');
return callback(false);
} else {
// Recieved assets parameters.
assetsparameters.persistParameterValuesInDatabase(newAssetId, reqBody, resultAssetParameters, (result) => {
return callback(true);
})
}
});
}
});
}
updateAsset(reqBody, callback) {
let assetId = reqBody.assetId;
let assetGroupId = reqBody.assetgroupid;
let assetTitle = reqBody.title;
let assetState = reqBody.state;
let assetWarehouse = reqBody.warehouse;
let assetIsGear = reqBody.isGear; // is Asset an alarmable gear
let assetGearName = reqBody.gearname; // name of asset in alarmings
let assetIssi = reqBody.issi // ISSI of asset for alarmable assets
if (assetIsGear === 'on') {
assetIsGear = 1;
} else {
assetIsGear = 0;
}
// Transform date for mysql query
let assetDateBought = reqBody.date_bought;
if (assetDateBought != '') {
assetDateBought = momenthelper.formDateToMysql(assetDateBought);
}
let assetsparameters = new assetsparameterhelper();
let query = "UPDATE assets SET " +
"title = ?, " +
"assetGroupId = ?, " +
"warehouseId = ?, " +
"date_bought = ?, " +
"isGear = ?, " +
"issi = ?, " +
"gearname = ?, " +
"state = ? " +
"WHERE id = ?";
global.coreDb.run(query, [
assetTitle,
assetGroupId,
assetWarehouse,
assetDateBought,
assetIsGear,
assetIssi,
assetGearName,
assetState,
assetId
], function (err) {
if (err) {
console.log(`ERROR Updating asset in core database: ${err.message}`);
callback(false);
} else {
assetsparameters.getAssetsParametersForAssetGroup(assetGroupId, (resultAssetParameters) => {
if (resultAssetParameters === false) {
// Error reading asset parameters from database
callback(false);
} else {
// Recieved assets parameters.
// Now update assets parameters
assetsparameters.updateParameterValuesInDatabase(assetId, reqBody, resultAssetParameters, (resultUpdate) => {
console.log('Result Updating Asset: ' + resultUpdate);
if (resultUpdate) {
callback(true);
} else {
callback(false);
}
});
}
});
}
});
}
/**
* Removes an asset and referenced assets parameters from core database
* @param {integer} assetId id of asset to be removed from database
* @param {function} callback success (true or false)
*/
removeAsset(assetId, callback) {
let query = "DELETE FROM assets_parameters_store WHERE assetsId = ?";
global.coreDb.run(query, [
assetId,
], function (err) {
if (err) {
console.log(`ERROR Removing Assets parameters for deletion of asset: ${err.message}`);
callback(false);
} else {
let queryDeleteAsset = "DELETE FROM assets WHERE id = ?";
global.coreDb.run(queryDeleteAsset, [
assetId,
], function (err) {
if (err) {
console.log(`ERROR Removing Asset from core database: ${err.message}`);
callback(false);
} else {
callback(true);
}
});
}
});
}
}
// export the class
module.exports = assets;