//-------------------------------------------------------------------------- // 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($('