216 lines
5.2 KiB
JavaScript
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(); |