254 lines
8.3 KiB
JavaScript
254 lines
8.3 KiB
JavaScript
(function () {
|
|
"use strict";
|
|
let analysisMatriciMap = {};
|
|
|
|
function loadAnalysisMatrixNames() {
|
|
return $.ajax({
|
|
url: "get_matrici_db.php",
|
|
method: "GET",
|
|
dataType: "json",
|
|
})
|
|
.done(function (data) {
|
|
analysisMatriciMap = {};
|
|
|
|
(data.value || []).forEach(function (matrice) {
|
|
analysisMatriciMap[String(matrice.IdMatrice)] =
|
|
matrice.NomeMatrice || "#" + matrice.IdMatrice;
|
|
});
|
|
|
|
applyAnalysisMatrixNames();
|
|
})
|
|
.fail(function () {
|
|
analysisMatriciMap = {};
|
|
applyAnalysisMatrixNames();
|
|
});
|
|
}
|
|
|
|
function applyAnalysisMatrixNames() {
|
|
const modal = document.getElementById("analysisModal");
|
|
if (!modal) return;
|
|
|
|
modal.querySelectorAll(".analysis-matrix-item").forEach((item) => {
|
|
const matrixId = item.getAttribute("data-matrix-id");
|
|
const nameEl = item.querySelector(".analysis-matrix-name");
|
|
|
|
let matrixName = "No Matrix";
|
|
if (matrixId && matrixId !== "NO_MATRIX") {
|
|
matrixName =
|
|
analysisMatriciMap[String(matrixId)] || "#" + matrixId;
|
|
}
|
|
|
|
item.setAttribute("data-matrix-name", matrixName);
|
|
|
|
if (nameEl) {
|
|
nameEl.textContent = matrixName;
|
|
}
|
|
});
|
|
|
|
modal.querySelectorAll(".analysis-part-matrix-name").forEach((el) => {
|
|
const matrixId = el.getAttribute("data-matrix-id");
|
|
|
|
if (!matrixId || matrixId === "NO_MATRIX") {
|
|
el.textContent = "No Matrix";
|
|
return;
|
|
}
|
|
|
|
el.textContent =
|
|
analysisMatriciMap[String(matrixId)] || "#" + matrixId;
|
|
});
|
|
}
|
|
|
|
function updateSelectedPartsInfo() {
|
|
const modal = document.getElementById("analysisModal");
|
|
if (!modal) return;
|
|
|
|
const checked = modal.querySelectorAll(
|
|
".analysis-part-checkbox:checked",
|
|
);
|
|
const ids = Array.from(checked).map((el) => el.value);
|
|
|
|
const countEl = modal.querySelector("#analysisSelectedPartsCount");
|
|
const idsEl = modal.querySelector("#analysisSelectedPartsIds");
|
|
|
|
if (countEl) {
|
|
countEl.textContent = `${ids.length} selected`;
|
|
}
|
|
|
|
if (idsEl) {
|
|
idsEl.textContent = ids.length ? ids.join(", ") : "-";
|
|
}
|
|
|
|
modal.querySelectorAll(".analysis-part-item").forEach((item) => {
|
|
const checkbox = item.querySelector(".analysis-part-checkbox");
|
|
if (checkbox && checkbox.checked) {
|
|
item.classList.add("part-checked");
|
|
} else {
|
|
item.classList.remove("part-checked");
|
|
}
|
|
});
|
|
}
|
|
|
|
function selectPartsByMatrix(matrixId, matrixLabel) {
|
|
const modal = document.getElementById("analysisModal");
|
|
if (!modal) return;
|
|
|
|
const partItems = modal.querySelectorAll(".analysis-part-item");
|
|
const matrixLabelEl = modal.querySelector("#analysisCurrentMatrix");
|
|
|
|
partItems.forEach((item) => {
|
|
const itemMatrixId = item.getAttribute("data-matrix-id");
|
|
const checkbox = item.querySelector(".analysis-part-checkbox");
|
|
|
|
item.classList.remove("matrix-active");
|
|
|
|
if (itemMatrixId === String(matrixId)) {
|
|
item.classList.add("matrix-active");
|
|
if (checkbox) checkbox.checked = true;
|
|
} else {
|
|
if (checkbox) checkbox.checked = false;
|
|
}
|
|
});
|
|
|
|
if (matrixLabelEl) {
|
|
matrixLabelEl.textContent = matrixLabel || "-";
|
|
}
|
|
|
|
updateSelectedPartsInfo();
|
|
}
|
|
|
|
function clearAnalysisSelection() {
|
|
const modal = document.getElementById("analysisModal");
|
|
if (!modal) return;
|
|
|
|
modal.querySelectorAll(".analysis-matrix-item").forEach((item) => {
|
|
item.classList.remove("active");
|
|
});
|
|
|
|
modal.querySelectorAll(".analysis-part-item").forEach((item) => {
|
|
item.classList.remove("matrix-active", "part-checked");
|
|
});
|
|
|
|
modal.querySelectorAll(".analysis-part-checkbox").forEach((cb) => {
|
|
cb.checked = false;
|
|
});
|
|
|
|
const matrixLabelEl = modal.querySelector("#analysisCurrentMatrix");
|
|
if (matrixLabelEl) matrixLabelEl.textContent = "-";
|
|
|
|
updateSelectedPartsInfo();
|
|
}
|
|
|
|
function initAnalysisModal() {
|
|
const modal = document.getElementById("analysisModal");
|
|
if (!modal) return;
|
|
|
|
modal.querySelectorAll(".analysis-matrix-item").forEach((btn) => {
|
|
btn.addEventListener("click", function () {
|
|
modal
|
|
.querySelectorAll(".analysis-matrix-item")
|
|
.forEach((x) => x.classList.remove("active"));
|
|
this.classList.add("active");
|
|
|
|
const matrixId = this.getAttribute("data-matrix-id");
|
|
const matrixLabel =
|
|
this.getAttribute("data-matrix-name") ||
|
|
this.textContent.trim();
|
|
|
|
selectPartsByMatrix(matrixId, matrixLabel);
|
|
});
|
|
});
|
|
|
|
modal.querySelectorAll(".analysis-part-checkbox").forEach((cb) => {
|
|
cb.addEventListener("change", function () {
|
|
updateSelectedPartsInfo();
|
|
});
|
|
});
|
|
|
|
const clearBtn = modal.querySelector("#analysisClearSelectionBtn");
|
|
if (clearBtn) {
|
|
clearBtn.addEventListener("click", function () {
|
|
clearAnalysisSelection();
|
|
});
|
|
}
|
|
|
|
const firstActiveMatrix = modal.querySelector(
|
|
".analysis-matrix-item.active",
|
|
);
|
|
if (firstActiveMatrix) {
|
|
const matrixId = firstActiveMatrix.getAttribute("data-matrix-id");
|
|
const matrixLabel =
|
|
firstActiveMatrix.getAttribute("data-matrix-name") ||
|
|
firstActiveMatrix.textContent.trim();
|
|
|
|
selectPartsByMatrix(matrixId, matrixLabel);
|
|
} else {
|
|
updateSelectedPartsInfo();
|
|
}
|
|
}
|
|
|
|
// OPEN ANALYSIS MODAL FROM PARTS MODAL BUTTON
|
|
$(document).on("click", ".open-analysis-modal-btn", function () {
|
|
const partsModal = document.getElementById("partsModal");
|
|
const iddatadb = $("#partsModal").data("iddatadb");
|
|
|
|
if (!iddatadb) {
|
|
console.error("iddatadb not found on #partsModal");
|
|
alert("iddatadb not found");
|
|
return;
|
|
}
|
|
|
|
$.ajax({
|
|
url: "modal_analysis.php",
|
|
method: "GET",
|
|
data: { iddatadb: iddatadb },
|
|
success: function (response) {
|
|
$("#analysisModalContainer").html(response);
|
|
|
|
const modalElement = document.getElementById("analysisModal");
|
|
if (!modalElement) {
|
|
console.error("Analysis modal not found: #analysisModal");
|
|
return;
|
|
}
|
|
|
|
let modal = bootstrap.Modal.getInstance(modalElement);
|
|
if (!modal) {
|
|
modal = new bootstrap.Modal(modalElement, {
|
|
backdrop: true,
|
|
keyboard: true,
|
|
focus: true,
|
|
});
|
|
}
|
|
|
|
loadAnalysisMatrixNames().always(function () {
|
|
initAnalysisModal();
|
|
modal.show();
|
|
});
|
|
},
|
|
error: function (xhr, status, error) {
|
|
console.error("Error loading analysis modal:", error);
|
|
alert("Error loading analysis modal: " + error);
|
|
},
|
|
});
|
|
});
|
|
|
|
// CLEANUP ON CLOSE
|
|
$(document).on("hidden.bs.modal", "#analysisModal", function () {
|
|
const modalElement = document.getElementById("analysisModal");
|
|
if (modalElement) {
|
|
const modal = bootstrap.Modal.getInstance(modalElement);
|
|
if (modal) modal.dispose();
|
|
}
|
|
|
|
$("#analysisModalContainer").empty();
|
|
|
|
// keep parts modal alive, but remove extra backdrop leftovers
|
|
$(".modal-backdrop").last().remove();
|
|
|
|
if ($("#partsModal").hasClass("show")) {
|
|
$("body").addClass("modal-open");
|
|
} else {
|
|
$("body").removeClass("modal-open").css("padding-right", "");
|
|
}
|
|
});
|
|
})();
|