//Wrapper JS
(function (webapi, $) {
function safeAjax(ajaxOptions) {
var deferredAjax = $.Deferred();
shell.getTokenDeferred().done(function (token) {
// add headers for AJAX
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 (dgt, $) {
const _requireFieldError = {
'de-DE': 'ist ein Pflichtfeld.',
'en-US': 'is a required field.',
};
const _processingMessage = {
'de-DE': 'Wird bearbeitet...',
'en-US': 'Processing...',
};
function asCssClassSelector(className) {
return `.${className}`;
}
function stripSelectorPrefix(selector) {
return selector.replaceAll('#', '').replaceAll('.', '');
}
function setDateTimeFieldReadOnly($field, readOnly) {
if (readOnly) {
$field.siblings("div.datetimepicker").find("input, .input-group-addon").attr("readonly", true);
$field.siblings("div.datetimepicker").find("input, .input-group-addon").css("cursor", "not-allowed");
$field.siblings("div.datetimepicker").find("input, .input-group-addon").on("mousedown", function (e) {
e.preventDefault();
return false;
});
} else {
$field.siblings("div.datetimepicker").find("input, .input-group-addon").attr("readonly", false);
$field.siblings("div.datetimepicker").find("input, .input-group-addon").css("cursor", "default");
$field.siblings("div.datetimepicker").find("input, .input-group-addon").off("mousedown");
}
};
function setLookupFieldReadOnly($field, readOnly) {
if (readOnly) {
$field.siblings("div.input-group-btn").find("button").prop("disabled", true);
$field.siblings("div.input-group-btn").hide();
$field.parent().css("display", "block");
} else {
$field.siblings("div.input-group-btn").find("button").prop("disabled", false);
$field.siblings("div.input-group-btn").show();
}
};
function setCheckboxFieldReadOnly($field, readOnly) {
if (readOnly) {
$field.prop("disabled", true);
} else {
$field.prop("disabled", false);
}
};
function setRadioFieldReadOnly($field, readOnly) {
if (readOnly) {
$field.find("input[type='radio']").prop("disabled", true);
} else {
$field.find("input[type='radio']").prop("disabled", false);
}
};
function setDropdownFieldReadOnly($field, readOnly) {
if (readOnly) {
$field.attr("readonly", true);
$field.css("pointer-events", "none");
} else {
$field.attr("readonly", false);
$field.css("pointer-events", "auto");
}
};
function formatCurrencyValue(currencyValue, currencyCode, languageCode) {
const options = {
style: 'currency',
currency: currencyCode,
currencyDisplay: 'symbol'
};
if (languageCode) {
options.localeMatcher = 'lookup';
options.locale = languageCode;
}
const formatter = new Intl.NumberFormat(languageCode, options);
return formatter.format(currencyValue);
}
function formatDecimalValue(decimalValue, languageCode, fractionDigits) {
const options = {
style: 'decimal',
minimumFractionDigits: fractionDigits,
maximumFractionDigits: fractionDigits
};
if (languageCode) {
options.localeMatcher = 'lookup';
options.locale = languageCode;
}
const formatter = new Intl.NumberFormat(languageCode, options);
return formatter.format(decimalValue);
}
dgt.addCurrencySymbol = function($field) {
const symbolSpan = $field.siblings('.input-group-addon');
if(!symbolSpan.length) {
$("")
.addClass("input-group-addon")
.text("€")
.insertBefore($field);
$field.parent().addClass("input-group");
}
}
dgt.parseCurrencyToNumber = function(currencyString) {
if (!currencyString) return 0;
const curReg = /\D*(\d+|\d.*?\d)(?:\D+(\d{2}))?\D*$/;
const parts = curReg.exec(currencyString);
const number = parseFloat(parts[1].replace(/\D/,'')+'.'+(parts[2]?parts[2]:'00'));
return number.toFixed(2);
}
dgt.parseLocaleDecimalToNumber = function (numberString, languageCode) {
if (!numberString) return 0;
const thousandSeparator = Intl.NumberFormat(languageCode).format(11111).replace(/\p{Number}/gu, '');
const decimalSeparator = Intl.NumberFormat(languageCode).format(1.1).replace(/\p{Number}/gu, '');
return parseFloat(numberString
.replace(new RegExp('\\' + thousandSeparator, 'g'), '')
.replace(new RegExp('\\' + decimalSeparator), '.')
);
}
dgt.createTabs = function () {
var tabs = $("div[class='tab clearfix']").toArray();
$("div[class='tab clearfix']").parent().addClass("tab-content");
$("div[class='tab clearfix']").each(function (index) {
if (index == 0) {
$(this).addClass("tab-pane fade in active");
} else {
$(this).addClass("tab-pane fade");
}
});
var htmlMenu = "
";
$("h2[class='tab-title']").each(function (index) {
if (index == 0) {
htmlMenu = htmlMenu +
"- " +
$(this).html() +
"
";
} else {
htmlMenu = htmlMenu +
"- " +
$(this).html() +
"
";
}
$(this).remove();
});
$(htmlMenu).insertBefore(".entity-form");
}
dgt.bindLookup = function (fieldName, id, name, entityName) {
$(fieldName).val(id);
$(`${fieldName}_name`).val(name);
$(`${fieldName}_entityname`).val(entityName);
}
dgt.isVisible = function (selector) {
if (!selector) {
return false;
}
const $element = $(selector);
return $element.length && (
$element.css('display') !== 'none' &&
$element.css('visibility') !== 'hidden' &&
$element.css('opacity') !== 0
);
}
dgt.formatCurrencyField = function (currencyValue, currencyId, $inputField) {
if (!currencyValue || isNaN(currencyValue)) return;
if (_currencyCode) {
$inputField.val(formatCurrencyValue(currencyValue, _currencyCode));
} else {
retrieveSingleRecord('transactioncurrencies', currencyId, 'isocurrencycode', null, function (result) {
_currencyCode = result.isocurrencycode;
$inputField.val(formatCurrencyValue(currencyValue, _currencyCode));
});
}
}
dgt.formatDecimalField = function (decimalValue, languageCode, fractionDigits, $inputField) {
if (decimalValue == null || decimalValue === '') return;
$inputField.val(formatDecimalValue(decimalValue, languageCode, fractionDigits));
}
dgt.setFieldReadOnly = function ($field, readOnly, type) {
type = type ? type.toLowerCase() : 'text';
switch (type) {
case "date":
case "time":
case "datetime":
setDateTimeFieldReadOnly($field, readOnly);
break;
case "lookup":
setLookupFieldReadOnly($field, readOnly);
break;
case "checkbox":
setCheckboxFieldReadOnly($field, readOnly);
break;
case "radio":
setRadioFieldReadOnly($field, readOnly);
break;
case "dropdown":
setDropdownFieldReadOnly($field, readOnly);
break;
default:
if (!!readOnly) {
$field.attr("readonly", true);
$field.css("cursor", "not-allowed");
$field.addClass('readonly-bg');
$field.on("mousedown", function (e) {
e.preventDefault();
return false;
});
} else {
$field.attr("readonly", false);
$field.css("cursor", "default");
$field.off("mousedown");
}
break;
}
};
dgt.setFieldAsRequired = function (fieldName, languageCode) {
if (typeof (Page_Validators) === 'undefined') return;
if ($("#" + fieldName) != undefined && $("#" + fieldName + "_label") != undefined) {
$("#" + fieldName).prop('required', true);
$("#" + fieldName + "_label").closest("div").addClass("required");
const newValidatorId = fieldName + "Validator";
if (Page_Validators.filter(function (e) {
return e.id === newValidatorId;
}).length == 0) {
var Requiredvalidator = document.createElement('span');
Requiredvalidator.style.display = "none";
Requiredvalidator.id = newValidatorId;
Requiredvalidator.controltovalidate = fieldName;
Requiredvalidator.errormessage = "" + $("#" + fieldName + "_label").html() + " " + _requireFieldError[languageCode] + "";
Requiredvalidator.initialvalue = "";
Requiredvalidator.evaluationfunction = function () {
var fieldControl = $("#" + fieldName);
if (fieldControl.is("span")) {
var value0 = $("#" + fieldName + "_0").prop("checked");
var value1 = $("#" + fieldName + "_1").prop("checked");
if (value0 == false && value1 == false) {
return false;
} else {
return true;
}
} else {
var value = $("#" + fieldName).val();
if (value == null || value == "") {
return false;
} else {
return true;
}
}
};
Page_Validators.push(Requiredvalidator);
}
}
}
dgt.setFieldAsNotRequired = function(fieldName) {
if (typeof (Page_Validators) === 'undefined') return;
if ($("#" + fieldName) != 'undefined') {
$("#" + fieldName + "_label").closest("div").removeClass("required");
$("#" + fieldName).prop('required', false);
for (i = 0; i < Page_Validators.length; i++) {
if (Page_Validators[i].id === fieldName + "Validator") {
Page_Validators.splice(i, 1);
}
}
}
};
dgt.retrieveSingleRecord = function(entityName, entityId, select, expand, successCallback) {
let filterExpression = '';
if (select != undefined && select != null && select != "") {
filterExpression += "$select=" + select;
} else {
filterExpression += "$select=*";
}
if (expand != undefined && expand != null && expand != "") {
filterExpression += "&$expand=" + expand;
}
webapi.safeAjax({
type: "GET",
url: `/_api/${entityName}(${entityId})?${filterExpression}`,
contentType: "application/json",
success: function (result, status, xhr) {
if (result) successCallback(result);
}
});
}
dgt.retrieveMultipleRecords = function (entityName, select, expand, filter, orderby, successCallback) {
let filterExpression = '';
if (select != undefined && select != null && select != "") {
filterExpression += "$select=" + select;
} else {
filterExpression += "$select=*";
}
if (expand != undefined && expand != null && expand != "") {
filterExpression += "&$expand=" + expand;
}
if (filter != undefined && filter != null && filter != "") {
filterExpression += "&$filter=" + filter;
}
if (orderby != undefined && orderby != null && orderby != "") {
filterExpression += "&$orderby=" + orderby;
}
webapi.safeAjax({
type: "GET",
url: `/_api/${entityName}?${filterExpression}`,
contentType: "application/json",
success: function (result, status, xhr) {
if (result) successCallback(result);
}
});
}
})(window.dgt = window.dgt || {}, jQuery);