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); } }); }