Files

216 lines
5.2 KiB
JavaScript

var output = {};
var outMessages = [];
var outMsg = {};
var outStatus = "success";
var myDebug = {};
var serviceName = "eon.virta.v1.reloadfields.xsjs";
var serviceVersion = '1.0';
var startTS = new Date();
var debugLevel = 0;
switch ($.request.parameters.get("debug")) {
case "true":
case "yes":
case "1":
debugLevel = 1;
break;
case "full":
case "2":
debugLevel = 2;
break;
}
if (debugLevel > 0) {
output.requestParams = $.request.parameters;
}
function setOutputMessage() {
output.status = outStatus;
output.durationSeconds = Math.floor((new Date() - startTS)/1000);
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
$.response.contentType = "application/json";
$.response.setBody(JSON.stringify(output));
//$.response.status = $.net.http.OK;
}
function exceptionHandler(ex) {
if (outMsg.method && outMessages.indexOf(outMsg) === -1) {
outMsg.status = "canceled";
outMessages.push(outMsg);
}
outMsg = {};
outMsg.method = "exceptionHandler";
outMsg.status = "error";
outMsg.message = ex.toString();
if (debugLevel > 0) {
outMsg.exceptionInfo = {};
outMsg.exceptionInfo.name = ex.name;
outMsg.exceptionInfo.message = ex.message;
outMsg.exceptionInfo.fileName = ex.fileName;
outMsg.exceptionInfo.lineNumber = ex.lineNumber;
outMsg.exceptionInfo.columnNumber = ex.columnNumber;
outMsg.exceptionInfo.stack = ex.stack;
//outMsg.exceptionInfo.source = ex.toSource();
}
outMessages.push(outMsg);
outStatus = "error";
output.status = outStatus;
if (debugLevel > 0) {
output.debugInfos = myDebug;
}
output.messages = outMessages;
var errbody = JSON.stringify(output);
$.response.contentType = 'application/json';
$.response.setBody(errbody);
//$.response.status = $.net.http.INTERNAL_SERVER_ERROR;
// Workaround, weil CRM scheinbar Probleme mit anderen Statuscodes hat
$.response.status = $.net.http.OK;
}
function checkParams() {
var isValid = true;
var missingParams = [];
try {
if (!$.request.parameters.get("field")) {
missingParams.push("field");
isValid = false;
}
} catch (e) {
exceptionHandler(e);
isValid = false;
}
if (!isValid) {
outMsg = {};
outMsg.method = "checkParams";
outMsg.status = "error";
outStatus = "error";
outMsg.message = "missing mandatory parameters: " + missingParams.join();
outMessages.push(outMsg);
$.response.status = $.net.http.BAD_REQUEST;
}
return isValid;
}
function getEmpTransactionData() {
var limit = 1000;
var offset = 0;
outMsg = {};
outMsg.method = "getEmpTransactionData";
outMsg.status = "error";
var resultData = {};
var resultSet = [];
var conn = $.hdb.getConnection();
do {
if (debugLevel > 1) {
outMsg.limit = limit;
outMsg.offset = offset;
}
var queryResult = conn.executeQuery(
"select UUID, JSONRAW \
from VIRTAPORTAL.EMP_TRANSACTIONS \
where STARTTIME >= '20220101' and JSONRAW is not null \
order by UUID \
limit ? offset ?", limit, offset);
var iterator = queryResult.getIterator();
while (iterator.next()) {
resultSet.push(iterator.value());
}
offset += limit;
} while (queryResult.length === limit)
conn.close();
resultData = {
count: resultSet.length,
rows: resultSet
};
outMsg.status = "success";
outMsg.result = resultData;
if (debugLevel > 0 || outMsg.status === "error") {
outMessages.push(outMsg);
}
return resultData;
}
function updateEmpFreeMinutes() {
var empTransData = getEmpTransactionData();
var completeData = [];
if (empTransData.count > 0) {
completeData = empTransData.rows.map(function(row) {
var parsedData = {};
var valid = true;
try {
parsedData = JSON.parse(row.JSONRAW);
if (!parsedData.hasOwnProperty('empFreeMinutes')) {
valid = false;
}
} catch (e) {
valid = false;
}
return {
UUID: row.UUID,
FREEMINUTES: parsedData.empFreeMinutes,
valid: valid
};
});
}
// myDebug.completeData = completeData;
/*var updateData = completeData.filter(function(row) {
return row.valid;
}).map(function(row) {
return {
UUID: row.UUID,
FREEMINUTES: row.parsedData.empFreeMinutes
};
});*/
//myDebug.updateData = updateData;
if (completeData.some(function(row) {return row.valid;})) {
var paramList = completeData.filter(function(row) {return row.valid;}).map(function(row) {
return [row.FREEMINUTES, row.UUID];
});
outMsg = {};
outMsg.method = "updateData";
outMsg.status = "error";
var resultData = {};
var conn = $.hdb.getConnection();
var statement = "update VIRTAPORTAL.EMP_TRANSACTIONS \
set FREEMINUTES = ? \
where UUID = ?";
if (debugLevel > 1) {
outMsg.statement = statement;
outMsg.paramList = paramList;
}
var affectedRows = conn.executeUpdate(statement, paramList);
conn.commit();
conn.close();
resultData = {
count: affectedRows.reduce(function(cur, acc) {return cur + acc;}, 0)
};
outMsg.status = "success";
outMsg.result = resultData;
outMessages.push(outMsg);
}
}
function chooseMode(field) {
switch (field) {
case 'empfreeminutes':
updateEmpFreeMinutes();
break;
default:
exceptionHandler(new Error("unsupported mode: field=" + field));
}
}
try {
if (checkParams()) {
chooseMode($.request.parameters.get("field"));
}
} catch (e) {
exceptionHandler(e);
}
setOutputMessage();