function updateDevice(name) {
let extraFieldsArray = [];
let extraFieldsFromDataTable0 = DevPropTable.rows().data();
for (let i = 0; i < extraFieldsFromDataTable0.length; i++) {
extraFieldsArray[i] = extraFieldsFromDataTable0[i];
}
$.ajax({
type: "PUT",
url: '/api/devices/',
data: JSON.stringify({
"id": document.getElementById("idForDeviceField").value,
"deviceName": document.getElementById("nameUpdate").value,
"groupName": document.getElementById("groupNameUpdate").value,
"deviceClass": document.getElementById("classUpdate").value,
"deviceType": document.getElementById("typeUpdate").value,
"driverName": getSelectedText('driverDeviceUpdate'),
"ipAddress": document.getElementById("hostUpdate").value,
"port": document.getElementById("portUpdate").value,
"description": document.getElementById("descriptionUpdate").value,
"extraFields": extraFieldsArray
}),
contentType: "application/json; charset=utf-8",
success: function () {
startSelfTestOneDevice(name);
},
complete: function () {
tableDev.ajax.reload();
customHistory.back();
customHistory.back();
},
error: function (errMsg) {
console.log(errMsg);
alert("Ошибка при редактировании устройства: " + errMsg.responseText);
}
});
}
function fillClassesDeviceUpdate(name) {
console.log("start fillClassesDevice");
return $.ajax({
type: "GET",
url: '/api/refs/device/classes/?type=' + name,
data: JSON.stringify("request"),
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
let marks = "";
for (let i = 0; i < data.length; i++) {
let key = data[i].name;
let value = data[i].simpleName;
if (data[i].description) {
value = `${data[i].description} (${data[i].simpleName})`;
}
marks += ``;
DEVICE_CLASSES[key] = data[i];
}
$('#classUpdate').empty().append(marks);
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function handleDeviceClassUpdate(className) {
let deviceClass = DEVICE_CLASSES[className];
if (!deviceClass) return;
let deviceForm = $("#device-update-form");
if (deviceClass.primaryFields.length === 0 ) {;
deviceForm.find('.primary-field').find('input').prop('disabled', true).parent().hide();
}
deviceClass.primaryFields.forEach((primaryField) => {
let field = deviceForm.find('.primary-field').find(`[name=${primaryField.devicePropertyKey}]`)
if (primaryField.visible) {
field.parent().show();
} else {
field.val('').parent().hide();
}
field.prop('disabled', !primaryField.visible);
});
}
function fillDriversDeviceUpdate(name) {
console.log("start fillDriversDevice");
return $.ajax({
type: "GET",
url: '/api/refs/driver/classes?className=' + name,
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.log("SUCCESS fillDriversDevice")
let marks = "";
for (let i = 0; i < data.length; i++) {
marks += ``;
}
$('#driverDeviceUpdate').empty().append(marks);
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function fillTypeDeviceUpdate() {
console.log("start fillTypeDevice")
$.ajax({
type: "GET",
url: '/api/refs/device/types/',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
console.log("success fillTypeDevice");
$('#typeUpdate').empty().append('');
for (let i = 0; i < data.length; i++) {
$('#typeUpdate').append(``);
}
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function fillGroupNameUpdate() {
return $.ajax({
type: "GET",
url: '/api/refs/device/groups/',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (data) {
let marks = "";
for (let i = 0; i < data.length; i++) {
marks += '';
}
$('#groupNameUpdate').empty().append(marks);
},
error: function (errMsg) {
console.log(errMsg);
}
});
}
function clearDeviceForm() {
$("#nameUpdate").val('').prop("disabled", false);
$('#typeUpdate').val('').prop('disabled', false);
$('#classUpdate').val('').prop('disabled', false);
$('#descriptionUpdate').val('');
$('#hostUpdate').val('').prop('disabled', false);
$('#portUpdate').val('').prop('disabled', false);
let deviceForm = $("#device-update-form");
deviceForm.find('.primary-field').hide();
deviceForm.find('.primary-field').find('input,select').prop('disabled', true);
}
function createSaveButtonUpdate(name) {
$('#btn-device-footer-save').empty().append(``);
}
$("#device-update-form .validate").change(function () {
validateFields();
});
function validateFields() {
$("#goOnDeviceUpdatePage").prop('disabled', true);
$("#device-update-form .validate").removeClass("failed").each(validateFormField);
if ($("#device-update-form .validate.failed").length === 0) {
$("#goOnDeviceUpdatePage").prop('disabled', false);
}
}
function editDevice(id) {
$("#idForDeviceField").val(id);
console.log("start editDevice");
clearDeviceForm();
fillTypeDeviceUpdate();
$.ajax({
type: "GET",
url: '/api/devices/' + id + '/',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (device) {
if (device.enabled === false) {
$("#buttonDeviceDuplicated").css({'backgroundColor': 'red', 'color': '#fff'}).html('ВЫКЛЮЧЕНО');
} else {
$("#buttonDeviceDuplicated").css({'backgroundColor': 'Green', 'color': '#fff'}).html('ВКЛЮЧЕНО');
}
createHeadButtons(device);
createSaveButtonUpdate(device.deviceName);
fillUpdateForm(device);
},
error: function (errMsg) {
console.log(errMsg);
}
}).always(function (device) {
let selector = $('#classUpdate');
selector.val(device.deviceClass).change();
checkField(selector.val());
});
pageselect('device-update-page');
}
function checkField(classVal) {
if (classVal !== null) {
validateFields();
getAllProperty(classVal);
} else {
classVal = $('#classUpdate').val();
setTimeout(() => checkField(classVal), 500);
}
}
function cloneDevice(id) {
$("#idForDeviceField").val(id);
clearDeviceForm();
fillTypeDeviceUpdate();
$.ajax({
type: "GET",
url: '/api/devices/' + id + '/',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (device) {
if (device.enabled === false) {
$("#buttonDeviceDuplicated").css({'backgroundColor': 'red', 'color': '#fff'}).html('ВЫКЛЮЧЕНО');
} else {
$("#buttonDeviceDuplicated").css({'backgroundColor': 'Green', 'color': '#fff'}).html('ВКЛЮЧЕНО');
}
createHeadButtons(device);
createSaveButtonClone(device.deviceName);
fillCloneForm(device);
},
error: function (errMsg) {
console.log(errMsg);
}
}).always(function (device) {
let selector = $('#classUpdate');
selector.val(device.deviceClass).change();
checkField(selector.val());
});
pageselect('device-update-page');
}
function fillUpdateForm(device) {
fillGroupNameUpdate().always(function () {
$('#groupNameUpdate').val(device.groupName);
});
fillClassesDeviceUpdate(device.deviceType)
.always(function () {
$("#nameUpdate").val(device.deviceName);
$('#typeUpdate').val(device.deviceType).prop('disabled', true);
$('#classUpdate').val(device.deviceClass);
$('#descriptionUpdate').val(device.description);
$('#hostUpdate').val(device.ipAddress);
$('#portUpdate').val(device.port);
handleDeviceClassUpdate(device.deviceClass);
$("#classUpdate").change();
});
fillDriversDeviceUpdate(device.deviceClass)
.always(function () {
let driverForm = $("#device-update-form").find('.primary-field').find('[name="driver"]');
if (device.driverName) {
driverForm.val(device.driverName);
driverForm.parent().show();
driverForm.prop('disabled', false);
driverForm.change();
}
});
}
function getRandomArbitrary(min, max) {
return Math.round(Math.random() * (max - min) + min);
}
function getNameOfDeviceCopy(text) {
let pattern = /_COPY/;
let idx = text.search(pattern);
if (idx > -1) {
text = text.slice(0, idx);
}
return text + "_COPY" + getRandomArbitrary(1000000, 9000000);
}
function fillCloneForm(data) {
fillGroupNameUpdate().always(function () {
$('#groupNameUpdate').val(data.groupName);
});
fillClassesDeviceUpdate(data.deviceType)
.always(function () {
$("#nameUpdate").val(getNameOfDeviceCopy(data.deviceName));
$('#typeUpdate').val(data.deviceType).prop('disabled', true);
$('#classUpdate').val(data.deviceClass);
$('#descriptionUpdate').val(data.description);
$('#hostUpdate').val(data.ipAddress);
$('#portUpdate').val(data.port);
handleDeviceClassUpdate(data.deviceClass);
});
fillDriversDeviceUpdate(data.deviceClass)
.always(function () {
let opts = document.getElementById('driverDeviceUpdate').options;
for (let i = 0; i < opts.length; i++) {
if (opts[i].innerText === data.driverName) {
opts[i].selected = true;
}
}
});
}
function createHeadButtons(device) {
let testButtonText = "Тест";
let testButtonIcon = "glyphicon-play";
switch (device.deviceType) {
case "ENCODER":
testButtonText = "Калибровка";
testButtonIcon = "glyphicon-wrench";
break;
case "PRINTER":
testButtonIcon = "glyphicon-print";
break;
}
let deviceType = device.deviceType;
$('#btn-device-head').empty();
if (device.testAvailable) {
$('#btn-device-head').append(
``);
}
$('#btn-device-footer').empty().append(
``);
$('#btn-device-head').append(
``);
}
function createSaveButtonClone(name) {
$('#btn-device-footer-save').empty().append(``);
}
function createDeviceClone(name) {
let extraFieldsArray = [];
let extraFieldsFromDataTable0 = DevPropTable.rows().data();
for (let i = 0; i < extraFieldsFromDataTable0.length; i++) {
extraFieldsArray[i] = extraFieldsFromDataTable0[i];
}
$.ajax({
type: "POST",
url: '/api/devices/',
data: JSON.stringify({
"deviceName": document.getElementById("nameUpdate").value,
"groupName": document.getElementById("groupNameUpdate").value,
"deviceClass": document.getElementById("classUpdate").value,
"deviceType": document.getElementById("typeUpdate").value,
"driverName": getSelectedText('driverDeviceUpdate'),
"ipAddress": document.getElementById("hostUpdate").value,
"port": document.getElementById("portUpdate").value,
"description": document.getElementById("descriptionUpdate").value,
"extraFields": extraFieldsArray
}),
contentType: "application/json; charset=utf-8",
success: function () {
startSelfTestOneDevice(name);
},
complete: function () {
tableDev.ajax.reload();
customHistory.back();
customHistory.back();
},
error: function (errMsg) {
console.log(errMsg);
}
});
}