//--------------------------------------------------------------------------
// QUERY GENERIC FUNCTION
//--------------------------------------------------------------------------
(function(webapi, $) {
function safeAjax(ajaxOptions) {
var deferredAjax = $.Deferred();
shell.getTokenDeferred().done(function(token) {
// add headers for AJAX
tokenCTS = token;
if (!ajaxOptions.headers) {
$.extend(ajaxOptions, {
headers: {
"__RequestVerificationToken": token
}
});
} else {
ajaxOptions.headers["__RequestVerificationToken"] = token;
}
$.ajax(ajaxOptions)
.done(function(data, textStatus, jqXHR) {
validateLoginSession(data, textStatus, jqXHR, deferredAjax.resolve);
}).fail(deferredAjax.reject); //AJAX
}).fail(function() {
deferredAjax.rejectWith(this, arguments); // on token failure pass the token AJAX and args
});
return deferredAjax.promise();
}
webapi.safeAjax = safeAjax;
})(window.webapi = window.webapi || {}, jQuery)
function executeAJAX(sUrl, sucessFunction, queryJSON = undefined, errorFunction = undefined, typeOperation = "", sRegisterSeparator = "<|@!>")
{
if (errorFunction == undefined)
errorFunction = function(xhr, textStatus, errorThrown) {
alert('Error number ' + xhr.status + ': '+ xhr.responseJSON.error.message + ' (Internal code: \'' + xhr.responseJSON.error.code + '\')\n' + errorThrown + ". Status: " + textStatus);
}
var ltypeOperation = (typeOperation.length == 0)?((queryJSON != undefined && queryJSON != null && ((typeof queryJSON == 'string' && queryJSON.length > 0) || typeof queryJSON == 'object'))?((sUrl.substring(sUrl.length-1) == ')') ? "PATCH" : "POST"):((sUrl.substring(sUrl.length-1) == ')') ? "DELETE" : "GET")):typeOperation;
var lArrayData = (queryJSON != undefined && queryJSON != null) ? ((typeof queryJSON == 'string') ? (queryJSON.split(sRegisterSeparator)) : JSON.stringify([queryJSON])) : "";
for (var lsDataOfRegister of lArrayData) {
var oExe = webapi.safeAjax({
type: ltypeOperation,
contentType: "application/json; charset=utf-8",
datatype: "json",
url: /_api/ + sUrl,
data: lsDataOfRegister,
beforeSend: function(XMLHttpRequest) {
XMLHttpRequest.setRequestHeader("OData-MaxVersion", "4.0");
XMLHttpRequest.setRequestHeader("OData-Version", "4.0");
XMLHttpRequest.setRequestHeader("Accept", "application/json");
if (ltypeOperation = "GET")
XMLHttpRequest.setRequestHeader("Prefer", "odata.include-annotations=\"*\"");
else
XMLHttpRequest.setRequestHeader('__RequestVerificationToken', tokenCTS);
},
async: true,
success: sucessFunction,
error: errorFunction
});
}
}
function addEntity(sEntityName, dataJSON, sucessFunction = undefined, errorFunction = undefined) {
if (sucessFunction == undefined)
sucessFunction = function(data, textStatus, xhr) {
console.log("New " + sEntityName + " ID: " + xhr.getResponseHeader("entityid"));
}
executeAJAX(sEntityName, sucessFunction, dataJSON, errorFunction, "POST");
}
function updateEntity(sEntityName, sEntityID, dataJSON, sucessFunction = undefined, errorFunction = undefined) {
if (sucessFunction == undefined)
sucessFunction = function(data, textStatus, xhr) {
console.log("Updated " + sEntityName + " ID: " + sEntityID);
}
executeAJAX(sEntityName + "(" + sEntityID + ")", sucessFunction, dataJSON, errorFunction, "PATCH");
}
function deleteEntity(sEntityName, sEntityID, sucessFunction = undefined, errorFunction = undefined) {
if (sucessFunction == undefined)
sucessFunction = function(data, textStatus, xhr) {
console.log("Delete " + sEntityName + " ID: " + sEntityID);
}
executeAJAX(sEntityName + "(" + sEntityID + ")", sucessFunction, "", errorFunction, "DELETE");
}
function getAjaxUrlFilter(sIDquerySelectorControls, bInputContains = false) {
var lColControlsRef = (typeof sIDquerySelectorControls == 'string') ? document.querySelectorAll(sIDquerySelectorControls) : (["NodeList", "Array"].includes(sIDquerySelectorControls.constructor.name)) ? sIDquerySelectorControls : [sIDquerySelectorControls];
var lsResultUrlFilter = "";
var lsFieldName = "";
var lsFieldValue = "";
var lsOperator = "";
for (let lcrtSelection of lColControlsRef) {
lsFieldName = lcrtSelection.getAttribute("name");
if (lsFieldName != null && lsFieldName.length > 0) {
switch(lcrtSelection.nodeName.toUpperCase()) {
case "INPUT":
lsOperator = (bInputContains == false || lcrtSelection.nodeName.toUpperCase() != "TEXT") ? "eq": "";
lsFieldValue = (lcrtSelection.type.toUpperCase() == "NUMBER") ? lcrtSelection.value : "'" + lcrtSelection.value + "'";
break;
case "SELECT":
let liOptionSelected = lcrtSelection.selectedIndex;
if (liOptionSelected > 0) {
let loOption = lcrtSelection.options[liOptionSelected];
if (loOption.value.length > 0) {
lsOperator = "eq";
lsFieldValue = "'" + ((loOption.getAttribute("idvalue") != null) ? loOption.getAttribute("idvalue") : loOption.value) + "'" ;
}
} else
lsFieldName = "";
break;
}
if (lsFieldName.length > 0)
lsResultUrlFilter = ((lsResultUrlFilter.length > 0) ? (lsResultUrlFilter + " and ") : "") + ((lsOperator.length > 0) ? (lsFieldName + " " + lsOperator + " " + lsFieldValue) : ("contains(" + lsFieldName + ", " + lsFieldValue + ")"));
}
}
return lsResultUrlFilter;
}
function checkEntityFilter(sEntityName, sFieldName, sFilter = undefined, sucessFunction = undefined, errorFunction = undefined) {
if (sucessFunction == undefined)
sucessFunction = function(data, textStatus, xhr) {
console.log("Number of " + sEntityName + ": " + data.value.length);
}
executeAJAX(sEntityName + "?$select=" + sFieldName + ((sFilter != undefined && sFilter != null && (typeof sFilter == 'string' && sFilter.length > 0)) ? "&$filter=" + sFilter : "" ), sucessFunction, "", errorFunction, "GET");
}
function AddNewPropertyToJson(sJson, sNewProperty, sPropertyValue) {
if (typeof sJson == 'string' && typeof sNewProperty == 'string' && typeof sPropertyValue == 'string' && sNewProperty.length > 0 && sPropertyValue.length > 0)
if (sJson.length > 0)
return sJson.split('}').join(',"' + sNewProperty + '":"' + sPropertyValue + '"}');
else
return '{"' + sNewProperty + '":"' + sPropertyValue + '"}';
}
function checkInputUnique(data, ctrlControlLocked = undefined, sErrorMessage = "", scrtlShowMessage = ".alert") {
var lbExistData = false;
var lcrtlAlert = document.querySelector(scrtlShowMessage);
var lbLockedControl = (ctrlControlLocked != undefined && ctrlControlLocked != null && ctrlControlLocked.nodeName.toUpperCase() == "INPUT");
if (typeof data == 'object') {
console.log(data["@odata.context"] + ": " + data.value.length);
lbExistData = (data.value.length > 0) ? true : false;
}
if (lcrtlAlert != null) {
if (lbLockedControl == true)
{
ctrlControlLocked.setCustomValidity("");
if (lbExistData == false && ctrlControlLocked.checkValidity() == false) {
if (ctrlControlLocked.value.trim().length > 0) {
if (sErrorMessage.length == 0 || typeof data == 'object')
sErrorMessage = ctrlControlLocked.getAttribute("title");
lbExistData = (sErrorMessage != null && sErrorMessage.length > 0);
}
}
}
if (lbExistData == true) {
lcrtlAlert.style.display = "block";
lcrtlAlert.innerHTML = sErrorMessage;
} else {
lcrtlAlert.style.display = "none";
lcrtlAlert.innerHTML = "";
}
}
if (lbLockedControl == true)
ctrlControlLocked.setCustomValidity((lbExistData == true) ? sErrorMessage : "");
}
function checkLicensePlate(data, ctrlControlLocked = undefined, sErrorMessage = "", sErrorNoRegister = "", scrtlShowMessage = ".alert") {
if (typeof data == 'object' && data.value.length > 0) {
console.log(data["@odata.context"] + ": " + data.value.length);
for (var lsDataOfRegister of data.value) {
ctrlControlLocked.setAttribute('vehicleid', "'" + lsDataOfRegister.cts_vehicleid + "'");
switch(lsDataOfRegister.cts_lifecyclestatus) {
case 3:
checkInputUnique(data, ctrlControlLocked, sErrorMessage, scrtlShowMessage);
break;
case 1:
newData = data;
checkEntityFilter("cts_trips", "cts_tripid", "_cts_vehicleid_value eq '" + lsDataOfRegister.cts_vehicleid + "'",
function(data, textStatus, xhr) { checkLicensePlateUnregister(data, ctrlControlLocked, sErrorMessage, sErrorNoRegister, scrtlShowMessage, newData) });
break;
default:
if ((lcrtlAlert = document.querySelector(scrtlShowMessage)) != null) {
lcrtlAlert.style.display = "none";
lcrtlAlert.innerHTML = "";
}
}
}
} else {
if ((lcrtlAlert = document.querySelector(scrtlShowMessage)) != null) {
lcrtlAlert.style.display = "none";
lcrtlAlert.innerHTML = "";
}
}
if (ctrlControlLocked.validationMessage == "AJAXquery")
ctrlControlLocked.setCustomValidity("");
return true;
}
function checkLicensePlateUnregister(data, ctrlControlLocked = undefined, sErrorMessage = "", sErrorNoRegister = "", scrtlShowMessage = ".alert", newData = null) {
if (typeof data == 'object' && data.value.length > 0) {
console.log(data["@odata.context"] + ": " + data.value.length);
let lsIdTrips = "";
for (var lsDataOfRegister of data.value) {
lsIdTrips = ((lsIdTrips.length > 0) ? lsIdTrips + ",'" : "'") + lsDataOfRegister.cts_tripid + "'";
}
ctrlControlLocked.setAttribute('tripids', lsIdTrips);
if ((lcrtlAlert = document.querySelector(scrtlShowMessage)) != null) {
lcrtlAlert.style.display = "block";
lcrtlAlert.innerHTML = sErrorNoRegister;
}
} else {
//checkInputUnique(newData, ctrlControlLocked, sErrorMessage, scrtlShowMessage);
}
if (ctrlControlLocked.validationMessage == "AJAXquery")
ctrlControlLocked.setCustomValidity("");
return true;
}
//--------------------------------------------------------------------------
// INTERNAL GENERIC SUCCESS FUNCTION
//--------------------------------------------------------------------------
function sucessAddOptionsInSelect(sIDSelectControl, data, sVisibleField, sValueFields, sDefaultText = "", sDefaultFilterField = "", sDefaultFilterValue="") {
var bReturnValue = false;
var loSelectOptionControl = (typeof sIDSelectControl == "string") ? $('#' + sIDSelectControl) : sIDSelectControl;
if (loSelectOptionControl != null && loSelectOptionControl != undefined) {
loSelectOptionControl.empty();
if (sDefaultText.length > 0) {
loSelectOptionControl.append($('